Uno und ATTinys, Gruppensteuerungen ... Anfängerfragen;)

Servus Forum!

noch so ein blutiger Anfänger;) Naja irgendwann muss ja jeder mal! Also ich würde mich über euren Rat freuen zu folgendem Vorhaben:
Ich möchte im Grunde für ein Scale-Model, welches per LED beleuchtet werden soll, eine Art Komfortsteuerung basteln. Dabei möchte ich am liebsten verschiedene LED-Gruppen bilden (z.B. Lauflichter, Positionslichter, etc.) und diese einzelnen Gruppen auf eigenen Schaltkreisen per Arduino steuern. Da ich bereits gelernt habe, dass Kollege Arduino nicht soo viele Ports im Angebot hat, dachte ich daran, die Programmcodes für z.B. Lauflichter auf ATTiny 13 oder 45 auszulagern und diese Kreise, da sie auch einen höheren Strombedarf haben, als Arduino liefern kann, später über TIP122-Transistoren zu steuern.
Am Ende komme ich vielleicht auf 6-7 LED-Kreise, die zwar nicht immer viel machen müssen ausser AN und AUS gehen. Beispielsweise möchte ich aber, dass die Fensterbeleuchtung an dem Model nicht einfach nur zack-an geht, sondern fadet und es ingesamt verschiedene Betriebsmodi wie Cold & Dark geben könnte.
In meiner noch sehr einfachen Vorstellung könnte ich dies alles zentral mit einem Arduino und mehreren Tastern steuern und könnte dann später dazu übergehen, die Taster durch ein BT-Modul zu ersetzen und am Ende per Android verschiedene Beleuchtungszustände erstellen. Soweit die Vorstellung ...
Aber ich komme schon nicht ganz mit, aus welchen ATTiny (allein aus Kostengründen wäre es ja beknackt, immer einen Uno zu verwenden;) ) ich am besten ein 10-LED-Lauflicht machen könnte. Und wie?
Ja, ich könnte mir bei Kontrad das 10er Lauflicht für 10 Euro kaufen, aber das kann ich nicht nach meinen Vorstellungen anpassen;)

Ratschläge, Tipps?

Also für solche zwecke sind Schieberegister perfekt, da du ja so gut wie keine Intelligenz brauhst für an und aus.
Schaue mal hier:

Wenn du keine LEDs mit hohem Strom brauchst kannst du mit LowCurrent LED schon eine Menge machen. Ich hatte Problemlos an 3 ShiftOut Ausgängen 6 Register (6*8=48 zusätzliche "LED Ausgänge") Wenn du 3 weitere nimmst kannst du also schon 96 Ausgänge mit 6 Arduino Ausgängen nutzten. *1
Du kannst das auch mit I2C PortExtentder machen dem PCF8574 hat auch 8 Ein-oder Ausgänge hier kannst du an den I2C-Bus maximal 16 von diesen Teilen packen also 128 "zusätzlich Ein ode Ausgänge" Nachteil die PCF8574 sind teuerer als die 74HC595. Bei hohen Geschwindgkeiten z.B. mit dimmen kannst du einen Kreis an die SPI Schnittstelle packen die kann dann um einiges Schneller die Daten an die Register liefern und damit auch Quasi dimmen. Oder du kannst selektiv die Output Enable der einzelnen Register Dimmen und dann auch nur 8 LED Dimmen aus einem 6 Array

Zum Thema Attiny du kannst wahrscheinlich dein ganzes Programm wenn<8kB auch in einen Attiny84 pflanzen, damit könntest du auch beide Varianten machen, da es eine I2C Emulation für Attiny84 bekommst. *2 *3

Zum Programmieren der Attiny brauchst du aber einen ISP Programmer den du mit dem Arduino (Arduino as ISP) oder günstig kaufen kannst.*4

Gruß
Der Dani

*1 http://arduino.cc/en/Tutorial/ShiftOut (Tutorial zum Arbeiten mit Schiebregister)
*2 http://hlt.media.mit.edu/?p=1695 (Attiny84 Programmieren in Arduino IDE
*3 Arduino Playground - USIi2c (USI als I2C) <= funktioniert hervorragen
*4 myAVR Mikrocontroller-Shop - mySmartUSB light - AVR ISP Programmer \ Systemboards und Programmer (USB ISP Programmer der für "unsere" Zwecke reicht)

