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 ?
Yes, korrekt. dann nur noch eine Form der Informationsaufbewahrung im Controller auswählen... Hannes
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 ?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.