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!
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.
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?
"8N1" bedeutet noch dazu, dass kein Paritäts-Bit verwendet wird, also 8 Datenbits, ein Start- und ein Stopbit, keine Parität.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.