Projektplanung: Benötigte Pins

Hallo Zusammen,

ich bin gerade bei der Planung von meinem ersten "größeren" Projekt.

Wie viele andere auch, wird es wohl ein LED-Cube (5x5x5) werden, allerdings mit Erweiterungen. Ich benötige dann noch eine serielle Schnittstelle (Dank I2C-Bus und Wire Bibliothek kann das mit 2 Pins einfach realisiert werden?!).
Zusätzlich soll noch ein Ethernet Shield verdrahtet werden um mit dem Arduino zu kommunizieren. :grin:

Jetzt habe ich mich mal bezüglich Multiplexing schlau gemacht und bin auf den Baustein PCF8574 gestoßen. Dieser ist ebenfalls über den IC2 Bus ansprechbar und ermöglicht mir 8 zusätzliche Pins.

Wenn ich Multiplexing richtig verstanden habe benötige ich pro Layer bei einem 5x5x5 Würfel 10 Pins bzw. Anschlüsse. Macht bei 5 Ebenen 50 Pins. Liege ich da richtig?
Rein rechnerisch bräuchte ich dann 7 Bausteine vom Typ PCF 8574. Wenn das jetzt schon rein technisch nicht hinhaut und hier ne falsche Vorstellung habe, nur raus damit :smiley:

Wie schon erwähnt müssen zusätzlich noch ein serielles Gerät und ein Ethernet Shield eingebaut werden.

Im Moment habe ich ein Arduino Uno. Ist das damit möglich oder wäre es besser, gleich auf ein größeres Modell (Mega) zu setzen?

Sollte es die wahl zwischen Soft- und Hardwarelösung geben, dann lieber die Software, da ich Programmiertechnisch relativ fit bin. Hardware kann eh nur kaputt gehn :grin:

Für Hilfe wäre ich wirklich sehr dankbar!!! :slight_smile:

Schau Dir mal das an: http://arduino.cc/forum/index.php/topic,56787.0.html. Außerdem sind LED Würfel im Moment in Mode --> Google sollte jede Menge Details dazu finden.

Hallo feed
bei einem 5x5 x5 Würfel brauchst Du weniger als 50 Anschlüsse.
Im Gegensatz zu Dir hatte Robdeflop den Würfel bereits gebaut und erst dann gefragt wie er ihn ansteuen könnte.
Der PCF 8574 ist nicht die ideale Lösung da er 1. sehr teuer ist im Vergleich zu einem 74HC595 der als Ausgänge die gleiche Funktion erfüllt und 2. kein Problem mit der Strombegrenzung bei HIGH hat.
Hier ein Tutorial:

Wenn Du die LEDs dimmen willst, dann wird's noch komplizierter.

Grüße Uwe

Hallo ihr Zwei,

vielen Dank für eure flotten Antworten. Das Thema von Robdeflop hatte ich schon gelesen 8), allerdings war mir noch nicht ganz klar, ob mir das Arduino Uno ausreicht, für einen Cube UND ein Ethernet Shield UND eine zusätzliche serielle Schnittstelle.
Das die Led Cubes in Mode sind, scheint mir auch so. Auf youtube gibt es jede Menge Videos etc. nur leider fehlen dort oft viele Informationen wie das ganze Umgesetzt wurde.

Uwe vielen Dank für den Link zu Instructables. Ich werde mir das auf jeden Fall genauer anschuen, allerdings sieht es auf den ersten Blick nicht so aus, wie wenn das ganze mir nem Arduino umgesetzt wurde. Ich kann den 74HC595-Baustein also als Ersatz für den PCF 8574 hernehmen oder?! (Ich habe gerade mal einen Blick in das Datenblatt geworfen, da sah es zumindest so für mich aus 8) )
Ich gehe mal davon aus, dass der dann auch über den I2C Bus angesprochen wird oder?.

PS: Dimmen will ich die LED'S nicht, an und aus, reicht mir vollkommen. :stuck_out_tongue:

