cube 15x15x15

mic-hasch

Member
I now have my 15x15x15 cube almost finished. and wanted to use the octows2811 libery. 2 levels of 225 LED each on one channel. Unfortunately I have to realize that the number of LEDs per strand is too high. From the 300th LED onwards there are many errors. So I either need 2 Octos or would have to install a 16-channel version (actually 15 of course). Unfortunately, my programming knowledge reaches its limits.I'm looking for a good sketch or examples.
i use a teensy 4.1

thanks and sorry for my bad english
 
I tried around a bit more. If I turn the brightness down, the errors occur. If it were the other way around, I would say the power supply is too small. In the basic test it works perfectly. It also appears in the same place in every strand. That's why I don't think it's due to faulty solder joints.

I just swapped the strands. Now the one that made the mistakes before works and vice versa.
 

Attachments

  • IMG_20240218_064629[1].jpg
    IMG_20240218_064629[1].jpg
    490.2 KB · Views: 25
Last edited:
I now have my 15x15x15 cube almost finished. and wanted to use the octows2811 libery. 2 levels of 225 LED each on one channel. Unfortunately I have to realize that the number of LEDs per strand is too high. From the 300th LED onwards there are many errors. So I either need 2 Octos or would have to install a 16-channel version (actually 15 of course). Unfortunately, my programming knowledge reaches its limits.I'm looking for a good sketch or examples.
i use a teensy 4.1

thanks and sorry for my bad english
How are you routing signal ground?
 
the grounds are all connected to each other.the vertical wires alternate + and -.The data inputs are connected via Ethernet cable, 4x signals each, the white ones are also on ground. I also connected the ground from the octoshield
 
I would also assume at first it could be a problem with power or ground.

The data signals are generated in each LED as a new fresh signal for the following LED. If the problem starts at a certain LED it could be that there is one faulty. Looking at the impressivley huge setup I would think it is not an easy option to solder the data line from one LED out and bridge it to the next to check?

I had one setup with a huge number of WS2813 LEDs (~10,000) from BTF lighting where 2 or 3 LEDs had strange behaviour at low brightness. I saw in a video (*) about the manufacturing process that there is a tolerance checking. LEDs are sorted out with certain criteria. I hope that you don't have bad LEDs in your build.

(*) really interesting video:
 
the grounds are all connected to each other.the vertical wires alternate + and -.The data inputs are connected via Ethernet cable, 4x signals each, the white ones are also on ground. I also connected the ground from the octoshield
So the data signal and signal ground aren't run alongside each other? That could lead to large loop areas and lots of stray inductance on the digital signal.
 
OK, but the problem only appears after about 2/3 of the strand's length. The 8th is only half the length and doesn't cause any problems. So my original question comes back. So I need 15 channels (The next option would be 25) instead of 8... how could this be realized?
 
Last edited:
I've made several more attempts now...
- intentionally degraded the data line... same result, not worse
- LED numbers reduced in software... no errors
- LED numbers reduced in hardware... no errors
- clock rate changed (+ and -).. same result
- fade and delay time reduced... visually better of course, but not the solution

Tomorrow I'll add some more voltage bypasses, but I don't think it will help. This is more about the statics...
Due to the architecture of the cube, I cannot send the data ground in parallel (inside).

I also build a 9x cube (729LED) with the same architecture, which only has one data input, controlled with Arduino Mega, I have no glitches at all...
 
it was so easy...
parallel output
15 channels each with 225 LEDs..
no more problems


The WS2811 LED is too slow and the Octows is the next brake With Teensy 4.1 I have enough pins and speed



I would also like to mention that between Teensy and Cube, now that it works, I have 4 10m long LAN cables for data transfer... and it still works. where I found one (out of about 10,000 8) ) bad solder joints and two bad led (all on the outside :) )...now.
For my programming attempts it's easier this way... One of the next steps is to activate the Ethernet interface or via ESP and WiFi. Unfortunately that doesn't work so far... In the end I want to control the cube via art-net and integrate it into my light show

Thank you for your answers..and I hope my questions help others too
 
Last edited:
How do I get these lines to wave

not surprisedFrom various attempts there are some superfluous lines that don't really interfere with the function


Code:
#include <FastLED.h>


#define LED_TYPE    WS2811
#define COLOR_ORDER RGB


#define NUM_LEDS_PER_STRIPp 225
#define NUM_STRIPS 15
CRGB leds[NUM_STRIPS * NUM_LEDS_PER_STRIPp];
#define NUM_LEDS_PER_STRIP    3375
#define BRIGHTNESS          255
#define FRAMES_PER_SECOND  1000000
#define SIZE 15
uint8_t brightness = 250;
uint8_t hue = 0;
uint8_t fade = 10;
uint8_t delaytime = 0;
uint16_t delaytime1;
uint16_t delaytime2;
uint16_t delaytime3;
const int width = 15;
const int height = 15;
const int depth = 15;
uint32_t counter = 0;
uint32_t plane = 0;
uint16_t prev[SIZE * SIZE] = {0};

