Ви не увійшли.
Сторінки 1
Помогите разобраться с SK6812 добрые люди!!! Вопрос в следующем: нужно подключить несколько адресных светодиодных лент к одному ардуино контроллеру. Допустим:
1 лента - к пину D4,
2 - D5,
3 - D6,
4 - D7
При этом каждая лента должна выполнять назначенную программу адресованную именно ей. В интернете ничего найти не смог. Все что нашел, так это работа только с одним пином ардуино. Возможно ли реализовать это? Если да то дайте пожалуйста простой пример для дальнейшего допиливания...
Неактивний
Сложно сказать возможно ли, без расчетов. Смотря какая Ардуино и какие алгоритмы генераторов эффектов. Наврядли вы найдете пример такой программы. Пару лет назад, моим знакомым пришлось делать такое самим.
Остання редакція Вячеслав Азаров (2019-03-15 12:25:21)
Неактивний
Чаще с одним пином, потому-что работают с лентой на аппаратном уровне, например подключают по SPI или UART, а этих интерфейсов на mega328 по одному, если делать программно, то можно хоть на все ноги ленты повесить, будет сказываться только на скорости, т.к. выброс информации в ленты будет происходить последовательно.
#define LED_DDR DDRB
#define LED_PORT PORTB
#define LED_PIN PINB
#define LED_BIT _BV(0)
#define NOP __asm__("nop\n\t")
void Ai_WS2811::sendLedData(void)
{
cli();
register byte *p = m_pData;
register byte *e = m_pDataEnd;
volatile uint8_t b;
while(p != e)
{
b = *p++; // Current byte value
byte i=8;
do {
if ((b&0x80)==0) {
// Send a '0'
if (F_CPU==16000000L) {
LED_PIN=LED_BIT;NOP;// Hi (start)
NOP;NOP; // Hi
LED_PIN=LED_BIT;NOP;// Lo (250ns)
NOP;NOP; // Lo
NOP;NOP; // Lo (500ns)
}
else if (F_CPU==8000000L) {
LED_PIN = LED_BIT; // Hi (start)
NOP; // Hi
LED_PIN = LED_BIT; // Lo (250ns)
NOP; // Lo
NOP; // Lo (500ns)
NOP; // Lo (data bit here!)
NOP; // Lo (750ns)
}
}
else {
// Send a '1'
if (F_CPU==16000000L) {
LED_PIN=LED_BIT;NOP;// Hi (start)
NOP;NOP; // Hi
NOP;NOP; // Hi (250ns)
NOP;NOP; // Hi
NOP;NOP; // Hi (500ns)
LED_PIN=LED_BIT; // Lo (625ns)
}
else if (F_CPU==8000000L) {
LED_PIN = LED_BIT; // Hi (start)
NOP; // Hi
NOP; // Hi (250ns)
NOP; // Hi
NOP; // Hi (500ns)
NOP; // Hi (data bit here!)
LED_PIN = LED_BIT; // Lo (750ns)
}
}
b = b+b;
} while (--i!=0);
}
sei();
}
Неактивний
Для хорошего восприятия видеоэффектов необходимо минимум 20-24 fps. Легко сосчитать загрузку процессора, при программной реализации, зная количество пикселей в лентах.
Неактивний
Спасибо за ответы. Буду пробовать... В реалиях проекта нужно задействовать 6 лент, которые имеют от 60 до 160 пикселей. На каждую в принципе можно повесить свой Ардуино нано, обьединить все это дело UARTом и во главе всего поставить Мегу, чтобы дергала за веревочки. Но както громозко получится по-моему.
Неактивний
посмотрите, даже библиотека https://www.pololu.com/product/2527/resources/
Неактивний
Сторінки 1