Tengo un PIC 18 LF 27 J 53 funciona correctamente y puedo hacer que parpadee un LED. FOSC está a 8MHz (lo que se confirma a través del LED).
Ahora, quiero que el PIC envíe algunos bytes a la RaspberryPi a través de UART (estoy usando minicom
para inspeccionar /dev/ttyAMA0
y he desactivado tanto el bluetooth como la consola serial). Intenté tanto con TX1 como con TX2 remapeado pero solo recibo el mismo desorden ( fààþæ
). Intenté invertir la lógica, pero eso no ayudó y recibo ~øxøxxøxþ
en su lugar.
Este es mi código para configurar la interfaz UART (con BRGH, BRG @ 9600 de 8 bits):
TXSTA2 = 0b10100110;
RCSTA2 = 0b00010000;
BAUDCON2 = 0b01000010;
// BR=FOSC/(16(n+1)) <=> n=FOSC/BR/16-1
n = (uint8_t)round(1.0 * CLOCKSPEED / BAUDRATE / 16.0) - 1;
SPBRG2 = n;
RCSTA2bits.SPEN = 1;
La fórmula genera 51 para CLOCKSPEED = 8MHz
y BAUDRATE = 9600
, que es el mismo que está escrito en la hoja de datos (página 343).
Este es el código que uso para enviar una cadena:
void putc(char c)
{
while(TXSTA2bits.TRMT == 0);
TXREG2 = c;
}
void puts(const char *str)
{
const char *p;
for (p = str; *p; p++)
putc(*p);
}
Finalmente, lo llamo así:
const char *str = "HELLO\r\n";
puts(str);
¿Qué puedo hacer para que RaspberryPi reciba los caracteres correctos?
EDIT : acabo de intentar imprimir el carácter U
( 01010101
) continuamente a través de UART. Minicom recibe continuamente alternando los caracteres f
( 01100110
) y æ
( 11100110
). Así que supongo que hay un problema con la velocidad de transmisión. ¿Cómo puedo verificar esto y encontrar el error?