Проект tinyAVR 5. Светодиодное перо

October 14, 2014 by admin Комментировать »

Возможно, вы видели рекламные ролики изготовителей батареек, где в воздухе рисуют фигуры и фиксируют их при помощи фотоаппарата с длительной выдержкой. Это можно сделать и при помощи фонарика — рисовать в воздухе и фотографировать. Вместо фонарика рисовать фигуры можно многоцветным светодиодным пером. Именно такое устройство описано в этом проекте. Некоторые из нарисованных таким пером фигур показаны на рис. 2.34. Подобные фигуры называют "световыми каракулями".

Рис. 2.34. Фотографии нарисованных в воздухе фигур (сделанные цифровым фотоаппаратом на длительной выдержке)

Спецификация проекта

Светодиодное перо должно быть удобно держать в руке, чтобы им можно было без труда рисовать и писать, поэтому размер этого устройства очень важен. Чтобы достичь этой цели, нужно было: применить самые маленькие батареи и предельно упростить схему. Светодиодное перо похоже на генератор случайного цвета и света, однако цель и реализация совершенно иные. В проекте приведены два примера светодиодного пера. Сначала мы реализовали первый вариант, блок-схема которого показана на рис. 2.35.

Рис. 2.35. Блок-схема светового пера

Рис. 2.36. Второй вариант светового пера

После изготовления первого устройства и использования его в течение некоторого времени мы поняли все связанные с ним проблемы и сделали вторую конструкцию (рис. 2.36).

Давайте сначала обсудим требования. Идея изготовить многоцветное светодиодное перо пришла после того, как мы увидели "световые каракули" на одном из Web-сайтов. Эти картинки рисовались при помощи простых светодиодных перьев, изготовленных из одноцветных светодиодов. Мы подумали, что вместо нескольких светодиодных перьев можно применить одно перо с RGB-светодиодом. Интенсивностью свечения светодиодов можно управлять при помощи микроконтроллера и получить при этом гораздо больше цветов, чем при наличии отдельных цветных светодиодов. Чтобы рисовать изображения, вам понадобится цифровой фотоаппарат с ручной установкой выдержки и диафрагмы. Максимальная выдержка фотоаппарата будет определять продолжительность вашего рисования светодиодным пером. Обычные компактные фотоаппараты дают выдержку порядка минуты, чего вполне достаточно для простых рисунков. Для более сложных понадобится зеркальная камера, которая позволяет делать очень длительные выдержки. При рисовании световых каракулей вы, возможно, захотите изменять цвет света. Для выбора цвета можно применить переключатель (который будет менять цвет при нажатии). Кроме того, при рисовании вам может понадобиться выключить светодиод, чтобы начать другую часть рисунка (поэтому нужен выключатель). Все это показано на первой блок-схеме нашего светодиодного пера. Перо имеет два переключателя: для включения светодиодов и для выбора цвета.

Первый вариант пера давал 16 разных цветов. Однако мы столкнулись с такой проблемой: если после выбора цвета вам опять понадобится предыдущий цвет, то придется перебрать все цвета, чтобы вернуться к нему. При этом теряется драгоценное время. Нужен способ быстрого выбора цвета (чтобы не перебирать все возможные цвета по очереди). Поэтому мы заменили кнопку "установка цвета" потенциометром, который можно быстро повернуть для получения нужного цвета. Так получился второй вариант устройства. Остальные функции точно такие же, как в первом варианте. Чтобы добиться минимального размера, мы решили применить для питания схемы батареи-таблетки и 8-контактный микроконтроллер tinyAVR в корпусе DIP. Такой корпус позволяет вынимать микросхему, поэтому на схеме отсутствует разъем для программирования (чтобы уменьшить размер схемы).

Описание устройства

На рис. 2.37 изображена принципиальная схема первого варианта светодиодного пера. Для считывания состояния кнопок S1 и S2 используется микроконтроллер Tinyl3, а для отображения разных цветов применяется RGB-светодиод. Схема питается от трех батарей LR44 и не имеет выключателя питания. Устройство запрограммировано так, что при выключении светодиода (кнопкой S2) микроконтроллер входит в состояние пониженного энергопотребления (что обеспечивает экономичность). Обычно микроконтроллер AVR в таком состоянии потребляет ток всего несколько микроампер.

