Scheint etwas älter zu sein da noch Signal ()
Die Architektur des Mega8 ist auch nicht taufrisch, und ihm geht's ja weniger um den C-Code, als mehr um eine deutsche Erklärung der Register und deren Bits. Paßt also soweit. Allerdings handelt es sich dort um Timer0, wir verwenden Timer1 (welcher deutlich komplexer ist). Dort wird ein Frequenzkorrigierter singleSlope Modus (CTC) verwendet - wir sind beim phasenkorrekten dualSlope (PWM). Da der Timer1 auch die Modi des Timer0 kann, sind die Erklärungen trotzdem möglicherweise hilfreich.
Ich hatte
hier mal was zu den Registern des Timer1 des Mega8 geschrieben. Auf deutsch.
Die Hinweise in #101 nütze mir demzufolge gar nichts. Mir hat sich die If Abfrage im Kopf festgesetzt und ich kann machen was ich will,
Doch doch,
Hinweis I war, daß Du die grüne LED genauso wie die Rote toggeln mußt. Das hast Du in Zeile 41 korrekt umgesetzt.
Hinweis II war, daß Du bereits ein Bit in einem I/O-Register abfragst - nämlich PORTD.7 in Zeile 33 und 35 (hier jetzt auskommentiert, klar). Das hast Du da zwar nicht ausgeschrieben, aber Bascom ersetzt überall "Rot" durch "PORTD.7", klar?
Jetzt habe ich Dir gesagt, daß Du mit der Abfrage des Zählers selbst (TCNT1 bzw unter Bascom auch Timer1) auf dem Holzweg bist (das ist so, als wenn Du im Auto ununterbrochen auf den Tacho/Kilometerzähler starrst, und siehst
daß der "0000" anzeigt oder eben nicht). Der Timer hat aber neben seinem "Kilometerzähler" noch 'ne Lampe (Flag/Fähnchen) die
jedesmal wenn er auf "0000"
umschaltet angeht, und dann anbleibt bis irgendwer sie wieder deaktiviert..
Dann bleibt sie auch aus, wenn der Timer weiterhin auf "0000" steht - erst wenn er wieder auf "0000"
umschaltet, geht sie wieder an.
Diese Lampe ist das Überlaufflag des Timers, TOV1. Es befindet sich beim Mega8 im allgemeinen "Timer and Counter Flag Register". TIFR.
Im Datenblatt steht dazu:
Timer/Counter Interrupt Flag Register - TIFR
OCF2 | TOV2 | ICF1 | OCF1A | OCF1B | TOV1 | - | TOV0 |
[…]
• Bit 2 – TOV1: Timer/Counter1, Overflow Flag
The setting of this flag is dependent of the WGM13:0 bits setting. In normal and CTC modes, the TOV1 Flag is set when the timer overflows. Refer to Table 39 on page 97 for the TOV1 Flag behavior when using another WGM13:0 bit setting.
TOV1 is automatically cleared when the Timer/Counter1 Overflow Interrupt Vector is executed. Alternatively, TOV1 can be cleared by writing a logic one to its bit Location.
Der Google-Übersetzer macht daraus:
Die Einstellung dieses Flags hängt von der Einstellung des WGM13: 0-Bits ab. Im Normal- und CTC-Modus wird das TOV1-Flag gesetzt, wenn der Timer überläuft. In Tabelle 39 auf Seite 97 finden Sie das Verhalten des TOV1-Flags bei Verwendung einer anderen WGM13: 0-Bit-Einstellung.
TOV1 wird automatisch gelöscht, wenn der Timer / Counter1 Overflow Interrupt Vector ausgeführt wird. Alternativ kann TOV1 gelöscht werden, indem eine logische Eins in das Bit Location geschrieben wird.
Eigentlich halbwegs verständlich...
Wir folgen also dem Link zu Table 39 auf Seite 97.
Wir verwenden wie bereits mehrfach geschrieben den phasenkorrekten 8-Bit PWM - in der Tabelle also Mode 1. In der letzten Spalte (TOV1 Flag Set on) steht: "Bottom" (Unterseite, Boden... hä?).
Auf Seite 76 steht in Table 35 definiert:
BOTTOM: The counter reaches the BOTTOM when it becomes 0x0000.
Daraus macht der Google-Übersetzer:
Der Zähler erreicht den UNTEN, wenn 0x0000 angezeigt wird.
Also Bottom tritt ein, wenn der Zähler auf "0000" schaltet, und dann wird nach Tabelle 39 bei unserem Modus das TOV1 gesetzt.
Gelöscht wird es entweder dirch die Abarbeitung des entsprechenden Interruptes (verwenden wir nicht/ist nicht aktiviert) oder eben indem Du das Bit selbst setzt ('ne "1" reinschreibst).
Wie man unter Bascom auf Bits in Registern zugreifen kann, hatten wir bereits - einen zusätzlichen neuen Namen mußt Du hier nicht unbedingt vergeben (Alias).