www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik int 1 problem


Autor: condor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Habe einen DTMF dekoder  an einer Mega 162 CPU die zeichen erkant
leitung des DTMF dekoders hängt an int 1.

wird ein gültiges zeichen empfangen spring der controler auch in die
int rotine dort warte ich auf andere DTMF zeichen. die int leitung
wechselt also noch öfters seinen pegel - wenn ich jetzt "reti" mache
springt der controler sofort wieder in meine int 1 rotine.
wie kann ich verhindern das er sich das merkt das wären der interrupt
rotine ein weiterer interrupt ausgefürt wurde ?

Autor: Daniel Nöthen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Füge an den Anfang Deiner int1 Routine ein "cli" ein
und am ende ein "sei"

Denke, das sollte das Prob beheben.


Gruß,
Daniel

Autor: condor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nein das geht leider auch nicht

Autor: mmerten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ebenso mit das int1 flag vor dem reti noch mal explizit gelöscht
werden,
indem eine 1 auf dieses zurüchgeschrieben wird.

Autor: dds5 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kenne mich mit Atmel Mega nicht aus, könnte mir aber vorstellen,
dass irgendwo Flagbits existieren die sich die aufgetretenen Int´s
merken. Die muss man halt vor reti zurücksetzen.
Davon abgesehen ist Warten in der ISR schlechter Programmierstil weil
alles andere blockiert wird.

Dieter

Autor: ...HanneS... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sagt die "Zeichen erkannt-Leitung" nicht aus, dass genau jetzt ein
gültiges Zeichen erkannt wurde? (Ein Zeichen, nicht mehrere)

Dann übernimm doch in der ISR nur dieses eine Zeichen und beende sofort
mit RETI. Das nächste gültige Zeichen löst dann einen neuen INT aus, in
dem du das nächste Zeichen übernehmen kannst. Die einzelnen Zeichen
kannst du gut in einem Ringbuffer speichern und nach Ausbleiben
weiterer Zeichen auswerten.

...

Autor: condor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Das programm wolte ich jetzt nicht komplett umschreiben und das in der
zwichenzeit das hauptprogramm nicht weiterleuft ist uberhaup nicht
schlimm....


@mmerten
genau so was such ich ja ein register oder bit das ich zurücksetzen
kann
und die cpu vergessen hat das ein int da war....

Autor: mmerten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bit 7 im GIFR, steht aber alles ausführlich im Datenblatt

Autor: condor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo

Habe es mal mit GICR vsrsucht das hat nicht geholfen aber GIFR habe ich
wohl übersehen .

Habs auch gleich getestet - und es geht auch so wie ich wollte

Danke Danke Danke

natürlich auch an die anderen Danke

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.