Gast
#1122075
Hallo, vielleicht könnt ihr mir weiterhelfen. Ich habe ein Programm für einen ATmega32 geschrieben, das auf der Drehencoder-Routine von Deter Dannegger beruht (hier aus der Codesammlung). Das einlesen der 4 Drehencoder die ich an Port A angeschlossen habe, funktioniert auch prima. Jetzt zu meinem Problem: Das einlesen der Drehencoder erfolgt über den Timer-Overflow-Interrupt mit Timer0 (ca. 7 KHz). Die Ausgabe der zweistelligen Zahl erfolgt mit 7-Segment-Anzeigen, von denen habe ich ingesamt vier Paare (Also viermal eine zweistellige Anzeige) die an Port C parallel angeschlossen sind. Die 7-Segment-Anzeigen werden durch einen BCD-to-7 Segment Treiber/Latch angesteuert. Die Parallelen Anzeigen werden über den Latch-Eingang des 4543 gemultiplext der auf Port B liegt. Da es ja aber schwachsinn ist, das multiplexen mit 7 Khz zu machen, hab ich einen zweiten Interrupt über Timer2 realisiert, der mit 200 Hz arbeitet. Das Problem: wenn ich den zweiten Interrupt benutze werden auf den Anzeigen nur noch Nullen angezeigt, die durch Drehen nicht verändert werden. Die einzige Variable im zweiten Interrupt ist die counter1_high und counter1_low, die ich als global und volatile deklariert habe. Diese wird in der ersten Interruptroutine geschrieben und in der zweiten nur gelesen. Mach ich da irgendwo nen Denkfehler? Wenn ich das setzen der Anzeigen mit in die erste Routine packe wird alles so angezeigt wie es soll. Ich weiß nicht mehr weiter! Vielen Dank für alle Antworten! MfG Matthias