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

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