Estoy tratando de hacer un ATMega328P para enviar datos en serie a mi computadora e imprimir en Putty usando una placa de arduino para hacer las conversiones de USB a serie. Los datos que se imprimen, sin embargo, son datos de basura. He intentado cambiar el número de bits de parada, he comprobado las comunicaciones en serie en la masilla, he comprobado las tasas de error en baudios y también he añadido un retraso para que la computadora pueda leer los datos en serie con mayor facilidad. Aquí está el código:
#include <avr/io.h>
#include <stdio.h>
#include <util/delay.h>
#define USART_BAUDRATE 9600
#define F_CPU 7372800
#define BAUD_PRESCALE (((F_CPU / (USART_BAUDRATE * 16UL))) - 1)
void printString(const char myString[]){
uint8_t i = 8;
while(myString[i]){
while ((UCSR0A &(1<<UDRE0)) == 0){}//do nothing until transmission flag is set
UDR0 = myString[i];
i++;
}
}
int main(void)
{
//--------------init usart----------------//
UCSR0B = (1<<RXEN0)|(1<<TXEN0); //Enables the USART transmitter and receiver
_delay_ms(10);
UCSR0C = (1<<UCSZ01)|(1<<UCSZ00)|(USBS0<<1); //tells it to send 8bit characters (setting both USCZ01 and UCSZ00 to one)
//now it has 2 stop bits.
UBRR0H = (BAUD_PRESCALE >> 8); //loads the upper 8 bits into the high byte of the UBRR register
UBRR0L = BAUD_PRESCALE; //loads the lower 8 bits
//----------------------------------------//
_delay_ms(10);
for(;;){
printString("Hello World!\r\n");
}
return (0);
}
Y los datos que se muestran en masilla son los siguientes. Primero hay un montón de esto: àà àà à à àààààààà à. Luego hay un montón de esto: f, Mün $ M´M, M´M $ M´M, M´M, M´M, M´M y otros personajes similares. No sé por qué estos se están imprimiendo. Gracias.
edite: aquí está la hoja de datos