Forum: Mikrocontroller und Digitale Elektronik AVR UART Disable Transmitter


von Gerhard T. (Firma: H&T) (gerard)


Lesenswert?

Hallo.

Wenn ich beim ATMega644 den UART Transmitter disable (UCSR0B &= 
~_BV(TXEN0), wird noch ein Zeichen geschickt.

Warum, und wie kann ich das verhindern?

Danke im voraus,
Gerhard
von Michael U. (amiga)


Lesenswert?

Hallo,

es wird vermutlich kein Zeichen geschickt, allerdings erkennt ein 
Empfänger den Beginn eines Startbits, wenn der Port Ausgang und L ist.
Port als Ausgang und H setzen und dann abschalten sollte helfen.

Gruß aus Berlin
Michael
von Gerhard T. (Firma: H&T) (gerard)


Lesenswert?

Das könnte sein.
Nur kann ich auf den Port nichts schreiben, solange TXEN0 sitzt. Das 
overruled die port settings.
von Sascha W. (sascha-w)


Lesenswert?

du kannst die DDR und PORT Register immer beschreiben, nur das der dort 
vorgegebene Zustand für das TX-PIN erst bei TXEN = 0 wirksam wird - und 
genau das brauchst du ja!

Sascha
von Gerhard T. (Firma: H&T) (gerard)


Lesenswert?

Ok, hat funktioniert, danke.

Jetzt kommen jedoch nach jedem transmit noch 3 Zeichen (0x00) hinten 
nach.
Ich mach folgendes:
- aufwachen aus power - save
- TXEN und transmit
- flush/warten bis alles übertragen
- Uart abdrehen (PORT hi und TXEN = 0)
- power save
von Sascha W. (sascha-w)


Lesenswert?

?? nachdem Übertragen der Daten und Power save kommen am Empfänger noch 
3 Bytes an ??

hast du den TX-PIN im DDR auch auf Ausgang gesetzt?

Sascha
von Gerhard T. (Firma: H&T) (gerard)


Lesenswert?

So ähnlich.
1 Byte kommt glaub ich vor sleep und 2 nachdem wieder aufgewacht wurde.

DDR hab ich richtig gesetzt.

Gerhard
von Gerhard T. (Firma: H&T) (gerard)


Lesenswert?

Ein Problem ist (und möglicherweise die Ursache), dass das letzte byte 
nicht richtig übertragen wird, wenn nach flush in power save Modus 
gewechselt wird.

Gerhard
von Sascha W. (sascha-w)


Lesenswert?

das kann sein - wie sieht dein flush/warten aus ??
- wenn du auf UDRE0 wartest wird das letzte Byte noch gesendet, wenn 
UDRE schon 1 ist
- sonst mit TXC0 warten - löschen aber nicht vergessen
- oder ne Pause nach UDRE0=1 machen die dafür sorgt, das das letzte Byte 
noch raus geht

Sascha
von Gerhard T. (Firma: H&T) (gerard)


Lesenswert?

Ok, das war's.
Warte jetzt beim flush auf TXC0, und es haut hin.
Das war eine schwere Geburt.

Vielen Dank!

Gerhard
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
Noch kein Account? Hier anmelden.