Mhhh ... Low current wird es eher nicht, da es sich um ein recht großes Model handelt und auch einige Ultrabrights herhalten müssen. Ich werde mir erstmal das Tut zum Thema ShiftOut durchlesen, denn mir schwirrt der Kopf von dem was Du da so schreibst;)

Ich hatte die Hoffnung, die einzelnen Kreise nett und sauber in einzelne ATTinys zu schieben, denn dafür kann ich mir den Code unter Umständen noch zusammenreimen. Da Elektronik und Programmierung nicht mein Hauptgebiet ist, hatte ich gehofft, etwas "einfacher" davon zu kommen ;=

Klar kannst du einzelne berreiche in einzelne Tinys schreiben aber das ist ja der absloute CPU Overkill, deswegen dachte ich mir eine CPU die kann das alles spielend.
Mit den Attinys ist das schon ein bisschen komplizierter als mit dem Uno aber locker machbar.
Gruß
Der Dani

mal doof vorweg gefragt ... Wie könnte ich mit der ShiftOut/Register-Nummer den höheren Strombedarf realisieren? Oder anders: ich wollte mein Konstrukt am Ende per 9V Steckernetzteil versorgen.

bzw. was mir noch einfiel ... im Model werden nachher so um die 30 bis vielleicht 35 Leds verbaut sein. Das ist dann so gesehen auch wieder eine ShiftRegister-Schlacht und ich müsste vermutlich sämtliche Schaltungen mehr oder weniger ausserhalb des Models (im Standfuss) unterbringen. Da fällt mir es erst jetzt wieder ein, warum ich das mit der Tiny-Lösung so nett fand. Da kann man so nette kleine Schaltungen draus basteln. Aber gut, ich bin ja neu in der Materie und guck mal, ob es die Shift-Nummer auch tut ... erstmal :wink:

hi,

ich denke, wenn Du für "normale" LEDs nur die schieberegister nimmst und für die stärkeren ULN2803 (jeweils genug strom für 8 LEDs bis je 200mA), dann wird die platine nicht viel größer als ein shield. oder Du nimmst jeweils ein schieberegister und einen ULN2803 und teilst sie im modell auf. die dinger sind recht billig...

gruß stefan

Wenn Du die Helligkeit und/oder die Farbe der LEDd ändern willst dann brauchst Du eine PWM -Ansteuerung der LED.

Dazu hast Du 2 Möglichkeiten:
Einen Baustein zu verwenden der das macht zB den TLC5940 oder TLC5947
Eine LED-Lichterkette mit HL1606 controller oder bessere (aber auch teurer) WS2810 /WS2811. Bei denen Kannst Du jede LED einzeln in Farbe und Helligkeit ansteuern.

Für alle genannten Halbleiter gibt es Arduino-Beispiele und Bibliotheken.

Grüße Uwe

Danke eucht soweit. Bleibt nur die Frage ... welche Variante ist für einen Anfänger "leichter"? Wenn man das so sagen kann?
Schätze, irgendwie wäre eine Kombination aus allem sinnvoll. Aus welchen Bauteilen würdet ihr, mal unabhängig vom Code, Widerständen, etc. die Aufgabe lösen: 8-LED Chaser + 8 Positionslichter + 6 Flasher + mind. 16 Standardbeleuchtung (in 4 Gruppen) + 8 Effekt-Leds

So mal grob. ist noch nicht alles, aber das sind so die, die mir gerade durch den Kopf gehen. Diese Gruppen würde ich dann gerne mit irgend einem Input je nach "Betriebszustand" ein/aus/umschalten und dimmen.

hi,

blutiger anfänger bin ich selber, aber der grund, warum ich beim arduino gelandet bin, war, weil ich meine LED-lampen im wohnzimmer schalten wollte, und das ist im prinzip das gleiche, was Du auch willst. ich habe das dann auch mit 74HC595 und ULN2803 realisiert.

und weil ich grade nicht schlafen kann, unten dran eine zeichnung, was zb möglich wäre (schieberegister kannst Du bis etwa 6 hintereinander anhängen, aber PWM hat der uno nur 6. mehr wären mit TLC5940 machbar).
LED groß geschrieben wären power-LEDs oder gruppen von LEDs. Led sind "normale" LEDs.