Gruß aus dem Frankenland

Der 74HC595 ist ein Schieberegister, man schreibt die Daten seriell hinein und hat ohne Kaskadierung acht Ausgänge. Um den Baustein jedoch mit Daten zu "füttern", brauchst du 3 Pins vom Arduino. Mit Kaskadierung, also dem Zusammenschalten mehrerer ICs dieser Art benötigst du keine weiteren Arduino-Pins mehr, musst aber entsprechend mehr Daten in die kaskade hineinschieben.

Der 74HC595 ist ein Schieberegister seriell in paralell out. Er wird seriell angesteuert aber nicht über I2C sondern mit 3 Pins.
Aber mit dem Arduino UNO müßtest Du auskommen:
2 Pin für USB zum PC
2 Pin für I2C
4 Pin für Ethernet
3 pin für 74HC595 (oder 6 pin um 2 Stränge unabhängig ansteuern zu können)
Sind im ganzen 11 oder 14Pin. Der Uno hat 20 Pins.

Bibliothek für Ansteuerung das Schieberegisters:
http://www.arduino.cc/playground/Code/ShiftRegister595

Eine Alternative zum sind die MCP23016 und MCP23008 mit 16 bzw 8 Ausgängen die +/- 25mA Augangsstrom liefern können. Ich kann Dir nicht sagen was der Untersched zu den MCP23017 und MCP23009 ist. Für dies Bausteine habe ich aber keine Bibliothek gefunden nur eine Prototypplatine.

Viele Grüße Uwe

Vielen Vielen Dank für die Hilfe, jetzt ist mir einiges klarer und ich weiß, dass ich mit Schieberegistern Arbeiten muss. 8)

Ich werde mal schauen ob ich bei google noch was zum Thema Kaskadierung finde, denn den Cube mit 3 Pins anzusteuern wäre ja grandios :grin:

@Uwe: Warum benötige ich 2 Pins für USB zum PC? Wenn ich den Atmega auf dem Uno-Board lasse, brauche ich diese ja nicht oder ?!

Merci nochmal für eure Hilfe :stuck_out_tongue:

Ich heiße zwar nicht Uwe, versuche aber trotzdem zu erklären, was er meint:

Die verwendeten Atmegas (meist mega328 in den neuern Arduino-Versionen) nutzen sowohl zur Programmierung als auch zur Kommunikation die serielle Schnittstelle. Um den Mikrocontroller nun mit dem Rechner zu verbinden werden 2 Pins benutzt RX (R für Receiver - Empfänger) und TX (T für Transmitter - Sender). Da dies jedoch eine serielle Schnittelle mit TTL-Pegeln (0V und 5V) ist, wird noch eine Umsetzung auf USB nötig. Dies geschieht beim Duemilanove (Version 2009) noch mit einem speziellem Schnittstellenchip (FT232), die neueren Versionen (Uno) nutzen einen zusätzlichen Mikrocontroller, der seinerseits als USB-Seriell-Umsetzer programmiert ist.
Wie auch immer, RX und TX braucht man für die Programmierung bzw ist es eine große Hilfe, wenn man zur Fehlereingrenzung Zwischenergebnisse/-schritte zur seriellen Schnittstelle schicken kann.

ah ok, das heißt wenn ich den Seriellen Monitor benutze um Ausgaben zu machen (Serial.print) dann benötige ich diese beiden Pins, egal ob ich jetzt was gesteckt habe dort oder nicht.

Ich hoffe ich hab das so jetzt richtig verstanden :smiley:

Gruß

Ganz genau!

Kaskadieung;
Man schaltet 2 oder mehr Schieberegister so zusammen daß die Daten die bei dem ersten am Ausgang Q7' herauskommen bein nächsten Schieberegister am Eingang hineingeschoben werden. Store und Clock werden parallel an alle Schieberegister angeschlossen.
So überträgst Du zB bei 2 Schieberegistern 16 Bit und steuerst alle Ausgänge an. Du mußt aber jedesmal die Daten für alle Schieberegister hinausschicken auch wenn Du nur 1 Ausgang änderst.
lies mal: http://www.arduino.cc/en/Tutorial/ShiftOut
oder:

