TXC Problem

Gast #72812
Hallo zusammen!

Ich verwende für ein RS485 Netzwerk den halbduplexen Treiber MAX485.

Um ihn senden zu lassen, muss ich die Enalbe Leitung ja auf high
ziehen. Anschließend muss sie wieder auf low abfallen, damit er wieder
empfangen kann.

Ich arbeite mit Codevision - ATMega 8.

Setze ich mit sofort nach putchar die Leitung auf low, so ist das zu
früh (klar - die Daten sind noch im Sende buffer - nicht komplett
gesendet).

Dazu müsste ich dann das TXC Bit auswerten, also warten, bis TXC = 1
ist.

Hier mein Programmschnippsel:
putchar(outp);
while ((UCSRA << 1) < 128)
{}
PORTD.4 = 0;  // Auf Empfangen umschalten!

Nach einem Reset des Controllers funktioniert dies auch - allerdings
nur einmal. Danach durchläuft der Mega8 die Schleife sofort (ohne zu
warten) und setzt natürlich die Enable leitung zu früh auf low.
D.H. theoretisch muss TXC auf 1 sein - aber warum?

Wo liegt mein Denkfehler?

Grüße
Flite
Gast
Standard-Antwort: Datenblatt lesen
das TXC (genauso wie RXC) wird durch schreiben ins Datenregister nicht
rückgesetzt, d.h. du mußt nach der while Schleife das TXC löschen
(durch schreiben einer Eins).

grüsse leo9
Gast
Sowas in die Richtung hab ich mir schon gedacht - leider bin ich aus dem
Datenblatt nicht ganz schlau geworden.

Wie kann ich ein einzelnes Bit setzen?

Muss ich das RXC bit auch auf 1 setzen, sobald 1 geworden ist?

Tut mir leid - mein Englisch ist nicht das Beste ...

Grüße Flite
Gast
Ok, wie ich das TXC Bit auf eins setze hab ich rausgefunden ... Das
funktioniert jetzt.

Aus dem RXC Bit werd ich noch nicht so schlau ...

Ich frage ab, ob es = 1 ist -> dann hole ich mich mit getchar das Byte,
das empfangen wurde.

Muss ich das jetzt irgendwie wieder zurücksetzen oder geht das so?

Flite
Gast
wenn du das RXC-Bit pollst, mußt du es auch "händisch" löschen (wieder
durch Schreiben einer Eins). Wenn du mit Interrupts arbeitest glaub ich
zu 98% dass der "Int-Aufruf" bereits das bit löscht.

grüsse leo9

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.