Hallo, ich habe ein Problem mit der Ansteuerung von ws2812b LEDS. Ich möchte sie mit einem Arduino Mega und Glediator ansteuern.
Mit dem Arduino Uno hat es schon perfekt funktioniert, nur würde ich gerne di LED-Anzahl auf 760 erhöhen. Ich habe, wie schon davor beschrieben, char go zu boolean gemacht(bin aber nicht sicher ob es so richtig ist). Habe auch den Reset-Button entfernt, Portc und dann mit 31 Pin verbunden, und ISR(USART_RX_vect) in ISR(USART0_RX_vect) verändert. Ich bin noch ein ziemlicher Neuling auf dem Gebiet und will so schnell wie möglich eine einfache Lösung finden.
Code
#define DATA_PORT PORTC
#define DATA_DDR DDRC
#define DATA_PIN 6
#define NUMBER_OF_PIXELS 760
unsigned char display_buffer[NUMBER_OF_PIXELS * 3];
static unsigned char *ptr;
static unsigned int pos = 0;
//volatile unsigned char go = 0;
boolean go = false;
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();
}
void loop()
{
if (go==true)
{
cli();
ws2812_sendarray(display_buffer, NUMBER_OF_PIXELS * 3);
sei();
go=false;
}
}
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;}
}
Alles anzeigen