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


von Bernd Walter (Gast)


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
}

von Vendor2k (Gast)


Lesenswert?

und jez?

von Peter (Gast)


Lesenswert?

Das gleiche wollte ich auch fragen....

von Bernd Walter (Gast)


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.

von Bernd Walter (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.