mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik TXC Problem


Autor: Flite (Gast)
Datum:

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

Autor: leo9 (Gast)
Datum:

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

Autor: Flite (Gast)
Datum:

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

Autor: Flite (Gast)
Datum:

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

Autor: leo9 (Gast)
Datum:

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

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.