Hallo,
hier mal ein kleiner Modellbaublinker. Es können Autoblinker oder Rundumleuchten simuliert werden. Die LEDs werden immer in einen anderen Rhythmus blinken. Die Zeiten jeder einzelnen LED kann recht genau eingestellt werden. Die Do - Loop - Schleife läuft durch, ohne durch Wait gestoppt zu werden, so sind auch noch andere Erweiterung z.B.Tastenabfragen möglich. ZEIT4 simuliert ein Schweißlicht.
Alles anzeigen
Gruß Udo
hier mal ein kleiner Modellbaublinker. Es können Autoblinker oder Rundumleuchten simuliert werden. Die LEDs werden immer in einen anderen Rhythmus blinken. Die Zeiten jeder einzelnen LED kann recht genau eingestellt werden. Die Do - Loop - Schleife läuft durch, ohne durch Wait gestoppt zu werden, so sind auch noch andere Erweiterung z.B.Tastenabfragen möglich. ZEIT4 simuliert ein Schweißlicht.
BASCOM-Quellcode: Blinker
- '(*******************
- * Udo Lorenz *
- * 03.01.2018 *
- * *
- *******************
- Modellbaublinker
- Beliebig viele LED und unterschiedliche Zeiten möglich, je nach Chip.
- Tastenabfrage ohne Verzögerung.
- Hauptschleife läuft frei durch!
- ')
- '$sim
- $regfile = "attiny85.dat"
- $crystal = 16000000
- $hwstack = 80
- $swstack = 80
- $framesize = 100
- Dim Ms As Word
- Dim Zeit1 As Word
- Dim Zeit2 As Word
- Dim Zeit3 As Word
- Dim Zeit4 As Word
- Dim R As Word
- Config Portb.0 = Output
- Config Portb.1 = Output
- Config Portb.2 = Output
- Config Portb.4 = Output
- Led1 Alias Portb.0
- Led2 Alias Portb.1
- Led3 Alias Portb.2
- Led4 Alias Portb.4
- 'Config für Timer0
- Tccr0 = &B00000011 'Setze Timer0 = Timer , Prescale = 64
- Tcnt0 = 6 'Startwert Timer = 6
- On Timer0 T0_interrupts 'Sprung zum Interrupt
- Enable Timer0 'Global Interrup on
- Enable Interrupts
- 'Config Rnd = 16
- 'Voreinstellung für gewünschte Zeit optional 'jede LED eine ander Startzeit
- Zeit1 = Ms + 666 'Voreinstellung für KFZ-Blinker 90/min
- Zeit2 = Ms + 200
- Zeit3 = ms + 400
- Zeit4 = Ms + 1000 '1000 für 1s
- Do
- If Zeit1 =< Ms Then
- Toggle Led1
- Zeit1 = Ms + 665
- End If
- If Zeit2 =< Ms Then
- Toggle Led2
- Zeit2 = Ms + 666
- End If
- If Zeit3 =< Ms Then
- Toggle Led3
- Zeit3 = Ms + 667
- End If
- If Zeit4 =< Ms Then 'Zufallblinker Schweißlicht
- Toggle Led4
- R = Rnd(45)
- If R => 20 And R =< 21 Then
- R = Rnd(1000)
- End If
- Zeit4 = Ms + Rnd(20)
- Zeit4 = Ms + R
- End If
- Loop
- T0_interrupts:
- Tcnt0 = 6 'Startwert Timer = 6
- Incr Ms
- Return
- End
- ' Der Timer0 beim Tiny45 ist ein 8Bit Timer, also Overflow wenn der Timer 256 erreicht hat
- ' Der Qurz (PLL) hat 16000000Hz, Prescaler is auf 64 eingestellt
- ' Die Auflösung ist damit 0,004 ms = (1 / CPUSpeed in KHz ) * Prescaler
- ' Der Timer braucht 250 Ticks um 1 ms zu erreichen ( 250 * 0,004 = 1ms)
- ' Der Startwert für den Timer muss auf 6 gesetzt werden (= 256 - 250), also Overflow bei 256 ab 6 mit 250 Ticks
Gruß Udo