eine solche kombination aus 2 ICs kostet bei reichelt um die 80 cent, bei conrad das doppelte, dafür sparst Du das porto, wenn einer in der nähe ist.

falls Du ein platzproblem hast, kannst Du auch darüber nachdenken:
http://erik-bartmann.de/programmierung/downloads2.html

dort bei "Wir bauen uns einen eigenen Arduino auf einem Breadboard".

gruß stefan

PWM geht sogar für alle LEDs bzw. LED Gruppen an einem ULN bzw. direkt am Schieberegister:
http://www.elcojacobs.com/shiftpwm/
Wenn das Programm ausser zu bestimmten Zeiten bestimmte LEDs schalten / dimmen sollte die ShiftPWM Lib ideal sein.
Am Ende der o.g. Seite gibt es einen kleinen Rechner mit dem Du ausrechnen kannst wieviel "Prozessorlast" das Shiften Deinem Programm "klaut".
Mario.

I flasht mich gerade total :wink: Vielen Dank für die Zeichnung!!! Was Du so alles machst, wenn Du nicht schlafen kannst :wink:

Also ich werde dann heute mal zum Elektronikladen gurken und jeweils einen 74HC595, ULN2803 und einen TLC5940 besorgen. Dann werde ich schauen, wie weit ich erstmal mit einfachen Aufbauten hinkomme (Chaser, Leds an/aus/fade usw.)

falls Du noch nicht weg bist, nimm Dir 2 oder 3 74HC595, die kosten kaum was, und du kannst dann gleich mehrere schieberegister hintereinander probieren.

gruß stefan

oder falls ich die Dinger bei meinen Versuchen zerstöre :wink:

genau, immer positiv denken.

die HCs wirst Du kaum zerstören, aber denk an die vorwiderstände für die LEDs.

und denk dran, die ULNs werden zwar mit plus angesteuert, aber auf der ausgangsseite schalten sie minus. genauso erklärt von einem elektronik-dummerl zum anderen...

gruß stefan

da sag ich mal ... nachdem ich das gelesen habe ... AHA :astonished:

so ... seit 2 Tagen beschäftige ich mich nun mit dat Janze :wink: und ich bekomm Kopfschmerzen. Echt.
Nachdem ich die ShiftOut und ShiftPWM-Geschichten ansatzweise ausprobiert habe, bin ich mit dem TLC5940 irgendwie etwas wärmer geworden. Nicht zuletzt, weil ich mir damit eine Menge Widerstände sparen kann.
Aber so sehr ich auch Google benutze, um halbwegs brauchbare Infos zu bekommen (viel zu viele Videolinks ohne jegliche Beschreibung oder Links zu Beispielen), komm ich nicht um die Frage herum:

Wie kann ich einem einzigen TLC5940 sagen: Benutze Output Pins von/bis für xy und Output Pins ab für was anderes???

Ich nehme stark an über die Tlc.set Funktion. Aber wie kann ich damit mehr als nur eine Led ansprechen?

hi,

so ganz verstehe ich Dein problem nicht. wenn Du das beispiel aus dem playground nimmst, die library reinspielst und dann den hardwareaufbau machst und ein beispielprogramm startest, da werden doch die kanäle einzeln angesprochen...

http://playground.arduino.cc//Learning/TLC5940

gruß stefan

Ja, die Beispiele laufen, wie sie sollen. Jedoch laufen sie immer auf allen Kanälen. Wenn ich beispielsweise den Chaser laufen lasse, dann spielt es keine Rolle, ob ich 6, 8 oder 16 Leds an den Outputs habe. Es werden immer alle Kanäle angesprochen. Für meinen Fall benötige ich jedoch "nur" 8 Kanäle für einen Chaser und möchte mit den übrigen 8 was komplett anderes machen. So dachte ich mir, es könnte möglich sein, das irgendwo zu definieren ... von wegen Pin 0-7 macht Funktion A, Pin 8-9 machen Funktion B, usw.

Mittels

Tlc.set (0,1000)

bekomme ich z.B. Led 1 mit Helligkeit 1000. Aber wie ginge es für Pin 0-7? Als Beispiel?