Hola a todos, perdonar si no lo hago todo correctamente ya que soy nuevo.
Estoy desarrollando una pantalla hecha a partir de tiras LED ws2812b, en primer lugar compre un rollo de 5 metros de estas tiras con una densidad de led de 30led/metro en total tenia 150 led.
Los iba a controlar mediante un software llamado Glediator y con un arduino mega cuando termine el montaje todo iba perfectamente tanto con el arduino mega como con el uno. Entonces decidi comprar los rollos de 60 led/metro para ganar un poco de resolucíon, pero cual es mi sorpresa que con estos nuevos rollos no funciona siendo de la misma marca y todo, solo cambia la cantidad de LED.
Alguien sabe por que pasa esto y si tiene solución???
Un saludo y gracias a todos.
El código que estoy usando es el siguiente que es para el arduino mega:
//##############################################################################
//##############################################################################
// #
// 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 PORTA
#define DATA_DDR DDRA
#define DATA_PIN 0 //This relates to PDA0 (PIN 22 on the Mega 2560)
#define NUMBER_OF_PIXELS 900
//##############################################################################
// #
// Variables #
// #
//##############################################################################
unsigned char display_buffer[NUMBER_OF_PIXELS * 3];
static unsigned char *ptr;
static unsigned int pos = 0;
boolean 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(USART0_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 #
// #
//##############################################################################