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.
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.
Kurt schrieb: > Gibt's da 'nen > Trick? Nein, es gibt keinen Trick. Wenn Du den UART benutzt, kontrolliert ausschließlich der den Pin. Ist so, kannst Du nicht ändern. Was ist Dein eigentliches Problem? Break senden bei LIN? Reizung eines K/L Line Interfaces? Das bekommt man auch mit geänderter Bitrate hin. fchk
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'
>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?
> 1k Ohm gehen lassen und NACH dem Widerstand einen anderen Pin ? > Bitte keine Antworten wie "nutze nen extra Pin" oder mit > externer Hardware.
Ü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.
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
Per ODER mit einem weiteren Portpin verknüpfen. Oder das Gefrickel mit dem 1k Widerstand.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.