Escribí un programa para ejecutar el UART en una placa personalizada, usando el atmega328p solo con el oscilador interno, aquí está mi código:
#define F_CPU 1000000UL
#include <avr/io.h>
#include <util/delay.h>
#define BAUD 9600
#define MYUBRR F_CPU/16/BAUD-1
void init_uart(unsigned short uValue ){
// setting the baud rate
UBRR0H =(unsigned char) ( uValue>> 8); // 0x00
UBRR0L =(unsigned char) uValue; // 0x0C
// enabling TX & RX
UCSR0B = (1<<RXEN0)|(1<<TXEN0);
UCSR0A = (1<<UDRE0);
UCSR0C = (1 << UCSZ01) | (1 << UCSZ00); // Set frame: 8data, 1 stop
}
int main (){
init_uart(MYUBRR);
DDRD |= (1<< PD7);
for(;;){
PORTD ^= (1<< PD7);
UDR0 = 'k';
//_delay_ms(500);
}
return 0;
}
He establecido los valores de registro en base al ejemplo en hoja de datos página 241. el problema que tengo es que no recibo la palabra correctamente, esto es lo que recibo:
¿Alguna idea de lo que me estoy perdiendo aquí?
gracias de antemano!