Led Wall mit glediator Arduino und ws2812b LED Stripes

Hi ich wollte mal fragen ob jemand weis wie das mit dem Glediador funktioniert und wie ich es hin bekomme das meine Led stripes angesprochen werden.

Ich nutze die von Glediator angebotene ino

//##############################################################################
//##############################################################################
//                                                                             #
// Glediator to WS2812 pixel converter                                         #
// by R. Heller                                                                #
// V 1.0 - 07.01.2014                                                          #            
// wwww.SolderLab.de                                                           #
//                                                                             #
// Receives serial data in Glediator protocol format @ 1 MBit/s                #
// and distributes it to a connectect chain of WS2812 pixels                   #
//                                                                             #
// Adjust the correct DATA PIN and the correct NUMBER OF PIXELS you are using  # 
// in the definitions section below before uploading this sketch to your       #
// Arduino device.                                                             #
//                                                                             #
// Maxiumim number of supported pixeles is 512 !!!                             #
//                                                                             #
// In the Glediator software set output mode to "Glediator_Protocol",          #
// color order to "GRB" and baud rate to "1000000"                             #
//                                                                             #
//##############################################################################
//##############################################################################


//##############################################################################
//                                                                             #
// Definitions --> Make changes ONLY HERE                                      #
//                                                                             #
// To find out the correct port, ddr and pin name when you just know the       #
// Arduino's digital pin number just google for "Arduino pin mapping".         #
// In the present example digital Pin 6 is used which corresponds to "PORTD",  #
// "DDRD" and "6", respectively.                                               #
//                                                                             #
//##############################################################################

#define DATA_PORT          PORTD
#define DATA_DDR           DDRD						
#define DATA_PIN           6							
#define NUMBER_OF_PIXELS   180


//##############################################################################
//                                                                             #
// Variables                                                                   #
//                                                                             #
//##############################################################################

unsigned char display_buffer[NUMBER_OF_PIXELS * 3];
static unsigned char *ptr;
static unsigned int pos = 0;

volatile unsigned char go = 0;


//##############################################################################
//                                                                             #
// Setup                                                                       #
//                                                                             #
//##############################################################################

void setup()
{
  // Set data pin as output
  DATA_DDR |= (1 << DATA_PIN);
  
  // Initialize UART
  UCSR0A |= (1<<U2X0);                                
  UCSR0B |= (1<<RXEN0)  | (1<<TXEN0) | (1<<RXCIE0);   
  UCSR0C |= (1<<UCSZ01) | (1<<UCSZ00)             ; 
  UBRR0H = 0;
  UBRR0L = 1; //Baud Rate 1 MBit (at F_CPU = 16MHz)
  
  ptr=display_buffer;
  
  //Enable global interrupts
  sei();
}


//##############################################################################
//                                                                             #
// Main loop                                                                   #
//                                                                             #
//##############################################################################

void loop()
{  	
  if (go==1) 
  {
    cli();
    ws2812_sendarray(display_buffer, NUMBER_OF_PIXELS * 3); 
    sei();
    go=0;
  }
}


//##############################################################################
//                                                                             #
// UART-Interrupt-Prozedur (called every time one byte is compeltely received) #
//                                                                             #
//##############################################################################

ISR(USART_RX_vect) 
{
  unsigned char b;
  b=UDR0;
  
  if (b == 1)  {pos=0; ptr=display_buffer; return;}    
  if (pos == (NUMBER_OF_PIXELS*3)) {} else {*ptr=b; ptr++; pos++;}  
  if (pos == ((NUMBER_OF_PIXELS*3)-1)) {go=1;}
}


//##############################################################################
//                                                                             #
// WS2812 output routine                                                       #
// Extracted from a ligh weight WS2812 lib by Tim (cpldcpu@gmail.com)          #
// Found on wwww.microcontroller.net                                           #
// Requires F_CPU = 16MHz                                                      #
//                                                                             #
//##############################################################################

