Hallo,
schönes Projekt
Nur wo ist eigentlich die Frage ?
Da kommst Du um PWM nicht herum, wenn Du noch keinen µC im Sinn hast würde ich Dir irgendwas mit viel Hardware PWM empfehlen, ich glaube der Mega88 hat z.B. 6 PWM Kanäle
Gruß Sebastian
Hallo zusammen !
Ich möchte das Leuchtfeuer eines Leuchtturms simulieren. Ein simples Lauflicht reicht mir da nicht, ich denke eher an ein langsames Einschalten der LEDs bis zum Maximum, dann wieder langsam Ausschalten bis zum "Aus". 18 LEDs für rundum reichen mir, davon sollten drei oder fünf oder gar sieben jeweils in den verschiedenen Zuständen "an" sein, die mittlerste jeweils um die volle Helligkeit, die beiden daneben dann jeweils im halbhellen Bereich und die beiden daneben dann jeweils im schwachhellen Bereich.
OOOOOOOOO
1OOOOOOOO
21OOOOOOO
321OOOOOO
2321OOOOO
12321OOOO
O12321OOO
OO12321OO
OOO12321O
OOOO12321
OOOOO1232
OOOOOO123
OOOOOOO12
OOOOOOOO1
OOOOOOOO0
Je weicher die Übergänge werden, desto besser. Ein Leuchturm ist schliesslich kein Flashlight
Am liebsten würde ich das mit einem ATmega-Controller realisieren, einfache C-Kenntnisse und Hardwarekenntnisse sind vorhanden.
Danke für Eure Hilfe !
Gruß, Andreas
Hallo,
schönes Projekt
Nur wo ist eigentlich die Frage ?
Da kommst Du um PWM nicht herum, wenn Du noch keinen µC im Sinn hast würde ich Dir irgendwas mit viel Hardware PWM empfehlen, ich glaube der Mega88 hat z.B. 6 PWM Kanäle
Gruß Sebastian
Linus TorvaldSoftware is like s e x: its better when its free.
Danke. Stimmt. Okay, ich reiche die Frage mal nach : wie kann man sowas mit vernünftigem Aufwand realisieren ?Zitat von izaseba
Das dachte ich auch schon, aber braucht man da Hardware-PWM für, geht das nicht vielleicht auch mit Soft-PWM ? Denn bei 18 LEDs bräuchte ich ja entsprechend viele Hardware-PWMs ... und das bietet mir kein Controller !Zitat von izaseba
Die erste Idee war, 18 Soft-PWM-Kanäle zu realisieren ... aber irgendwie fehlt mir eine vernünftiger Einstieg ... eine zündende Idee für den Start, wenn Du verstehst, was ich meine ?!
Gruß, Andreas
Ja ich weiß, was Du meinst
Ganz wichtig ist es eine Frequenz zu treffen, wo es nicht flackert 50 Hz z.B. ?
die dann mit der Auflösung multiplizieren z.B. 256
es kommt irgendwas mit 12 KHz, so mußt Du Deinen Timer laufen lassen.
Für jede LED mußt Du eine PWM Variable nehmen, die dann die Helligkeit darstellt 0-Aus 255 ganz hell.
So, wenn Der Timer überläuft inkrementierst Du eine Hilfsvariable und vergleichst sie mit allen LEDs Vabiablen nacheinander , wenn sie Gleich ist setzt Du den entsprechenden Pin auf LOW.
Ich hoffe, daß es verständlich ist, es erzeugt aber ziemlich viel Last, man muß gucken, Daß die Interrupt Routine nicht länger braucht als der Timer.
Gruß Sebastian
Linus TorvaldSoftware is like s e x: its better when its free.
GutZitat von izaseba
Die Freuqenz sollte so hoch wie nötig und so niedrig wie möglich sein ...Zitat von izaseba
Klar, so sehe ich das auch ...Zitat von izaseba
Und wenn die Hilfsvariable "0" ist, dann werden im Prinzip alle LEDs eingeschaltet ...Zitat von izaseba
Deswegen muss die Frequenz ja so niedrig wie möglich sein.Zitat von izaseba
Wo ich bisher noch keine Idee zu habe, ist, wie ich das Ganze nun auch noch ans Laufen bekomme ... also die Drehbewegung des Leuchtfeuers
Gruß, Andreas
Ja, 50 Hz hab ich eben so gesagt, da muß man halt etwas probieren, damit das Auge kein flackern mehr wahrnimmt.Deswegen muss die Frequenz ja so niedrig wie möglich sein.
Hmm,Wo ich bisher noch keine Idee zu habe, ist, wie ich das Ganze nun auch noch ans Laufen bekomme ... also die Drehbewegung des Leuchtfeuers
ein Array mit Abbbild einer Drehung z.B.
naja, die Werte müssen natürlich noch ermittelt werden.Code:uint8_t abbild[] = {32,64,128,255,128,64,32,0,0,0,0,0,0,0,0,0,0,0};
das ganze mit einer Schleife in die PWM Werte laden und bei jedem Durchgang eine Stelle weiter rechts anfangen ?
Gruß Sebastian
Linus TorvaldSoftware is like s e x: its better when its free.
Wenn ich das jetzt richtig verstehe, dann willst Du diese 7 LEDs jeweils bis zu einem konstanten PWM-Wert laufen lassen, richtig ? Meinst Du, dass das einen fließenden Übergang genügend simulieren kann ?Zitat von izaseba
Ich dachte an eine fließende Anpassung der PWM-Werte. Aber der Aufwand beim Programmieren ist so erheblich, dass ich denke, dass selbst ein ATmega-16 mit 16 MHz das nicht schaffen kann ... oder ?
Gruß, Andreas
Ja ich verstehe, einfach sanft ausblenden bzw. einblenden.Ich dachte an eine fließende Anpassung der PWM-Werte
Ich persönlich würde es erstmal mit solch einem Array probieren
verfeinern kann man es immer noch.
Hast Du die Hardware schon fertig, oder bist Du erstmal nur am planen ?
Gruß Sebastian
P.S. wie ich gerade sehe sind wir fast Nachbarn
Linus TorvaldSoftware is like s e x: its better when its free.
Ja, genau ... das war jedenfalls mein erster Gedanke !Zitat von izaseba
Die Hardware bleibt ja zumindest dieselbe, aber bei 18 LEDs auf 360 Grad ist es unrealistisch, wenn davon 7 LEDs gleichzeitig mehr oder weniger "an" sind, oder ? Ich denke, das sollten 4 oder max. 5 LEDs sein, aber vielleicht muss man das auch erstmal sehen ...Zitat von izaseba
Nein, ich bin bisher nur am planen, weder Hardware noch Software "stehen" zurzeit !Zitat von izaseba
Jepp, habe ich vorhin auch schon gesehen ... ... Vielleicht trifft man sich ja mal ...Zitat von izaseba
Gruß, Andreas
Ja, Du hast recht, ich hab es einfach so niedergeschrieben, ohne viel nachzudenken...Ich denke, das sollten 4 oder max. 5 LEDs sein
Schön ausblenden wäre natürlich viel schöner, dafür müßte aber die PWM Frequenz höher sein, womit wir wieder mit HW PWM besser dran wären.
Spätestens wenn Deine Laterne fertig istVielleicht trifft man sich ja mal
Gruß Sebastian
Linus TorvaldSoftware is like s e x: its better when its free.
Lesezeichen