Leider ist ja das alte Forum im Nirvana des Internets verschwunden, aber dort gab es auch schöne Projekte.
Eines davon will ich hier posten, auch weil der Youtube-Link (von Youtube aus) sonst ins Leere zeigt.
Das Projekt ist aus dem Jahr 2009.
Es handelt sich um ein Lauflicht mir 8 LEDs, die LEDs haben aber einen Nachleucht Effekt, der aus der Serie Knight Rider bekannt ist.
Für jede LED wird dafür ein Byze benutzt und das Teilprogramm für das Lauflicht füllt diese Bytes immer wieder auf.
Ein anderer Teil des Programms (Interrupt) leert die Bytes langsam, so dass ein Nachglüheffekt mit etwa 0,5s eintritt.
Mit einer For-Next-Schleife wird eine Software-PWM gebildet.
Die Hardware ist ein STK500 mit Atmega16, LEDs sind da bereits verbaut, allerdings "verkehrt herum", bei 0 leuchten die LEDs und bei 1 sind sie aus.
Alles anzeigen
Eines davon will ich hier posten, auch weil der Youtube-Link (von Youtube aus) sonst ins Leere zeigt.
Das Projekt ist aus dem Jahr 2009.
Es handelt sich um ein Lauflicht mir 8 LEDs, die LEDs haben aber einen Nachleucht Effekt, der aus der Serie Knight Rider bekannt ist.
Für jede LED wird dafür ein Byze benutzt und das Teilprogramm für das Lauflicht füllt diese Bytes immer wieder auf.
Ein anderer Teil des Programms (Interrupt) leert die Bytes langsam, so dass ein Nachglüheffekt mit etwa 0,5s eintritt.
Mit einer For-Next-Schleife wird eine Software-PWM gebildet.
Die Hardware ist ein STK500 mit Atmega16, LEDs sind da bereits verbaut, allerdings "verkehrt herum", bei 0 leuchten die LEDs und bei 1 sind sie aus.
BASCOM-Quellcode: Lauflicht_dimm.bas
- 'Lauflicht mit Knight-Rider-Effekt.
- 'LEDs werden per Software-PWM über Timer1 ausgedimmt.
- 'http://www.youtube.com/watch?v=yFvASu5q8dU
- 'für STK500
- 'Dieser Quelltext steht unter der CC-Lizenz
- 'http://creativecommons.org/licenses/by-nc-sa/3.0/de/
- 'Namensnennung-Keine kommerzielle Nutzung-Weitergabe unter gleichen Bedingungen
- 'Michael Kinz
- $regfile = "m16def.dat"
- $crystal = 8000000
- $hwstack = 32
- $swstack = 24
- $framesize = 16
- Ddrc = 255
- Portc = 255
- Dim A As Byte
- Dim B As Byte
- Dim Z As Byte
- Dim X As Byte
- Dim Zeit As Word
- Dim Richtung As Bit
- Dim Led(8) As Byte
- Config Timer0 = Timer , Prescale = 64
- Enable Timer0
- Enable Interrupts
- On Timer0 Timer0_interrupt
- A = 1
- Portc = 0
- Waitms 200
- Do
- 'nächste LED alle 0,1 sec
- If Zeit > 50 Then
- Led(a) = 255 'LED "aufladen"
- If Richtung = 0 Then
- A = A + 1
- If A = 8 Then
- Richtung = 1
- End If
- Else
- A = A - 1
- If A = 1 Then
- Richtung = 0
- End If
- End If
- Zeit = 1
- End If
- Z = Z + 1
- 'Soft PWM
- 'Vergleich zwischen frei laufendem Zähler Z und LED()-Wert
- For B = 1 To 8
- If Led(b) > Z Then
- B = B - 1
- Portc.b = 0
- Else
- B = B - 1
- Portc.b = 1
- End If
- B = B + 1
- Next
- Loop
- End
- '----------------
- Timer0_interrupt:
- Timer0 = 6
- ' Prescale = 64 + Timer0 = 6 = 500Hz
- ' Bei LED-Startwert von 255 ist nach 0,51 Sekunden ausgedimmt
- Zeit = Zeit + 1
- For X = 1 To 8
- If Led(x) > 0 Then
- Led(x) = Led(x) - 1 'LEDs "entladen"
- End If
- Next
- Return