Forum: Mikrocontroller und Digitale Elektronik Kombinationen beim 3x3x3 LED Cube


von Marco Oklitz (Gast)


Lesenswert?

Hallo Leute !

Ich besuche mokrocontroller.net schon seit ein paar Monaten
regelmäßig.
ich mußte noch ne frage stellen da alles schon im forum irgendwo erklärt
wurde :-))

doch jetzt hab ich auch mal ne frage !

Alsooo....

Ich hab mit nem attiny2313 nen 3x3x3 led cube gebaut.

beim musterprogrammieren ist mir dann aufgefallen das ich nur eine 
begrenzte menge an mustern programmieren kann, da durch die überlappung 
der matrix nicht alle möglichen kombination realisierbar sind.
soweit so gut. mit nem timer könnte ich z.B. 2 Muster gleichzeitig 
anzeigen lassen. ok aber..

jetzt meine frage:
ist es mathematisch möglich mit 2 einzelbildern alle möglichen 
kombinationen anzeigen zu lassen oder bräuchte ich mehr als zwei 
einzelbilder für bestimmte kombinationen.
ich bin in mathe nicht so die leuchte deshalb frag ich mal ob sich mit 
diesem problem schonmal jemand beschäftigt hat.

mfg marco

von Frank (Gast)


Lesenswert?

> ..., da durch die überlappung
> der matrix nicht alle möglichen kombination realisierbar sind.

Wie sieht die Matrix aus? 3x3x3 = 27 => 6x5? 9x3? 7x4?
Oder hast Du eine X, y, Z Ansteuerung (also echte 3x3x3)?
Was überlappt sich da?

von Karl H. (kbuchegg)


Lesenswert?

Marco Oklitz schrieb:

> Ich hab mit nem attiny2313 nen 3x3x3 led cube gebaut.
>
> beim musterprogrammieren ist mir dann aufgefallen das ich nur eine
> begrenzte menge an mustern programmieren kann, da durch die überlappung
> der matrix nicht alle möglichen kombination realisierbar sind.

Welche Überlappung?
Wenn du es richtig gemacht hast, kannst du in einer 3*3*3 Matrix jede 
LED einzeln leuchten oder nicht leuchten lassen. Und zwar unabhängig von 
allen anderen.

von MoritzS (Gast)


Lesenswert?

Da er

1) nichts über Schieberegister oder sonstige Portmultiplier geschrieben 
hat

und

2) kein ATtiny keine 28Pins hat, wird er wohl nicht jede LED einzeln 
ansteuern können.

Hilfreich wäre es also, wenn Marko Oklitz uns mal seine 
Ansteuerschaltung zeigen könnte.

von Marco Oklitz (Gast)


Lesenswert?

Also hier erst mal der schaltplan:

http://www.oklitz.com/images/temp/3x3x3.jpg

ich habe in dem bild 2 LEDs rot markiert welche ich zum leuchten bringen 
möchte.

laut diesem schaltplan muß ich die ausgänge PD0 und PD6
sowie PB7 und PD5 auf high setzen.

das hat aber zur folge das 4 LEDs leuchten !

Gibt es ne alternative zu meinem schaltplan ?
mach ich jetzt n Denkfehler ?

von muh (Gast)


Lesenswert?

Marco Oklitz schrieb:
> laut diesem schaltplan muß ich die ausgänge PD0 und PD6
> sowie PB7 und PD5 auf high setzen.

und jetzt guck dir mal genau an wo der strom fliessen wird

von rudi (Gast)


Lesenswert?

Morgen,

wie wäre es wenn du nen Takt einabust und die LEDs so schnell blinken 
lässt, sodass es aussieht als würden die beiden leuchten??? ( in der 
Praxis hast du das im TV überall ).

von Einer (Gast)


Lesenswert?

Schau mal unter Multiplex nach.

von Marco Oklitz (Gast)


Lesenswert?

ja das würde gehen klar ! aber

Karl heinz Buchegger schrieb:
> Welche Überlappung?
> Wenn du es richtig gemacht hast, kannst du in einer 3*3*3 Matrix jede
> LED einzeln leuchten oder nicht leuchten lassen. Und zwar unabhängig von
> allen anderen.

ich möchte erst mal klären ob diese aussage stimmt !

von Marco Oklitz (Gast)


Lesenswert?

muh schrieb:
> und jetzt guck dir mal genau an wo der strom fliessen wird


