Gast
#4081686
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.