TXC Problem

Gast #72812
Lesenswert?

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 #72813
Lesenswert?

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 #72814
Lesenswert?

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 #72815
Lesenswert?

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 #72816
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren