Hi,
Hi Dino!
Im Interrupt würde ich also eine Variable hochzählen, und wenn sie einen bestimmten Wert erreicht (oder überläuft oder so), würde ich sie zurücksetzen und die Variable Helligkeit erhöhen (für die Ziffer, die eingeblendet wird).
Klingt vernünftig. Im Hauptprogramm kümmere ich mich in der Zwischenzeit darum, Stunden, Minuten, Sekunden zu zählen und in die einzelnen Ziffern aufzuteilen, vielleicht auch später mal DCF zu lesen.
kann man so sagen.
- Also in der Interrupt-Routine zählst du einen Zähler (Byte) hoch. Mehr nicht.
- In der Hauptroutine testest du ob er Zähler sich geändert hat. Wenn Ja => Subroutine
- In der Sub testest du ob der Zähler über 15 ist (0..15 = 16 Dimmschritte), wenn ja => auf 0 zurück und den Zähler für die Displaystelle einen weiter
- Wenn der Zähler (0..15) über dem Dimmwert für das Segment ist dann schaltest du das Segment ab.
- Über den Displayzähler schaltest du die einzelnen Stellen durch.
Also einen Zähler für den Dimmwert (0..15) der direkt vom Interrupt hochgezählt wird.
Und einen Zähler für die Displaystelle der beim Überlauf des Dimm-Zählers hochgezählt wird.
Wenn das Ende des Displays erreicht ist dann wird der Displayzähler auch wieder auf 0 gesetzt
und das Spiel beginnt von vorn.
So würde ich mir das vorstellen. In der Hauptroutine kann man dann noch
andere Sachen reinschieben.
Kannst ja mal ein wenig rumspielen. Dabei lernt man am besten wie alles auf
eine Änderung reagiert und an welchem Schräubchen man am besten drehen
kann.
Wenn du das Zeitintervall für den Timer intelligent setzt dann kannst du über
ne zweite Zählvariable die in der Interruptroutine hochgezählt wird schon im
ersten Proggi deine Sekunden erzeugen und hast nur einen Timer für Multiplex,
Dimmung und Sekundenerzeugung verwendet
eventuell mußt du dafür aber
auch etwas mit der Frequenz des verwendeten Quarzes spielen damit du auf
ganzzahlige Teilerverhältnisse kommst.
Gruß
Dino