ShiftOut mit mehr als 16 Bit

Hallo
Ich versuche diese Prozedur auf 48 Bit auszuweiten bekomme es aber einfach nicht und erbitte nun eure Hilfe.
Das ist das was ich im Moment habe ,was auch einwandfrei funktioniert.

unsigned int sequence0[16] = {
  0x0,0x1,0x2,0x4,0x8,0x10,0x20,0x40,0x80,0x100,0x200,0x400,0x800,0x1000,0x2000,0x4000};

unsigned int sequence1[16] = {
  0x0,0x1,0x3,0x7,0xf,0x1f,0x3f,0x7f,0xff,0x1ff,0x3ff,0x7ff,0xfff,0x1fff,0x3fff,0x7fff};

digitalWrite(latchPin, LOW);

      shiftOut(dataPin, clockPin, MSBFIRST, B00000000);  
      shiftOut(dataPin, clockPin, MSBFIRST, B00000000);  
      shiftOut(dataPin, clockPin, MSBFIRST, B00000000); 
      shiftOut(dataPin, clockPin, MSBFIRST, B00000000); 
      shiftOut(dataPin, clockPin, MSBFIRST, sequence0[encoder0Pos]>>8);
      shiftOut(dataPin, clockPin, MSBFIRST, sequence0[encoder0Pos]);

    digitalWrite(latchPin, HIGH);

Das sequence 0 und 1 dann später mehr Daten beinhalten müssen ist klar ,mir gehts nur um die Ausgabe per shiftOut.

Vielen dank für eure Mühe und Zeit im vorraus

Das ist das was ich im Moment habe ,was auch einwandfrei funktioniert.

Wenn es geht, wo ist dann das Problem genau?

32 Bit bekommt man in einen unsigned long. Das kann man dann einfach >> 16 und >> 24 schieben. Weiß nicht wo du die anderen Bytes herbekommst.

Die Hardware kann bei 6 SR auch Probleme machen. 100nF Abblockkondensatorn an jedem IC nicht vergessen! SPI zu verwenden wäre auch nicht verkehrt.

Vielen Dank für die Antwort .
Funktionieren tut es einwandfrei mit 16 bit .
die 100 nf pro ic ist klar .

Darum geht es :

Darum geht es :

So ich habe es nun anders gelöst. Für die es Interessiert oder nach sowas googlen und nix finden.

//Pin connected to ST_CP of 74HC595
int latchPin = 2;
//Pin connected to SH_CP of 74HC595
int clockPin = 1;
////Pin connected to DS of 74HC595
int dataPin = 0;

#define encoder0PinA  10
#define encoder0PinB  11

int encoder0Pos = 0;
int n = LOW;
int encoder0PinALast = LOW;
int encoder0sw = A0;

int mode = 1;

unsigned int seq1 = 0;
unsigned int seq2 = 0;
unsigned int seq3 = 0;
unsigned int seq4 = 0;
unsigned int seq5 = 0;
unsigned int seq6 = 0;


unsigned long int sequence0[9] = {
  0x0,0x1,0x2,0x4,0x8,0x10,0x20,0x40,0x80};

unsigned long int sequence1[9] = {
  0x0,0x1,0x3,0x7,0xf,0x1f,0x3f,0x7f,0xff};



void setup() {
  //set pins to output so you can control the shift register
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);


  pinMode(encoder0PinA, INPUT); 
  digitalWrite(encoder0PinA, HIGH);       // turn on pullup resistor
  pinMode(encoder0PinB, INPUT); 
  digitalWrite(encoder0PinB, HIGH);       // turn on pullup resistor
  attachInterrupt(0, doEncoder, CHANGE);
  // attachInterrupt(1, doEncoder, CHANGE);
}



void doEncoder() {
  n = digitalRead(encoder0PinA);
  if ((encoder0PinALast == LOW) && (n == HIGH)) {
    if (digitalRead(encoder0PinB) == LOW) {
      encoder0Pos--;  
    } 
    else {
      encoder0Pos++;
    }
  } 
  encoder0PinALast = n;
}


