ATmega88 UART disable

OP #4143817
Lesenswert?

Hallo,

die UART-Pins sollen als reguläre Outputs genutzt werden. Deshalb wird 
der UART abgeschaltet und der Output aktiviert (Pins D0 und D1):
1
  UCSR0A = 0;
2
  UCSR0B = 0;
3
  UCSR0C = 0;
4
  bitSet(PRR, PRUSART0);
5
  PORTD &= ~(0x03);
6
  DDRD  |=  (0x03);

Wenn dann die beiden Pins auf low gesetzt werden, bewegt sich nur der 
RX-Pin, TX bleibt dauerhaft auf high:
1
  bitClear(PORTD, 0);
2
  bitClear(PORTD, 1);

TX wurde bereits auf Kurzschlüsse zu benachbarten Signalen geprüft.
Die Makros bitSet() und bitClear() funktionieren mit dem RX-Pin ohne 
Auffälligkeiten.

Wie kann ich den TX-Pin als Output nutzen? Was übersehe ich hier?

Danke.
-Markus
Gast #4143866
Lesenswert?

>Dann klappt's.
>Aber ein paar Zeichen sollen ja zunächst ausgegeben werden...

Ja, und? Wenn du   UCSR0B = 0; machst ist der USART aus.
Die Vermutung liegt nahe das dein gezeigter Code nicht
der verwendete Code ist.
Gast #4143872
Lesenswert?

>Ja, und? Wenn du   UCSR0B = 0; machst ist der USART aus.
>Die Vermutung liegt nahe das dein gezeigter Code nicht
>der verwendete Code ist.

Hmmm, wenn man das da unten liest sollte man wohl warten
bis das letzte Byte auch raus ist;)

The disabling of the Transmitter (writing TXENn to
zero) will not become effective until ongoing and pending transmissions 
are completed, that is,
when the Transmit Shift Register and Transmit Buffer Register do not 
contain data to be transmitted.
OP #4144239
Lesenswert?

Das ist klar, deshalb wurden im angegebenen Code-Ausschnitt auch zuerst 
die Register gelöscht, dann der UART abgeschaltet.
Was ich übersehen hatte war, dass der UART bereits an einer anderen 
Stelle weiter oben abgeschaltet wurde mit dem Ergebnis, dass das 
Schreiben der UART-Register keine Wirkungs mehr zeigte.

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