@Neo Da ich es auch mal geplant habe, ein Stroboskop zubauen, bei dem man es genau so einstellen kann, wie du es haben willst. Habe ich mehr Zeit investiert und habe jetzt einen Code für dein/mein unser Stroboskop erstellt.
Knapp eine Stunde habe ich für den Code gebraucht.
Für das Verhältnis zwischen Ein & Aus, habe mit Nachkomma gearbeitet.
Z.B.: 0,01 (1 %) und 0,99 (99 %)
Damit beim subtrahieren der "Verhältnis-Zahlen" nicht unter 0 bzw. in Minus-Bereich geht, habe ich eine IF-Abfrage geschaltet. Der das kontrolliert und bei erreichen von 0,01 abriegelt.
Dann gab es noch mit mehreren Problemen zukämpfen:
Das Problem ist, dass der "Waitms"-Befehl keinen Zahlentyp "Single" bzw. Nachkomma annimmt. Aber nur der Zahlentyp Single ermöglich Nachkommas. Dadurch muss die Variabel mit Single in Integer umkonventiert werden und anschließend an Waitms weitergegeben werden. (Denn genau so ein Problem hatte ich früher in der Java-Programmierung und dementsprechend gleich gelöst

)
Taster1 -> Frequenz verringern (längere Pausen)
Taster2 -> Frequenz erhöhen (kürzere Pausen)
Taster3 -> Verhältnis um 1 % nach "Led an" verlagern
Taster4 -> Verhältnis um 1 % nach "Led aus" verlagern
Taster4 habe ich auskommentiert, da ich keinen Taster4 auf meinem Pollin-Board habe.
Nebeneffekt: Wenn man die Tastern länger gedrückt hält, erhöhen sich die Werte sehr schnell! Was ich sogar positiv finde und deshalb drin gelassen habe.

Möchte man feinere Auflösung haben, immer brav die Tastern kurz drücken.
Code: Alles auswählen
$regfile = "m8def.dat"
$crystal = 1000000
Config Pind.5 = Output
Config Pind.6 = Output
'Config Pind.1 = Input
Config Pind.2 = Input
Config Pind.3 = Input
Config Pind.4 = Input
Config Timer0 = Timer , Prescale = 64
On Ovf0 Unserunterprogramm_isr
Enable Timer0
Enable Interrupts
Dim Pause As Integer
Dim D As Single
Dim D2 As Single
Dim Ein As Single
Dim Ein2 As Integer
Dim Aus As Single
Dim Aus2 As Integer
Taster1 Alias Pind.2
Taster2 Alias Pind.3
Taster3 Alias Pind.4
'Taster4 Alias Pind.1
Led1 Alias Portd.5
Led2 Alias Portd.6
Pause = 500
D = 1
D2 = 1
Do
Aus = Pause * D
Aus2 = Aus
Toggle Led1
Waitms Aus2
Ein = Pause * D2
Ein2 = Ein
Toggle Led1
Waitms Ein2
Loop
Unserunterprogramm_isr:
If Taster1 = 1 Then
Pause = Pause + 1
End If
If Taster2 = 1 Then
If Pause > 1 Then
Pause = Pause - 1
End If
End If
If Taster3 = 1 Then
If D > 0.01 And D2 > 0.01 Then
D = D - 0.01
D2 = D2 + 0.01
End If
Waitms 1
End If
'If Taster4 = 1 Then
'D = D - 0.01
'D2 = D2 + 0.01
'End If
Return