mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik UART zeichen einlesen/empfangen


Autor: jamest (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Timmo H. (masterfx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Immer andere Müll ist ein Anzeichen dafür dass die Baudrate nicht 100% 
stimmt

Autor: jamest (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
leg dir mal das empfangene Zeichen auf einen Port und sieh mit 8 LED 
(oder einem Voltmeter) nach, wo das Problem liegt. Beim Senden oder beim 
Empfangen.

Autor: jamest (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Timmo H. (masterfx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie sieht denn deine Init-Funktion für den UART aus und wie ist dein 
Takt (auch FUSES richtig eingestellt, wegen internen und externen Takt?)
Bedenke, dass der Interne Oszillator nicht so genau ist und daher 
durchaus Störungen auftreten können.

Autor: jamest (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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);

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und was verbirgt sich hinter all den Funktionen?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.