mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Probleme mit ATtiny12


Autor: Timo (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Guten Morgen allerseits,

ich hab ein Problem mit meinem uC und dem Interrupt.
Soweit läuft das Programm gut. Aber manchmal hängt er sich nach einem
Interrupt auf, bzw. registriert diesen dann einfach nicht mehr und
springt nicht dorthin, wo er hinspringen sollte.
Kann sich mal jemand den Quellcode anschauen und mir vielleicht einen
Tip geben ?

Vielen Dank im voraus

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

Bewertung
0 lesenswert
nicht lesenswert
http://www.mikrocontroller.net/articles/Entprellung
http://www.mikrocontroller.net/forum/read-1-140056...

Wenn du es ordentlich machen willst, wirst du um einen Timer-Interrupt
nicht herum kommen. Die Abfrage eines Tasters mittels Pin-Interrupt
bringt einfach mal nix! Und Warteschleifen im Interrupt sind sowiso
tabu.

...

Autor: Timo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank Hannes.
Timerinterrupts hab ich mir in meinen schlauen Scripten schon mal
angeguckt, aber nicht wirklich verstanden.
Was ich aber noch viel weniger verstehe, ist diese Entprell-Routine von
dir oder wem auch immer.
Die Erklärung dazu (auf welche Routine die jetzt auch immer bezogen
war, der Thread ist ja doch ziemlich konfus) wirft leider nur noch viel
mehr Fragen auf. Verwenden kann ich die jedenfalls so nicht, da ich gar
nicht weiss, wie und wo ich das einbauen muss.
Aber wie gesagt, vielen Dank für die Hilfe.

Grüße
Timo

Autor: Alisa 1387 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Verwenden kann ich die jedenfalls so nicht, da ich gar
nicht weiss, wie und wo ich das einbauen muss."

Lad doch Peters Code einfach in den Simulator. Dann siehst du doch was
abgeht.

Autor: Timo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
simulatoren sind immer so trocken. und mir fehlt die zeit, um mich da
gerade intensiv damit zu beschäftigen. ausserdem denke ich, dass mir
der simulator nicht alle meine fragen beantworten kann.
aber ich wälze nochmal bücher, wenn wieder zeit vorhanden ist.

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

Bewertung
0 lesenswert
nicht lesenswert
Der Code ist nicht von mir, sondern von Peter Dannegger. Ich hatte ihn
lediglich analysiert und erklärt, weil in diesem Thread danach gefragt
wurde. Dabei gab es einige Missverständnisse, was den Thread auf den
ersten Blick etwas konfus erscheinen lässt.

Was ist denn eigentlich an einem Timer-Interrupt so schwer zu
verstehen?
Der Timer erzeugt alle n Takte einen Interrupt ("Pulsschlag" des
Programms). Am Einfachsten geschieht das mit dem Überlauf des Timers 0.
In der ISR wird dann der Timer wieder auf Startwert gesetzt (falls man
ihn nicht frei durchlaufen lassen möchte) und andere zeitabhängige
Dinge (Tastenentprellung, Verzögerungszähler, Zeitzählung, ADC-Abfragen
usw.) erledigt bzw. angestoßen. Wird in der ISR das SREG verändert, dann
ist noch das SREG zu sichern und wiederherzustellen, damit im
Hauptprogramm keine "Fehlentscheidungen" provoziert werden.

...

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Timo!

Der Tiny12 hat keinen RAM!
Also kann dieser nicht X-beliebig viele Rücksprung-Adressen auf einen
RAM pushen (push und pop gibs bei dem sowieso nicht).
Dafür hat der Tiny12 einen 3-Deep Hardware Stack mit jeweils 9 Bit,
also können max. 3 Rücksprungadressen gespeichert werden.
Du verwendest eine Pausen-Routine welche wiederum Pause2 und von dort
aus Pause 3 mit RCALL aufruft.
Dadurch ist der 3-deep Stack voll und wenn dann noch der Interrupt
kommt, welcher ja auch als Sub aufgerufen wird, ist es aus.
Spätestens bei dem RCALL in der Timer-ISR.
Versuche mal Deine Pausen-Funktion ohne RCALLs zu ändern und pass auf,
das inkl. Interrupt max. 3 CALLs entstehen können.


MfG
Andi

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

Bewertung
0 lesenswert
nicht lesenswert
Stimmt... (Moin Andi...)

Jetzt, wo es Andi schreibt, sehe ich es auch.
Ich muss gestehen, dass ich das Programm nur flüchtig angesehen habe.
Nach Erkennen der Tastenabfrage und Warteschleifen und der Feststellung
"sowas macht man nicht" war mit meiner Analyse Schluss.

...

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.