Programmaufbau bei Timernutzung und ISR

Gast #4081686
Lesenswert?
• ▲
▼
Hallo,

es heisst ja immer ISR-Routinen sollten möglichst knapp sein, damit sie 
schnell abgearbeitet sind und den MC nicht weiter blockieren.

Ich habe jetzt mal ne Uhr Programmiert eben mit einem Timer und einem 
128x64-Display das per I2C angesprochen wird.

In der ISR inkrementiere ich nur meine Uhr, da ist ein bischen Logik 
drinn, eben für Überlauf der Sekunden und Minuten, das ist ja schnell 
abgearbeitet.

Wenn ich dort noch das Update fürs Display mache, blockiert das Ganze.
Nehmen ich das raus und prüfe in der main() in der Hauptschleife ob sich 
der Sekundenwert geändert hat und nur bei Änderung die Displayroutine 
aufrufe, geht es problemlos.

Die Routine fürs Display braucht ca. 160ms (400kHz I2C), das müsste doch 
innerhalb der ISR auch funktionieren, denn bis die wieder aufgerufen 
wird ist die displayroutine schon wieder abgearbeitet.

MC ist ein Atmega328P auf 16MHz, ja ein Arduino.
Timer ist Timer 1 der bis 15625 zählt, Prescaler auf 1024, Capture 
Modus.

Antwort schreiben

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.

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.