Hallo Leute,
ich habe heute mal etwas mit PWM und SMD Led Streifen experimetiert.
Habe auch schon ein kleines Programm für meine Zwecke geschrieben (Auto
Innenbeluchtung (LED) langsam andimmen).
Meine Türkontakte schlaten gegen Masse. Also hab ich die Schaltung so
angedacht, das sie mit den internen Pullups läuft.
1
$regfile = "m8def.dat"
2
$framesize = 32
3
$swstack = 32
4
$hwstack = 32
5
$crystal = 16000000
6
7
Dim A As Integer
8
9
Config Pinb.0 = Input
10
Portb.0 = 1
11
Config Pinb.1 = Output
12
13
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Prescale = 1
14
15
16
Do
17
Waitms 100
18
If Pinb.0 = 0 Then 'Taster 1 wird geschlossen
19
Waitms 10
20
If Pinb.0 = 0 Then
21
If A < 255 Then
22
A = A + 4 'LED um 4 Stufe heller dimmen
23
End If
24
End If
25
End If
26
27
If Pinb.0 = 1 Then 'Taster 1 wird geöffnet
28
Waitms 10
29
If Pinb.0 = 1 Then
30
If A > 0 Then
31
A = A - 4 'LED um 4 Stufe dunkler dimmen
32
End If
33
End If
34
35
End If
36
37
Compare1a = A
38
39
Loop
40
41
End
Mein Problem ist jetzt folgendes. Wenn ich den Taster drücke (Tür wird
geöffnet), dimmt das Licht langsam an. Soweit so gut. Wenn ich den
Taster in der An-dimmphase loslasse (also Tür geschlossen) dimmt es
wieder langsam aus. So soll es ja auch sein. Wenn ich den Taster aber
jetzt zu lange gedrückt halte, bis die 255 erreicht sind, geht das Licht
schlagartig aus. Lass ich den Taster nach dem schlagartigen ausgehen
los, gehen die LEDs sofort auf die volle Helligkeit und dimmen dann
langsam aus. Ich muss also den Zustand der 255 irgendwie halten, bis der
Taster wieder losgelassen wird. Aber wie stelle ich das an, ich dachte
es gehr mit dem Until Befehl, aber dabei kommen immer nur
Fehlermeldungen. Auch der Befehl While brachte nicht das gefünschte
Ergebnis.
Was habe ich falsch gemacht bzw vergessen?
Danke für eure Hilfe
Auch wenn A ein 16 Bit Integer ist, Für Compare1a ist nur 1 Byte
relevant, da du ja eine 8 Bit PWM hast.
Welche Werte nimmt denn A an.
A beginnt bei 0
0, 4, 8, 12, 16, ... 200, 204, 208, ..... 240, 244, 248, 252, 256
Opps. 256 ist aber größer als 255. 252 war es noch nicht. Aber 252 + 4
liegt über dem erlaubten Bereich.
Hallo
Danke erstmal für deine Antwort,
der Gedanke mit den 256 statt 255 kam mir auch schon. also du meinst
wenn ich statt der 4 den Dimmfaktor 1 nehme geht es ohne dieses
schlagartige abschalten bei 255?
Immi schrieb:
> Hallo> Danke erstmal für deine Antwort,> der Gedanke mit den 256 statt 255 kam mir auch schon. also du meinst> wenn ich statt der 4 den Dimmfaktor 1 nehme geht es ohne dieses> schlagartige abschalten bei 255?
Entweder das. Oder aber du gestaltest die Abfrage so, dass auch bei
einer Erhöhung um 4 nichts passieren kann.
Wann kann man nicht mehr erhöhen?
Na offenbar dann, wenn der aktuelle Wert größer dem Maximalwert weniger
der Stufenbreite ist.
Du kannst es aber auch so machen
A = A + 4
if A > 255 Then
A = 255
d.h. du versuchst zunächst zu erhöhen. Stellst du hinten nach fest, dass
du über dem Maximum bist, dann limitierst du aufs Maximum.
Aber Achtung! Damit bist du aus der 4-er Sequenz draussen. d.h. beim
Runterzählen kommst du damit nicht mehr automatisch bei 0 raus.
Dort muss man dann etwas ähnliches machen. Nur mit 0.
Aber ganz ehrlich: Da man den Unterschied einer LED mit PWM STufe 252
nicht von einer mit PWM STufe 255 unterscheiden kann, würde ich es
einfach so machen.
if A > 256 - 4
A = A + 4 'LED um
4
A wird nur dann erhöht, wenn das Ergebnis nicht über 255 kommen würde.
Hallo
Ich habe jetzt das Programm nach den Vorschlägen angepasst, es
funktioniert auch wunderbar. Danke schonmal dafür.
Hier ist der fertige Code, nur für die die es interessiert.
1
$regfile = "m8def.dat" 'Mega8
2
$framesize = 32 '
3
$swstack = 32 '
4
$hwstack = 32 '
5
$crystal = 16000000 '16Mhz
6
7
Dim A As Integer 'Integer = 16 Bit = 2^16 = 65536 Zustände
8
Config Pinb.0 = Input 'Türkontaktschalter an PINB.0
9
Portb.0 = 1 'Internen Pullup aktivieren
10
Config Pinb.1 = Output 'PWM Ausgang definieren
11
12
Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Up , Prescale = 1
13
' PWM = (8 oder9) oder 10 --> 10 Bit = 2^10 = 1024 Schritte
14
15
Do
16
Waitms 20
17
18
If Pinb.0 = 0 Then 'Türkontaktschalter, gegen Masse schaltend, wird geschlossen
19
Waitms 10
20
If Pinb.0 = 0 Then
21
If A < 1023 Then
22
A = A + 5 'LED um 5 Stufen heller dimmen
23
End If
24
End If
25
End If
26
27
If A > 1023 Then
28
A = 1023
29
End If
30
31
32
33
If Pinb.0 = 1 Then 'Türkontaktschalter, gegen Masse schaltend, wird geöffnet
34
Waitms 10
35
If Pinb.0 = 1 Then
36
If A > 0 Then
37
A = A - 1 'LED um 1 Stufe dunkler dimmen, dauert ca 25 sek bis LED aus, dient auch als Ausschaltverzögerung
38
End If
39
End If
40
End If
41
42
If A < 0 Then
43
A = 0
44
End If
45
46
47
Compare1a = A 'PWM an Pin15 (Portb.1), A= Tastverhältnis (Verhältnis zwischen ein und ausschalten)
48
49
Loop
50
51
End
Ich habe jetzt aber eher ein elektrisches Problem.
Ich betreibe die LED Leisten über einen BUZ11 Transistor.
Datenblatt:
http://www.datasheetcatalog.org/datasheet/fairchild/BUZ11.pdf
Ich habe den Anschluss Gate an Dauermasse angeschlossen, den Ausgang
Drain habe ich über einen 1k Widerstand an den µC gehängt und der
Anschluss Source hängt am Minus des LED Streifen (Plus an Dauerplus).
Wenn ich jetzt noch eine LED Leiste parallel schalte, dann wird die
erste Leiste ein Stückchen dunkler. Noch extremer ist es, wenn ich eine
einfache LED parallel zu einem LED Streifen hänge, diese glimmt bei dem
Wert von 1023 nur. Mir ist klar, das sich bei einer Parallelschaltung
der Strom aufteilt. Ist das jetzt nur so, weil die ganze Schaltung an
einem PC Netzteil hängt (kommt später im Auto zum Einsatz)?
Was kann ich dagegen tun? Ich hatte die Idee, das ich die LEDs über eine
KSQ laufen lasse, aber das funktioniert nicht. Ich habe es mit einer
20mA KSQ ausprobiert, aber die LED die ich dran hatte, bleibt auf der
vollen Helligkeit.
@Paul: Nein ich bin nicht aus Westthüringen, bin aus Sachsen.
Danke schonmal für eure Hilfe.
Der Anschluß des BUZ11 kommt mir seltsam vor...;-)
Wie sehen die LED-Leisten aus? (wieviele LED, wie beschaltet, mehrere
Gruppen LED mit Vorwiderständen parallel, alle in Reihe...?)
Ich frage deshalb: Nur wenn man weiß, wie der (industriell
hergestellte?)
LED-Streifen aussieht, kann man eine anständige Antwort geben.
OT: Mein Ex-Kollege hieß so wie Du, deshalb fragte ich, woher Du kommst.
MfG Paul
Immi schrieb:
> Ich habe den Anschluss Gate an Dauermasse angeschlossen, den Ausgang> Drain habe ich über einen 1k Widerstand an den µC gehängt und der> Anschluss Source hängt am Minus des LED Streifen (Plus an Dauerplus).
Paul Baumann schrieb:
> Der Anschluß des BUZ11 kommt mir seltsam vor...;-)
In der Tat: Source gehört an Masse und Gate an den Controller. Der
Gate-Widerstand darf auch kleiner sein, gerade bei höheren Frequenzen
(um die 100-220 Ohm). Würde ich mal austesten ...
Der AVR macht aber auch den BUZ11 nicht richtig auf, der BUZ11 braucht
da etwas mehr Ugs. Nimm lieber einen Logiclevel-FET, der mit TTL-Pegel
voll öffnet.
...
Danke für eure schnellen Antworten. Ich habe das mit den Anschlüssen
damals bloß ausprobiert und mit der Konfiguration hat es eben geklappt.
Ich werde das mal tauschen und testen. Das es auch diese LL-FETs gibt,
habe ich leider erst nach der letzten Bestellung gemerkt. Ich habe mir
heute bei Conrad mal einen IRLZ34N besorgt, die sind wohl die billigsten
auf dem Gebiet. Allerdings machen sie mir einige Probleme. Das Dimmen
funktioniert, auch die Heilligkeit beim parallelschalten von mehreren
Streifen bleibt gleich. Allerdings scheint es ein Problem zu geben. Wenn
ich das Programm auf 1023 hochlaufen lassen, dimmt es nicht mehr auf
null runter. Die Leisten werden etwas dunkler, bleiben aber an. Wie
schließe ich den IRLZ34N an? Doch eigentlich genauso wie den BUZ11,
oder. Im Datenblatt ist leider nicht ersichtlich welche Anschlüsse
Drain, Gate und Source sind.
Woran könnte das eigenartige Verhalten liegen?
Die Leisten sind von ebay aus China. Es sind pro Leiste 60 SMS LEDs, die
in Dreiergruppen in Reihe geschaltet sind und die Dreiergruppen hängen
dann parallel. Jede Dreiergruppe hat einen Vorwiderstand. Die Farbe ist
weiß, falls das für euch irgendwie wichtig ist im Bezeug auf die
Stromaufnahme der einzelnen SMD-LED.
Hallo,
ich habe im Datenblatt von IR auf dem vorletzten Blatt die
Anschlussbelegung vom IRLZ34 gefunden (bei der Gehäuse-Zeichnung). Sie
ist identisch mit der vom BUZ11.
Hat der IRLZ einen Gate-Widerstand?
Hast du die Möglichkeit, mit einem Scope die PWM vor und nach dem FET
anzusehen? (Nur um Hardware-Probleme deines Phänomens auszuschliessen)?
> Es sind pro Leiste 60 SMS LEDs
^^
Coole LEDs; jetzt können die schon SMS ... ;-D