void ledmode_mode1_volume(){

  if(encoder0Pos < 9){
    seq6 = 0;
    seq5 = 0;
    seq4 = 0;
    seq3 = 0;
    seq2 = 0;
    seq1 = encoder0Pos;  
  }
  if(encoder0Pos > 8){
    seq6 = 0;
    seq5 = 0;
    seq4 = 0;
    seq3 = 0;
    seq2 = encoder0Pos - 8;
    seq1 = 8;  
  }
  if(encoder0Pos > 16){
    seq6 = 0;
    seq5 = 0;
    seq4 = 0;
    seq3 = encoder0Pos - 16;
    seq2 = 8;
    seq1 = 8;
  }
  if(encoder0Pos > 24){
    seq6 = 0;
    seq5 = 0;
    seq4 = encoder0Pos - 24;
    seq3 = 8;
    seq2 = 8;
    seq1 = 8;
  }
  if(encoder0Pos > 32){
    seq6 = 0;
    seq5 = encoder0Pos - 32;
    seq4 = 8;
    seq3 = 8;
    seq2 = 8;
    seq1 = 8;
  }
  if(encoder0Pos > 40){
    seq6 = encoder0Pos - 40;
    seq5 = 8;
    seq4 = 8;
    seq3 = 8;
    seq2 = 8;
    seq1 = 8;
  }

  digitalWrite(latchPin, LOW);

  shiftOut(dataPin, clockPin, MSBFIRST, sequence1[seq6]); 
  shiftOut(dataPin, clockPin, MSBFIRST, sequence1[seq5]); 
  shiftOut(dataPin, clockPin, MSBFIRST, sequence1[seq4]);
  shiftOut(dataPin, clockPin, MSBFIRST, sequence1[seq3]);
  shiftOut(dataPin, clockPin, MSBFIRST, sequence1[seq2]);
  shiftOut(dataPin, clockPin, MSBFIRST, sequence1[seq1]);

  digitalWrite(latchPin, HIGH); 

}


void ledmode_mode0_volume(){

  if(encoder0Pos < 9){
    seq6 = 0;
    seq5 = 0;
    seq4 = 0;
    seq3 = 0;
    seq2 = 0;
    seq1 = encoder0Pos;  
  }
  if(encoder0Pos > 8){
    seq6 = 0;
    seq5 = 0;
    seq4 = 0;
    seq3 = 0;
    seq2 = encoder0Pos - 8;
    seq1 = 0;  
  }
  if(encoder0Pos > 16){
    seq6 = 0;
    seq5 = 0;
    seq4 = 0;
    seq3 = encoder0Pos - 16;
    seq2 = 0;
    seq1 = 0;
  }
  if(encoder0Pos > 24){
    seq6 = 0;
    seq5 = 0;
    seq4 = encoder0Pos - 24;
    seq3 = 0;
    seq2 = 0;
    seq1 = 0;
  }
  if(encoder0Pos > 32){
    seq6 = 0;
    seq5 = encoder0Pos - 32;
    seq4 = 0;
    seq3 = 0;
    seq2 = 0;
    seq1 = 0;
  }
  if(encoder0Pos > 40){
    seq6 = encoder0Pos - 40;
    seq5 = 0;
    seq4 = 0;
    seq3 = 0;
    seq2 = 0;
    seq1 = 0;
  }


  digitalWrite(latchPin, LOW);

  shiftOut(dataPin, clockPin, MSBFIRST, sequence0[seq6]); 
  shiftOut(dataPin, clockPin, MSBFIRST, sequence0[seq5]); 
  shiftOut(dataPin, clockPin, MSBFIRST, sequence0[seq4]);
  shiftOut(dataPin, clockPin, MSBFIRST, sequence0[seq3]);
  shiftOut(dataPin, clockPin, MSBFIRST, sequence0[seq2]);
  shiftOut(dataPin, clockPin, MSBFIRST, sequence0[seq1]);

  digitalWrite(latchPin, HIGH); 

}


void loop() {
  if (encoder0Pos < 0){
    encoder0Pos = 0;
  }
  if (encoder0Pos > 48){
    encoder0Pos = 48;
  }

  switch(mode){
  case 0:
    ledmode_mode0_volume();
    break;
  case 1:
    ledmode_mode1_volume();
    break;
  }


}

Danke für die anreize.