Рис. 2.37. Принципиальная схема светодиодного пера (вариант 1)

Рис. 2.38. Принципиальная схема светодиодного пера (вариант 2)

Рис. 2.39. Схема подключения RGB-светодиода

На рис. 2.38 показана принципиальная схема второго варианта светодиодного пера. Здесь кнопка S2 заменена потенциометром РОТ1. Микроконтроллер AVR13 имеет несколько каналов АЦП. Центральный вывод потенциометра подключен к входному каналу АЦП. Остальные два вывода потенциометра подключены к источнику питания и заземлению. Напряжение с движка потенциометра меняется от нуля до Vcc. По заданному напряжению микроконтроллер выдает соответствующие ШИМ-сигналы для красного, зеленого и синего светодиодов. Общий анод RGB-светодиода (SL1) подключен к источнику питания. В обеих версиях светодиодного пера разъем SL1 — это небольшая плата с RGB-светодиодом (рис. 2.39).

Конструкция

Компоновку платы (и ее схему) можно скачать по ссылке: www.avrgenius.coin/tinyavrl.

Оба варианта светодиодного пера изготовлены на односторонней печатной плате. Готовая печатная плата достаточно мала для того, чтобы разместиться в трубке из оргстекла диаметром 20 мм. На рис. 2.40 и 2.41 изображены платы контроллера второго варианта светодиодного пера. На рис. 2.42 показана маленькая плата с RGB-светодиодом, смонтированная перпендикулярно главной плате контроллера. Схема питается от трех батареек LR44. На рис. 2.40 видна установка батареек. Батарейки крепятся небольшими магнитами, причем крайние батарейки припаяны к плате. Блок батареек с магнитами склеен резиновым клеем (чтобы они не разъединялись). На рис. 2.43 показана фотография первого варианта светодиодного пера.

Рис. 2.40. Вид сверху второго варианта светодиодного пера

Рис. 2.41. Вид снизу второго варианта светодиодного пера

Рис. 2.42. Плата RGB-светодиода, присоединенная к основной плате под прямым углом

Рис. 2.43. Вид сбоку первого варианта светодиодного пера

Программирование

Откомпилированный исходный код обеих версий можно скачать по ссылке: www.avrgenius.coin/tinyavrl.

Оба устройства работают на частоте 1,2 МГц. Коды обеих версий похожи за исключением того, что в первой версии изменение цвета выполняется при помощи кнопки, а во второй версии — при помощи потенциометра. Программирование кода и fuse-битов осуществляется при помощи STK500 в режиме ISP. Разные цвета генерируются посредством программной широтно-импульсной модуляции. Для каждого цвета было выбрано по 9 уровней ШИМ. Из возможных 9x9x9 цветов было выбрано 16 (которые сохранены в памяти программ). Есть еще один дополнительный режим, который называется "прогоном" — когда все цвета появляются один за другим с промежутком в 500 мс. Рассмотрим самые важные фрагменты кода.

ISR (TIMO_OVF_vect)

{

DDRB &=~(1«0 11«111«2) ; if(е==8)

{

е=0; xyz () ;

}

abc(pwm[0] ,pwm[l] /pwm[2] ,e) ;

DDRB I = (1«0 11«111«2) ; e++;

if(i==15)//режим работы {

counter++;

if(counter == 390)//500ms {

counter = 0; if(k==14) k=0;

else k++;

pwm[0] = pgm_read_byte(&Blue[ k ] ) ; pwm[1] = pgm_read_byte(&Red[k]); pwm[2] = pgm_read_byte(&Green[k]);

}

}

}

Листинг 2.6 — процедура обработки прерывания по переполнению TimerO, которая управляет широтно-импульсной модуляцией с девятью уровнями (как и в предыдущих проектах). Если же выбирается "режим прогона", то он перебирает все цвета с временным промежутком в 500 мс. Эта процедура в обеих версиях одинакова.