byte die6D=0;
byte die6z=0;
byte xp=0;
byte yp=0;
byte zp=0;
byte xc=0;
byte yc=0;
byte zc=0;

//FUNCTIONS
//xy to led number translation from FastLED extended to z dimension and protected from out of range  erwitert um wechsel z
uint16_t XYZ( uint8_t x, uint8_t y, uint8_t z) {


  uint16_t i;


  if (x < width && y < height && z < depth) {
    if ( z & 1) {  //ebene gerade
      if ( y & 1) {  //line gerade
        uint8_t reverseY = (height - 1) - y;
        i = (reverseY * width) + x;  //lines run rückwards

      } else {
        uint8_t reverseY = (height - 1) - y;
        uint8_t reverseX = (width - 1) - x;
        i = (reverseY * width) + reverseX; // Odd lines run rückwards und  Odd rows run rückwards
      }
    } else {  //ebene ungerade
      if ( y & 1) {
        // Odd rows run backwards
        uint8_t reverseX = (width - 1) - x;
        i = (y * width) + reverseX;
      } else {
        // Even rows run forwards
        i = (y * width) + x;// Even rows run forwards
      }

   
    }
 
  i = i + (z * width * height);
 
  return i;
    } else {
      return 0;
    }
}

  //position and movement variables
  int x;
  int y;
  int z;

  int xchange;
  int ychange;
  int zchange;

 

void setup() {
    FastLED.setMaxPowerInMilliWatts(90000); //max 100W for this power supply
    delay(1000);
//FastLED.addLeds<OCTOWS2811>(leds, NUM_LEDS_PER_STRIPp);
FastLED.addLeds<NUM_STRIPS, WS2811, 1>(leds,NUM_LEDS_PER_STRIPp);

  FastLED.setBrightness(BRIGHTNESS);
   
randomSeed(255);
}

 
 
void loop() {
  //choose random face to "enter" from and starting position on that face,
  //and how the line is going to move

  if(xp>14)
  {
   yp++ ;
    xp=0;
    yc=1;
 
   if(yp>14)
  { yp=0;
    //zp++;
  }}
 
  if(yp>14)
  {
    yp=0;
  }
   if(zp>14)
  { xc=1;
    zp=0;
   
  }
   
    x = xp;
    y = yp;
    z = zp;
    xchange = 1;
    ychange = 1;
    zchange = 1;
       
    while(x>=0 && x<width && y>=0 && y<height && z>=0 && z<depth){
     
      int ledToLight = XYZ(x,y,z);
      //int ledToLight = XYZ(x+1,y+1,z+1);
      leds[ledToLight] = (CHSV(hue,255,brightness));
      FastLED.show();
     
      fadeToBlackBy(leds, NUM_LEDS_PER_STRIP, fade);
 
      x = x + xchange;
      y = y + ychange;
      z = z + zchange;

      delay(1);

  }  
    x = xp;
    y = yp;
    z = 14;
    xchange = 0;
    ychange = 0;
    zchange = -1;

     while(x>=0 && x<width && y>=0 && y<height && z>=0 && z<depth){
     
      int ledToLight = XYZ(x,y,z);
      //int ledToLight = XYZ(x+1,y+1,z+1);
      leds[ledToLight] = (CHSV(hue,255,brightness));
      FastLED.show();
     
      fadeToBlackBy(leds, NUM_LEDS_PER_STRIP, fade);
     
      x = x + xchange;
      y = y + ychange;
      z = z + zchange;

      delay(0);

       }
 x = xp;
    y = yp;
    z = zp;
    xchange = 0;
    ychange = 0;
    zchange = 1;

     while(x>=0 && x<width && y>=0 && y<height && z>=0 && z<depth){
     
      int ledToLight = XYZ(x,y,z);
      //int ledToLight = XYZ(x+1,y+1,z+1);
      leds[ledToLight] = (CHSV(hue,255,brightness));
      FastLED.show();
     
      fadeToBlackBy(leds, NUM_LEDS_PER_STRIP, fade);
     
      x = x + xchange;
      y = y + ychange;
      z = z + zchange;

      delay(0);

       }  
 
     x = xp;
    y = 0;
    z = zp;
    xchange = 1;
    ychange = 1;
    zchange = 0;

     while(x>=0 && x<width && y>=0 && y<height && z>=0 && z<depth){
     
      int ledToLight = XYZ(x,y,z);
      //int ledToLight = XYZ(x+1,y+1,z+1);
      leds[ledToLight] = (CHSV(hue,255,brightness));
      FastLED.show();
     
      fadeToBlackBy(leds, NUM_LEDS_PER_STRIP, fade);
     
      x = x + xchange;
      y = y + ychange;
      z = z + zchange;

      delay(0);

       }
 

xp++;
yp++;
//zp++;

die6D++;
 hue = hue+10; //move through rainbow every cycle

 
}
 
Back
Top