Проблемы с управлением Rainbowduino - PullRequest
5 голосов
/ 15 июля 2009

Я только что купил Rainbowduino для управления нагрузкой отдельных светодиодов (НЕ RGB-матрицы). Вся документация на данный момент направлена ​​на управление RGB-массивами, которые не , что мне нужно.

Если вы не знакомы с Rainbowduino, то это клон Arduino с 24 каналами постоянного тока по 120 мА, 8 суперканалами драйверами по 500 мА каждый и широкой адаптацией выходного напряжения от 5 В до 12 V DC. Идеально подходит для вождения светодиодов. Веб-страница продукта здесь: http://www.seeedstudio.com/blog/?page_id=187

Я подключил 16 светодиодов и хочу иметь возможность включать и выключать каждый из них по отдельности с помощью digitalWrite(). Я загрузил демо-код на доску, которая на самом деле не работает. Я выяснил, что 8 каналов источника драйвера легко управляются с помощью digitalWrite() на контактах 3-11. Однако управлять другими 24 приемными каналами сложнее. Судя по всему, они управляются тремя регистрами сдвига (по одному в каждом), к которым я могу получить доступ только с помощью shiftOut. Я понятия не имею, как это работает. Может ли кто-нибудь помочь направить меня в правильном направлении?

Половина светодиодов подключена к синему 1-8, а другая половина - к зеленому 1-8. Положительные ножки подключены к VCC1-2, для которого установлено значение HIGH. Я уверен, что схема подключена правильно, у меня проблемы с программированием.

Я просмотрел пример кода, который поставляется с Rainbowduino, но не могу понять его. Как я могу решить эту проблему?

Ответы [ 2 ]

3 голосов
/ 15 июля 2009

Использование сдвигового регистра для мультиплексирования (или демультиплексирования, в зависимости от вашей точки зрения) входов / выходов очень распространено в цифровой электронике.

По сути, вы торгуете сберегающими булавками на вашем контроллере за то, что в дизайн нужно добавить еще одну микросхему (сдвиговый регистр).

В этом случае регистр работает как последовательно-параллельный преобразователь; у него есть строка последовательного ввода, которая питается битами от вашего процессора. Он также имеет 8 параллельных выходов, подключенных к 8-битной памяти, которая загружается последовательно из ЦП. Используя это, вы можете «сдвинуть» 8 бит данных на одном выводе (плюс один вывод, как правило, для тактирования), которые затем сохраняются в регистре сдвига и могут управлять 8 светодиодами параллельно.

В этом конкретном случае вам необходимо выяснить, к какому порту AVR подключены регистры сдвига (драйверы приемника постоянного тока MBI5168 содержат здесь регистры сдвига). Они должны быть привязаны к паре выходов, один для данных и один для часов. Как только вы узнаете эти контакты, вы сможете сами управлять ими, используя команду ShiftOut .

Копаем немного дальше, этот пример "эскиза" содержит следующие определения в файле "Rainbow.h":

//MBI5168
#define SH_DIR_OE    DDRC
#define SH_DIR_SDI   DDRC
#define SH_DIR_CLK   DDRC
#define SH_DIR_LE    DDRC

#define SH_BIT_OE    0x08
#define SH_BIT_SDI   0x01
#define SH_BIT_CLK   0x02
#define SH_BIT_LE    0x04

#define SH_PORT_OE   PORTC
#define SH_PORT_SDI  PORTC
#define SH_PORT_CLK  PORTC
#define SH_PORT_LE   PORTC

Это, конечно, полный цифровой «слух» (я не являюсь владельцем устройства, я никогда не программировал ни на одном из типов * duino), но я бы сказал, что это система доставки пули, испускающей частицы, вы ». ищем.

Я интерпретирую это так:

  • PORTC - это тот, который подключен к сдвиговым регистрам, все контакты управления находятся в PORTC.
  • Четыре пина выделены (а не два оптимистичных, о которых я упоминал выше).
  • Часы - это PORTC: 2, а данные - PORTC: 1.
2 голосов
/ 15 октября 2009

Управление каждым отдельным светодиодом довольно затратно по времени, лучше думать в строках, тогда как каждый цвет светодиода представлен как битовый, поэтому он имеет 8 бит х 3 цвета (красный, зеленый, синий). Я написал небольшую библиотеку Rainbowduino, которая позволяет легко устанавливать каждую строку или кадр:

Прочтите мой пост на этом блоге

...