Hi, ich hab das mit dem UART noch nicht ganz verstanden, wenn ich was in das USART Data I/O Register schreibe und die entsprechenden Bits in den UCSR Registern setze, was passiert dann am TX Pin genau? sendet er das Zeichen aus dem USART Data I/O Register schon und wenn ja ein mal oder solange bis das Register wieder leer ist? Kommen die Stopp-Bits ect. , wenn sie gesetzt sind automatisch?
Dshing Sung schrieb: > Kommen die > Stopp-Bits ect. , wenn sie gesetzt sind automatisch? Das macht die Hardware automatisch dazu. Im Betrieb also einfach ein Byte in UDR "rein werfen", und es wird mit allem drum und dran an TX rausgeschoben. Das funktioniert wie ein Gartenhäcksler. Zweige rein, Schnipsel raus. Für das nächste Byte musst du warten, bis du wieder Senden kannst(nächstes Byte rein werfen) oder Interruptgetrieben(TX-Interrupt und gepuffert) arbeiten. mfg mf Dshing Sung schrieb: > und die entsprechenden Bits in den UCSR > Registern setze Das macht man normalerweise anders herum. Erst den UART konfigurieren, dann nur noch z.B. mit dem hier
1 | //send one char
|
2 | void uart_putc(uint8_t character) |
3 | {
|
4 | while ( !(UCSRA & (1<<UDRE)) ) |
5 | ;
|
6 | UDR = character; |
7 | }
|
umgehen müssen.
Also der Gartenhäcksler Metapher entnehme ich das es nur einmal gesendet wird. Wenn ich also
1 | while (!(UCSRA & (1<<UDRE))); |
2 | |
3 | |
4 | UDR = 0b10101010; |
schreibe, dann hab ich an dem TX PIN bzgl. GND: 0V +5V 0V +5V 0V +5V 0V +5V 0V +5V....+5V....+5V... bis wieder gesendet wird bleibt es bei +5V !? Wenn das dann an irgend einem RX PIN ankommt, dann ist die erste 0 das Signal das es jetzt los geht und die nächsten 8 Baudzyklen werden dann ins UDR geschreiben und der Stopbit ist nur zum überprüfen das jetzt wirklich Schluss ist?
Dshing Sung schrieb: > schreibe, dann hab ich an dem TX PIN bzgl. GND: 0V +5V 0V +5V 0V +5V 0V > +5V 0V +5V....+5V....+5V... bis wieder gesendet wird bleibt es bei +5V > !? High im "Leerlauf", dann Startbit Low. Steht alles im Datenblatt des MCs, zusammen mit schmucken Diagrammen.
Dshing Sung schrieb: > 0V +5V 0V +5V 0V +5V 0V > +5V 0V +5V....+5V....+5V...
1 | 0xAA im Format "8N1": |
2 | ....__ _ _ _ _ ____.... |
3 | |_| |_| |_| |_| |_| |
4 | Bit No. S 7 6 5 4 3 2 1 0 P |
5 | Bit Val. 1 0 1 0 1 0 1 0 |
Dshing Sung schrieb: > wenn das dann an irgend einem RX PIN ankommt, dann ist die erste 0 das > Signal das es jetzt los geht und die nächsten 8 Baudzyklen werden dann > ins UDR geschreiben und der Stopbit ist nur zum überprüfen das jetzt > wirklich Schluss ist? genau! Stoppbit auch als Trennung zum nächsten Byte. mfg mf
@ Mini Float ist UART nicht least significant bit first? 0xAA = 0b10101010 ^ first bit sent
in anderen Worten .. um schönen Rechtecktakt hinzubekommen while(1) uart_put(0x55);
@dobross sorry hab kein Auto??? @ alle andern wiedermal danke, jetzt weiß ich beschied und komme besser zurecht.
Daniel -------- schrieb: > ist UART nicht least significant bit first Nicht generell, aber im Fall von RS232 hast du wohl recht: http://de.wikipedia.org/wiki/RS-232#Datenrahmen_und_Timing mea culpa. mfg mf PS: tut dem generellen Verständnis offenbar auch keinen Abbruch.
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.