Forum: Mikrocontroller und Digitale Elektronik UART - Problem


von Wolfgang Hönig (Gast)


Angehängte Dateien:

Lesenswert?

Ich habe den Sourcecode vom Tutorial zusammenkopiert(Anhang), sodass ich
senden und empfangen kann. Dabei kann ich allerdings nur senden und
nicht empfangen. Die Tutorials einzeln funktionieren.
--> kein Hardwarefehler

Wo liegt der Fehler?

von Henning (Gast)


Lesenswert?

di überschreibst deinen empfangenen wert immer gleich wieder mit

    ldi temp, 255

die befehlszeile ist eingerückt (übersehen?!)

zu finden ist sie im empfangsinterrupt...

von Wolfgang Hönig (Gast)


Lesenswert?

Das liegt daran das ich am Port D keine LEDs sondern ein Relais habe,
welches ich klicken höre.
Da das Relais nicht bei jedem Zeichencode eingeschaltet würde, habe ich
die erwähnte Zeile geschrieben.

Bei einem C-Programm mit WinAVR, tritt das gleiche Problem auf, obwohl
ich dort das ankommende Zeichen auf einem Display ausgebe.

Am ATMega16 (8 Mhz) liegt's auch nicht, den habe ich schon testweise
ausgetauscht.

Danke für's angucken

von Henning (Gast)


Lesenswert?

verstehe ich nich. wenn du alle anderen pins ausser den des relais
schalten willst müsstest du das aussortieren. aber so wie du´s jetz
machst hat temp in der zeile out PORTD, temp immer den wert 255.
es wird keine rücksicht auf den eingelesenen wert genommen, er wird
sofort wieder überschrieben.
wenn du dir erhoffst durch ein empfangenes byte das relais einmal
klacken zu hören müsstest du den pin wenigstens einmal mit dem
empfangenen wert setzen. würde jedoch auch nichts helfen, denn so
schnell wie der prozessor mit 8mhz ist, hätte das relais eine zu grosse
trägkeit um kurz abzufallen / anzuziehen. das kann innerhalb von 125ns
nicht klappen.

egal was du machen willst, der fehler liegt in der zeile ldi temp, 255
oder der darunter.

int_rxc:
        push temp                         ; temp auf dem Stack sichern
        in temp, UDR
    ldi temp, 255
        out PORTD, temp
        pop temp                          ; temp wiederherstellen
        reti                              ; Interrupt beenden

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.