www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik UART - Problem


Autor: Wolfgang Hönig (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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?

Autor: Henning (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Wolfgang Hönig (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Henning (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.