hab ich, es leuchten 4

von Hannes (Gast)


Lesenswert?

...du hast nicht nachgesehen was Multiplexing ist...

Bei einer solchen Schaltung geht jeder davon aus das der Erbauer den 
Hintergrund kennt, und wenn du etwas von überlappungen usw... schreibst 
weiß keiner wo dein Problem liegt... schau dir das Thema Multiplexing 
an...

Im ersten Schritt solltest du es so programmieren das du die real 
existierenden LEDs aussen im Controller abbildest, soll heißen:

1) Schaltung und Ansteuerung verstehen (Multiplexing)

2) Variablenstruktur anlegen z.B. (2D) oder (3D) Feld.

3) Die Informationen aus den Variablen auf die LEDs projizieren.

4) Diesen Vorgang automatisieren.

Dann kannst du in deine Variablen schreiben was du willst und es 
erscheint automatisch. Es ist dann so als wären alle 27 LEDs einzeln an 
den Controller angeschlossen.

Übrigens: das Thema Multiplexing ist wohl das meistdiskutierteste hier.

Gruß,
Hannes

von Marco Oklitz (Gast)


Lesenswert?

ok nochmal umformulieren:

zum zeitpunkt t ist es nicht möglich das NUR LED1 und LED2 gleichzeitig 
leuchten !

Das sagt der Schalplan aus !

Also brauche ich eine Steuerung welche zwischen Led1 und Led2 toggelt.
So schnell das mein Auge denkt das beide an sind richtig ?

das ist jetzt ganz einfach formuliert mir gehts hier mehr um das prinzip 
welches ich verstehen will.

und ja ich lese grad fleißig bei multiplexing

von Marco Oklitz (Gast)


Lesenswert?

ok den hab ich gelesen:
http://www.mikrocontroller.net/articles/LED-Matrix

ok dann sollte es mathematisch ausreichen wenn ich bei meinem 3x3x3 cube 
kathodenstränge der leds jeweils einzeln ansteuere.
also 1/3 t für Oben,mitte und unten und dann für den jeweiligen zeitraum 
das entsprechende muster auf die led säulen gebe.

ich müste also eine Achse des cubes "multiplexen" richtig ?

von Hannes (Gast)


Lesenswert?

Yes, korrekt.

dann nur noch eine Form der Informationsaufbewahrung im Controller 
auswählen...

Hannes

von Marco Oklitz (Gast)


Lesenswert?

Hannes schrieb:
> dann nur noch eine Form der Informationsaufbewahrung im Controller
> auswählen...

das wären dann ja 4Bytes nur für EIN Bild !für jede LED ein Bit !

und die LEDs sind dann auch nicht mehr so hell wenn sie nur 1/3 der zeit 
leuchten. Ich könnte ja die Vorwiderstände verringern.

das mag ja bei nem 3x3x3 cube noch gut gehen aber wie siehts mit nem 
8x8x8 er aus?

is das nicht gefährlich ? wenn durch irgend n fehler die ausgänge alle 
auf high bleiben ? dann sind doch die leds schnell hin oder ?

von rudi (Gast)


Lesenswert?

@Marco O.

> und die LEDs sind dann auch nicht mehr so hell wenn sie nur 1/3 der zeit
> leuchten. Ich könnte ja die Vorwiderstände verringern.

schonmal gedanken gemacht wofür die Transistoren da sein könnten?

von Stefan B. (stefan) Benutzerseite


Lesenswert?

> is das nicht gefährlich ? wenn durch irgend n fehler die ausgänge alle
> auf high bleiben ? dann sind doch die leds schnell hin oder ?

Richtig, ist es. Also Maßnahmen ergreifen, damit die Schaltung sicher 
ist, wenn der µC nicht arbeitet. Z.B. Pulldown-Widerstände um Pegel auf 
LOW zu halten, wenn der µC sie nicht aktiv HIGH zieht. Und Entwicklung & 
Debuggen (!) nicht mit der "heissen" Hardware machen. Z.B. verschiedene 
Widerstände vorsehen und zwischen Safe und Hot mit Jumpern wechseln.

von Hannes (Gast)


Lesenswert?

"das wären dann ja 4Bytes nur für EIN Bild !für jede LED ein Bit !"

kommt darauf an wie du die Daten im Controller hältst. Du kannst auch 3D 
Feld erzeugen.

uint8_t cube[3][3][3];

das wären dann in diesem Fall 27Bytes, nicht sehr schön...

