Hey, wie der Titel schon sagt würde ich gerne wissen wie ich einen 4x4x4 LED-Cube programmieren nicht alles, sondern einfach nur wie ich die einzelnen Ebenen anpeilen kann und das mit dem Schieberegister, wie das physisch klappt verstehe ich da ich es anhand eines Schieberegisterkoffers in der Schule ausprobiert habe, aber ich verstehe halt nicht wie ich das programmieren soll bzw. wie ich die einzelnen Ebenen anpeilen kann oder bis zu 16. LED shiften soll. Wir verwenden die PIC18F4550 und die Programmiersprache C im Programm MPLAB IDE (Sind Pflichtvorgaben). Ich möchte hier keine Lösung für mein Projekt sondern lediglich nur eine Hilfestellung wie ich die einzelnen Ebenen anpeilen kann und wie ich mich zur 16. LED ranshiften kann oder welche Methode es noch gibt. Mit freundlichen Grüßen, Majd EDIT: Habe auch bereits im Internet recherchiert seit ca. 4 Stunden aber leider erfolglos habe etwas über Multiplexing gelesen aber ganz verstanden wie ich es anwende trotzdem nicht.
:
Verschoben durch User
Kommt ein bisschen darauf an, wie der Cube aufgebaut ist. Der Überbegriff dazu ist "Multiplexing". Die Zeilen/Spalten in den Ebenen werden sehr schnell hintereinander angesteuert, wobei maximal 4 LEDs gleichzeitig an sind. Den Rest erledigt die Trägheit des Auges. Hast du einen Schaltplan? Jede der 4 Ebenen sollte aus einer 4x4 Matrix bestehen. Diese Matrix ist in Zeilen und Spalten aufgeteilt. Ganz grober Ablauf: - Erste Ebene aktivieren - Erste Zeile aktivieren - Alle benötigten LEDs in dieser Zeile aktivieren - Erste Zeile deaktivieren, zweite Zeile aktivieren - Alle Alle benötigten LEDs in der 2. Zeile aktivieren ... für die anderen beiden Zeilen wiederholen - Erste Ebene deaktiveren - Zweite Ebene aktivieren - Dann wieder nacheinander die Zeilen durchgehen... Und das ganze so schnell, dass es für das Auge so aussieht, als seien mehrere LEDs gleichzeitig an.
Sebastian R. schrieb: > Kommt ein bisschen darauf an, wie der Cube aufgebaut ist. > > Der Überbegriff dazu ist "Multiplexing". > > Die Zeilen/Spalten in den Ebenen werden sehr schnell hintereinander > angesteuert, wobei maximal 4 LEDs gleichzeitig an sind. Den Rest > erledigt die Trägheit des Auges. > > Hast du einen Schaltplan? > > Jede der 4 Ebenen sollte aus einer 4x4 Matrix bestehen. Diese Matrix ist > in Zeilen und Spalten aufgeteilt. > > Ganz grober Ablauf: > > - Erste Ebene aktivieren > - Erste Zeile aktivieren > - Alle benötigten LEDs in dieser Zeile aktivieren > - Erste Zeile deaktivieren, zweite Zeile aktivieren > - Alle Alle benötigten LEDs in der 2. Zeile aktivieren > ... für die anderen beiden Zeilen wiederholen > - Erste Ebene deaktiveren > - Zweite Ebene aktivieren > - Dann wieder nacheinander die Zeilen durchgehen... > > Und das ganze so schnell, dass es für das Auge so aussieht, als seien > mehrere LEDs gleichzeitig an. Erstmal danke für deine schnelle Antwort. Genau das habe ich mir auch gedacht bzw. so weit bin ich bereits schon der Schaltplan ist noch gerade in Bearbeitung (Ist ein Schulprojekt einer macht die Hardware und der andere den Programmcode, also ich). Nun aber das Problem im theoretischen Teil. Was genau muss ich denn nun im Programmcode eingeben das ich gezielt die erste Ebene aktiviere oder halt die zweite/dritte. Und was genau meinst du mit Zeile? Eine ganz normale Programmierzeile oder eine Reihe im Cube?
Majd A. schrieb: > Nun aber das Problem im theoretischen Teil. Was genau muss ich denn nun > im Programmcode eingeben das ich gezielt die erste Ebene aktiviere oder > halt die zweite/dritte. Das hängt vom Schaltplan ab. Und mit welchen Anweisungen man Register und damit auch Ausgänge, beschreibt, solltest du in der Schule gelernt haben, wenn es ein Projekt im Rahmen des Unterrichts ist. Ansoooonste wäre eine einzelne LED vielleicht erst einmal sinnvoller als ein gemultiplexter Würfel gewesen ;) Für den Anfang solltest du dich dann erstmal auf das Multiplexen einer Ebene konzentrieren. Da dann eine Schleife für die anderen 3 drumrum zu setzen, ist dann das geringste Übel. Also als erste Übung vielleicht ein langsames Lauflicht über die LEDs einer Zeile, dann einer Ebene und dann über alle Ebenen hintereinander. Wenn man das dann so schnell wie möglich laufen lässt, sieht es so aus, als seien alle LEDs gleichzeitig an. Majd A. schrieb: > Und was genau meinst du mit Zeile? Eine ganz > normale Programmierzeile oder eine Reihe im Cube? "Programmzeile" ergibt in keiner der Fälle einen Sinn ;)
4x4x4 = 64, kann man z.B. mit einem MAX7219 ansteuern. Man legt sich dazu einen Bildspeicher von 8 Byte an und gibt diese per SPI an den MAX7219 aus.
Peter D. schrieb: > 4x4x4 = 64, kann man z.B. mit einem MAX7219 ansteuern. > Man legt sich dazu einen Bildspeicher von 8 Byte an und gibt diese per > SPI an den MAX7219 aus. Man kann auch einen Controller nehmen, der genug IOs hat. Das ist aber nicht Sinn der Sache.
Sebastian R. schrieb: > Das hängt vom Schaltplan ab. Und mit welchen Anweisungen man Register > und damit auch Ausgänge, beschreibt, solltest du in der Schule gelernt > haben, wenn es ein Projekt im Rahmen des Unterrichts ist. Wie man ein Register und die Ports beschreibt weiß ich, diese wären TRISB um erstmal Eingänge/Ausgänge zu definieren. Allerdings ist das Problem halt folgendes, es ist mein Abschlussprojekt und als ich den Lehrer gefragt habe meinte er ich soll es selber herausfinden (Bin eigentlich sehr gut in dem Fach stehe auf 1), habe auch bereits eine Ampelplatine programmiert etc. Aber sowas mit Multiplexen etc. Das mit dem schnellen durchlaufen habe ich bereits gemacht, da ich ja nichts anderes zu tun hatte als hier auf Antworten zu warten Ebenfalls weiß ich wie normale Lauflichter funktionieren mit dem Shift-Befehl(>>/<<) und ganz normal über PORTBbits.RB1 = 1 oder halt PORTB = 0x01. Kannst du mir vielleicht das multiplexen erklären bzw. welchen Code ich nutzen sollte dafür?
7 Segment Anzeige schon mal Programmiert?
Es geht auch komplett ohne Matrix. Alle LEDs (WS2812) werden dazu in einer Daisy-Chain gehängt und seriell angesteuert.
Wenn du das mit dem schnellen Durchlaufen hinbekommen hast, dann hast du es ja im Prinzip schon. Das dann halt so schnell wie möglich und dazu eine Möglichkeit, Daten reinzubekommen. Den Ablauf habe ich dir ja schon genannt: Sebastian R. schrieb: > Ganz grober Ablauf: > > - Erste Ebene aktivieren > - Erste Zeile aktivieren > - Alle benötigten LEDs in dieser Zeile aktivieren > - Erste Zeile deaktivieren, zweite Zeile aktivieren > - Alle Alle benötigten LEDs in der 2. Zeile aktivieren > ... für die anderen beiden Zeilen wiederholen > - Erste Ebene deaktiveren > - Zweite Ebene aktivieren > - Dann wieder nacheinander die Zeilen durchgehen... Du kannst halt nicht alle LEDs gleichzeitig ansteuern, weil das ganze eine dreidimensionale Matrix ist. Du musst eben nacheinander alle kleinstmöglichen Segmente, die du gleichzeitig bedienen kannst, ansteuern. Eine Ebene besteht aus vier Zeilen und vier Spalten, die jeweils auf einen Pin vom Controller oder einem Schieberegister gehen. Die Zeilen und Spalten der Ebenen liegen alle parallel. Wenn du nur Zeile und Spalte aktivierst, aktivierst du die entsprechende LED auf jeder Ebene. Dementwsprechend gibt es noch eine dritte Dimension, die Ebene um jede LED einzeln ansteuern zu können. Also um eine bestimmte LED anzusteuern musst du in Koordinaten denken. Den Pin der richten Zeile aktivieren, dann den Pin der passenden Spalte aktivieren und dann die richtige Ebene über einen Pin auswählen. Beim Multiplexing werden im Prinzip nacheinander alle Koordinaten angesprungen und jedes mal wird geschaut, ob die LED an dieser Koordinate nun aktiviert oder deaktiviert sein muss. Eventuell solltest du dir dazu dann noch einmal ein paar Seiten im Internet angucken. Ich kann das nicht alles detailliert erklären, was schon x mal erklärt wurde ;)
Sebastian R. schrieb: > Das hängt vom Schaltplan ab. Und mit welchen Anweisungen man Register > und damit auch Ausgänge, beschreibt, solltest du in der Schule gelernt > haben, wenn es ein Projekt im Rahmen des Unterrichts ist. Wie man ein Register und die Ports beschreibt weiß ich, diese wären TRISB um erstmal Eingänge/Ausgänge zu definieren. Allerdings ist das Problem halt folgendes, es ist mein Abschlussprojekt und als ich den Lehrer gefragt habe meinte er ich soll es selber herausfinden (Bin eigentlich sehr gut in dem Fach stehe auf 1), habe auch bereits eine Ampelplatine programmiert etc. Aber sowas mit Multiplexen etc. Das mit dem schnellen durchlaufen habe ich bereits gemacht, da ich ja nichts anderes zu tun hatte als hier auf Antworten zu warten Ebenfalls weiß ich wie normale Lauflichter funktionieren mit dem Shift-Befehl(>>/<<) und ganz normal über PORTBbits.RB1 = 1 oder halt PORTB = 0x01. Kannst du mir vielleicht das multiplexen erklären bzw. welchen Code ich nutzen sollte dafür? Kleine Änderung: Habe mir gerade eine Skizze gemacht und bin zum Schluss gekommen das ich RB0 als Clock nutze und RB1 als Data das heißt der Clock läuft durchgehend und der Data jenachdem wie ich die LEDS haben möchte und es muss 17 mal durchlaufen werden um eine neue Ebene zu aktivieren werde es jetzt erstmal ausprobieren danke für die Hilfe! Haben Sie vllt eine E-Mail Adresse das ich mich bei Ihnen melden kann, falls ich weitere Fragen habe? Mit freundlichen Grüßen
Bru schrieb: > Es geht auch komplett ohne Matrix. Alle LEDs (WS2812) werden dazu in > einer Daisy-Chain gehängt und seriell angesteuert. Noch irgendwelche schlauen Ideen, die an der vorhandenen Hardware vorbeigehen? Die spannende Frage: Ist dein Cube wirklich gemultiplext (mehrere LEDs parallel) oder hast du für jede einzelne LED einen Ausgang von einem Schieberegister?
Majd A. schrieb: > Das mit > dem schnellen durchlaufen habe ich bereits gemacht, da ich ja nichts > anderes zu tun hatte als hier auf Antworten zu warten ???? Ist das die Methode, wie man heute recherchiert und lernt? Majd A. schrieb: > Kannst du mir > vielleicht das multiplexen erklären bzw. welchen Code ich nutzen sollte > dafür? Das hängt wie gesagt vom Schaltplan ab. Und zwar sehr. Eine allgemeine Anleitung findest du (wie fast immer) bei Wikipedia: https://de.wikipedia.org/wiki/Multiplexverfahren Schau hier: http://microcontrollerslab.com/led-matrix-interfacing-pic-microcontroller/ Mach das erstmal mit 4x4 LED's und erweitere es dann um eine weitere Dimension.
Sebastian R. schrieb: > Noch irgendwelche schlauen Ideen, die an der vorhandenen Hardware > vorbeigehen? Wer schreibt etwas von vorhandener Hardware? Es wurde nur gesagt, dass die Hardware jemand anderes macht. Es ist nicht abwegig der Hardware-Crew entsprechende Ideen weiter zu geben.
Stefanus F. schrieb: > ???? > > Ist das die Methode, wie man heute recherchiert und lernt? Wie genau meinst du das? Haben halt 2 Wochen lang je 8 Stunden und habe in den ersten 4 Stunden darüber recherchiert aber keine Antworten gefunden, daher dachte ich mir mach ich mal hier den Beitrag auf und warte auf Antworten und bevor ich rumsitze und nichts mache habe ich mich schonmal daran drangesetzt, verstehe jetzt nicht wirklich wo das Problem ist
Stefanus F. schrieb: > Das hängt wie gesagt vom Schaltplan ab. Und zwar sehr. > > Eine allgemeine Anleitung findest du (wie fast immer) bei Wikipedia: > https://de.wikipedia.org/wiki/Multiplexverfahren > > Schau hier: > http://microcontrollerslab.com/led-matrix-interfacing-pic-microcontroller/ > > Mach das erstmal mit 4x4 LED's und erweitere es dann um eine weitere > Dimension. Mach ich dankeschön :)
Peter D. schrieb: > 4x4x4 = 64, kann man z.B. mit einem MAX7219 ansteuern. 6, setzen, Aufgabe nicht verstanden. Majd A. schrieb: > ein Schulprojekt einer macht die Hardware und der andere den > Programmcode, Dann solltest du mal den Schaltplan anfordern. An welchen Pin liegt DATA, CLOCK, LOAD des Schieberegisters und sind die mit 0 oder 1 aktiv. An welchen Pin liegt die Zeilenansteuerung ZEILE0, ZEILE1, ZEILE2, ZEILE3 (vermutlich nicht decodiert) und aucb hier ob die aktive Zeile durch 0 oder 1 ausgelöst wird. Wenn die darzustellenden Daten in 4 16 bit Werten unsigned int bits[4] vorliegen, ist das rausschieben sehr einfach in einer zeitlicb wiederholten Funktion:
1 | static unsigned char zeile=0; |
2 | void refresh(void) |
3 | {
|
4 | unsigned char n; |
5 | unsigned int s; |
6 | // ZEILE<zeile> ausschalten
|
7 | zeile=(zeile+1)&3; |
8 | s=bits[zeile]; |
9 | for(n=0;n<16;n++) |
10 | {
|
11 | DATA=s&1; |
12 | CLOCK=1; |
13 | s>>=1; |
14 | CLOCK=0; |
15 | }
|
16 | LOAD=1; |
17 | LOAD=0; |
18 | // ZEILE<zeile> einschalten
|
19 | }
|
Das Riesen-Problem bei den cubes sind dann nur die Daten, die Bilder die animiert dargestellt werden. Nach ein paar Demos hat nämlich niemand mehr Bock noch hübsche Animationen zu programmieren. Daher verstauben die cubes dann im Schrank.
Majd A. schrieb: > Bin > eigentlich sehr gut in dem Fach stehe auf 1 ... näh echt, bei der qualität von fragen die ich hier von dir lese bist du eher eine ungefährdete 6 minus, aber da bist du im forum in guter gesellschaft und wirst nie einsam. selbstständiges denken wäre bei einer 1 eher zu erwarten, plus infos suchen und zusammenhänge herstellen! oder bin ich zu streng? näh, eher noch zu nett! mt
Majd A. schrieb: > das mit dem Schieberegister, wie das > physisch klappt verstehe ich da ich es anhand eines > Schieberegisterkoffers in der Schule ausprobiert habe Was kann man sich denn unter so einem Teil vorstellen? Insgesamt hat so ein 4x4x4 Würfel ja 64 LEDs. Wenn der 4550 diese direkt ansteuern soll und nicht so viele I/O Pins hat, dann wären Matrizen 2x32, 4x16, 8x8, 4x4x4, 2x4x8,... möglich. Majd A. schrieb: > aber ich verstehe > halt nicht wie ich das programmieren soll bzw. wie ich die einzelnen > Ebenen anpeilen kann oder bis zu 16. LED shiften soll. Das heißt, ihr habt an eine 4x16 gedacht? Ihr wollt doch kein externes Schieberegister ansteuern, oder?
:
Bearbeitet durch User
Apollo M. schrieb: > qualität von fragen die ich Deine Groß,- Kleinschreibung läßt auch sehr zu wünschen übrig. 30Fehler im Diktat. Wer im Glashaus sitzt, soll nicht mit Steinen werfen. Es sind Schüler, die dürfen fragen.
abc.def schrieb: > Deine Groß,- Kleinschreibung läßt auch sehr zu wünschen übrig. 30Fehler > im Diktat. > Wer im Glashaus sitzt, soll nicht mit Steinen werfen. > Es sind Schüler, die dürfen fragen. Die Sache mit dem Stein und dem Glashaus... Egal. Wir brauchen wirklich einen Schaltplan. Ohne den wissen wir nicht, was wie am Schrieberegister hängt und ob und wie der Cube gemultiplext ist.
Sebastian R. schrieb: > Egal. Wir brauchen wirklich einen Schaltplan. Ohne den wissen wir nicht, > was wie am Schrieberegister hängt und ob und wie der Cube gemultiplext > ist. Werde dann morgen den fertigen Schaltplan reinschicken, habe jetzt einen aber der ist noch nicht perfekt bzw. morgen wird er dann fertiggestellt. Apollo M. schrieb: > ... näh echt, bei der qualität von fragen die ich hier von dir lese bist > du eher eine ungefährdete 6 minus, aber da bist du im forum in guter > gesellschaft und wirst nie einsam. Komisch aber habe in der Arbeit eine 1 und in der Ampelplatine ebenfalls :) Ich fragte ja nicht nach den Lösungen sondern lediglich um einen Ansatz das ich weiß wie ich anfangen kann, da es das erste mal ist wo wir mit Schieberegistern und Transistoren arbeiten und nie davon im Unterricht geredet haben. Volker S. schrieb: > Was kann man sich denn unter so einem Teil vorstellen? > > Insgesamt hat so ein 4x4x4 Würfel ja 64 LEDs. Wenn der 4550 diese direkt > ansteuern soll und nicht so viele I/O Pins hat, dann wären Matrizen > 2x32, 4x16, 8x8, 4x4x4, 2x4x8,... möglich. Genau haben es auch vor mit der 4x4x4 Matrix zu macehn und schwierig zu erklären aber haben in der Schule so Koffer wo bereits Schieberegister drin sind dort kann man es dann anschließen jenachdem wie man es braucht und dann halt schieben. Daher habe ich auch die Logik hinter der Sache verstanden aber hatte einen falschen Denkansatz. MaWin schrieb: > Dann solltest du mal den Schaltplan anfordern. An welchen Pin liegt > DATA, CLOCK, LOAD des Schieberegisters und sind die mit 0 oder 1 aktiv. > An welchen Pin liegt die Zeilenansteuerung ZEILE0, ZEILE1, ZEILE2, > ZEILE3 (vermutlich nicht decodiert) und aucb hier ob die aktive Zeile > durch 0 oder 1 ausgelöst wird. Danke denke das wird mich um vieles weiterbringen werde dann nochmal heute Abend wenn ich zuhause bin drüber schauen.
Majd A. schrieb: > Genau haben es auch vor mit der 4x4x4 Matrix Würde ich nicht tun. Im Speicher vom PIC ist eigentlich eh alles eindimensional und ihr müsst euch die Funktionen überlegen, wie das ganze abgebildet wird. Eine zweidimensionale Matrix lässt sich meiner Meinung nach einfacher ansteuern. Am wenigsten Pins/Ports für eine direkte Ansteuerung bräuchte (zweidimensional) natürlich eine 8x8 (16 Pins). Das wären dann sozusagen 8 halbe Ebenen. 4x16 (20 Pins) hätte den Vorteil, dass die LEDs jeweils doppelt so lange an sein könnten, was einer größeren max. Helligkeit gleich kommt. 2x32 wäre aus dieser Sicht noch geschickter, aber das wird wohl etwas eng mit den Pins ;-)
Volker S. schrieb: > Majd A. schrieb: > Genau haben es auch vor mit der 4x4x4 Matrix > > Würde ich nicht tun. Im Speicher vom PIC ist eigentlich eh alles > eindimensional und ihr müsst euch die Funktionen überlegen, wie das > ganze abgebildet wird. > Eine zweidimensionale Matrix lässt sich meiner Meinung nach einfacher > ansteuern. Am wenigsten Pins/Ports für eine direkte Ansteuerung bräuchte > (zweidimensional) natürlich eine 8x8 (16 Pins). Das wären dann sozusagen > 8 halbe Ebenen. > 4x16 (20 Pins) hätte den Vorteil, dass die LEDs jeweils doppelt so lange > an sein könnten, was einer größeren max. Helligkeit gleich kommt. 2x32 > wäre aus dieser Sicht noch geschickter, aber das wird wohl etwas eng mit > den Pins ;-) Dafür ist es aber leider zu spät da die Projekte schon angefangen haben ich bezweifle das ich da noch irgendwas ändern kann^^ sind halt ein Teil für die Zulassung der Prüfung
Majd A. schrieb: > ich bezweifle das ich da noch irgendwas ändern kann^^ Na dann, falls noch Fragen offen sind, besser die Hardware anhand eines Schaltplans beschreiben. Sonst gibt es nur unpassende Vorschläge...
Volker S. schrieb: > Majd A. schrieb: > ich bezweifle das ich da noch irgendwas ändern kann^^ > > Na dann, falls noch Fragen offen sind, besser die Hardware anhand eines > Schaltplans beschreiben. Sonst gibt es nur unpassende Vorschläge... Ja schicke den gleich rein und dann meinen bisherigen Ansatz wie ich es vorhabe zu machen bzw wie ich es bis jetzt gemacht habe
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.