3X3x3 RGB LED Cube

  • Hallo an alle,


    wir wollen uns einen 3x3x3 RGB LED Cube nach folgendem Video bauen:

    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

    Wir haben im Internet schon ettliche Seite durchforscht, aber haben nichts produktives gefunden, entweder nur den Schaltplan oder nur das Programm aber nicht beides zusammen.
    Hat jemand darin erfahrung oder sogar einen Schaltplan mit lauffähigem Programm?


    Wir würden uns über jeden Beitrag freuen. :thumbup:

  • Klingt für mich nach nachbauen...

    Wir haben im Internet schon ettliche Seite durchforscht, aber haben nichts produktives gefunden, entweder nur den Schaltplan oder nur das Programm aber nicht beides zusammen.

    Warum in die Ferne schweifen, wenn das Gute liegt so nah...? :D


    Ansonsten gäbe es das ganze noch als Bausatz bei Hypnocube, halt gleich in 4x4x4 ;) - 3er gibt's auch irgendwo, finde ich gerade nicht mehr... ich habe den Link verschmissen, hatte mir da nur das Foto rausgeklaut, weil ich die Art der Verdrahtung abkupfern will: :D



    (Habe so im Hinterkopf, dass das bei Evilmadscience war, aber dort ist kein Cube im Shop....)


    EDIT: ach, gerade noch mal meinen eigenen Beitrag in Nenis Thread gelesen, da steht's ja drin, das Teil ist von Coilgunpower 8o - und von dem ist auch wiederum das oben verlinkte Youtube-Video (URL steht ja ganz am Schluss drin...) - so klein ist das Netz... :D

    It's only light - but we like it!


    Da es sich in letzter Zeit häuft: Ich beantworte keine PNs mit Fragen, die sich auch im Forum beantworten lassen!
    Insbesondere solche von Mitgliedern mit 0 Beiträgen, die dann meist auch noch Sachen fragen, die bereits im entsprechenden Thread beantwortet wurden.
    Ich bin keine private Bastler-Hotline, technische Tipps etc. sollen möglichst vielen Lesern im Forum helfen!

    Einmal editiert, zuletzt von Pesi ()

  • Wenn das Projekt durch das Forum hier betreut werden soll, seid ihr mit einem ATMEGA besser dran. Hier programmieren fast alle Atmel µCs, also dafür bekommst du deutlich mehr Support! :)

  • Also bei beiden Schaltungen ist ja der jeweils gültige Steuer-Code von mir im entsprechenden von Pesi oben verlinkten Original-Beitrag (unter dem Schaltplan und der Funktionsbeschreibung) als ZIP-Datei verlinkt. Die Dateien beinhalten den Code als solches als BASCOM-Datei und als HTML-Ansicht und nochmals den jeweiligen Schaltplan als GIF.


    Der von mir zur Verfügung gestellte Code ist zwar keine fertige Applikation, aber er abstrahiert alles was mit der Ansteuerung der LEDs bzw. den Cube-Animationen zu tun hat in einer Funktion, so dass es ein Leichtes sein sollte, sich mittels dem bereitgestellten 'Framework' (und der Beschreibung dazu) eine entsprechend auf die eigenen Wünsche zugeschnittene Applikation zusammenzuschustern.


    Falls ihr aber ein fertiges, 'out of the box'-laufendes Ding haben wollt/müsst, dann müsst ihr euch wohl mit sonst jemandem aus dem Forum hier, der auch so einen RGB-Cube machen will und auch etwas von BASCOM versteht (und somit auch das Framework nutzen kann), zusammentun und es dann in einem gemeinsamen Projekt machen.


    Ich habe damals diese Vorleistung erbracht, weil mich die Ansteuerung aus programmiererischer Sicht gereizt hat, darüber hinaus habe ich aber keine Zeit, mich um Cube-Projekte zu kümmern.


    Gruss
    Neni

  • Wir haben ein Programm welches für PIC programmiert ist könnte uns dieses jemand umschreiben. Sodass wir es auf den Atmel Mega Microcontroler bekommen.



    // This program creates simple patterns on a 3x3x3 RGB LED cube




    #include
    #define red 1
    #define blue 4
    #define green 2
    #define yellow 3
    #define cyan 6
    #define purple 5
    #define white 7


    unsigned short colum = 0, ctop = 0, cmid = 0, cbot = 0;
    unsigned int count, count2 ;


    void initPORTS () {
    osccon = 0b01111110 ; // set internal clock to 8MHz
    trisa = 0; // all ports outputs
    trisb = 0;
    trisc = 0;
    trisd = 0;
    trise = 0;
    adcon1 = 0x0F; // A/D to digital
    porta = 0; // set all ports to low
    portb = 0;
    portc = 0;
    portd = 0;
    porte = 0;
    }
    // this funcion alows the leds to be dimmer than normal
    void RGBfade ( unsigned short col, unsigned short top,unsigned short mid,unsigned short bot, unsigned short tp, unsigned short mp, unsigned short bp) {
    unsigned int off,i;
    // selecting what section of LEDs to light
    switch (col) {
    case 0: portb =~ 0b00000000; setBit (portc ,3); break ;
    case 1: portb =~ 0b00000001; setBit (portc ,3); break ;
    case 2: portb =~ 0b00000010; setBit (portc ,3); break ;
    case 3: portb =~ 0b00000100; setBit (portc ,3); break ;
    case 4: portb =~ 0b00001000; setBit (portc ,3); break ;
    case 5: portb =~ 0b00010000; setBit (portc ,3); break ;
    case 6: portb =~ 0b00100000; setBit (portc ,3); break ;
    case 7: portb =~ 0b01000000; setBit (portc ,3); break ;
    case 8: portb =~ 0b10000000; setBit (portc ,3); break ;
    case 9: portb =~ 0b00000000; resBit (portc ,3); break ;
    }
    portc &=~ (0b00000111);
    portd &=~ (0b00000111);
    porta &=~ (0b00001110);
    portc |= (top);
    for (i = 0; i < tp; ++i) { // this creates a PWM for the three LEDs


    }
    portc &=~ (0b00000111);
    portd |= (mid);
    for (i = 0; i < mp; ++i) {


    }
    portd &=~ (0b00000111);
    porta |= (bot<<1);
    for (i = 0; i < bp; ++i) {


    }
    porta &=~ (0b00001110);
    off = (160 - (tp+mp+bp));
    for (i = 0; i < off; ++i) {


    }
    }


    // this is the main funcion for displaying the LEDs
    void RGBcube (unsigned short col,unsigned short top,unsigned short mid,unsigned short bot,unsigned int dur) {
    switch (col) {
    case 0: portb =~ 0b00000000; setBit (portc ,3); break ;
    case 1: portb =~ 0b00000001; setBit (portc ,3); break ;
    case 2: portb =~ 0b00000010; setBit (portc ,3); break ;
    case 3: portb =~ 0b00000100; setBit (portc ,3); break ;
    case 4: portb =~ 0b00001000; setBit (portc ,3); break ;
    case 5: portb =~ 0b00010000; setBit (portc ,3); break ;
    case 6: portb =~ 0b00100000; setBit (portc ,3); break ;
    case 7: portb =~ 0b01000000; setBit (portc ,3); break ;
    case 8: portb =~ 0b10000000; setBit (portc ,3); break ;
    case 9: portb =~ 0b00000000; resBit (portc ,3); break ;
    }
    portc &=~ (0b00000111); // Lights selected LEDs
    portc |= (top);
    portd &=~ (0b00000111);
    portd |= (mid);
    porta &=~ (0b00001110);
    porta |= (bot<<1);
    vdelay_ms (dur);
    }
    // this funcion lights each layer and the colors move upwards
    void RGBup () {
    for (count2 = 0; count2 < 25; ++count2) {
    for (count = 0; count < 100; ++count) {
    RGBcube (colum,red,green,blue,1);
    ++colum;
    if (colum > 9) colum = 1;
    }
    for (count = 0; count < 100; ++count) {
    RGBcube (colum,green,blue,red,1);
    ++colum;
    if (colum > 9) colum = 1;
    }
    for (count = 0; count < 100; ++count) {
    RGBcube (colum,blue,red,green,1);
    ++colum;
    if (colum > 9) colum = 1;
    }
    }
    }
    // this funcion makes a spinning pattern around a green center
    void RGBspin () {
    for (count2 = 0; count2 < 25; ++count2) {
    for (count = 0; count < 25; ++count) {
    RGBcube (1,red,red,red,1);
    RGBcube (9,red,red,red,1);
    RGBcube (5,green,green,green,1);
    }
    for (count = 0; count < 25; ++count) {
    RGBcube (2,red,red,red,1);
    RGBcube (8,red,red,red,1);
    RGBcube (5,green,green,green,1);
    }
    for (count = 0; count < 25; ++count) {
    RGBcube (3,red,red,red,1);
    RGBcube (7,red,red,red,1);
    RGBcube (5,green,green,green,1);
    }
    for (count = 0; count < 25; ++count) {
    RGBcube (6,red,red,red,1);
    RGBcube (4,red,red,red,1);
    RGBcube (5,green,green,green,1);
    }
    }
    }
    // shows each color using the RGBfade function
    void RGBcolor () {
    for (count2 = 1; count2 < 8; ++count2) {
    for (count = 0; count < 50; ++count){
    for (colum = 0; colum < 10; ++colum){
    RGBfade (colum,count2,count2,count2,count,count,count) ;
    }
    }
    for (count = 50; count > 0; --count){
    for (colum = 0; colum < 10; ++colum){
    RGBfade (colum,count2,count2,count2,count,count,count) ;
    }
    }
    }
    }
    // displays random LEDs 25 times
    void RGBrand () {
    unsigned int color,c,r,i;
    for (i = 0; i< 25; ++i){
    color = rand ();
    color /= 5461;
    ++color;
    c = rand ();
    c /= 3700;
    ++c;
    r = rand ();
    r /= 10930;
    switch (r) {
    case 0: RGBcube (c,0,0,color,500); break;
    case 1: RGBcube (c,0,color,0,500); break;
    case 2: RGBcube (c,color,0,0,500); break;
    }
    }
    }
    // Creates a box pattern of each color
    void RGBbox () {
    for (count2 = 1; count2 < 8; ++count2) {
    for (count = 0; count < 150; ++count) {
    RGBcube (1,0,0,count2,1);
    }
    for (count = 0; count < 25; ++count) {
    RGBcube (1,0,count2,count2,1);
    RGBcube (2,0,count2,count2,1);
    RGBcube (4,0,count2,count2,1);
    RGBcube (5,0,count2,count2,1);
    }
    for (count = 0; count < 25; ++count) {
    for (colum = 0; colum < 10; ++colum){
    RGBcube (colum,count2,count2,count2,1) ;
    }
    }
    for (count = 0; count < 25; ++count) {
    RGBcube (9,0,count2,count2,1);
    RGBcube (6,0,count2,count2,1);
    RGBcube (5,0,count2,count2,1);
    RGBcube (8,0,count2,count2,1);
    }
    for (count = 0; count < 300; ++count) {
    RGBcube (9,0,0,count2,1);
    }
    for (count = 0; count < 25; ++count) {
    RGBcube (9,0,count2,count2,1);
    RGBcube (6,0,count2,count2,1);
    RGBcube (5,0,count2,count2,1);
    RGBcube (8,0,count2,count2,1);
    }
    for (count = 0; count < 25; ++count) {
    for (colum = 0; colum < 10; ++colum){
    RGBcube (colum,count2,count2,count2,1) ;
    }
    }
    for (count = 0; count < 25; ++count) {
    RGBcube (3,0,count2,count2,1);
    RGBcube (2,0,count2,count2,1);
    RGBcube (5,0,count2,count2,1);
    RGBcube (6,0,count2,count2,1);
    }
    for (count = 0; count < 300; ++count) {
    RGBcube (3,0,0,count2,1);
    }
    for (count = 0; count < 25; ++count) {
    RGBcube (3,0,count2,count2,1);
    RGBcube (2,0,count2,count2,1);
    RGBcube (5,0,count2,count2,1);
    RGBcube (6,0,count2,count2,1);
    }
    for (count = 0; count < 25; ++count) {
    for (colum = 0; colum < 10; ++colum){
    RGBcube (colum,count2,count2,count2,1) ;
    }
    }
    for (count = 0; count < 25; ++count) {
    RGBcube (7,0,count2,count2,1);
    RGBcube (4,0,count2,count2,1);
    RGBcube (5,0,count2,count2,1);
    RGBcube (8,0,count2,count2,1);
    }
    for (count = 0; count < 300; ++count) {
    RGBcube (7,0,0,count2,1);
    }
    for (count = 0; count < 25; ++count) {
    RGBcube (7,0,count2,count2,1);
    RGBcube (4,0,count2,count2,1);
    RGBcube (5,0,count2,count2,1);
    RGBcube (8,0,count2,count2,1);
    }
    for (count = 0; count < 25; ++count) {
    for (colum = 0; colum < 10; ++colum){
    RGBcube (colum,count2,count2,count2,1) ;
    }
    }
    for (count = 0; count < 25; ++count) {
    RGBcube (1,0,count2,count2,1);
    RGBcube (2,0,count2,count2,1);
    RGBcube (4,0,count2,count2,1);
    RGBcube (5,0,count2,count2,1);
    }
    for (count = 0; count < 150; ++count) {
    RGBcube (1,0,0,count2,1);
    }
    }
    }
    // main funcion
    void main () {
    initPORTS () ;
    while (1) {
    RGBrand () ; // order of patterns
    RGBbox ();
    RGBup ();
    RGBspin ();
    RGBcolor ();
    }
    }

  • Sry das das jetzt etwas unhöflich wirke.. Aber ich finds grad ua arg, dass ihr hierher kommt...und vom Forum verlangt, dass es die Arbeit für euch macht.
    Ihr könnt hier sehr viel Unterstützung bekommen, aber ich denke nicht, dass jemand die Arbeit zu 100% für euch macht. Schließlich ist der Code nicht wenig.
    Und einfach nur einen Code kopieren, dann hierher kommen und übersetzen lassen find ich eine Frechheit.

  • Vollste Zustimmung hierzu! - ich denke, für Euch wäre es dann doch besser, einfach den Bausatz von Coilgunpower zu kaufen (gibt's bei Sparkfun)... da passt dann auch direkt der PIC-Code drauf... und nur am Rande: man macht das nicht, dass man einfach fremden Code irgendwo postet, zumindest gibt man dann die Quelle an!

    It's only light - but we like it!


    Da es sich in letzter Zeit häuft: Ich beantworte keine PNs mit Fragen, die sich auch im Forum beantworten lassen!
    Insbesondere solche von Mitgliedern mit 0 Beiträgen, die dann meist auch noch Sachen fragen, die bereits im entsprechenden Thread beantwortet wurden.
    Ich bin keine private Bastler-Hotline, technische Tipps etc. sollen möglichst vielen Lesern im Forum helfen!

  • Das ist uns klar. aber die Programmierung eines Mircocontrolers ist für uns völliges Neuland. Deshalb wäre es nicht schlecht wenn uns jemand erklären würd wie man z.B. ein solches Programm auf dem Atmel Mega schreibt. Falls uns jemand helfen kann wäre das sehr nett. Wie gesagt Microcontroler zu Programmieren ist für uns völliges Neuland.

  • Ist ja okay, aber dann beginnt doch klein.. Zb mit Pesis normalem Cube. Wenn ihr den habt, könnt ihr euch erstmal den Code ansehen und nachzuvollziehen. Erst wenn mans verstanden hat kann man es ausbauen.
    Falls ihr den Weg wählt würde ich mir auch mal Gedanken drüber machen in welcher Sprache ihr programmieren wollt.
    Ausserdem kann ich euch gleich sagen dass man es leider nicht von heute auf morgen lernt.
    Wie sehen eigentlich eure Kenntnisse in den Bereichen aus?

  • Kenntnisse im Bereich Elektronik sind vorhanden. Aber für den RGB LED cube brauchen wir noch ein Funktionsfähiges Programm an welchem wir uns dann die Kenntnisse mit Microcontrolern aneignen wollen. Learning by Doing! Deshalb wollten wir auch ein Programm welches wir dann überspielen wollten und da wiederum dieses umprogrammieren. wenn du weißt was wir meinen :)

  • "Learning by doing" heisst "Lernen durch machen", nicht durch machen lassen! ;)


    also hier: schauen was die Befehle beim Pic bewirken, schauen welche Befehle diesen am AVR entsprechen, wie die Ports verteilt sind, Programm selbst übersetzen...


    da das etwas viel am Anfang ist, wäre learning by doing hier wohl eher: erst mal LED blinken lassen, dann LED mit PWM ansteuern, dann mal ne Matrix ansteuern (nix anderes ist ein Cube) - für all das gibt's massig Tutorials, auch hier im Forum


    durch Programm übersetzen lassen und dann drin rumpfuschen lernt man gar nix! - *Falls* Euch jetzt jemand hier dieses PIC-Programm nach AVR übersetzt, was habt Ihr dann davon... ?( - mit Null µC-Kenntnissen steht Ihr auch davor wie der Ochs' vorm Berg - Oder wie habt Ihr Euch das vorgestellt, in dem fertigen Programm was "umzuprogrammieren", wenn Ihr noch nicht mal wisst, was diese ganzen Wörter bedeuten...?


    abgesehen davon, das könnt Ihr mir glauben, ist es auch für nen geübten Programmierer einfacher, so was von Grund auf neu aufzustellen, als sich in fremden Code einzudenken - bei Euch zum aktuellen Wissensstand Null Chance!


    Also: lieber erst mal klein anfangen, wenn das zuviel Arbeit ist, dann halt Bausatz kaufen...


    p.S.: Bist Du König...? - wegen dem Pluralis Majestatis ("Wir"...) :D

    It's only light - but we like it!


    Da es sich in letzter Zeit häuft: Ich beantworte keine PNs mit Fragen, die sich auch im Forum beantworten lassen!
    Insbesondere solche von Mitgliedern mit 0 Beiträgen, die dann meist auch noch Sachen fragen, die bereits im entsprechenden Thread beantwortet wurden.
    Ich bin keine private Bastler-Hotline, technische Tipps etc. sollen möglichst vielen Lesern im Forum helfen!

  • Haha nein er ist nicht König, aber er ist zwei Personen :D
    Im ersten Beitrag stehts doch, wenn ich mich nicht irre ;)


    Ich würde euch auch raten, einfach mal anfangen mit Led ein, Led aus ...und dann kanns weiter gehn..
    Und ich würde euch nochmal raten: Probiert zuerst den normalen Cube aus Pesis & Fightclubs Tutorial nach, und versucht es zu verstehen.
    So dreimal hab ichs gesagt, jez halt ich meinen Mund :D