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.
Würschterl schrieb: > es heisst ja immer ISR-Routinen sollten möglichst knapp sein, damit sie > schnell abgearbeitet sind und den MC nicht weiter blockieren. Meine Lieblings-Mainloop sieht so aus
1 | while(1) { |
2 | sleep(); |
3 | }
|
MfG Klaus
Würschterl schrieb: > 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. Verwendet dein I2C Interrupts? Solange eine ISR läuft, also in deinem Fall die Timer-ISR, sind alle anderen IRQs gesperrt. mfg.
Thomas Eckmann schrieb: > Verwendet dein I2C Interrupts? Äh ja, oh je wie doof, dass ich darauf nicht selber gekommen bin.
Würschterl schrieb: > Thomas Eckmann schrieb: >> Verwendet dein I2C Interrupts? > Äh ja, oh je wie doof, dass ich darauf nicht selber gekommen bin. Ooch, halb so schlimm. So etwas passiert uns allen mal auf irgendeinem Niveau immer wieder.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.