Hallo Leute,
habe einen kleinen LED Dimmer gebaut der per UART steuerbar ist. Da er
nichts anderes macht als LEDs dimmen, habe ich einfach folgenden Code
(BASCOM) verwendet:
1 | Do
|
2 | ' Berechnet die Helligkeit der einzelnen LEDs, es gibt unterschiedliche Programme
|
3 | Call Managebrightness
|
4 |
|
5 | ' Dimmt die LEDs
|
6 | Call Dimleds
|
7 | Loop
|
8 |
|
9 | ' Liest per Interrupt neuen Helligkeitswert per UART ein, der dann in Managebrightness verwendet wird
|
10 | Sub Serial0charmatch()
|
11 | Local Incoming_data As String * 25
|
12 |
|
13 | 'Daten vom Buffer auslesen
|
14 | Input Incoming_data Noecho
|
15 |
|
16 | Targetbrightness = Val(incoming_data)
|
17 | End Sub
|
18 |
|
19 | ' Hier wird anhand verschiedener Parameter die LED an Ausgang "Ledcontroller1" gedimmt
|
20 | Sub Dimleds
|
21 |
|
22 | 'LEDs1
|
23 | Pwmctr1 = Pwmctr1 + 1
|
24 |
|
25 | Tmphelligkeit = 256 - Flackerh1
|
26 |
|
27 | If Pwmctr1 = Tmphelligkeit Then
|
28 | Ledcontroller1 = 1
|
29 | End If
|
30 |
|
31 | If Pwmctr1 = 255 Then
|
32 | Pwmctr1 = 0
|
33 | If Flackerh1 < 255 Then
|
34 | Ledcontroller1 = 0
|
35 | End If
|
36 | End If
|
37 |
|
38 | End Sub
|
Das funktioniert auch alles sehr gut, das einzige Problem ist folgendes:
Wenn ich per UART einen neuen Wert sende, dann flackern die LEDs kurz.
Liegt natürlich vermutlich daran, dass die Interrupt Routine einfach zu
lange braucht.
Gibt es eine Möglichkeit, dies zu verbessern? Ich habe auch schon einen
Timer für das Dimmen verwendet statt die Main-Loop, kommt aber aufs
gleiche raus. Ich arbeite mit 8Mhz.
Danke & Viele Grüße,
Pascal