Grüße Uwe

Danke, der Link ist sehr hilfreich. Sobald ich die Register habe, werde ich gleich mal das Tutorial mit den Beispielen durcharbeiten.

Im prinzip kann ich die Schaltung ja aufbauen wie Robdeflop oder? (Nur dass ich eben nicht jedes Register einzeln schalte sondern alle zusammenhänge und somit ein großes Schieberegister erstelle)

Wie ich dem Datenblatt entnehmen konnte, sind die UDN2981 Bausteine dann nur noch dafür da, dass die LED's genug Saft bekommen.

@Uwe: du meintest ja, dass ich gar keine 50 Ausgänge brauche für einen 5x5x5 Cube. Wenn ich das Layout von RObdeflop auf meinen Würfel anwende, brauche ich für jede Säule einen Anschluss, also 25 (Bei Robdeflop sind es 8x8 = 64 ). Rein Rechnerisch sind das dann 4 Schieberegister mit je 8 Ausgängen (5x5 = 25; 25 / 8 = 3,1 ==> 4) Um die Ebenen einzeln anzusprechen brauche ich für jede Ebene noch einmal 5 Anschlüsse also noch einmal ein Schieberegister. Da komme ich am Ende dann auf 30 Pins. Liege ich damit richtig? :grin:

Wenn ich es schaffe, setze ich mich heute Abend mal hin und mach so einen Plan wie Robdeflop. Vielleicht ist es dann besser zu verstehen, wie ich mir die Realisierung im Moment vorstelle.

Gruß Felix

Hallo feed
Ich würd aber die Anoden auf der Ebene zusammanschalten und die Katoden mit den Säulen vebinden um so gegebenefalls, später wenn Du Lust bekommst mit einem TLC5940 die Leds dimmen zu können. Bei einem 8x8x8 Würfel würde ich auch die Ebenen in 4 Bereiche aufteilen um so diese einzeln anzusteuern; bringt Vorteile beim Multiplexen.
Bei einem 5x5x5 Würfen ist die Aufteilung nicht sinnvoll.
Viele Grüße Uwe

Danke für deine Antwort:)

wie würden die Vorteile denn dann genau aussehen? Nur bezüglich der Ansteuerung oder auch Verdrahtung/Programmierung. Bin nämlich im Moment am überlegen, ob ich mir nicht gleich nen 8x8x8 Würfel baue, weil der von der Größe her eigentlich besser passen würde.

Nachteil ist halt, dass ich bei der Schieberegisterlösung vermutlich ziemlich viel programmieren muss. Ist ja schon der Unterschied von einem zu zwei Registern sehr deutlich zu merken (Beispielcodes aus dem Link)

Beste Grüße

8x8x8 Würfel heißt 512 LEDs. :~

Wenn Du zB eine Ebene in 4 Teile teilst ( 4x4x8 Leds oder 8x2x8Leds), dann kannst Du eine Säule mit 3 Schieberegister ansteuern und brauchst als Treiber nur die 2 Schieberegister und einen UDN2981 für die Ebene. Das aber dann 4X also eine "paralelle" 4 bit Ansteuerung der 12 Schieberegister. Controlliere ob der Arduinoausgang soviele Eingänge treiben kann ansonsten brauchst Du für Clock und Store einen Treiber.
Auf diese Art und Weise kannst Du 2 Schieberegister durch einen TLC5940 austauschen.
Du kannst dann aber nicht die Standartbibliothek für den 595 oder den TLC5940mux nicht verwenden da diese eine paralelle ansteuerung von mehreren strängen nicht vorsehen. Du mußt die Ansteuerung selbst schreiben.

Grüße Uwe