UART zeichen einlesen/empfangen

Gast #1486345
Lesenswert?
• ▲
▼
Moin!
Ich benutze für meinen AT90CAN128 folgende Befehle um Zeichen einzulesen 
und zu versenden (RS232):

void uart_putc( uint8_t data )
{
  while ( !(UCSR0A & (1<<UDRE0)) );

  UDR0 = data;
}

uint8_t uart_getc(void)
{

    while (!(UCSR0A & (1<<RXC0)));
    return UDR0;                   // Zeichen aus UDR an Aufrufer 
zurueckgeben
}

So siehts dann in der Main schleife aus:
  NextChar=uart_getc();
  uart_putc(NextChar);

Ich will mir also vom programm die eingegebenen Zeichen anzeigen lassen!
Aber leider kommt nur Müll zurück, undzwar jedes mal anderer Müll. Wenn 
ich hingegen uart_putc('A'); schreibe gibt er mir ganz normal ein A 
raus!
Kann mir da jemand helfen?
Gast #1486486
Lesenswert?
• ▲
▼
okay! aber wenn ich zeichen vom µc aus sende kommen die ja einwandfrei 
an. dann scheint ja die baudrate für den empfang beim µc falsch zu 
sein.. aber die kann ich doch nicht separat einstellen... ist ein 
at90can128 auf nem evaluationsboard...
Gast #1487431
Lesenswert?
• ▲
▼
danke für den tipp! und an der LED wird tatsächlich die richtige zahl 
dargestellt. Ich habe folgendes festgestellt. Ich kann die Funktion 
putchar erstmal ohne probleme verwenden, getchar dann auch einmal. wenn 
ich jetz wieder putchar verwenden will klappt nichts mehr! Das muss also 
doch irgendwie mit meinen Funktionen zusammenhängen dass ich in dem UART 
register irgendwas vergessen hab. Aber ich benutz doch die Standard 
Funktionen aus den Beisipelprogrammen...
Gast #1487496
Lesenswert?
• ▲
▼
JTAGEN und SPIEN wobei an SPIEN son kleines rotes fragezeichen hängt.
ext crystl. osz 8Mhz Start up time  16K Cycles + 65ms

die uart init:

U8 uart_init (U8 mode, U32 baudrate)
{
    Uart_clear();       // Flush, Disable and Reset UART
    if (Uart_set_baudrate(baudrate) == 0) return 0;  //!<  c.f. macro in 
"uart_drv.h"
    Uart_hw_init(mode);     //!<  c.f. macro in "uart_drv.h"
    Uart_enable();          //!<  c.f. macro in "uart_drv.h"
    return (1);
}

also das is aus der uart_lib.c und ich initalisiere das ganz dann so:

Uart_select(UART_0);
uart_init(CONF_8BIT_NOPAR_1STOP,9600);

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.