www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR UART Disable Transmitter


Autor: Gerhard T. (Firma: H&T) (gerard)
Datum:

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

Autor: Michael U. (amiga)
Datum:

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

Autor: Gerhard T. (Firma: H&T) (gerard)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das könnte sein.
Nur kann ich auf den Port nichts schreiben, solange TXEN0 sitzt. Das 
overruled die port settings.

Autor: Sascha Weber (sascha-w)
Datum:

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

Autor: Gerhard T. (Firma: H&T) (gerard)
Datum:

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

Autor: Sascha Weber (sascha-w)
Datum:

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

Autor: Gerhard T. (Firma: H&T) (gerard)
Datum:

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

DDR hab ich richtig gesetzt.

Gerhard

Autor: Gerhard T. (Firma: H&T) (gerard)
Datum:

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

Autor: Sascha Weber (sascha-w)
Datum:

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

Autor: Gerhard T. (Firma: H&T) (gerard)
Datum:

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

Vielen Dank!

Gerhard

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.