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?