if ( » (PINB& (1«3) ) )

{

_delay_ms(3 0);

while ( ! (PINB&(1«3) ) ) ; //ожидание _delay_ms (3 0) ;

TIMSKO 8c= ~ (1«TOIEO) ;

//Сбросить прерывание таймера DDRB (1«0 I 1«1 11<<2 ) ;

GIFR |= 1«PCIF;

//Сбросить ожидающее прерывание GIMSK |= 1«PCIE;

//Активация прерывания по изменению сигнала на контакте MCUCR |= (1«SE| 1«SM1) ;

//Установка режима выключения питания sleep_cpu () ;

//Процессор остановлен до прерывания

}

Фрагмент, приведенный в листинге 2.7, работает в бесконечном цикле (когда устройство активно). Он проверяет состояние переключателя на РВЗ. При нажатии и отпускании он отключает прерывания TimerO и конфигурирует управляющие светодиодом контакты как плавающие. Это полностью отключает светодиод и включает прерывание по изменению сигнала на контакте. Несмотря на то, что это прерывание может быть выполнено на всех контактах ввода/вывода контроллера ATtiny 13, при инициализации кода он настраивается так, чтобы это прерывание мог вызвать только контакт РВЗ. Затем значение регистра mcucr выбирает режим ожидания и отправляет устройство в режим выключения (при помощи вызова функции sieep_cpu ()), из которого его можно пробудить, только задав асинхронное прерывание по изменению сигнала на контакте (мы объясним это далее). Во время выключения выполнение кода останавливается. Оно запускается повторно после сигнала пробуждения, которым в данном случае является прерывание по изменению состояния контакта РВЗ.

ISR (PCINTO_vect)

{

_delay_ms(3 0);

while( ! (PINB&(1«3) ) ) ; //ожидание _delay_ms(30);

MCUCR = 0x00; /V отключение режима ожидания GIMSK &= — (1«РС1Е) ;

//Отключение прерывания по изменению состояния контакта TIMSKO = 1«ТО1Е0;

//Включение прерывания по переполнению

} 4 Зак 1291

Листинг 2.8 — это процедура обработки прерывания для изменения состояния контакта РВЗ. Исходный код был написан так, чтобы это прерывание было активно только тогда, когда устройство находится в состоянии выключения. Эта процедура отключает режим ожидания и прерывание по изменению состояния контакта. Она также включает снова таймер, чтобы начать генерирование цветов. Подобный метод перевода контроллера в режим выключения реализован в обеих версиях.

Цвета выбираются в бесконечном цикле (в первом устройстве— при помощи кнопки, а во втором — посредством считывания АЦП). Подробности смотрите в исходном коде.

Заключение

В этой главе мы изучили разные типы светодиодов, а также последовательное и параллельное управление ими. Мы также подробно обсудили управление интенсивностью свечения светодиодов при помощи широтно-импульсной модуляции. Эти концепции были подкреплены четырьмя проектами. Кроме того, светодиоды можно соединить так, что соотношение числа контактов ввода/вывода к числу светодиодов будет меньше единицы, т. е. число светодиодов может превышать имеющееся количество контактов ввода/вывода. Широтно-импульсная модуляция во всех проектах реализована программным путем. Устройства tinyAVR имеют и аппаратные каналы для широтно-импульсной модуляции (связанные с таймерами). Мы рассмотрим это в следующей главе.

Источник: Гадре, Д., Занимательные проекты на базе микроконтроллеров tinyAVR / Дхананья Гадре, Нигул Мэлхотра: Пер. с англ. — СПб.: БХВ-Петербург, 2012. — 352 с.: ил. — (Электроника)

Оставить комментарий

микросхемы мощности Устройство импульсов питания пример приемника провода витков генератора выходе напряжение напряжения нагрузки радоэлектроника работы сигнал сигнала сигналов управления сопротивление усилитель усилителя усиления устройства схема теория транзистора транзисторов частоты