mikrocontroller.net

Forum: Compiler & IDEs Timer1 Interrupt löst Reset aus??


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

Bewertung
0 lesenswert
nicht lesenswert
Guten Tag,
ich programmiere schon eine Weile an einer Propeller Clock herum und 
habe die Ausgabe am laufen. Mit Timer1 messe ich die Dauer eines 
Umlaufes, wenn der überläuft dreht es sich zu langsam.
Nu stelle ich fest dass wenn ich den Propeller anhalte oder langsam 
drehen lasse, dass sich die Variablen (Stunde, Minute, Sekunde) auf die 
Anfangswerte zurücksetzen. Kann das jemand erklären? Mein Code ist im 
Anhang, ich nutze einen Atmega32.

danke für euren Input,

Gruss
Thomas

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist wohl eher Timer0?
//#############count clock here ################################
ISR (TIMER0_COMP_vect)            //Timer0 Interrupt
{
    sei();                    //allow nested iRQ

Wenn du IRQs kaskadieren willst/musst, dann solltest du in dieser ISR 
vor dem SEI den TIMER0_COMP deaktivieren und zum Ende der ISR nach einem 
CLI wieder aktivieren.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Johann,
da stehe ich gerade auf dem Schlauch. Zweck der Übung ist es, dass 
Timer2 und externer 12 Uhr Interrupt die Sekundenzählung(Timer0) 
unterbrechen dürfen, dieser ist weniger zeitkritisch.
Warum muss ich im Timer0 IRQ seinen eigenen IRQ deaktivieren? Der wird 
doch erst viel später wieder erwartet und unterbricht sich ja nicht 
selbst.

Ausserdem hat der Timer0 mit der Drehzahl nix zu tun, das Problem müßte 
dann ja immer auftreten, kommt aber nur wenn ich den externen Interrupt 
länger nicht feuere (Propeller steht oder dreht langsam).

Kannst das mal erklären?
Danke sehr!!

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas wrote:
> Hallo Johann,
> da stehe ich gerade auf dem Schlauch. Zweck der Übung ist es, dass
> Timer2 und externer 12 Uhr Interrupt die Sekundenzählung(Timer0)
> unterbrechen dürfen, dieser ist weniger zeitkritisch.
> Warum muss ich im Timer0 IRQ seinen eigenen IRQ deaktivieren? Der wird
> doch erst viel später wieder erwartet und unterbricht sich ja nicht
> selbst.

Sicher?

Durch Auftreten einer Timer2-IRQ/Ext-IRQ dauert die Timer0-ISR ja 
länger, so daß der IRQ möglicherweise getriggert wird, wenn die ISR noch 
am laufen ist.

Die Stelle ist mit beim Überfliegen deines Codes ins Auge gesprungen. Ob 
sie mit deinem Problem was zu tun hat, kann ich nicht sagen. Jedenfalls 
ist es eine kritische Stelle.

> Ausserdem hat der Timer0 mit der Drehzahl nix zu tun, das Problem müßte
> dann ja immer auftreten, kommt aber nur wenn ich den externen Interrupt
> länger nicht feuere (Propeller steht oder dreht langsam).
> Kannst das mal erklären?

Timer0-ISR wird durch (Nicht)-Auftreten von X-IRQ beeinflusst, und zwar 
nicht nur seine Latenz, sondern auch seine Dauer.

Die T2-ISR ist sehr komplex, es gibt SPI-Warteschleifen und ich sehe 
mindestens 4 Modulos.

Und dann: Bist du sicher, daß es nicht zu einer Race-Condition wegen 
nicht-atomaren Zugriffs auf eine deiner nicht 8-Bit-Werte kommt? Also zB 
IRQ schlägt zu innerhalb einer Schreib-OP auf einen int?

Du setzt auch T2-Zähler und OCR. AFAIR wird keine IRQ getriggert, wenn 
man von Hand TCNTn auf OCRn setzt: da nochmal das Handbuch befragen.
Und ausschliessen, daß es Probleme gibt, wenn OCR2 verkleinert wird weil 
T2 ne komplette Runde dreht.

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.