Hallo,
ich bin relativ neu auf dem gebiet der avr Progrmmierung, hab bis jetzt
durch das gute Tutorial alles verstanden. Als ich dann das senden mit
dem UART probierte hab ich es aber nich zum laufen bekommen. Baudrate
stimmt am Hyperterminal mit dem avr überein. Könnt ihr mir vieleicht
sagen wo der Fehler liegt?
Code:
#include <avr/io.h>
#include <stdint.h>
#ifndef F_CPU
#define F_CPU 1000000
#endif
#define UART_UBRR_CALC(BAUD_,FREQ_) ((FREQ_)/((BAUD_)*16L)-1)
#define UART_BAUD_RATE 9600
int main(void)
{
UBRRH = (uint8_t)( UART_UBRR_CALC( UART_BAUD_RATE, F_CPU ) >> 8 );
UBRRL = (uint8_t)UART_UBRR_CALC( UART_BAUD_RATE, F_CPU );
while (!(UCSRA & (1<<UDRE)))
{}
UDR = 'x';
}
haste in den registern UDR und USR die bits passend gesetzt? sieht ja nicht so aus
Danke für den Tipp. Jetzt sendet er zwar an den PC aber nicht das was er
sollte. stadt "x" sendet er nun eine "8".
Der Code sieht jetzt so aus:
int main(void)
{
UCSRB |= (1<<TXEN);
UCSRC |= (1<<URSEL)|(3<<UCSZ0);
UBRRH = (uint8_t)( UART_UBRR_CALC( UART_BAUD_RATE, F_CPU ) >> 8 );
UBRRL = (uint8_t)UART_UBRR_CALC( UART_BAUD_RATE, F_CPU );
while (!(UCSRA & (1<<UDRE)))
{}
UDR = 'x';
}
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.