void ws2812_sendarray(uint8_t *data,uint16_t datlen)
{
  uint8_t curbyte,ctr,masklo;
  uint8_t maskhi = _BV(DATA_PIN);
  masklo =~ maskhi & DATA_PORT;
  maskhi |= DATA_PORT;

  while (datlen--) 
  {
    curbyte = *data++;

    asm volatile
    (
      "		ldi %0,8	\n\t"		// 0
      "loop%=:out %2, %3	\n\t"		// 1
      "lsl	%1		\n\t"		// 2
      "dec	%0		\n\t"		// 3
      "		rjmp .+0	\n\t"		// 5
      "		brcs .+2	\n\t"		// 6l / 7h
      "		out %2,%4	\n\t"		// 7l / -
      "		rjmp .+0	\n\t"		// 9
      "		nop		\n\t"		// 10
      "		out %2,%4	\n\t"		// 11
      "		breq end%=	\n\t"		// 12      nt. 13 taken
      "		rjmp .+0	\n\t"		// 14
      "		rjmp .+0	\n\t"		// 16
      "		rjmp .+0	\n\t"		// 18
      "		rjmp loop%=	\n\t"		// 20
      "end%=:			\n\t" 
      :	"=&d" (ctr)
      :	"r" (curbyte), "I" (_SFR_IO_ADDR(DATA_PORT)), "r" (maskhi), "r" (masklo)
    );
  }

}


//##############################################################################
//                                                                             #
// End of program                                                              #
//                                                                             #
//##############################################################################

dazu habe ich in der Software die Daten so eingestellt wie in der ino beschrieben.
die werte sind wie im bild zu sehen.
am arduino blinkt die TX Led wie wild, heist also er müsste daten empfangen. woran könnte das liegen?

glediator.jpg

woran könnte das liegen?

Meine Glaskugel sagt, Schaltungsaufbau oder Spannungsversorgung keonnten Mist sein.

Konfiguration ebenso.

Funtionieren die FastLED Beispiele auf Deinem Setup?

Welche Hardware verwendest Du - sicher, dass Dein Pinmapping stimmt?

Gruss,

Helmuth

P.S. 1Mbit/s + LEDs ansteuern auf einem 16MHz AVR?! Interessant.

Habe nach 10 Sekunden googeln das gefunden:

UBRR0L = 3; //Baud Rate 0.5 MBit   --> 0% Error at 16MHz :-)

danke für die antwort, also mit fast led funktioniert alles,
die daten wurden wie angegeben eingestellt. leiter ohne erfolg. stromversorgung passt auch

Schon die Glediator Threads hier im Forum durchgeackert? Scheint ja oefters Probleme gegeben zu haben...

Z.B. hier

also ich hab vorhin etwas überlesen, also meine hardware, Arduino mega 2560 (china clone), led Stripes mit ws2812b led´s.

Nach änderung der bautrate

 UBRR0L = 3; //Baud Rate 1 MBit (at F_CPU = 16MHz)

Funktioniert leider noch immer nichts.

habe das selbe Problem, Glediator läuft auf dem Raspberry Pi.

RX LED Blinkt wie wild auf dem Arduino bei mir ist es ein Nano Clone der die WS2812 steuern soll.

Habe 196 LEDs drann. das einzige was passiert ist dass die LEDs gelb aufleuchten, sich danach aber nix mehr ändert. habe schon mit verschiedenen Baudraten probiert. Auch die vorgeschlagene änderung von

UBRR0L = 1;

auf

UBRR0L = 3;

brachte kein Erfolg,

Spannungsversorgung ist Konstant und hat keine Einbrüche (20A 5V Netzteil, wobei meine LEDs ca. 12 A schlucken)

Auch die Reduzierung auf weniger LEDS bringt keine Erfolge.
Hat jemand eine Idee was schief laufen könnte?

Echt schade das es nicht funktioniert.

Vllt liegt es ja am Raspberry, benutze den Pi 3b gab dort einige Probleme das UART freizubekommen.
Kann ich das Gesendete Serielle Signal irgendwie anders auslesen, sodass ich sehe das der Output überhaupt stimmt und der Nano auch korrektes RX signal bekommt?
Ich hätte noch einen zweiten Raspberry zur verfügung um das zu testen, weiß nur nicht wie es geht.

Ich denke nicht das es am Arduino Scetch liegt, da es bei anderen mit identischer Hardware (ausser der Pi ist ein 2b anstatt 3b wie bei mir) funktioniert.

Das einzige was ich mir vorstellen kann ist das der Arduino nicht auf 16MHZ läuft(was ja im Scetch gefordert ist für eine korrekte ausgabe) wie kann ich sicherstellen das der Arduino 16 mhz taktet, wo kann ich F_CPU einstellen? Muss ich dazu den Bootloader neu brennen? oder geht das irgendwo in der IDE einzustellen? kann ja sein das mein Clone nur mit 8MHZ getaktet ist. Hab einen Nano mit Atmega328P-AU MCU, der Bootloader war schon drauf.

Vielen dank schonmal im vorraus!