mikrocontroller.net

Forum: Compiler & IDEs Receive-Funktion für die UART


Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1.Ich nutze die „asynchrone“ USART. Was heißt das genau? Es geht doch 
trotzdem mit einer bestimmten Baudrate, d.h. das Zeichen empfangen 
passiert doch mit dieser Baudrate synchron, oder was verstehe ich hier 
falsch??

2.Ich möchte die Funktion getchar „von Hand“ schreiben, indem ich die 
while-Schleife entferne und polle
..
static int i = 0;
char USART0_receive[40];
if (USCR0A & RXC0)
{
   USART0_receive[i];
   i++;
   if(i==39)
    i=0;
}

wie oft muss ich diese Funktion aufrufen, wenn die UART mit 115200kbaud 
betrieben wird? Ich meine, ab wann gehen Zeichen verloren??
Ich nutze einen Atmega128.

vielen Dank!

Autor: Michael D. (michael_2001) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Markus schrieb:
> 1.Ich nutze die „asynchrone“ USART. Was heißt das genau?

Das Sender- und Empfängertakt nicht miteinander gekoppelt sind. D.h. sie 
haben keine, wie auch immer geartete, feste Beziehung zueinander.

> d.h. das Zeichen empfangen
> passiert doch mit dieser Baudrate synchron, oder was verstehe ich hier
> falsch??

Das heisst es nach dem oben gesagten genau nicht. Denn wenn die Takte 
des Senders und Empfängers nicht gekoppelt sind, dann ist es mehr oder 
weniger Zufall, auf welchen Zustand des Empfängertaktes das Startbit 
fällt.

Vielmehr muss sich der Empfänger beim asynchronen Fall auf die Flanken 
des Startbits synchronisieren.

Für eine detaillierte Erklärung siehe dazu auch, die entsprechenden 
Passagen in einem passenden Datenblatt.

Z.B.: das des ATmega164P, ATmega324P und ATmega644P
und da die Kaptitel
17.4.4 Synchronous Clock Operation und
17.9 Asynchronous Data Reception
Die Kapitelbezeichnungen beziehen sich auf die Version 7674A–AVR–04/07 
des Datenblattes.

Autor: Michael D. (michael_2001) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Markus schrieb:
> wie oft muss ich diese Funktion aufrufen, wenn die UART mit 115200kbaud
> betrieben wird? Ich meine, ab wann gehen Zeichen verloren??

Das kann man genau ausrechnen.
Nimmt man an, das Du das übliche Schema von 8N1, also 8 Datenbits, ein 
Start- und ein Stopbit verwendest, dann sind das 10Bits.

Als Geschwindikeit meinst Du sehr wahrscheinlich nicht 115200kbaud 
sondern 115200 Baud (also nicht noch Kilo, den Faktor 1000 davor).

Bei RS232 entspricht ein Symbol einem Bit. Das sind dann also 115200 
Bits pro Sekunde. Ein Bit dauert demnach 8,69 Mikrosekunden. Zehn Bits 
brauchen dann 86,9 Mikrosekunden. So oft, kann bei Höchstgeschwindigkeit 
ein Byte ankommen. In diesem Abstand also musst Du das Statusregister 
pollen um kein Byte zu verlieren. Das entspricht 11,5kHz.

Warum willst Du pollen und nicht den Interrupt nehmen?

Autor: Michael D. (michael_2001) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"8N1" bedeutet noch dazu, dass kein Paritäts-Bit verwendet wird, also 8 
Datenbits, ein Start- und ein Stopbit, keine Parität.

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.