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
> ..., 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?
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.
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.
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 ?
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
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 ).
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 !
...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
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
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 ?
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 ?
@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?
> 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.
"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
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
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
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.
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 ?