Ständiger Uart Complete Interrupt?

Gast #177157
Hallo NG,

folgendes Szenario:
Der ATmega8 soll mit einem Mega64 über den UART kommunizieren. Dabei
soll der Mega8 bei einem empfangenem Byte einen Receive Complete
Interrupt auslösen.

Schon bei dem Testprogramm wird ständig ein Interrupt ausgelöst, obwohl
am UART Eingang nichts angeschlossen ist. Wie kann das sein?

Gruß
Drago

Achso: Compiler ist der IAR.
Angehängte Dateien:
Gast
Erstens bist Du mit dem IAR hier im falschen Forum -- schau mal bitte
auf die Überschrift.

Zweitens, lies Dir bitte das Datenblatt durch, wann die
Interruptbedingung für einen Empfangsinterrupt zurückgesetzt wird...

Außerdem: in einer Interruptroutine wartet man nach Möglichkeit nicht
längere Zeit.
Gast
Es soll ja ein Empfangsinterrupt ausgelöst werden, wenn ein
vollständiges Byte da ist.

Nur Das Problem ist, das es ja gar keinen Anlass gibt einen
Empfangsinterrupt auszulösen, da am UART nix angeschlossen ist...

> Außerdem: in einer Interruptroutine wartet man nach Möglichkeit
> nicht längere Zeit

alles nur für Testzwecke
Gast
> Nur Das Problem ist, das es ja gar keinen Anlass gibt einen
> Empfangsinterrupt auszulösen, da am UART nix angeschlossen ist...

Warum hast Du dann einen Interrupthandler und aktivierst den
Interrupt?

Irgendwelcher Schrott wird halt als Zeichen interpretiert (selbst ein
Zeichen mit `framing error' löst ja einen Interrupt aus, nachdem die
entsprechenden Taktzeiten rum sind), und der Fehler in Deiner ISR läßt
diese dann immer wieder aufrufen.
Gast
ok, UDR auslesen fehlt noch. Stimmt. Das erklärt die Dauerschleife.

@Jörg
Du meinst irgend welches Rauschen am offenen RXD Pin (Da soll später
mal der Mega64 dran) kann einen Interrupt auslösen ?
Gast
Danke!
Es lag wirklich an dem Schaltungslayout, wodurch sämtlicher Schrott
einen Interrupt auslöste. Wenn der RXD-Pin mit einem Pull-Down
Widerstand gegen Masse gezogen wird, löst sich auch dieses Problem und
es treten keine "zufälligen" Interrupts mehr auf.
Das UDR muß natürlich, im Gegensatz zu meinem Erstposting ausgelesen
werden, um sich nicht in einer Dauerschleife zu verfangen.

Gruß
Drago
Gast
"Wenn der RXD-Pin mit einem Pull-Down
Widerstand gegen Masse gezogen wird, löst sich auch dieses Problem und
es treten keine "zufälligen" Interrupts mehr auf."

Das wundert mich ein bißchen: eigentlich sollten hierbei wiederholt
Interrupts ausgelöst werden, um dieses 'BREAK'-Signal anzuzeigen;
frame-error und overrun würde ich auch erwarten.
Ein Pullup wäre die richtige Beschaltung.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.