Atmege Hardware UART und I/O

Gast #6630295
Lesenswert?

Hi
Ich muß an einem ATmega den UART benutzen aber auch den TX-Pin 
"händisch" beeinflussen. Beides getrennt funktioniert.
Aber sobald ich den UART initialisiere, werden Änderungen am Pin-Level 
nicht mehr umgesetzt. Im Datenblatt finde ich nur eine Aussage dazu, daß 
der Tx-Pin als Ausgang agiert, egal wie das Richtungsregister gesetzt 
wird - das ist ja auch OK - aber nichts weiter sonst. Gibt's da 'nen 
Trick?

Bitte keine Antworten wie "nutze nen extra Pin" oder mit externer 
Hardware. Per Software UART klappt alles wie gewünscht aber es wäre 
schöner die Hardware zu nutzen.
Gast #6630297
Lesenswert?

Kurt schrieb:

> Ich muß an einem ATmega den UART benutzen aber auch den TX-Pin
> "händisch" beeinflussen. Beides getrennt funktioniert.
> Aber sobald ich den UART initialisiere, werden Änderungen am Pin-Level
> nicht mehr umgesetzt. Im Datenblatt finde ich nur eine Aussage dazu, daß
> der Tx-Pin als Ausgang agiert, egal wie das Richtungsregister gesetzt
> wird - das ist ja auch OK - aber nichts weiter sonst. Gibt's da 'nen
> Trick?

Na klar: wenn man händisch am Pin rumpfuschen will, muss man halt TXEN 
der USART löschen. Andere Tricks gibt's nicht.
Gast #6630302
Lesenswert?

Kann ich mir nicht vorstellen, und das Datenblatt, z.B. vom ATmega1284, 
scheint mir Recht zu geben:
'When the Transmitter is enabled, the normal port operation of the TxDn 
pin is overridden by the USART'
#6630307
Lesenswert?

>Ich muß an einem ATmega den UART benutzen aber auch den TX-Pin
>"händisch" beeinflussen

Das einzige, was mir einfällt ist, den TX über einen... z.B. 1k Ohm 
gehen lassen und NACH dem Widerstand einen anderen Pin anschließen, 
dessen Data Direction Bit du entweder auf Input schaltest (dann 
beeinflusst der PIN nicht, pay attention dem internen PullUp) oder das 
Direction Bit auf Output und dann kannst du den Pegel vom TX Pin 
überschreiben.

Ansonsten geht es wie c-hater schrieb, zum händischen am Pin spielen, 
müsstest du TXEN löschen.

>> So, was 'hast' du denn vor? :)
Wird das was, um ein Frame Error zu erzeugen?
Gast #6630714
Lesenswert?

Übrigens ist es nicht einmal möglich, eine laufende Übertragung 
abzubrechen (so man das denn wollte): 'The disabling of the Transmitter 
(writing TXENn to zero) will not become effective until ongoing and 
pending transmissions are completed', dies Problem hatten wir hier mal 
vor einiger Zeit.
#6630724
Lesenswert?

Kurt schrieb:
> Ich muß an einem ATmega den UART benutzen aber auch den TX-Pin
> "händisch" beeinflussen. Beides getrennt funktioniert.

Wie immer lautet die entscheidende Frage: Warum? Warum musst du die 
Hardware-USART benutzen, und warum musst du dazu noch am TX-Pin 
rumspielen?

Sinnvoll klingt das alles nicht, aber egal. Mit einem 
Software-USART-Transmitter kannst du mit den Pins machen, was du willst.

Oliver
Gast #6632528
Lesenswert?

S. Landolt schrieb:

> Übrigens ist es nicht einmal möglich, eine laufende Übertragung
> abzubrechen (so man das denn wollte): 'The disabling of the Transmitter
> (writing TXENn to zero) will not become effective until ongoing and
> pending transmissions are completed', dies Problem hatten wir hier mal
> vor einiger Zeit.

Naja, regulär geht das wirklich nicht, aber man könnte hier durchaus 
tricksen. Die Vorgänge in der Statemachine der USART laufen mit der 
eingestellten Bitrate ab (eigentlich natürlich: mit dem 8- oder 
16-fachen davon). Und die Bitrate kann man jederzeit ändern und diese 
Änderung wird auch sofort wirksam. Das eröffnet Möglichkeiten für 
schmutzige Tricks. Wenn der Takt hoch genug bzw. die reguläre Bitrate 
gering genug ist. Dann setzt man einfach den Bitratenteiler auf den 
geringsten möglichen Wert und der Rest der ausstehenden Operationen der 
Statemachine schnurrt auf einen kurzen Burst zusammen, den der Peer 
ignoriert, weil das unterhalb seiner Wahrnehmungsschwelle liegt.

Blöd ist allerdings: das betrifft dann auch RX. Für bidirektionale 
Verbindungen also sowieso unbrauchbar. Aber auch für unidirektionale 
eher nicht empfehlenswert. Wenn, dann lieber gleich Soft-UART.

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