hab hier mit nem Mega8 ne Software PWM realisiert, welche über ein CD4094 Schieberegister RGR leds ansteuert. Die Ausgänge des Cd4094 sind an ein ULN2003 Angeschlossen welchesdie RGB leds antreibt.
Es funktioniert eigentlich sehr gut , schöne farben usw.
jedoch hab ich das Problem, dass die farbven obwohl sie nicht angesteuert werden (laut programm bzw den versch Werten) leicht glimmen, und mir somit die Puren Farbtöne ein wenig versauen. Vl weiss ja jemand woran es liegt, also solange ich die farben einzeln ansteuere gar kein Problem, anscheinend gibts jetzt doch mit der Pwm ansteuerung ein Problem,.
hier der Programmausschnitt welches das erledigt.
- pwm_timer wird immer durch timerint aufgerufen
- programmwahl wird bei jedem programmedurchlauf aufgerufen und beeinflusst die farben ,.
Es funktioniert eigentlich sehr gut , schöne farben usw.
jedoch hab ich das Problem, dass die farbven obwohl sie nicht angesteuert werden (laut programm bzw den versch Werten) leicht glimmen, und mir somit die Puren Farbtöne ein wenig versauen. Vl weiss ja jemand woran es liegt, also solange ich die farben einzeln ansteuere gar kein Problem, anscheinend gibts jetzt doch mit der Pwm ansteuerung ein Problem,.
hier der Programmausschnitt welches das erledigt.
- pwm_timer wird immer durch timerint aufgerufen
- programmwahl wird bei jedem programmedurchlauf aufgerufen und beeinflusst die farben ,.
Code:
Pwm_timer:
'PWM isrm, welche die Farbregelung durchführt
If Pwmctr < 64 Then 'max 64 durchläufe, dann neuer zyklus
Incr Pwmctr
Else
Pwmctr = 0
End If
If Bright < Pwmctr Then
Helligkeit = 0 'Helligkeit an
Else
Helligkeit = 1 'Helligkeit aus
End If
If Red < Pwmctr Then
Ausgabebyte.0 = 0 'Rote led an
Else
Ausgabebyte.0 = 1 'Roteled aus
End If
If Green < Pwmctr Then
Ausgabebyte.1 = 0 'Grüne led an
Else
Ausgabebyte.1 = 1 'Grüne led aus
End If
If Blue < Pwmctr Then
Ausgabebyte.2 = 0 'Blaue led an
Else
Ausgabebyte.2 = 1 'Blaue led aus
End If
'Schieberegisteransteuerung CD4094
'Sendet daten auf Soft SPi raus
If Ausgabebyte <> Ausgabebyte_alt Then 'ändert sich der Wert nicht mehr wird nicht mehr der ausgang gepulst,
'=> somit ergeben sich satte farben
Latch1 = 0 'STROBE setzen
Latch2 = 0
Latch3 = 0
Shiftout Dout , Clock , Ausgabebyte , 0 , 8 , 0 'daten rausschieben, 1µs warten
Latch1 = 1 'latch zurücksetzen
Latch2 = 1
Latch3 = 1
Latch1 = 0 'latch setzen
Latch2 = 0
Latch3 = 0
Ausgabebyte_alt = Ausgabebyte 'ausgangsbyte zwischenspeichern
End If
Return
Programmwahl:
If Red < Tred Then 'wert aktuell zu tablewert anpassen
Incr Red
Elseif Red > Tred Then
Decr Red
Else
Erreicht.0 = 1
'Print "rotwert erreicht!"
End If
If Green < Tgreen Then 'wert aktuell zu tablewert anpassen
Incr Green
Elseif Green > Tgreen Then
Decr Green
Else
Erreicht.1 = 1
'Print "grünwert erreicht!"
End If
If Blue < Tblue Then 'wert aktuell zu tablewert anpassen
Incr Blue
Elseif Blue > Tblue Then
Decr Blue
Else
Erreicht.2 = 1
'Print "blauwert erreicht!"
End If
Waitms Fadezeit 'zeit zwischen jedem fadeschritt
If Erreicht = 7 Then
Wait Haltezeit 'zeit welche farbe gehalten wird bis es losfaded zur nächsten
'Print "farbe erreicht, lade nächste zielwerte,"
Print "Farbe: " ; Colourcounter
Erreicht = 0
Colourcounter = Colourcounter + 1
If Colourcounter >= 16 Then 'colourcounter zurücksetzen
Colourcounter = 0
End If
Tred = Lookup(colourcounter , Redtable)
Tgreen = Lookup(colourcounter , Greentable)
Tblue = Lookup(colourcounter , Bluetable)
End If
$data
Redtable:
Data 064 , 025 , 064
Greentable:
Data 000 , 023 , 036
Bluetable:
Data 000 , 023 , 013