atmega16 UART

Gast #460083
Lesenswert?
• ▲
▼
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';
}
Gast #460104
Lesenswert?
• ▲
▼
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';
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren