Hi all, ich möchte mir das Lauflicht mit einen Atmega 8535 bauen: http://www.youtube.com/watch?v=c_OokiDGNqE Der Fader effeckt soll aber so ausehen: 1 Led leuchtet voll und die 3 leds danach laufen nach. Ich schaffe meinen 8535 so zu programieren das alle Leds angehen 2 sec warten und dann das lauflicht beginnt aber halt ohne Fader effeckt. Ich habe schon x Tutorials durchgelesen aber ich raff einfach nicht wie ich das hinbekommen soll. Ich habe gelesen mit einen Soft-PWM klappt das - Stimmt das? wenn ja wie schaffe ich damit die 3 leds "nachlaufen" Ach ja ich porg mit - Bascom Basic und PP auf dem Pollin Atmel Evalutionboard 2.0 Könnte mir da wer weiter helfen? Wäre über hilfe sehr dankbar. gruß Matze
Hi, mit der Software PWM hast du schon ganz recht. Wenn immer 3 LED's nachlaufen sollen, brauchst du 3 PWM's und du musst jede PWM im richtigen moment an die jeweilige LED routen. Das ist schwierig zu erklären. Hast du dir mal im Tutorial angeschaut, wie die Software PWM in Assembler umgesetzt wurde? Wenn du das verstanden hast, ist es leichter dir zu erklären wie, wie man das Fading hinbekommt. Mir fallen auf die schnelle zwei Möglichkeiten ein. Entweder die schiebst die OCR-Werte durch die PWM-Kanäle, oder die schiebst das Bitmuster, welches festlegt, welche LED leuchten soll. Ungefähr so: Wenn du z.B. an PORTB 0b00000001 ausgibst, wird die PWM_1 an Bit 0 erzeugt. Dann rutscht das Lauflicht eins weiter. dazu wird das Bitmuster geschoben (0b00000010). PWM_1, die eben ihr Signal an Bit 0 erzeugt hat, gibt nun ihr Signal nun an Bit 1 aus. So verfährst du mit allen PWM-Kanälen. Ich hoffe das hilft dir ein wenig. Gruß Paul
Schau dir mal meinen Code aus Beitrag "Re: Ansteuerung von 80 LEDs mit PWM" an. Dort nutze ich Soft-PWM mit 5 Kanälen. Um das Faden auf die letzten 3 LEDs auszuweiten müsste er etwas angepasst werden, aber das sollte nicht allzuschwer sein. Gruß Dominique Görsch PS: Fände es gut, wenn du deine Erweiterungen dann auch wieder hier veröffentlichen würdest.
Hey Paul P. Okay das verstehe ich soweit. Meinst du das Tutorial?: http://www.mikrocontroller.net/articles/Soft-PWM ich habe das mal spaßeshalber in Bacon Basic eingefügt. Der bringt mir da lauter fehler. Ich versteh nicht ganz wie ich das mit BB einfügen und so umändert muss damit ich mein lauflicht hab -.-
Matze wrote: > http://www.mikrocontroller.net/articles/Soft-PWM > > ich habe das mal spaßeshalber in Bacon Basic eingefügt. > Der bringt mir da lauter fehler. Mag daran liegen, dass das C ist ;)
Hallo, ich meinte dieses Tutorial: http://www.mikrocontroller.net/articles/AVR-Tutorial:_PWM Das Codebeispiel, welches sich ganz unten auf der Seite befindet. Du kannst natürlich nich C-Code oder Assembler-Code in BASCOM kopieren und hoffen dass was geht. ;-) Ich weiß ja nich, wie es bei dir mit Assemblerprogrammierung steht. Ich habe mit Assembler angefangen und muss sagen, dass man durch nichts einen so guten Einblick in die Funktionsweise eines µC bekommt. Wenn man mit Hochsprachen programmiert, ist es außerordentlich nützlich, wenn man weiß was da eigentlich im Inneren passiert. Es wäre auf jeden Fall gut, wenn du dir diesen Assemblercode mal anschaust. Dann hat man ne Basis auf der man sich unterhalten kann. Ich/wir werden dir dann auch weiterhelfen. Wenn du Prinzip das richtig durchschaut hast, wirst du wohlmöglich selbst darauf kommen, wie du dein Problem lösen kannst. Und das geht runter wie Öl, wenn mans alleine schafft. Gruß Paul
Hallo, ich habe sowas bei meinen Decodern für die Modellbahn implementiert (z.B. Baustellenlauflicht mit nachlaufender Schleppe, welche abdimmt). Geschrieben in C, zu finden auf www.opendcc.de/opendecoder/opendecoder.html Servus Wolfgang
Hätte noch ne Software-PWM, 12-Kanal, 8 bit die ähnlich der 2. Methode in dem vorhin genannten Artikel konstruiert ist. (In C, für PIC18F2550). Läuft bei 200 Hz, ca 10% Prozessorlast.
@wolfgang >Geschrieben in C, zu finden auf >www.opendcc.de/opendecoder/opendecoder.html wo denn da ??
hey, danke für die vielen antworten. Kann ich das nicht mit Bascon irrendwie machen? ich habe hir einen Code der die Leds in unterschiedlichen helligkeiten läuchten lässt. Genau sowas brauche ich ja ... jetzt muss sich das nur noch so bewegen: http://www.youtube.com/watch?v=c_OokiDGNqE gruß
Oh hab den Code vergessen :D
1 | Led_1 Alias Portc.0 |
2 | Config Led_1 = Output |
3 | Led_1 = 0 |
4 | |
5 | Led_2 Alias Portc.1 |
6 | Config Led_2 = Output |
7 | Led_2 = 0 |
8 | |
9 | Led_3 Alias Portc.2 |
10 | Config Led_3 = Output |
11 | Led_3 = 0 |
12 | |
13 | Dim Led_1_value As Byte |
14 | Dim Led_2_value As Byte |
15 | Dim Led_3_value As Byte |
16 | |
17 | |
18 | Config Timer0 = Timer , Prescale = 1 '=122 Durchläufe die Sekunde |
19 | Enable Timer0 |
20 | Enable Interrupts |
21 | |
22 | |
23 | Led_1_value = 5 'dunkel aber nicht aus |
24 | Led_2_value = 50 'mittel |
25 | Led_3_value = 255 'hell |
26 | |
27 | |
28 | Do |
29 | If Led_1_value <= Timer0 Then |
30 | Led_1 = 0 |
31 | Else |
32 | Led_1 = 1 |
33 | End If |
34 | If Led_2_value <= Timer0 Then |
35 | Led_2 = 0 |
36 | Else |
37 | Led_2 = 1 |
38 | End If |
39 | If Led_3_value <= Timer0 Then |
40 | Led_3 = 0 |
41 | Else |
42 | Led_3 = 1 |
43 | End If |
44 | |
45 | Loop |
46 | End |
Das ist ja übles Zeugs... Timer in der Hauptschleife abfragen und den MC damit beschäftigen, brrrrr. Auch das Enable Interrupts kannst Du Dir sparen, sind ja keine drin. Aber genau damit würde man es allerdings machen: mit einem Interrupt.
@ MWS könntest du mir vllt sagen wie ich das machen könnte? bin noch ziemlich neu in dem gebiet. gruß matze
Ich hab dir doch nen Link auf Bascom-Code für PWM gegeben.... irgendwie fühl ich mich ignoriert ;)
Lies Dich doch zuerst ein bisschen ein, gibt genügend Tutorials. Die Meisten helfen Dir gern wenn sie sehen daß Du Deine Hausaufgaben gemacht hast und motiviert bist etwas zu lernen. Prinzipiell geht's so: man lässt einen Zähler laufen, das machst Du ja bereits, der löst dann beim Überlaufen oder bei einem bestimmten Wert einen Interrupt aus, darin zählt ein Zähler hoch und vergleicht die Werte, setzt oder löscht die einzelnen Ports, ähnlich wie Dein Code in der Hauptschleife, nur halt im Hintergrund. Die Hauptschleife kann dann Anderes erledigen,, z.B. die Werte der einzelnen Kanäle setzen um den Fadereffekt zu erreichen. Hier ist noch'n Link zu einer ähnlichen Diskussion: Beitrag "Re: Moodlight Sourcecode hilfe" Bugbereinigten Code hab' ich nochmal angehängt. Lern aber nicht von mir, denn es ist schlechter Programmierstil und RAM-Verschwendung aus einem Speicher Array in ein Variablen-Array einzulesen, aber die Funktion zu zeigen war damit deutlicher möglich. Und frag' mich nicht, was ich da mache, ich mag das nicht im Einzelnen erklären. Der Code ist zwar leistungsfähig, jedoch schon etwas komplexer als eine Supersimpelversion, unsd wenn Du gerade beginnst, Dich dafür zu interessieren, ein bisserl schwer zu verstehen. Aber laufenlassen und in der Hauptschleife ein wenig rumspielen geht sicher. :-) Es gibt noch Einfacheres, dazu musst Du halt mal suchen, hier ist aber nicht unbedingt ein typisches Bascom Forum, hier wird Dir eher mit C geholfen.
Ingo Laabs wrote: > @wolfgang >>Geschrieben in C, zu finden auf >>www.opendcc.de/opendecoder/opendecoder.html > > wo denn da ?? Pustekuchen, nüscht mit Download: "Download Hexfile and Source Code (kommt bald, noch nicht ganz fertig)" Aber hier nochwas in C: Beitrag "16 Kanal PWM LED-Fader" Peter
Hi, ich habe dies hier mal aufgebaut: http://www.ejberg.dk/ledfade2/index.html Das Fading wird in ein Script geschrieben, das mit assembliert wird. (eigene "Sprache") In der PDF ist alles erklärt- in Englisch. Gruß Reinhold
Was hast du mit den Platinen angestellt, dass die unter Wasser dürfen?
-.- ... kann mir denn keiner wirklich helfen? Ich kann alle 8 Leds unterschiedlich leuchten lassen ... ich kann ein lauflich ... nur wir soll ich das denn verbinden? ich bin total verzweifelt! ich habe mir sicherheit über 90% alle beitrage im inet die man über googel finden kann angeschaut. nirrendswo wird beschrieben wie ich mit Bascom Fader + lauflicht verbinden kann. Ich bin heute extra losgezogen und hab mir vom Conrad nen "Lernset" für 50 Euro gekauft ...das hat mir auch nicht weiter geholfen :'-( gruß Matthias ich schaff das ohne hilfe einfach nicht!
@ Dominique Görsc ehm sry ignorieren tu ich dich nicht ... aber irrendwie finde ich keinen Bascom code -.-
Also, Du kannst die Led's leuchten lassen ? Gut. Dann überleg doch mal wie's wäre ohne faden, das ist ein Lauflicht, also 8 Led's, von 1 bis 8 zählen und dann wieder von 8 bis 1, immer mit ein bisserl Pause, Leistung der entsprechenden Led auf 100%. Nur fadet's jetzt nicht, es ist nur ein normales Lauflicht. Aber wenn man nun die Led 1 kleiner und 1 größer als die aktuelle Led auf halbe Leistung und die Led 2 kleiner und 2 größer auf 1/3 Leistung setzt, dann fadet es. Code muss berücksichtigen daß Led 7 & 8 natürlich nicht plus 1 oder 2 gerechnet werden kann, und auch nicht Led 1 & 2 minus 1 oder 2. Code musst Dir schon selber schreiben. Mach' mal und wir sehen weiter.
Matze wrote: > @ Dominique Görsc ehm sry ignorieren tu ich dich nicht ... aber > irrendwie finde ich keinen Bascom code -.- In meinem Beitrag oben schrieb ich: > Schau dir mal meinen Code aus > Beitrag "Re: Ansteuerung von 80 LEDs mit PWM" an. Dort nutze ich > Soft-PWM mit 5 Kanälen. Um das Faden auf die letzten 3 LEDs auszuweiten > müsste er etwas angepasst werden, aber das sollte nicht allzuschwer > sein. In dem verlinkten Beitrag findest du die Zeilen: > Foto hängt an. > Video unter http://crap.dgoersch.info/wolke.avi. > Source unter http://crap.dgoersch.info/wolke.bas. Der Code ist sicher verbesserungswürdig, aber zeigt funktionierend das Faden von 5 LEDs (bzw. in meinem Fall LED-Gruppen, aber das spielt keine Rolle). Gruß Dominique Görsch
waor sau geil Dominique Görsch es funz jetzt schon teilweiße. Habe jetzt deinen schaltplan auch voll begriffen und sehr viel daraus gelernt. Nur die LEDs "flackern" so ... also es ist sichtbat wie der µC die LED an und auschaltet also in deinem Video sind die übergänge weich ... bei mir nicht... und ich weiß nicht wie ich das wegbekomm. Ich habe einfach die befehle wo ich nicht bruache aus gekommert und habe "Enable Timer0" hinzugefügt hat aber nichts geholfen. hast du oder jemand anderes eine idee wie ich den Fade sauber hinbekomm? liegt das vllt an die einstellungen von meinen µC? regfile = "m8535.dat" $crystal = 16000000 $baud = 19200 $hwstack = 64 $swstack = 64 $framesize = 64 Config Portc = Output Config Timer0 = Timer , Prescale = 1 Enable Timer0 On Timer0 Timer0_isr 'Sternegruppen Gruppe1 Alias Portc.0 Gruppe2 Alias Portc.1 Gruppe3 Alias Portc.2 Gruppe4 Alias Portc.3 Gruppe5 Alias Portc.4 'Plastikfiguren 'Sonne Alias Portd.4 'Mond Alias Portd.5 Dim Zaehler As Byte , Pwmvar(5) As Byte , I As Byte Dim Group As Byte , Pwm_sonne As Byte , Pwm_mond As Byte 'Grenzwerte fuer die Schleifen Const Pwm_min = 0 Const Pwm_low = 10 Const Pwm_high = 50 Const Pwm_max = 150 Enable Timer0 Enable Interrupts 'Plastikfiguren auf festen Wert 'Pwm_sonne = 200 'Pwm_mond = 100 For I = Pwm_min To Pwm_low Pwmvar(1) = I Waitms 1 Next I Main: Do Group = 1 For I = Pwm_low To Pwm_high Pwmvar(group) = I Waitms 1 Next I For I = Pwm_high To Pwm_max Step 2 Pwmvar(group) = I Waitms 1 Next I For I = Pwm_max To Pwm_high Step -2 Pwmvar(group) = I Waitms 1 Next I For I = Pwm_high To Pwm_low Step -1 Pwmvar(group) = I Waitms 1 Next I For I = Pwm_low To Pwm_min Step -1 Pwmvar(group) = I Pwmvar(group + 1) = Pwm_low - I Waitms 1 Next I Group = 2 For I = Pwm_low To Pwm_high Pwmvar(group) = I Waitms 1 Next I For I = Pwm_high To Pwm_max Step 2 Pwmvar(group) = I Waitms 1 Next I For I = Pwm_max To Pwm_high Step -2 Pwmvar(group) = I Waitms 1 Next I For I = Pwm_high To Pwm_low Step -1 Pwmvar(group) = I Waitms 1 Next I For I = Pwm_low To Pwm_min Step -1 Pwmvar(group) = I Pwmvar(group + 1) = Pwm_low - I Waitms 1 Next I Group = 3 For I = Pwm_low To Pwm_high Pwmvar(group) = I Waitms 1 Next I For I = Pwm_high To Pwm_max Step 2 Pwmvar(group) = I Waitms 1 Next I For I = Pwm_max To Pwm_high Step -2 Pwmvar(group) = I Waitms 1 Next I For I = Pwm_high To Pwm_low Step -1 Pwmvar(group) = I Waitms 1 Next I For I = Pwm_low To Pwm_min Step -1 Pwmvar(group) = I Pwmvar(group + 1) = Pwm_low - I Waitms 1 Next I Group = 4 For I = Pwm_low To Pwm_high Pwmvar(group) = I Waitms 1 Next I For I = Pwm_high To Pwm_max Step 2 Pwmvar(group) = I Waitms 1 Next I For I = Pwm_max To Pwm_high Step -2 Pwmvar(group) = I Waitms 1 Next I For I = Pwm_high To Pwm_low Step -1 Pwmvar(group) = I Waitms 1 Next I For I = Pwm_low To Pwm_min Step -1 Pwmvar(group) = I Pwmvar(group + 1) = Pwm_low - I Waitms 1 Next I Group = 5 For I = Pwm_low To Pwm_high Pwmvar(group) = I Waitms 1 Next I For I = Pwm_high To Pwm_max Step 2 Pwmvar(group) = I Waitms 1 Next I For I = Pwm_max To Pwm_high Step -2 Pwmvar(group) = I Waitms 1 Next I For I = Pwm_high To Pwm_low Step -1 Pwmvar(group) = I Waitms 1 Next I For I = Pwm_low To Pwm_min Step -1 Pwmvar(group) = I Pwmvar(1) = Pwm_low - I Waitms 1 Next I Loop End Timer0_isr: Zaehler = Zaehler + 1 If Pwmvar(1) > Zaehler Then Gruppe1 = 1 Else Gruppe1 = 0 End If If Pwmvar(2) > Zaehler Then Gruppe2 = 1 Else Gruppe2 = 0 End If If Pwmvar(3) > Zaehler Then Gruppe3 = 1 Else Gruppe3 = 0 End If If Pwmvar(4) > Zaehler Then Gruppe4 = 1 Else Gruppe4 = 0 End If If Pwmvar(5) > Zaehler Then Gruppe5 = 1 Else Gruppe5 = 0 End If ' If Pwm_sonne > Zaehler Then ' Sonne = 1 ' Else ' Sonne = 0 ' End If ' ' If Pwm_mond > Zaehler Then ' Mond = 1 ' Else ' Mond = 0 ' End If Return
Das Flackern liegt vermutlich an der Geschwindigkeit. Der µC läuft bei mir mit 8 MHz, kontrollier mal deine FuseBits.
danke für den Tipp ... lag daran ... jetzt läuft es absolut sauber :D danke nochmal gruß matthias
Kein Problem. Wie schon geschrieben, muss für Nachlauf ein bissl umgeschrieben werden, aber ist mal ein Anfang und ich denke es ist recht leicht zu verstehen durch die simplen Schleifen.
> > Pustekuchen, nüscht mit Download: > > "Download Hexfile and Source Code (kommt bald, noch nicht ganz fertig)" > Hallo, für diejenigen, die den Button download nicht finden: http://www.opendcc.de/elektronik/opendecoder/SignalDecoder_V11.zip Wobei jedoch so ein 'deep' link beim nächsten Update wieder anders heißen kann. Darum hatte ich oben nur die Hauptseite angegeben. Servus Wolfgang
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.