Selber programmieren macht doch viel mehr spaß
Die Intensität der LED's kannst du ja mit einem PWM steuern, das
dürfte eigentlich kein problem sein
hi,
ich würde dafür Software-PWM nehmen.
Ich will mir sowas wie Moodlight bauen,
aber als Wand, mit 2X4 oder 2X8 Elementen. Ich habe meine PWM
für 8 LEDs hinbekommen. jetzt müsste man das nur noch multiplexen.
Ideal wäre dann noch Mehrfarbigkeit. Momentan bekomme ich auch nur 8
Farbstufen hin (reicht fürs erste).
Gesteuert wird per Java über RS232 vom PC aus.
ahoi!
SOFTWARE-PWM. Das ist auch für mich heute das Zauberwort. Für meine Enterprise-Beleuchtung hab ich nen Kasten gebaut in den eine Elektronik für ne Fernbedienung ist, und ich kann das Teil halt per Fernbedienung ein/ausschalten und verschiedene Sleeptimer einstellen. Nun würd ich die LEDS nicht gerne platt ausgehen lassen sondern Faden. Da ich das ganze nicht in die Analogelektronik ziehen will und auf dem Atmega noch Platz ist wollt ich nen Software-PWM machen. Proggen tu ich in Bascom. Mein Ansatz war: mit Waitus nen Loop basteln. Waitus nimmt aber nur Konstanten als Argument. Kennt jemand ne fertige Lösung die etwas schöner ist als 20 Scheifen?
-> MEIN PROJEKTBLOG <-
Ich habe mich vor kurzem auch mal mit dem Thema PWM beschäftigt.
Bin zuerst auch daran gescheitert dass waitus nur Konstanten verwendet und habe es dann mit waitms probiert.
Hier mein Ergebnis (für einen Tiny13V):
Code:'============================================================ ' ' ************************************ ' *** *** ' *** Dimmendes Blinklicht *** ' *** *** ' ************************************ ' ' µC: ATtiny13 ' +Ub: 3,00 V ' ' '============================================================ $regfile = "ATtiny13.DAT" $crystal = 128000 'Frequenz des internen 128kHz-Oszillators Config Portb = &B00011000 'Pinb.3 und 4 auf 'Ausgang', Rest auf 'Eingang' schalten Portb = &B11100111 'Pullups zuschalten, außer für Pinb.3 und .4 Stop Adc 'A/D-Wandler abschalten, um Strom zu sparen Stop Ac 'Analog-Komparator abschalten, um Strom zu sparen Dim A As Byte Dim B As Byte Dim Stufen As Byte Stufen = 20 Do For A = 0 To Stufen B = Stufen - A Gosub Pwm Next For A = Stufen To 0 Step -1 B = Stufen - A Gosub Pwm Next Waitms 1000 Loop Pwm: Portb.3 = 1 Waitms A Portb.3 = 0 Waitms B Return End
aber sauber aussehen tut das am ende mit so ner langen wartezeit ned, oder?
-> MEIN PROJEKTBLOG <-
Geht gerade noch. Länger darf es aber nicht sein.Zitat von Goblin
Was spricht dagegen, einen Timer herzunehmen und z.B. bei 10kHz IRQs erzeugen zu lassen. Dann gibst du ein einem Port z.B. nacheinander ausZitat von Goblin
1.1.1.0.0.0.0.0.0.0; das ist eine Soft-PWM mit einem Duty von 30% (3 an von 10) und einer Frequenz von 1kHz (IRQ-Frequenz / (Stufen-1)).
Einstellbate Helligkeiten gibt es 11 (von 0 (0%) bis 10 (100%)).
Disclaimer: none. Sue me.
Ich habe das ähnlich wie SprinterSB gemacht. Mit einem IRQ gebe ich periodisch verschiedene Bytes an einen Port aus.
zB.:
00000001
00000011
00000111
00001111
00011111
00111111
01111111
Das sind 7 Bytes. Für jedes Bit (Pin mit Lummi) gibt es 8 verschiedene Helligkeiten. 0 mal an ... 7 mal an.
Das Beispiel oben erzeugt einen Helligkeitsverlauf/-gradient (wie ein Farbkeil) von ganz hell bis ganz dunkel (oder eben andersrum).
Etwas aufwändiger ist da schon das setzten der jeweiligen Bitmuster, um für jede LED die gewünschte Helligkeit zu bekommen.
Wie macht ihr das? Haltet ihr das für sinnvoll? CPU-auslastung ist jedenfalls sehr gering.
Gruß
Lesezeichen