Guten Abend! Ich arbeite mit einem PIC (16F877A, später ist ein "kleinerer" geplant) an einem Kurzzeit-Timer (zum Belichten von Platinen bzw. Teekochen ...). Als Quarz verwende ich wegen der genauen Sekunden einen Quarz mit 3,2768 MHz. Die 7-Segment-Anzeige soll über einen SAA1064 per I2C angesprochen werden. Der Compiler ist mikroPascal von Mikroelektronika. Ein Programm, das einen einfachen (nicht sekunden-genauen) Zähler auf dem 7-Segment-Display ausgibt ist voll funktionsfähig. Soll heißen, dass meine Routinen richtig sind. Ebenso läuft ein Programm korrekt, dass einen sekunden-genauen Interrupt auslöst. Der hochzählende Wert wird testweise auf einem LCD ausgegeben. Kombiniere ich beide Programme funktioniert nichts mehr. Bei zwei anderen Controller-Typen existiert die gleiche Problematik. Wenn ich statt des SAA1064 einen Port-Expander PCF8574 anspreche ebenso eine Blockade des Interrupts. Hat schon mal jemand ein ähnliches Problem/Phänomen gehabt? Müssen bei der Kombination von Interrupt und I2C Dinge beachtet werden? (Timing, Bits ...) Schon mal vielen Dank!
Du kannst ja einfach beim Aufruf der I2C Routine den Sekundentimer Interrupt sperren und nach dem aktualisieren des Displays wieder freigeben. Dann wird der IRQ solange auf das Display geschrieben wird nicht bearbeitet, sondern erst danach. D.h. die nächste Ziffer erscheint dann einige Millisekunden später.
Wenn ich das richtig verstanden habe, könnte es sein, dass dein Interrupt die I2C Routinen unterbricht. Dann kannst du die Interrupts für diese Zeit sperren, oder I2C selber im Interrupt ausführen und gleiche Prioritäten vergeben.
Das Thema kann geschlossen werden. Das Problem saß wie so oft vor dem Rechner. Ich hatte einen Port falsch konfiguriert und somit den I2C-Bus gestört. Trotzdem danke für die schnellen Antworten!
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.