Go Down

Topic: Welcher arduino ist der Richtig für 300 WS2811 LEDs (Read 852 times) previous topic - next topic

cool18

also ich hätte jetzt 1 Netzteil in die Mitte und jeweils in von Links und Rechts. Sollte Passen.

Ich habe grade ehr das Problem das sie Weiß leuchten ohne Signal

cool18

Zum Testen nehme ich grade 3 12V 4A Netzteile Flackert nichts alles Super.
Nur die LEDs sind auf Weiß da sie grade kein Signal Kriegen.

Aktueller Aufbau habe ich mal Skizziert



uwefed

@Uwefed Wie meinst du das mit du hast sorgen um die Leiterbahnen der LEDStrips?
Wenn Du 2 Spannungen, die etwas verschieden sind da die Netzteile nie gleich sind, an den beiden Enden des Strips anschließt dann fließen Ausgleichströme über die Leiterbahnen des Strips die nur durch die Widerstände der Leiterbahnen und der zuführungskabel begrenzt sind. Da diese Widerstände klein sind können auch bei wenig Spannungsunterschied größere Ströme fließen.
Da ist es besser daß jedes Netzteil nur einen Teil der Strips versorgt. Die Masse der Strips / Netzteile müssen verbunden sein. Die + Pole jeweils 1 Telstück an 1 Netzteil und zwischen Dout und Din jedes Teilstückes einen 330 Ohm Widerstand löten.

Grüße Uwe

cool18

Was meinst du mit Dout und Din? Ich verstehe dein Plan nicht. Ich soll also zwischen denn Plus Pol jedes Netzteil einen 330 Ohm widerstand knallen?


Verstehe ich das Richtig?
Am besten du malst das mal auf


Ich habe bereits bei 5m das Problem das die Letzten LEDs Flackern und zwar so richtig. auf jeden fall sieht mann es.

Da ich ja eh neue Netzteile Kaufen muss wäre es Vielleicht Sinvoll zu sage ich nehme ein 10A 12V Netzteil
Packe es in die Mitte uns Sagen ich gehen dann mit ein 0,75qmm kabel an beide enden?
Also so



Ach wie liebe ich Paint   :smiley-lol:

cool18

Moin so muss mich jetzt grade mit denn Elegoo Uno R3 ärgern.
Ich bekomme es nicht zum Laufen wenn ich denn Strom Reinstecke läuchten die LEDs erstmal schön alle Weiß fasse ich mit mein Findern an denn Daten Pin passiert was die machen dann halt was sie wollen. Also Defekt würde ich jetzt nicht Tippen.

Ich habe denn GND mit denn Arduino Verbunden
Auf Data Pin 6 habe ich ein 330Ohm Widerstand zwischen Streifen und Arduino.

Einfach das Sketsch drauf denn Arduino drauf. Jinx hat es sofort erkannt. Tja die Blöden LEDs belieben Trotzdem auf Weiß egal was ich in Jinx Versuche

Hat jemand ne Idee?

Mein Sketch

Code: [Select]

//##############################################################################
//##############################################################################
//                                                                             #
// 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   100


//##############################################################################
//                                                                             #
// 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                                                              #
//                                                                             #
//##############################################################################


someone83

Ich kenne Glediator leider nicht, aber mir fällt auf, das im Code von WS2812 die Rede ist, du aber WS2811 hast (kann jetzt nicht mal genau sagen, worin sich die unterscheiden)

Aber versuche doch mal FASTLED auf den Arduino zu laden und von dort das ein oder andere Example zu testen. Dann siehst du schon mal, ob der Strip funktioniert.
Wenn das klappt, spielst du wieder den Glediator Sketch drauf und testest damit weiter.

Grüsse
Peter

agmue

Das hat er schon erfolgreich probiert, war auch meine Herangehensweise. Siehe "Jinx! `Arduino gibt kein Signal aus"

Go Up