Estoy tratando de hacer que USART funcione en mi microcontrolador atmega8-16PU. He estudiado la documentación y tomé los ejemplos de código de allí. He logrado transmitir los datos del microcontrolador al chip PL-2303HX que está conectado a mi computadora a través de USB
El problema es que recibo datos diferentes de lo que envío desde mcu. Aquí está el código:
#define F_CPU 8000000UL // Clock Speed
#define BAUD 9600
#define MYUBRR (((F_CPU / (BAUD * 16UL))) - 1)
void USART_Init( unsigned int ubrr)
{
/* Set baud rate */
UBRRH = (unsigned char)(ubrr>>8);
UBRRL = (unsigned char)ubrr;
/* Enable receiver and transmitter */
UCSRB = (1 << RXEN) | (1 << TXEN);
/* Set frame format: 8 data bits, 1 stop bit */
UCSRC = (1 << URSEL) | (1 << USBS) | (1 << UCSZ0);
}
void USART_Transmit( unsigned char data )
{
/* Wait for empty transmit buffer */
while ( !( UCSRA & (1<<UDRE)) );
/* Put data into buffer, sends the data */
UDR = data;
}
int main()
{
USART_Init(MYUBRR);
while(1) /* run continuously */
{
USART_Transmit('a');
_delay_ms(100);
}
}
Tengo 0x80 0x00 en el lado del receptor y ese no es el símbolo 'a'. Si es importante, un cuarzo de 12 MHz está conectado al chip PL-2303HX. ¿Qué estoy haciendo mal?