Усовершенствованная "поющая ёлка" на PIC
- Подробности
- Категория: схемы на PIC
- Опубликовано: 01.04.2017 20:12
- Просмотров: 3443
Особенностью данной программы является возможность плавного изменения яркости светодиодов. Прототипом послужила "поющая новогодняя ёлка" (Радио, 2001, № 10, с.25-26). Применение ШИМ позволяет выбрать для каждого из 8 светодиодов одну из 32 градаций яркости - от 0 (погашен) до 31 (максимум Преимущество импульсного управления - экономичность. На основе микроконтроллера PIC16F628 можно изготовить простое и компактное устройство с автономным питанием.
К достоинствам этого контроллера относится наличие внутреннего тактового генератора, не требующего подключения внешних элементов, что упрощает схему. Объём памяти программ достаточен для записи более десятка световых эффектов, таких как "плавное зажигание-гашение", "переливающиеся огни", "змейка" и т.п. В программе также предусмотрено плавное изменение скорости. Например, можно запрограммировать "бегущий огонь"
сначала с ускорением, затем с постоянной скоростью, и с замедлением. Кроме того, в память записано несколько мелодий.
При включении питания начинается цикл световых эффектов. После 5 циклов воспроизводится первая мелодия. Последующие мелодии воспроизводятся через каждые 10 циклов. Все они сопровождаются эффектом "бегущий огонь". Нажатие на кнопку в процессе выполнения основного цикла вызывает воспроизведение текущей мелодии, после чего цикл продолжается. Нажатие на кнопку во время воспроизведения прекращает его и подготавливает переход к следующей мелодии.
Принцип программной организации ШИМ.
Каждая световая комбинация кодируется в программе пятью байтами. Номером бита выбирается светодиод, номер байта определяет яркость в коде 1-2-4-8-16. Для программной организации ШИМ производится дешифрация, на время выполнения которой запрещаются прерывания. По окончании дешифрации информация о состоянии светодиодов сохраняется в 32 регистрах ОЗУ с именами BYTE00 - BYTE1F. При переполнении таймера TMR0 происходит переход на обработку прерывания. Информация о текущем состоянии светодиодов (зажжён/погашен) переносится с использованием косвенной адресации из регистра-источника BYTE00 в регистр PORTB . Адрес регистра-источника инкрементируется. Флаг запроса на прерывание сбрасывается. При следующем переполнении таймера в PORTB переносится информация из регистра BYTE01, затем из BYTE02 и т.д. После переноса данных из регистра BYTE1F происходит возврат
к BYTE00. Таким образом, длительность импульса тока через светодиод определяется количеством единиц в соответствующих разрядах регистров BYTE00 - BYTE1F. Обновление информации на выводах RB0-RB7 контроллера происходит с достаточно высокой
частотой, и мерцание светодиодов незаметно для глаз.
Предусмотрена возможность сдвига данных в регистрах (подпрограмма Roll), что позволяет сэкономить память программ. Заданные один раз кодовые комбинации будут выполняться для всех светодиодов поочерёдно.
В подпрограмме обработки прерывания контроллер проверяет состояние кнопки. Подавление дребезга контактов - программное. Если обнаруживается, что кнопка нажата, то цикл ШИМ приостанавливается. После отпускания кнопки воспроизводится мелодия под текущим номером (хранящимся в регистре NUMBER). По окончании воспроизведения цикл ШИМ продолжается.
Контроллер также проверяет состояние кнопки в процессе воспроизведения. Нажатие приводит к прекращению воспроизведения. Номер текущей мелодии инкрементируется. Если мелодия была последней из имеющихся в памяти, происходит возврат к начальной.
Каждая нота кодируется одним байтом. Два младших бита задают длительность, пять бит - высоту тона, старший бит зарезервирован. Декодирование осуществляется методом табличной конвертации. В памяти контроллера хранятся частоты 25 нот - от "си" 1-й октавы до "си" 3-й октавы. Для воспроизведения одной ноты предусмотрена макрокоманда play. Таким образом, мелодия описывается последовательностью макрокоманд play B'xHHHHHDD'. Темп исполнения мелодии указывается отдельно и обеспечивается таймером TMR0.
В программу (версия 1.0) записаны 7 мелодий по выбору автора и 11 световых эффектов. Возможно, в последующих версиях их количество будет увеличено. Мелодии легко могут быть изменены по своему вкусу путём указания соответствующих нот в программе.
Примечание: в программе версии 1.1 изменено описание нот с целью расширения диапазона по длительности. Теперь макрокоманда play имеет следующий вид: play B'HHHHHDDD' Подробности - см в комментариях (в самой программе). Число мелодий увеличено до 12.
Различие между версиями 1.0 (picplay1.asm) и 1.0_S (picplay2.asm) [а также между 1.1 и 1.1_S] заключается в том, что версии S совместимы по выводам с конструкцией, описанной в журнале. Достаточно лишь заменить микроконтроллер. При желании можно подобрать резисторы в цепях светодиодов для получения требуемого диапазона яркостей. Первая же предназначена для схемы, показанной на рисунке.
Рекомендуемые сопротивления для этого варианта:
680 Ом - АЛ307БМ (красный)
510 Ом - АЛ307ГМ (зеленый)
1 кОм - импортный красный
560 Ом - импортный желтый
510 Ом - импортный зеленый
10 кОм - импортный синий (сверхяркий)
Сопротивление резистора в цепи звукоизлучателя зависит от его типа. Суммарное сопротивление
должно превышать 50 Ом. В случае применения пьезоэлектрического излучателя этот резистор
можно заменить перемычкой.
Скачать исходные тексты и прошивки.
Скачано с сайта eldigi.ru
ЛИТЕРАТУРА
1. Долгий А. Разработка и отладка устройств на МК. - Радио, 2001, № 5-12, 2002, № 1.
2. "Поющая" новогодняя ёлка. - Радио, 2001, № 10, с.25-26.
3. www.microchip.ru
Источник Журнал Радио №11 - 2004г.