Hab grade für eine Rundumleuchte für den Modellbau ("Blaulicht", aber
bei mir isses rot) ein AVR-basiertes Lauflicht mit 5 LEDs gebastelt.
Damit die Rotation nicht so ruckelig aussieht, wird ein weicher
Übergang per Software-PWM gemacht. Das Ganze braucht nur 50 Bytes
Speichr. Wieso gibt's eigentlich noch keine AVRs mit 64 Bytes Flash?
;-)
Es müßte im Prinzip auf jedem AVR-Mikrocontroller tun, da außer den 5
Digital-Ausgängen nichts (keine Timer, keine PWM, kein Stack, keine
Interrupts) verwendet wird. Primär ist es natürlich für die kleinen
8-Pin-Typen gedacht.
Das ist zwar nix besonderes, aber könnte für Einsteiger vielleicht als
Beispiel interessant sein.
Über den DELAY-Wert kann die Rotationsgeschwindigkeit angepasst werden.
Hier noch der dazugehörige Schaltplan. Abblockkondensator und
Reset-Pullup-Widerstand hab ich mal mit eingezeichnet. Es geht aber
wohl zur Not auch ohne.
Da zu jedem Zeitpunkt genau eine LED an ist, braucht man nur einen
einzelnen gemeinsamen Vorwiderstand für alle. Da der Mikrocontroller
bei low-Pegel mehr Strom schafft, sind die LEDs nach +5V verschaltet.
Die Software berücksichtigt das und verwendet für eine eingeschaltete
LED low-Pegel, für aus high-Pegel.
Es folgt noch ein kleines Video, das die Sache in "action" zeigt,
falls ich den PC überreden kann, die Videos von der Kamera anzunehmen.
Also, hier noch das Video.
Man sieht ein kleines selbstgebasteltes Rundumlicht mit 5 LEDs in
Bauform 0603 und einem kleinen 1mm-Metallröhrchen in der Mitte (hatte
ich grad rumliegen), an das die Anoden aller LEDs direkt angelötet
sind. Unterhalb dieser Stelle ist dann etwas Schrumpfschlauch drauf,
damit die Katoden nicht an das Röhrchen kommen. An die Katoden ist
jeweils 0,2mm-Kupferlackdraht gelötet, der dann zur Zugentlastung
nochmal mit Schrumpfschlauch am Röhrchen fesgehalten wird. Das Gebilde
hat inklusive LEDs einen Durchmesser von ca. 4mm. Für ein
H0-Polizeiauto wäre es wohl noch zu groß ;-)
@Jens
Der Bauteile-Aufwand mit 4 Bauteilen ist, denke ich, nicht zu
unterbieten. Ausserdem kostet der Tiny12 nur 1.20 Euro. Auch das kann
man mit diskretem Aufbau nur schwer toppen. Wenn man den SMD Tiny
nimmt, braucht man weniger als 1 cm². - Und ausserdem ist das ein
Mikrocontroller Forum ;-)
Etwas skrupel davor, gleich einen ganzen Mikrocontroller für sowas
einfaches zu nehemn, hatte ich ja schon irgendwie. Aber:
Der Tiny11 kostet bei Reichelt nur 82 cent. Wo anders hab ich
ihn sogar für 65 cent oder so gesehen. Einen HV-Programmer wollte ich
mir eh basteln, um bei den Achtbeinern auch mal den Reset-Pin als I/O
nutzen zu können, und damit kann ich dann auch den Tiny11
programmieren. Das Ganze ist als Ersatz für ein 5-Kanal-
Lauflichtmodul vom blauen Klaus gedacht, das vorher für das Rundumlicht
eingesetzt wurde. Es ist deutlich größer, mit €4,29 auch teurer
und macht keinen sanften Übergang. Wie Herr Müler schon schreibt,
gibt's kaum eine kleinere, billigere und einfachere Lösung als einen
Mikrocontroller, selbst wenn ich den "teuren" Tiny12 nehme.
@ Jens: Wo kaufst du eigentlich deine Mikrocontroller? Ich hab bisher
noch keinen 8-Pin-AVR gesehen, der 3 Euro oder gar mehr kostet.
@Rolf
Habs jetzt endlich geschafft, dein AVI anzusehen, mußte mir dazu erst
MPLayer ziehen weil der Mediaplayer von XP den Codec nicht hatte und
auch nicht ziehen konnte :(
Ich find dein Lauflicht cool!
> ...weil der Mediaplayer von XP den Codec nicht hatte und auch> nicht ziehen konnte
Hmm, hatte eigentlich gedacht, das würde mit dem auch funktionieren.
Ist doch gewöhnliches divx (zumindest sollt es das sein).
"Terrageil" das 1s Video,echt toll bunt.
Respekt!
Tipp: nur zu C1 noch etwa 1nF (560pF - 2.2nF)(paral.), und die
Schaltung geht durch. (EMV -Prüfung).
(100nF haben bei 40Mhz ein neg. Loch)im blocken bei HF.
Spendiere gerne 5 EL Folien mit DIN A3 Format, nebst
High Speed HV Optokoppler.
(OK anstatt LED).
Wunsch:avr asm doku in deutsch, habe vor einer 1 Kw beschlossen ,
als Oldi, Analogknispel mit 48j noch avr asm (ohne
engl.)(Vorkenntnisse) reinzuziehen.
Quote: "Ist doch gewöhnliches divx (zumindest sollt es das sein)."
Microsoft in seinem grenzenlosen Egoismus weigert sich schlicht,
Fremdcodecs mit in den Codec-Verteiler aufzunehmen.
Wem DivX fehlt, schaue hier:
http://www.divx.com/
Zum Gucken den Free Download nehmen.
Hi Leute, tolles Lauflicht echt.
Nur eine Sache:
Mir ist die Funtion des Codes nicht so wirklich verständlich, wie
machste den so nen schönen PWM übergang, ich Progge zwar auch asm aber
ich steige nciht durch den Code, wie läuft das denn genau ab?
Denke schonmal greezle lightninglord
PB5 ist im Normalfalle der Reseteingang bei diesem Controller.
Da der interne PullUp-Widerstand recht hochohmig ist ( >= 100kOhm ),
schlagen Störungen natürlich voll durch und sorgen für unerwünschte
Resets.
Ein zusätzlicher PullUp von 10kOhm reduziert das Problem deutlich.
Gruss
Jadeclaw.
Hallo Rolf,
ich habe Dein Lauflicht nachgebaut.Super!
Welchen Wert müsste ich für den Delay eingeben, um die
Rotationsgeschwindikeit halb so schnell zu erhalten?
Ich habe schon einige Versuche unternommen, bin jedoch zu keinem
Ergebnis gekommen.
Hallo ich versucht gerade eine Aufgabe mit dem Mikrocontroller von MyAvr
zu lösen. Da ist mir teilweise gelungen.Ich sollte ein lauflicht mit
taste 1 von oben nach unten über die lEDs aktivieren und mit Taste 2 in
umgekehrte Richtung. Ich habe zwar die Code für die zwei Taste getrennt
programmiert aber ich kann es leider nicht auf eine laufen Lassen. Kann
jemand mir ein tipps geben?
Hallo,
ich bin grade dabei, ein 4 Kanal PWM lauflicht in C zu erstellen.
Leider klappt die Logik nicht so ganz.
ich habe 4 Soft PWM Kanäle mit je 100 Schritten.
In einem Timer lasse ich einen PWM Wert hoch und runter zählen.
So weit so gut, faden geht also, aber wie bekomme ich es nun hin,
das die erste LED 50% leuchtet, wenn die 2. LED 100% hat, und die 3.
wieder 50%.
Das ganze muss dann natürlich auch noch "rotieren".
Danke für die Hilfe.
Gruß Toby
Hallo nochmal.
Anliegend mein bisheriges Programm.
ich habe eine Software PWM auf PORTB 0-3 mit 100 Schritten.
Nun fehlt mir nur noch die Möglichkeit, ein Rotationslicht daraus zu
bauen.
Wer kann mir dabei weiter helfen?
Gruß Toby
Hallo Rolf
vielen dank für das assg lauflicht mit pwm. wenn ich dies gleiche lösung
mit logikbauteilen machen würde, wäre der aufwand sehr gross! Ich
arbeite erst seit ca. 2 wochen mit einem tiny13. ich bin künstler und
bauen interaltive lichtobjekte. mehr hier www.atelier34.ch
diese sind alle mit logikbausteinen (cmos 4000-familie) und opamp
aufgebaut. jetzt versuche ich, avr für die lösungen zu verwenden. deine
lösung für eine lauflicht auf pwm-basis finde ich sehr gut. habe mich
zwar mit assem auseinandergesetzt, verstehe aber den lösungsansatz nicht
ganz. die werte 29 und 30 (store und store2) bezw. 1 und 5 verstehe ich
nicht. kannst du mir mehr details geben? vielen dank für deine hilfe!
Franz
> die werte 29 und 30 (store und store2) bezw. 1 und 5 verstehe ich> nicht. kannst du mir mehr details geben?
30 ist einfach ein Wert, bei dem bit 1 bis 4 gesetzt und bit 0 gelöscht
sind (11110). Der Wert 29 ist einfach das gleiche mit bit 1 (11101).
Da die LEDs nach +5V geschaltet werden, steht also in STORE der Wert,
den man ans PORTB-Register schicken muß, damit die erste LED an ist und
in STORE2 der Wert für die zweite LED. Meine PWM schaltet dann einfach
zwischen diesen beiden Werten um und verändert dabei das Tastverhältnis,
so daß die erste LED immer dunkler wird und die zweite gleichzeitig
immer heller.
Ich nehme an, mit 1 und 5 meinst du die Werte:
1
ori STORE2, 1 ; the lsl makes the lsb 0, we need a 1
2
sbrs STORE2, 5 ; do we need to wrap around?
Ich mache hier einen Bitshift, um das Rotieren zu erzeugen. Das heißt,
beim nächsten Schritt wird aus meinem 11110 ein 11100 und aus dem 11101
ein 11010. Wie man sieht, wird dadurch aber das letzte Bit 0, und wir
bräuchten eine 1, damit immer nur ein Bit 0 ist und damit nur eine LED
leuchtet. Also setze ich hier das unterste Bit wieder auf 1, also kommen
dann die Werte 11101 und 11011 raus.
Die 5 ist die Bitnummer. Hier prüfe ich, ob die 0 schon einmal komplett
durch die 5 Bits durchgelaufen ist und ich daher wieder von vorne
anfangen muß.
Hi Rolf
vielen Dank für deine rasche Antwort. Es hilft mir weiter, trotzdem muss
ich mich noch mehr in avrasm hineinarbeiten. Ich verstehe zwar Enlisch
recht gut, aber die Zusammenhänge der Fachausdrücke muss ich noch
verstehen.
Meine nächste Aufgabe ist dann ein ADC-avrasm Prog mit dem Lauflicht zu
verbinden. Vielleicht ist der ATtiny13 mit 5 I/O Ports überfordert mit
einem zusätzlichen Port für den analog Eingang.
Ich habe mir da eine echte Herausforderung gestellt. Ich bin zwar dipl.
El.Ing, aber mit JG 1943...
Falls du mir weitere Links geben kannst, um mich noch besser in die
AVR-Thematik einarbeiten zu können und/oder eine Quelle von Anwendungen
geben könntest, wäre das sehr hilfreich.
Schöne Grüsse aus Basel
Franz
Franz Hägeli schrieb:
> vielen Dank für deine rasche Antwort. Es hilft mir weiter, trotzdem muss> ich mich noch mehr in avrasm hineinarbeiten.
Eventuell willst du mal C ausprobieren, ist zwar ganz anders als
Assembler aufgebaut, aber m.E. nach leichter zu verstehen, da es eben
eine Hochsprache ist. ASM vs C
Hier mehr Informationen zu C: AVR-GCC-Tutorial> Ich bin zwar dipl. El.Ing, aber mit JG 1943...
Respekt! Ich hoffe, dass ich mal in deinem Alter auch noch so am Puls
der Zeit sein kann.
> Falls du mir weitere Links geben kannst, um mich noch besser in die> AVR-Thematik einarbeiten zu können und/oder eine Quelle von Anwendungen> geben könntest, wäre das sehr hilfreich.AVR-Tutorial
und
AVR Softwarepool (fertige Programme)
Hübsches Projekt!
Dar Film hat mir gefallen.
Wenn du das Teil jetzt noch in ein halbkugelförmiges Gießharzblöckchen
tauchst, dann hast du ein perfektes Rundumlicht. ;)
Inzwischen hat mein Vater das auch noch mit den leistungsfähigeren LEDs
und vorgeschalteten Treibertransistoren in seinen Modellhubschrauber
eingebaut. Muß ich mal bei Gelegenheit auch aufnehmen.
Hier ein Schaltplan für 9 LEDs. Die LED-Matrix ist derart angeschlossen,
dass diese beim ISP-Programmiervorgang in-system nicht stört. Wenn die
Firmware auf Anhieb stimmt, braucht man kein Hochvolt-Programmiergerät.
Bei Firmware-Änderung per Hochvolt-Programmierverfahren muss man R1 und
R2 temporär auslöten.
Bei Verzicht auf die obere LED-Reihe kommt man auf 6 LEDs (immer noch
mehr als 5) und kann bei SPI-Programmierung bleiben.
Die Firmware-Änderung ist marginal: Am sinnvollsten ist eine Tabelle für
die 9 auszugebenden Bitmuster. So bleibt auch das tatsächliche Routing
sowie der Umlaufsinn der Rundumleuchte wahlfrei.
Bei geschickter Wahl der ATtiny-Betriebsspannung kann man sogar auf die
Widerstände verzichten und stellt die Helligkeit der LEDs mit der
Speisespannung ein.
henni
Korrekter Einwand.
Für zehn antiparallele Zweifarb-LEDs an 5 Portpins sähe das dann so aus.
Widerstände nicht eingezeichnet. Ausprobieren, ob man die weglassen
kann.
Interessanterweise machen unterschiedliche Flussspannungen (bspw.
zwischen Rotlicht und Blaulicht) nichts aus, sofern man die LEDs immer
gleich herum orientiert.
Ob die Flussspannung der LEDs über die ISP-Pins beim Programmieren stört
muss man wohl ausprobieren; blaue LEDs sind eh' unkritisch. Die
vorherige 9-LED-Schaltung hatte dieses Problem nicht.
Die Firmware muss nun zwei Bitmuster mitschleppen, eins für PORTB und
eins für DDRB. Genug Register sind ja dafür noch frei ...
Hier ist die 9-Einfarb-LED- und die 10-Zweifarb-LED-Variante auf je
einer runden, zweiseitigen Platine mit 11 mm Durchmesser geroutet. Als
Weihnachtsbastelei vielleicht ...
Die LEDs sind jeweils 0603-SMD-Typen, die auf Kante (also seitlich
strahlend) auf die Leiterplatte gelötet werden sollen.
Bei der ersten Variante ist die Polarität der LEDs verschieden, um beim
Layout Durchkontaktierungen zu minimieren, daher beim Bestücken
aufpassen!
Bei der zweiten Variante waren für Widerstände und Stützkondensatoren
kein Platz mehr; dafür sind hier die 10 LEDs schön regelmäßig. Falls
keine Zweifarb-LEDs zur Hand, kann man auch einfarbige bestücken, oder
zwei übereinander.
henni
Hallo Zusammen,
ich kann aus dem Code nicht herauslesen, an welcher Stelle die Pins
definiert werden, welche dann tatsächlich im Lauflicht genutzt werden.
Dass zu Beginn alle Pins auf "Ausgang" gesetzt werden ist mir klar. Doch
an welcher Stelle sage ich dem Chip, dass er z.B. für ein
3Kanal-Lauflicht die Pins PB0 bis PB2 verwenden soll?
viele Grüße
Michael
Michael schrieb:> Doch> an welcher Stelle sage ich dem Chip, dass er z.B. für ein> 3Kanal-Lauflicht die Pins PB0 bis PB2 verwenden soll?
In den letzten Yeilen wird der neue Portstatus "berechnet".
Da kommt acu die 31 wieder vor.