Autor Tema: Envio por 2 uarts  (Leído 2091 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado T0ni0

  • PIC16
  • ***
  • Mensajes: 196
Envio por 2 uarts
« en: 08 de Septiembre de 2004, 04:44:00 »
Hola a todos, hasta ahora había enviado por una UART y recivido correctamente, pero ahora estoy con el 18F6720 dispone de dos UARTS hard.

Le defino:

#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
#use rs232(baud=9600,parity=N,xmit=PIN_G1,rcv=PIN_G2,bits=8)

Luego el printf pues no lo hace,  supongo que tengo que decirle por que uart tiene que salir pero .... no he sabido encontrarlo

Si solo defino una uart si lo hace correcto por lo que se descarta el hard, haber si me podeis hechar una ayudita
- T0ni0 -
30RCF112

Desconectado oshow

  • PIC18
  • ****
  • Mensajes: 321
RE: Envio por 2 uarts
« Respuesta #1 en: 08 de Septiembre de 2004, 05:24:00 »
Hola Tonio, lo primero decirte que nunca he usado dos uarts, de hecho solo he conenectado una vez el pic al pc, pero según he leido en la ayuda, tienes que identificar cada una de las uart.

Como última opción en el #use rs232 puedes poner una opción llamada stream donde identificas cada uart.

Por ejemplo, he pensado que podría ser algo parecido a esto, aunque ojo nunca lo he probado....

Codigo:

#include <18FXXX.H>
#fuses HS,NOPROTECT,NOWDT,NOLVP  
#use delay(clock=20000000,RESTART_WDT)    
#use rs232(baud=9600, parity=N, xmit=PIN_G1, rcv=PIN_G2, stream=PORT2, bits=8, errors)
#use rs232(baud=9600,  parity=N, xmit=PIN_C6, rcv=PIN_C7, stream=PORT1, bits=8, errors)





Luego cada una de estas uarts podrían ser usadas en las funciones típicas, como por ejemplo fgetc(PORT1); ó fgetc(PORT2);, etc, etc.

Haz pruebas a ver si te funciona, he intentado buscarte algún ejemplo por ahí pero no he encontrado nada.

Saludos.

Desconectado T0ni0

  • PIC16
  • ***
  • Mensajes: 196
RE: Envio por 2 uarts
« Respuesta #2 en: 08 de Septiembre de 2004, 07:56:00 »
Pues lo del stream no me ha resultado, pero me ha dado la idea para  lo que he hecho:

     #define UART1 #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
      #define UART2 #use rs232(baud=9600,parity=N,xmit=PIN_G1,rcv=PIN_G2,bits=8)


Y utilizo el printf() y el gets() como antes pero antes de enviar pongo la linea UART1 o UART2, he comprovado que en UART1 la recepción por interrupción si funciona si entra en la UART2 lo cual ya me sirve.

Bueno si alguien necesita una aclaración que lo diga
- T0ni0 -
30RCF112

Desconectado oshow

  • PIC18
  • ****
  • Mensajes: 321
RE: Envio por 2 uarts
« Respuesta #3 en: 08 de Septiembre de 2004, 08:01:00 »
No te rula lo del stream?, pos que raro porque lo lei en el manual, pero bueno de todas formas ya te digo que nunca lo había probado y no sabía si funcionaba o no.

Por otra parte me alegro que lo hayas solucionado. Sería mucho pedir  que pusieses un ejemplo en el que se usen las dos uarts?, es que realmente no se que usos pueden tener....... Las usas para alguna aplicación específica o sólo era por probar las dos a la vez?


Saludos.

Desconectado kruskal

  • PIC16
  • ***
  • Mensajes: 108
RE: Envio por 2 uarts
« Respuesta #4 en: 08 de Septiembre de 2004, 09:04:00 »
El compilador no maneja las dos USART en forma simultanea. Como dice el manual "La directiva #use 232 tendra efecto hasta que otra del mismo tipo sea encontrada".

Debe ser una limitacion del compilador con los PIC de la serie 18 supongo que la gente de CCS en versiones mas nuevas superara muchos de los problemas en el manejo de estos dispisitivos mas actuales.

Salud2.

Desconectado cHiPmAn

  • PIC16
  • ***
  • Mensajes: 110
RE: Envio por 2 uarts
« Respuesta #5 en: 09 de Septiembre de 2004, 01:20:00 »

Este es el problema de usar compiladores que te dan funciones medio hechas, no sabes por donde petan, no sabes que recursos usan, no sabes el tiempo que emplean,... Yo creo que no cuesta tanto crear las propias funciones ¿verdad?

Salu2!


 

anything