mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Uart Problem mit atmega8 (TXC bit?)


Autor: Bernd Walter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
void
txoff() {
        // wait for bytes still to go
        loop_until_bit_is_set(UCSRA, TXC);
        PORTD &= ~_BV(PD2);     // disable transmitter
        UCSRB |= _BV(TXEN);     /* rx enable */
        PORTC |= _BV(PC3);      // disable txled
}

Obige Funktion sollte eigendlich den Ausgangstreiber für eine
Halbduplex RS485 Anwendung abschalten, sobald das letzte Zeichen
verschickt wurde.
Allerdings kommt das Programm scheinbar nicht über die Warteschleife
hinweg.
Unten sind noch mal die wichtige Funktionen für die Ausgabe.

inline void
sio_putchar(uint8_t c)
{
        loop_until_bit_is_set(UCSRA, UDRE);
        UDR = c;
}

#define SYSCLK 7372800UL
#define BPS_RATE 9600UL

void
ioinit() {
        /* setup UART */
        UCSRB = _BV(TXEN) | _BV(RXEN); /* rx/tx enable */
        UBRRL = (SYSCLK / (16 * BPS_RATE)) - 1; /* Bd */

        PORTD &= ~_BV(PD2);     // disable transmitter
        DDRD |= _BV(PD2);       // set txen as output
...
}

void
txon() {
        PORTD |= _BV(PD2);      // enable transmitter
        UCSRB &= ~_BV(TXEN);    /* rx disable */
        PORTC &= ~_BV(PC3);     // enable txled
}

Autor: Vendor2k (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und jez?

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das gleiche wollte ich auch fragen....

Autor: Bernd Walter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jetzt habe ich die Hoffnung, daß ein anderes Augenpaar meinen Fehler
sieht.
Evtl mache ich ja im Umgang mit dem TXC bit etwas falsch und habe
irgendwas wichtiges in der Doku überlesen.

Autor: Bernd Walter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe gerade den Fehler gefunden.
Anstellen den Empfänger vor der Übertragung (zur Echounterdrückung) zu
deaktivieren habe ich den Sender abgeschaltet.
Dann können die Zeichen natürlich nicht raus.

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.