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 -.-
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.
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ß
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.
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
-.- ...
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!
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
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