да без дела уже лежит который год 5 метров обычной. А денег заказать новую не будет ещё год ((
Пока кручу в спринте регистры. 8 каналов +8 каналов в 50х100 влазят с запасом
если будет чем хвастаться, выложу сюда
Вид для печати
да без дела уже лежит который год 5 метров обычной. А денег заказать новую не будет ещё год ((
Пока кручу в спринте регистры. 8 каналов +8 каналов в 50х100 влазят с запасом
если будет чем хвастаться, выложу сюда
Здравствуйте.Загорелся желанием изготовить Adalight. Вот по этой инструкции ссылка на статью.Закупил все комплектующие и случайно перепутал светодиодны вместо WS2801 взял WS2811 в которых вместо 4х контактов(+5,GND,Data,Clock) всего 3(5,GND,Data). Теперь после удаления строчкииз скрипта LEDStream горит мерцае только второй и третий Светодиод.Все остальные только светятся синим.Подскажите пожалуйста есть ли возможность сделать Amberlight из WS2811?Цитата:
SPI.setClockDivider(SPI_CLOCK_DIV16)
В теме Pixilight кто то переделывал на ws2811
Не туда.
А если статическое изображение, тоже цвета не совпадают?
наконец-то наклеил ленту!
100транзисторов.
54 канала.
Мега 1280 ардуинка
Проблема, при смене цвета моргает.
Если поставить меньше яркость в Lightpack, то моргание стновится медленней и заметней
Что поправить??
СИжу пока сам разбираюсь, но уже голова кругом. Паяю три дня всё это.
Код такой
моргает мало при tcnt2 = 236;
это что за параметр получается?
поставил 240, еле мерцает, но всё равно напрягается мозг. Так можно эпилептиком стать ;)
Код:#define D2_High PORTA |=B00000001 //red 22
#define D2_LOW PORTA &= B11111110
#define D3_High PORTA |=B00000010 //green 23
#define D3_LOW PORTA &= B11111101
#define D4_High PORTA |=B00000100 //blue 24
#define D4_LOW PORTA &= B11111011
#define D5_High PORTA |=B00001000 //25
#define D5_LOW PORTA &= B11110111
#define D6_High PORTA |=B00010000 //26
#define D6_LOW PORTA &= B11101111
#define D7_High PORTA |=B00100000 //27
#define D7_LOW PORTA &= B11011111
#define D8_High PORTA |=B01000000 //28
#define D8_LOW PORTA &= B10111111
#define D9_High PORTA |=B10000000 //29
#define D9_LOW PORTA &= B01111111
#define D10_High PORTB|=B00000001 //ss jp2 53
#define D10_LOW PORTB &=B11111110
#define D11_High PORTB |=B00000010 //sck jp2 52
#define D11_LOW PORTB &= B11111101
#define D12_High PORTB |=B00000100 //mosi 51
#define D12_LOW PORTB &= B11111011
#define D13_High PORTB |=B00001000 //miso 50
#define D13_LOW PORTB &= B11110111
#define D14_High PORTB |=B00010000 // PWMH 10
#define D14_LOW PORTB &= B11101111
#define D15_High PORTB |=B00100000 // PWMH 11
#define D15_LOW PORTB &= B11011111
#define D16_High PORTB |=B01000000 // PWMH 12
#define D16_LOW PORTB &= B10111111
#define D17_High PORTB |=B10000000 // PWMH 13
#define D17_LOW PORTB &= B01111111
#define D18_High PORTC |=B00000001 //37
#define D18_LOW PORTC &= B11111110
#define D19_High PORTC |=B00000010 //36
#define D19_LOW PORTC &= B11111101
#define D20_High PORTC |=B00000100 //35
#define D20_LOW PORTC &= B11111011
#define D21_High PORTC |=B00001000 //34
#define D21_LOW PORTC &= B11110111
#define D22_High PORTC |=B00010000 //33
#define D22_LOW PORTC &= B11101111
#define D23_High PORTC |=B00100000 //32
#define D23_LOW PORTC &= B11011111
#define D24_High PORTC |=B01000000 //31
#define D24_LOW PORTC &= B10111111
#define D25_High PORTC |=B10000000 //30
#define D25_LOW PORTC &= B01111111
#define D26_High PORTF |=B00000001 //adc0
#define D26_LOW PORTF &= B11111110
#define D27_High PORTF |=B00000010 //adcl
#define D27_LOW PORTF &= B11111101
#define D28_High PORTF |=B00000100 //adcl
#define D28_LOW PORTF &= B11111011
#define D29_High PORTF |=B00001000 //adcl
#define D29_LOW PORTF &= B11110111
#define D30_High PORTF |=B00010000 //adcl
#define D30_LOW PORTF &= B11101111
#define D31_High PORTF |=B00100000 //adcl
#define D31_LOW PORTF &= B11011111
#define D32_High PORTF |=B01000000 //adcl
#define D32_LOW PORTF &= B10111111
#define D33_High PORTF |=B10000000 //adcl
#define D33_LOW PORTF &= B01111111
#define D34_High PORTK |=B00000001 // ADCH
#define D34_LOW PORTK &= B11111110
#define D35_High PORTK |=B00000010 // ADCH
#define D35_LOW PORTK &= B11111101
#define D36_High PORTK |=B00000100 // ADCH
#define D36_LOW PORTK &= B11111011
#define D37_High PORTK |=B00001000 // ADCH
#define D37_LOW PORTK &= B11110111
#define D38_High PORTK |=B00010000 // ADCH
#define D38_LOW PORTK &= B11101111
#define D39_High PORTK |=B00100000 // ADCH
#define D39_LOW PORTK &= B11011111
#define D40_High PORTK |=B01000000 // ADCH
#define D40_LOW PORTK &= B10111111
#define D41_High PORTK |=B10000000 // ADCH
#define D41_LOW PORTK &= B01111111
#define D42_High PORTL |=B00000001 //49
#define D42_LOW PORTL &= B11111110
#define D43_High PORTL |=B00000010 //48
#define D43_LOW PORTL &= B11111101
#define D44_High PORTL |=B00000100 //47
#define D44_LOW PORTL &= B11111011
#define D45_High PORTL |=B00001000 //46
#define D45_LOW PORTL &= B11110111
#define D46_High PORTL |=B00010000 //45
#define D46_LOW PORTL &= B11101111
#define D47_High PORTL |=B00100000 //44
#define D47_LOW PORTL &= B11011111
#define D48_High PORTL |=B01000000 //43
#define D48_LOW PORTL &= B10111111
#define D49_High PORTL |=B10000000 //42
#define D49_LOW PORTL &= B01111111
#define D50_High PORTJ |=B00000001 //RXD3
#define D50_LOW PORTJ &= B11111110
#define D51_High PORTJ |=B00000010 //TXD3
#define D51_LOW PORTJ &= B11111101
#define D52_High PORTH |=B00000001 //RXD2
#define D52_LOW PORTH &= B11111110
#define D53_High PORTH |=B00000010 //TXD2
#define D53_LOW PORTH &= B11111101
#define D54_High PORTH |=B00010000 //PH3 pwml 6
#define D54_LOW PORTH &= B11101111
#define D55_High PORTH |=B00001000 //PH4 pwml 7
#define D55_LOW PORTH &= B11110111
volatile unsigned int tcnt2;
//volatile long pwm_time;
byte pwm_time, Red_R_Old, Green_L_Old, Blue_T_Old;
unsigned long blank=0; //таймер простоя
byte volatile color[54]; //массив храннения цветов 12-ть каналов
void setup()
{
DDRB=0xFF;
DDRC=0xFF;
DDRA=0xFF;
DDRF=0xFF;
DDRL=0xFF;
DDRK=0xFF;
DDRH=0xFF;
DDRJ=0xFF;
//for (int i=2; i < 100; i++){pinMode(i, OUTPUT);}
//Serial.begin(115200);
Serial.begin(115200);
TIMSK2 &= ~(1<<TOIE2); //разрешения прерывания по переполнению таймера/счетчика Т2
TCCR2A &= ~((1<<WGM21) | (1<<WGM20));// Режим работы таймера/счетчика
TCCR2B &= ~(1<<WGM22);// Режим работы таймера/счетчика
ASSR &= ~(1<<AS2); //Выбор источника синхронизации таймера если AS2=0 от системного генератора
tcnt2 = 236; // 16000000/31000/64=8 tcnt2=256-8=248.
TIMSK2 |= (1<<TOIE2);//Разрешение прерывания по переполнению Т2.
}
void loop()
{
if (Serial.available() > 54)
{
if (Serial.read() == 255) //проверка прификса
{
for (int i = 0; i < 54; i++)
{
color[i] = Serial.read(); // прочитать данные о цветах из порта в массив
}
//if (Red_R_Old == color[0] && Green_L_Old == color[4] && Blue_T_Old == color[8])
blank=0;
}
} else {
if(blank>100000) { blank=0; for (byte i = 0; i < 54; i++) color[i] = 0;}
blank++;
}
}
//****************обработчик прерывания********************
ISR(TIMER2_OVF_vect)
{
TCNT2 = tcnt2;
pwm_time++;
if(color[0] > pwm_time ) D20_High; else D20_LOW;
if(color[1] > pwm_time ) D31_High; else D31_LOW;
if(color[2] > pwm_time ) D2_High; else D2_LOW;
if(color[3] > pwm_time ) D22_High; else D22_LOW;
if(color[4] > pwm_time ) D32_High; else D32_LOW;
if(color[5] > pwm_time ) D21_High; else D21_LOW;
if(color[6] > pwm_time ) D23_High; else D23_LOW;
if(color[7] > pwm_time ) D33_High; else D33_LOW;
if(color[8] > pwm_time ) D34_High; else D34_LOW;
if(color[9] > pwm_time ) D6_High; else D6_LOW;
if(color[10] > pwm_time) D13_High; else D13_LOW;
if(color[11] > pwm_time) D14_High; else D14_LOW;
if(color[12] > pwm_time) D19_High; else D19_LOW;
if(color[13] > pwm_time) D39_High; else D39_LOW;
if(color[14] > pwm_time) D40_High; else D40_LOW;
if(color[15] > pwm_time) D18_High; else D18_LOW;
if(color[16] > pwm_time) D25_High; else D25_LOW;
if(color[17] > pwm_time) D24_High; else D24_LOW;
if(color[18] > pwm_time) D3_High; else D3_LOW;
if(color[19] > pwm_time) D10_High; else D10_LOW;
if(color[20] > pwm_time) D11_High; else D11_LOW;
if(color[21] > pwm_time) D35_High; else D35_LOW;
if(color[22] > pwm_time) D30_High; else D30_LOW;
if(color[23] > pwm_time) D29_High; else D29_LOW;
if(color[24] > pwm_time) D12_High; else D12_LOW;
if(color[25] > pwm_time) D5_High; else D5_LOW;
if(color[26] > pwm_time) D4_High; else D4_LOW;
if(color[27] > pwm_time) D28_High; else D28_LOW;
if(color[28] > pwm_time) D36_High; else D36_LOW;
if(color[29] > pwm_time) D37_High; else D37_LOW;
if(color[30] > pwm_time) D15_High; else D15_LOW;
if(color[31] > pwm_time) D7_High; else D7_LOW;
if(color[32] > pwm_time) D46_High; else D46_LOW;
if(color[33] > pwm_time) D9_High; else D9_LOW;
if(color[34] > pwm_time) D16_High; else D16_LOW;
if(color[35] > pwm_time) D17_High; else D17_LOW;
if(color[36] > pwm_time) D52_High; else D52_LOW;
if(color[37] > pwm_time) D45_High; else D45_LOW;
if(color[38] > pwm_time) D42_High; else D42_LOW;
if(color[39] > pwm_time) D54_High; else D54_LOW;
if(color[40] > pwm_time) D47_High; else D47_LOW;
if(color[41] > pwm_time) D8_High; else D8_LOW;
if(color[42] > pwm_time) D49_High; else D49_LOW;
if(color[43] > pwm_time) D53_High; else D53_LOW;
if(color[44] > pwm_time) D48_High; else D48_LOW;
if(color[45] > pwm_time) D38_High; else D38_LOW;
if(color[46] > pwm_time) D26_High; else D26_LOW;
if(color[47] > pwm_time) D27_High; else D27_LOW;
if(color[48] > pwm_time) D55_High; else D55_LOW;
if(color[49] > pwm_time) D41_High; else D41_LOW;
if(color[50] > pwm_time) D43_High; else D43_LOW;
//if(color[51] > pwm_time) D44_High; else D44_LOW;
//if(color[52] > pwm_time) D51_High; else D51_LOW;
//if(color[53] > pwm_time) D50_High; else D50_LOW;
}
Это программный ШИМ, похоже что с 54 каналами не справляется
Дл\ такогоь количества каналов лучше Pixelight использовать
Лента три года лежала, наконец сделал. А Pixelight следующий этап, когда деньги появятся :eek:
Изучу прерывания подробней, может что получится.
Моргает то и незаметно. Но на видео видно слегка
http://youtu.be/ddUKAjN0h8M