03.01.2012

Christmas tree in use

Итак, бОльшая часть HNYduino уже "ушла в народ", и у народа уже успели назреть вопросы. Это, конечно, досадно - мне казалось, что там и объяснять-то нечего, но придется посвятить этому вопросу еще одну статью - дальше ответы буду добавлять прямо в wiki.


С целью создания гипнотического эффекта, электроЕль снабжена двадцатью микрофонариками светодиодами. Схематично это можно было бы представить так:

Расположенные в центре светодиоды D2, D3, D4 и D5 подключены к цифровым пинам Arduino с соответствующими номерами и управляются независимо. Для включения любого из них достаточно, например, выполнить digitalWrite(2,HIGH), а для выключения -  digitalWrite(2,LOW). Для D2 и D3 доступен аппаратный ШИМ, поэтому ими дополнительно можно управлять и с помощью analogWrite().

Тоже самое относится и к дополнительным пинам, выведенным на подставку через гребенку. С пинов A0, A4 и A5 можно считывать оцифрованное значение действующего напряжения (ибо это входы АЦП), а при необходимости  - подключать к A4 и A5 устройства, работающие по шине I2C (A4 = SDA, A5 = SCL и не забудьте подтянуть их через резисторы 5K1 к VCC).

Светодиоды R1..R8 и G1..G8 подключены к двум закаскадированным микросхемам 74HC595, принцип работы с которыми я уже подробно разбирал в статье Удвоение пинов Arduino. В общем случае всё сводится к выполнению двух последовательных команд shiftOut с использованием известных пинов (LATCH = D8, CLK = D10 и DATA = 11).

Поскольку тут наступает самый трудный (для неподготовленных умов ;) момент, пришлось  набросать библиотеку. Она, конечно, не выдерживает никакой критики и служит, скорее, для иллюстрации приемов. Скачайте и распакуйте ее в каталог sketchbook/libraries и только затем запускайте Arduino IDE 1.0 (со старыми версиями 0022 и 0023 тоже должно работать нормально).

Вывод осуществляется при помощи функции setState(byte greenDataOut, byte redDataOut), где надо указать два байта, для G1..G8 и R1..R8 соответственно. Если мысленно выстроить образуемый ими контур в линию, могло бы получиться следующее:


Чтобы отобразить произвольный орнамент, надо сформировать два байта в двоичном виде и передать их функции setState. Например, чтобы зажечь линейку из четырех самых нижних светодиодов (G1, R1, G8 и R8), подставим на их место единицы, получится:

1 0 0 0 0 0 0 1
  1 0 0 0 0 0 0 1

Теперь можно отдавать команду setState(B10000001,B10000001) - префикс 'B' предваряет число в двоичной записи. Если кому-то по душе шестнадцатеричная запись, тоже самое   будет по setState(0x81,0x81). 

Если и после этого останутся вопросы, загрузите пример, который прилагается к  библиотеке - зацикленное случайное переключение простейших эффектов (обычно прошито в елку по умолчанию).

Второй волнующий общественность вопрос - подключение HNYDuino к компу с возможностью программирования. Поскольку у елки отсутствует USB-порт, потребуется дополнительный девайс (рассмотрим варианты):

1. Самое простое: любой FTDI-кабель или переходник, например FTDI friend:


Выставьте тип платы  "Arduino Duemilanove w/ATmega328", соедините линии GND, VCC, RX и TX на елке и на переходнике. Кроме того, к линии "R" (reset) следует подключать сигнал DTR (на FTDI friend он позиционно совмещен с RTS и выбирается solder-джампером с обратной стороны).

2. С помощью платы Arduino Duemilanova (или совместимой c ней Freeduino - главное, чтобы там был чип FTDI или MAX232). Для этого аккуратно удалите ATmega328 из панельки и соедините проводки следующим образом:


ArduinoHNYduino
RX (D0)<- (3)
TX (D1)-> (2)
RESET (ISCP-5)R (1)
VCC (ISCP-2 или 5V)+5 (4)
GND (ISCP-6 или GND)G (5 или 6)

Сигналы RX и TX следует подавать с верхней колодки Arduino, сигнал сброса - с пятого пина разъема программирования, а VCC и GND - без разницы откуда (можно с вилки программирования, можно с колодки POWER).

Тип платы нужно выставлять также, "Arduino Duemilanove w/ATmega328".

3. Напаять на HNYduino шестиконтактную вилку для программирования в заранее подготовленные отверстия и подключиться через программатор (в качестве программатора также может выступать  все та же Arduino со скетчем ArduinoISP). Имейте ввиду, что в этом варианте для комфортной работы потребуется немного пошаманить прописать секцию в boards.txt - указав там тот протокол, по которому работает ваш программатор. Или же, можно работать сразу через AVRStudio ;)

1 комментарий: