Problema con USART en un PIC18F2550

Iniciado por Basu80, 31 Enero 2013, 15:02 PM

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

Basu80

Buenas a todos,

Estoy trasteando con unas cosillas en casa y tengo unas dudas que no consigo resolver. Si alguno de vosotros pudiera arrogarme algo de luz, me salvaría la vida.

El caso es que intento coger unos datos con mi PIC18F2550 a través de su módulo USART y no hay manera. La información en principio llega bien, lo he probado encendiendo y apagando leds y parpadean, así que el problema no está en los datos que recibo sino en la forma de cogerlos.

Lo que hay en el pin de recepción de la USART (pin 18 del pic) es:

Un "1" lógico constante hasta que llegan los datos. A partir de ahí, es una cadena de varios bytes, durante medio segundo aproximadamente, con diferentes valores. Después vuelve a ponerse a "1" lógico el señal y así hasta la próxima vez que deban llegar los datos. El rate de transmisión son 1200 bps.

La declaración de los fuses que tengo es la siguiente, por si fuera de ayuda para encontrar el problema:

#fuses MCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,NOVREGEN,NOPBADEN // Fuses a declarar
#pragma config PLLDIV = 5
#pragma config CPUDIV = OSC1_PLL2
#pragma config USBDIV = 2
#pragma config FOSC = HSPLL_HS


Y las líneas para la USART:

OpenUSART(USART_TX_INT_OFF & USART_RX_INT_ON & USART_ASYNCH_MODE & USART_EIGHT_BIT & USART_CONT_RX & USART_BRGH_LOW, BAUD_RATE_GEN);
getsUSART((char *)Rxdata, numbytes-1);
CloseUSART();


Sé que el parámetro llamado BAUD_RATE_GEN debe calcularse como [Fosc / (64*Baudrate)]-1 pero no sé si es porque lo estoy calculando mal o que estoy haciendo alguna otra cosa que no debe hacerse de esa forma, no consigo que funcione. Lo único que recibo son cadenas de "0"s e imagino que es porque la variable Rxdata la tengo inicializada así.

¿Alguna idea? ¿Debo definir el pin de alguna forma especial? Por el momento solo lo tengo definido como entrada, no he visto nada más al respecto en el datasheet.

Muchas gracias de antemano.


PD: El cristal conectado al pic es de 20MHz y estoy programando con MPLAB en C.

Firos

¿Quien manda los datos a través de la USART para recibirlos en el PIC18F2550?


Mira los datasheets de ambos, por normal general suelen incluir una tabla donde especifican la cantidad exacta que tienes que cargar para trabajar a X baudios (9600? mira a ver si aparece en los datasheets). Y si configuras los dos con lo mismo para que trabajen a los mismos baudios, la conexión estaría bien. Después de eso deberías mirar las ordenes de recepción (en caso de que la transmisión sepas que va perfecta, sino compruébala también).
El final del camino no está determinado, lo determinamos nosotros mismos paso a paso, día a día, y se puede cambiar.

skapunky

Yo creo que el problema radica en la configuración de la transmissión. Cuando hice el proyecto de final de carrera, un compañero mio en su proyecto recibía info de un sensor al pic y me recuerda mucho tu problema al problema principal que tuvo el con la transmissión.

Configura 9600 baudios, 8 bits y sin paridad. El problema de mi compañero, en concreto, si mal no recuerdo fue los bits que recibia del sensor.
Killtrojan Syslog v1.44: ENTRAR