...oder du legst die Daten wirklich in 4 Bytes ab, und bastelst dir zwei 
Funktionen mit 3 übergabeparametern für die Koordinaten...

cube_setled(uint8_t x, uint8_t y,uint8_t z);
cube_resetled(uint8_t x, uint8_t y,uint8_t z);

oder du arbeitest mit bitfeldern um Speicher zu sparen...

oder du mischt diese Möglichkeiten...

"und die LEDs sind dann auch nicht mehr so hell wenn sie nur 1/3 der 
zeit
leuchten. Ich könnte ja die Vorwiderstände verringern."

Wie schon gesagt, es ist das wohl am häufigsten diskutierte Thema 
hier...

Lege die Widerstände erstmal so aus, das auch im Stillstand nichts 
passieren kann, bis deine Routine fit und sicher ist...

Hannes

von Karl H. (kbuchegg)


Lesenswert?

Marco Oklitz schrieb:
> ja das würde gehen klar ! aber
>
> Karl heinz Buchegger schrieb:
>> Welche Überlappung?
>> Wenn du es richtig gemacht hast, kannst du in einer 3*3*3 Matrix jede
>> LED einzeln leuchten oder nicht leuchten lassen. Und zwar unabhängig von
>> allen anderen.
>
> ich möchte erst mal klären ob diese aussage stimmt !

Komm erst jetzt dazu zu antworten.
Wer einen LED Cube baut, bei dem gehe ich eigentlich schon davon aus, 
dass er weiß was ein Multiplex ist. Gewisse Dinge muss man aber einem 
gewissen Projektschwierigkeitsgrad einfach voraussetzen. Du gehst ja 
auch implizit davon aus, dass jemand der sich ein Auto aus Unfallwagen 
neu aufbauen will, mit Hammer, Feile und Schweissgerät umgehen kann.

Daher auch die Satzeinleitung: Wenn du es richtig machst

von Marco Oklitz (Gast)


Lesenswert?

Karl heinz Buchegger schrieb:
> Komm erst jetzt dazu zu antworten.
> Wer einen LED Cube baut, bei dem gehe ich eigentlich schon davon aus,
> dass er weiß was ein Multiplex ist. Gewisse Dinge muss man aber einem
> gewissen Projektschwierigkeitsgrad einfach voraussetzen. Du gehst ja
> auch implizit davon aus, dass jemand der sich ein Auto aus Unfallwagen
> neu aufbauen will, mit Hammer, Feile und Schweissgerät umgehen kann.
>
> Daher auch die Satzeinleitung: Wenn du es richtig machst

Jo jetzt seh ich klarer !

die Grundidee war das es ohne multiplexing gehen würde aber das gibt der 
schaltplan nich her.
jede einzelne led ansteuern fällt auch aus (porterweiterung und 
verdrahtungsaufwand)
also multiplexing !!

der 3x3x3 cube is jetzt fertig mit multiplexing !
funzt super !

ich lass den 8bit timer vom avr mit teiler 8 laufen, und gebe per irq 
bei 85 und 170 und overflow einfach die 3 spalten aus.

ich speichere die muster in 6 byte (ja 4 würden auch gehen !), und in 
den nicht benutzen bits die anzeigedauer des musters und und die anzahl 
der wiederholungen des musters, sowie ein animationsendebit.
die muster erstell ich in nem tcl/tk programmm mit textausgabe welche 
ich in .db zeilen einfach ans ende des codes packe !

ist jetzt erstmal alles üben für den großen 8x8x8 cube.

danke für die hinweise ! haben mir sehr geholfen

von Skua (Gast)


Lesenswert?

Marco Oklitz schrieb:
> ich lass den 8bit timer vom avr mit teiler 8 laufen, und gebe per irq
> bei 85 und 170 und overflow einfach die 3 spalten aus.

Das ist nicht gerade optimal, nimm lieber einen größeren Teiler.

von Marco Oklitz (Gast)


Lesenswert?

Skua schrieb:
>> ich lass den 8bit timer vom avr mit teiler 8 laufen, und gebe per irq
>> bei 85 und 170 und overflow einfach die 3 spalten aus.
>
> Das ist nicht gerade optimal, nimm lieber einen größeren Teiler.
>


wieso ?

ich hab 8x85=680 takte für den code ! das reicht doch masse oder ?
oder gibts n andren grund ?

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
Noch kein Account? Hier anmelden.