Forum: Mikrocontroller und Digitale Elektronik UART-Timing?


von Stephan (Gast)


Lesenswert?

Hallo,

ich hoffe, mir kann einer helfen. Mein UART will nicht so wie ich. Ich
habe einen AT MEGA 128 und einen anderen Controller daran
angeschlossen, Rx und Tx halt gekreuzt. Der sendet seine Daten mit 9600
Baud, 1 Stopp-Bit, kein Handshaking, genauso habe ich es im Mega
eingestellt. Dann habe ich eine Routine, die beim Auslösen des
Interrupts den Kram an einen schon vorhandenen String klatscht. Alle
paar Sekunden gibt mir der Mega den String auf dem LCD aus und leert
ihn wieder. In der Theorie und im Simulator funktioniert das auch.

Nicht aber in der Praxis! Beim allerersten Übertragen werden die ersten
beiden Zeichen korrekt übertragen, danach spuckt mir der Mega nur noch
kryptische Zeichen aus. Allerdings sind es immer die gleichen Zeichen,
völlig konstant und reproduzierbar.

Der Mega läuft intern mit 4 MegaHerz (durch Setzen der Fusebits), das
stimmt auch. Ich habe im Programm auch mal die Taktfrequenz in den
Grenzen der Toleranz variiert, aber das brachte auch nix. Hat jemand
Rat?

Grüße an alle,
Stephan

von Stephan (Gast)


Lesenswert?

Hallo,

nachdem ich nun alle Taktfrequenzen durch habe, stelle ich fest, dass
es gar nicht daran liegt. Der zweite Baustein, den ich leider nicht
beeinflussen kann, gibt sein Signal invertiert aus!

Kann man das per Software umdrehen?

Grüße an alle,
Stephan

von Sebastian Wille (Gast)


Lesenswert?

Hi Stephan,

Invertierung:

USART0_RX_complete:
  in     r16,UDR0        ;read value

      ldi    r17,0xFF
      eor    r17,r16         ;r17 enthält das Ergebnis
reti

Sebastian

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.