Also muss ich die Compare2 in Compare1 umbenennen.Es gibt nur "Compare1"
Hier weiß ich nun überhaupt nicht, was gemeint ist.Musst "OC2" als Interruptnamen verwenden, also den AVR Namen -.-
Also muss ich die Compare2 in Compare1 umbenennen.Es gibt nur "Compare1"
Hier weiß ich nun überhaupt nicht, was gemeint ist.Musst "OC2" als Interruptnamen verwenden, also den AVR Namen -.-
$regfile = "m8def.dat" 'Controllerdefinitionsdatei einbinden $crystal = 8000000 'Systemtakt angeben (Baudrate) $hwstack = 40 'Stacks $swstack = 16 $framesize = 32 $baud = 19200 'Baudrate UART 'Dim Zeichen As Byte 'UART-Empfang Dim Count As Byte Ddrb = &B_1111_1111 Portb = &B0000_0000 Ddrc = &B_11_1111 Portc = &B00_0000 Ddrd = &B_1111_1111 Portd = &B0000_0000 Rot Alias Portd.7 Gruen Alias Portc.3 Ocr2 = 249 Config Timer2 = Ctc , Prescale = 256 , Clear_timer = 1 ', Compare A = Disconnect On Oc2 Isr_timer2 Enable Oc2 On Timer2 Isr_timer2 Enable Timer2 Enable Interrupts Main: Reset Watchdog Goto Main Isr_timer2: Ocr2 = 249 Toggle Gruen Return
On Timer2 Isr_timer2 Enable Timer2
Jetzt die ISR erstellen wie früher. Vorher einen Zähler DIMensionieren (z.B. delay). Byte reicht. In der ISR diesen erhöhen. Wenn er 125 erreicht hat: Auf 0 setzen und den eigentlichen Inhalt ausführen, sonst nicht.
CodeBox BascomAVRIncr C If C = 491 Then 'nur ein angenommener Wert C = 0 Toggle Gruen
$regfile = "m8def.dat" 'Controllerdefinitionsdatei einbinden $crystal = 8000000 'Systemtakt angeben (Baudrate) $hwstack = 40 'Stacks $swstack = 16 $framesize = 32 $baud = 19200 'Baudrate UART Dim Zeichen As Byte 'UART-Empfang Dim Count As Byte Dim Countdown As Word Ddrb = &B_1111_1111 Portb = &B0000_0000 Ddrc = &B_11_1111 Portc = &B00_0000 Ddrd = &B_1111_1111 Portd = &B0000_0000 Rot Alias Portd.7 Gruen Alias Portc.3 Ocr2 = 249 Config Timer2 = Ctc , Prescale = 256 , Clear_timer = 1 On Urxc Onuartrx Enable Urxc On Oc2 Isr_timer2 Enable Oc2 Enable Interrupts Main: Config Powermode = Idle Goto Main Onuartrx: Zeichen = Inkey() 'dann Zeichen aus Puffer lesen If Zeichen = 0 Then 'bei 0x00 PWM deaktivieren Rot = 0 Elseif Zeichen = 255 Then 'bei 0xFF PWM aktivieren Rot = 1 Else Countdown = Zeichen * 60 Rot = 1 End If Return Isr_timer2: Incr Count If Count = 125 Then Count = 0 Toggle Gruen If Countdown = 0 Then Rot = 0 Else Decr Countdown End If End If Return
Stimmt, das habe ich vergessen raus zu nehmen. Ist ein Überbleibsel von meinen Testversuchen. Ich wollte nur den Countdown haben.Bei 255 wird Rot zwar nur so lange an bleiben wie der Wert in Countdown besagt
Da muss ich mich auch erst einmal belesen.Als nächstes kommt Timer1 als Counter dran
Overflow (Reload) = Überlauf (neu laden)Ich nutze hier gerne den Timer Calculator
If Tifr.tov1 = 1 Then 'wenn Timer übergelaufen ist Tifr.tov1 = 1 'Überlaufflag zurücksetzen Incr Z If Z = 245 Then 'Überläufe zählen (245) Z = 0 'Zähler zurücksetzen Toggle Gruen 'LED toggeln End If
Sowohl Dirks Calculator für Windows als auch meiner für Android berücksichtigen nur Timer, die im single Slope laufen (also inkrementieren, überlaufen und (eben von 0) weiterinkrementieren). Ein 8Bit-Timer macht so also 28 Schritte pro Überlauf, ein 16Bit-Timer 216. Meint Tool bietet außerdem noch 9 und 10 Bit.Hier ist auch ein Überlauf, doch die Zahlen kommen beim Calculator nicht raus.
In #528 Systemtakt = 8 MHzDu nutzt die internen 8 MHz und den /8 Teiler, macht 1MHz Systemtakt.
Dann nutzt du den /8 Vorteiler für den Timer, macht 125KHz.
Das durch 256 geteilt (8 Bit).