Программирование микроконтроллеров ATmega » Журнал практической электроники Датагор
Хеллоу ВСЕМ!!!
Итак, как я и обещал, расскажу как залить программу в МК.
Для этого нам понадобится программатор и соответствующий софт.
Обо всём по порядку.
Содержание статьи / Table Of Contents
Камрад, рассмотри датагорские рекомендации
🌼 Полезные и проверенные железяки, можно брать
Опробовано в лаборатории редакции или читателями.
Трансформатор R-core 30Ватт 2 x 6V 9V 12V 15V 18V 24V 30V
Паяльная станция 80W SUGON T26, жала и ручки JBC!
Отличная прочная сумочка для инструмента и мелочей
Хороший кабель Display Port для монитора, DP1.4
Конденсаторы WIMA MKP2 полипропилен
Трансформатор-тор 30 Ватт, 12V 15V 18V 24V 28V 30V 36V
SN-390 Держатель для удобной пайки печатных плат
Исключён фрагмент. Полный вариант доступен меценатам и полноправным членам сообщества.
Это максимально упрощенная схема программатора для СОМ-порта от Claudio Lanconelli.
Исключён фрагмент. Полный вариант доступен меценатам и полноправным членам сообщества.
Транзистор можно исползовать любой, например — КТ315, КТ3102 или буржуйский, у кого что завалялось.
Стабилитроны можно заменить нашими КС147Ж. К стати, учитывая что на выходе СОМ-порта присутствует двуполярный сигнал +-12В, стабилитроны выполняют двоякую функцию — ограничивают положительный сигнал на уровне +4,7..5В, а отрицательный коротят наглухо. Поэтому не используйте двуполярные стабилитроны, спалите МК. Ну а если не уверены, поставьте КД522 (1N4148) параллельно стабилитронам, анодом к массе.
Кабель используется длинной не более 15..20см.
Исключён фрагмент. Полный вариант доступен меценатам и полноправным членам сообщества.
В предыдущей статье, я не указал на схеме регулятора разъём программирования, а на плате он имеется, восполню этот пробел.
Кстати, выводы, используемые для программирования МК, не используются в схеме.
Есть одна программулина от выше упомянутого Claudio Lanconelli — Pony Prog 2000. Архив в конце статьи.
Не смотря на название, штука мощная, бесплатная и многофункциональная.
При первом запуске советую убавить звук на компе, сами поймёте почему.
В последствии можно поставить галочку в окне приветствия напротив «Disable sound».
Для начала нужно откалибровать программу через меню Setup / Calibration.
Затем выбрать СОМ-порт, Setup / Interface Setup, через который вы хотите подключить программатор, и тип программатора.
Исключён фрагмент. Полный вариант доступен меценатам и полноправным членам сообщества.
Прокрутите программу полосой прокрутки, вы увидите, что файл разделён на две части: зелёная — сама программа, и синяя — EEPROM-память данных. Остановите полосу в этом месте. Затем включите редактирование буфера программ: Edit / Edit Buffer enabled. И двойным шелчком мыши на первом синем байте откроется маленькое окно редактирования. Замените символы «FF» на «00». Такую операцию придётся проделать и с последующими тремя байтами, это исходные установки программы — громкость, тембр ВЧ и НЧ, Surround. В последующем программа будет сохранять текущие настройки в эти ячейки.
Подключаем программатор к разъёму программирования и к компу, включаем питание МК.
Нажимаем на кнопочку Erase, в виде стёрки с микросхемой, и если всё Ок’, то давим кнопку Write Device, в виде листочка со стрелкой, показывающей на микросхему, пройдёт процесс программирования, сначала зальётся программа, затем память данных.
После окончания процесса программирования на LCD-дисплее должна появиться надпись: Level 0dB.
Всем удачи!!! И надеюсь, что всё у вас будет работать на ура!!!
P.S. В заключении хочу сказать, что сам я пользуюсь прграмматором от PROTTOSа — AVR910-USB Programmer, подключающийся к USB-порту, безо всяких USB-COM-адаптеров. Удобная штука, особенно для ноутбука, где нет СОМ-портов…
И программа Pony Prog:
Исключён фрагмент. Полный вариант доступен меценатам и полноправным членам сообщества.
Александр
Как начать работать с микроконтроллерами ATMEL или AVR для программистов с 0. / Habr
Как начать программирование микроконтроллеров фирмы ATMEL если у вас не чего нету? а что собственно говоря нам надо?
1. Прямые руки и Чистый разум
2. Программатор
3. Микроконтроллер (далее МК)
4. Отладочная плата для МК.
5. Собственно своя программа.
Далее будет инструкция по созданию/приобретению/разработке все что требуется нам.
Начнем по пунктам.
1. Прямые руки и Чистый разум.
Я думаю тут все понятно, но на всякий случай если вы не уверенны в своих духовных силах то лучше не пробуйте а если вы думаете что у вас не достаток чего то другова а упорство и сила духа на высоте то у вас все получиться дерзайте.
2. Программатор
Но если учесть тот факт что мы только начинаем наше погружение в мир Электроники то нам надо быть в чем то 100% уверенным и давай те этой константой сделаем программатор чтоб если у нас что то пойдет не так точно не смотреть в его сторону. По сколько сейчас COM порт на новых компьютерах встречается все реже и реже по этому я рекомендую смотреть в сторону программаторах с USB интерфейсом.
Лично я рекомендую программатор BM9010 от Мастер Кит, я Сам им пользуюсь в течении 2 лет и не каких жалоб кроме того что он плохо дружит с 7 нету.
3. Микроконтроллер.
Ну тут совет у меня один берите тот у которого по больше памяти и ножек. мы ведь учимся зачем нам ещё думать об экономии? Лично я сам работаю с Atmega8515 16PU и нареканий не имею.
4. Отладочная плата
(тут начинается самое интересное)
Можно купить уже готовую отладочную плату с МК и не думать не о чем, а можно взять в руки паяльник и начать творить своими руками.
Если вы выбрали купить готовый то пропускайте все до 5 пункта.
Если вы как и я решили сделать её своими руками то тут возникает сразу много вопросов первый из которых а что для этого надо.
а) Паяльные принадлежности — паяльник, припой, канифоль/флюс, кисточка или шприц для нанесения канифоли/флюса + прямые не дрожащие руки. Желательна подставка под паяльник.
б) Средства для тестирования нашей схемы — чаще всего подойдет обычный «китайский» тестер.
в) Кусачки и Круглогубцы
г) Макетная плата — При выборе макетной (контактной) платы встает вопрос какого размера брать и одно или двух стороннею, мой совет чем плата больше тем лучше мы же не готовое устройство делаем где размер имеет значение, со сторонами на оборот на практике мне нравятся одно сторонние платы потому что я делаю что компоненты с 1 стороны а разводка с другой. Но на вкус и цвет товарищей нет.
е) Стандартная развязка платы — кварц на нужную частоту (совету брать 12/16 МГц) конденсаторы для кварца, порт под кабель от программатора
ж) Вся остальная развязка платы — для начала рекомендую 1 светодиод и резистор под него.
Советы по сборке:
Дип панельку для МК разместить в центре платы, порт для программатора на краю платы, Кварц как можно ближе к нужным выводам МК и старайтесь делать модульную систему.
5. Программа…
А где собственно писать программу и на чем? раньше вам бы точно сказали на асемблере но сейчас подчи везде используется С и лишь не большие куски кода вставками.
Какой использовать компилятор особой разницы нету но мой совет попробуйте в начале все, по ищите литературу и какая литература вам понравиться больше всего то и по ней с учетом вашего опыта выбирайте среду.
Из начальных проектов рекомендую следующий порядок — моргающий светодиод, работа со светодиодным идикатором, кнопка, Матричная клавиатура, USB связь с компьютером, LCD знако-синтезирующий экран, связь друг МК между собой.
моя плата со всеми выполненными проектами которые я предложил + со стабилизатором напряжения LM317 для того чтоб плата могла работать от зарядок для мобильных.
Рекомендуемый мною программатор — www.masterkit.ru/main/set.php?code_id=276487
Номер пьезы | Описание | Фабрикантес | ПДФ |
2SC1733 | Составной транзистор | Ренесас | ПДФ |
89C51RE2 | АТ89К51РЕ2 | Корпорация АТМЕЛ | ПДФ |
AA150XW01 | Модуль дисплея XGA | Мицубиси | ПДФ |
АД7768 | АЦП одновременной выборки | Аналоговые устройства | ПДФ |
АС4К64М16Д2 | 1 Гб (64M x 16 бит) DDRII Synchronous DRAM (SDRAM) | Альянс Полупроводник | ПДФ |
Б540К | 5A ВЫПРЯМИТЕЛЬ ШОТТКИ ДЛЯ ПОВЕРХНОСТНОГО МОНТАЖА | Юнисоник Текнолоджиз | ПДФ |
БАС21 | ДИОДЫ ОБЩЕГО НАЗНАЧЕНИЯ | Юнисоник Текнолоджиз | ПДФ |
БАТ54А | БАРЬЕР ШОТТКИ (ДВОЙНОЙ) ДИОДЫ | Юнисоник Текнолоджиз | ПДФ |
БАТ54АДВ | БАРЬЕР ШОТТКИ (ДВОЙНОЙ) ДИОДЫ | Юнисоник Текнолоджиз | ПДФ |
БАТ54АТБ | БАРЬЕР ШОТТКИ (ДВОЙНОЙ) ДИОДЫ | Юнисоник Текнолоджиз | ПДФ |
БАТ54АВ | БАРЬЕР ШОТТКИ (ДВОЙНОЙ) ДИОДЫ | Юнисоник Текнолоджиз | ПДФ |
БАТ54С | БАРЬЕР ШОТТКИ (ДВОЙНОЙ) ДИОДЫ | Юнисоник Текнолоджиз | |
БАТ54КДВ | БАРЬЕР ШОТТКИ (ДВОЙНОЙ) ДИОДЫ | Юнисоник Текнолоджиз | ПДФ |
БАТ54КТБ | БАРЬЕР ШОТТКИ (ДВОЙНОЙ) ДИОДЫ | Юнисоник Текнолоджиз | ПДФ |
Una ficha técnica, hoja técnica u hoja de datos (datasheet на английском языке), también ficha de características u hoja de características, es un documento que резюме el funcionamiento y otras caracteristicas de un componente (por ejemplo, un componente electronico) o subsistema por ejemplo, una fuente de alimentación) con el suficiente detalle para ser utilizado por un ingeniero de diseño y diseñar el componente en un sistema. DataSheet.es является веб-страницей, которая функционирует как репозиторий руководств или hoja de datos de muchos de los productos más Populares, allowiéndote verlos en linea o descargarlos en PDF. |
Eggtimer RGB с ATmega8515
Eggtimer RGB с ATmega8515Путь: Главная => AVR-RU => Приложения => Eggtimer RGB m8515 Diese Seite на немецком языке: Приложения AVR Eggtimer RGB с ATmega8515 |
- Недвижимость
- Оборудование
- крепление
- Программное обеспечение
- Выводы
- Максимальное измеряемое время 11 минут,
- может быть сконструирован для работы при напряжении 3,7, 4,5 или 5,0 В. выбор резисторов,
- предыдущая полная минута отображается красным цветом, можно настроить оставить включенными все красные светодиоды предыдущих минут,
- текущая минута сначала зеленый, с медленно увеличивающимся синим долю, затем уменьшая синюю и увеличивая красную долю, 512 разные цвета с 8-битным разрешением PWM,
- точное время с хрустальными часами, работает с тремя различных кристаллов, а также с внутренним RC генератор 2 или 4 МГц (с небольшими временными разностями хотя),
- низкое энергопотребление за счет переключения ненужных предыдущих светодиодов выкл., средний расход ок. 30 мА, батарея режим работы по умолчанию,
- можно настроить, чтобы оставить все красные светодиоды предыдущего минут в случае внешнего источника питания, обеспечивающего 200 мА макс.,
- воспроизводит выбранные тона гаммы в конце каждой минуты,
- широко настраиваемый исходный код для многих целей и варианты, с подробной документацией, блок-схемами, и временные значения,
- процедура тестирования аппаратного обеспечения предоставляется в качестве настраиваемого источника код для удобного раздельного тестирования всего железа компоненты.
Начало страницы | Недвижимость | Оборудование | крепление | Программное обеспечение | Выводы |
2.1 Выбор типа устройства AVR
Для доступа к 10 или 11 RGB-светодиодам требуется как минимум четыре 8-битных порта (32 контакта ввода-вывода). Дополнительные контакты должны позволять- воспроизведение музыки через штифт OCR, к которому можно прикрепить динамик,
- приложите ключ, чтобы остановить и перезапустить таймер.
==> АТмега предоставить такие полные 8-битные порты в 40-контактном корпусе PDIP. Добавление вывод внешнего прерывания для ключа сокращает список типов до:==> АТмега При отметке на выводе OC список пустеет, потому что большая часть OC контакты находятся в середине порта ввода-вывода. Единственный возможный выбор был OC1B, оставивший вышеперечисленные три типа устройств. Как ATmega161 снят с производства, идут только ATmega162 и ATmega8515 под вопросом. Я выбрал 8515 для своего проекта.Селектор устройства avr_sim справа показывает закрепление ATmega8515. Остается только один контакт (PE1), если нужно подключить 11 светодиодов. ведомый.
2.2 Схема
Здесь показано, как подключить 11 RGB-светодиодов к 32 портам ввода-вывода устройство АВР. Три цвета синий, зеленый и красный всегда прилагаются в этом ряду, каждый с резистором для ограничения тока через светодиоды. Светодиоды имеют общий анод, поэтому все аноды подключен к положительному рабочему напряжению. Если вы хотите использовать общие типы катодов, вам придется привязать катоды к земле и немного изменить программное обеспечение.Динамик подключен через электролитический конденсатор 47мкФ. Ключ подключается к пину INT2 напрямую, программные переключатели внутренний подтягивающий резистор включен.
Кристалл, управляющий часами ATmega8515, имеет частота 4,194304 МГц, выбранная для 8-битного ШИМ. Если вы используете кварц 4 МГц или внутренний RC на 4 МГц вместо этого ваша минута будет длиннее на 3 секунды, что является приемлемым неточность для яичного таймера.
Если вы хотите использовать другой кристалл: работают только перечисленные точно, если соответствующим образом отрегулировать CTC-делитель. 2.097 МГц уже обеспечивает достаточную скорость для долгой минуты изменяться и также могут быть использованы. Это результат работы ассемблера оптимизация кода: в первой версии коду требовалось 138 часов циклы для минутного изменения, но текущая версия остается ниже 120 тактовых циклов (именно столько экстенсивных циклов подсчитывается в раздел программного обеспечения был сделан для).
Вам не нужна точность кристалла для варки яиц? Хорошо, используйте внутренний RC и оставьте два входа кварца открытыми. Внутренний RC-генератор может работать на частотах 1, 2, 4 и 8 МГц. Версия с частотой 1 МГц слишком медленная для этого приложения. поэтому используйте либо 2, либо 4 МГц. Разница с точным время 60 секунд мало. Настройте предохранители ATmega8515 соответственно, и не забудьте настроить ассемблер исходный код.
Версия с тактовой частотой 8 МГц потребует установки предварительного делителя. от TC0 до восьми. Поскольку такая высокая скорость не дает преимуществ (наоборот: потребление тока увеличивается при работе от батареи) эта версия не принимается во внимание.
Все остальные частоты xtal имеют более или менее большую разницу с ритм 60-х. См. Расчетный лист Libre Office xtals для более подробной информации о различиях.
На схеме не показана шестиконтактная вилка ISP, которая служит для программирования ATmega8515 внутри системы. Необходимые для этого штифты помечены как второстепенная функция в ATmega8515.
Резисторы R синий , R зеленый и R красный были отобраны по следующим параметрам:
- Максимум двенадцать светодиодов должны управляться, если вы уходите горит один светодиод для всех предыдущих минут (например, красный), 10 светодиодов, плюс два светодиода текущей минуты. Два Светодиоды горят только в начале тактового цикла ШИМ, их отключение во время цикла ШИМ снижает средний потребление до 11 светодиодов.
- ATmega8515 может управлять макс. 200 мА. от его VCC или Контакт заземления. Таким образом, максимальный ток для каждого из 12 включенных светодиодов составляет 16,7 мА.
- Чтобы оставить достаточный ток для устройства в режиме ожидания и для работа динамика, поэтому ток светодиода был выбран равным 15 мА, что достаточно для многих свет.
- При 15 мА прямое напряжение светодиодов: синий = 2,92 В, зеленый = 3,09 В, красный = 2,09 В, с небольшие различия для каждого экземпляра. См. Свободный офис расчетный лист измерено по факту измерено напряжения и токи светодиодов конечного устройства.
- При 15 мА напряжение на выводе в направлении стока равно примерно 0,4 В. Фактически в среднем 358 мВ был измерен в диапазоне от 319 до 410 мВ.
- Резисторы
R LED = (V op - V LED - V раковина ) / I LED- Выбрал ближайшие номиналы из ряда резисторов Е24, которые можно приобрести у моего дилера электроники.
В таблице представлены синие, зеленые и красные резисторы. для трех рабочих напряжений:Если вы используете внешний источник и не работаете от батареи, вы можете оставить все светодиоды для предыдущих минут на красный, который потребляет 150 мА на конце и может быть получено от USB-разъема или внешний источник питания, но не рекомендуется для батареи операция. Просто включите (или выключите, что по умолчанию) в исходный код. Если вы хотите смешанную операцию, используйте свободный контакт PE1 для перемычки, позволяющей оставить включенными все предыдущие светодиоды.
- для 3,7 В, что является минимальным и предоставляется e. г. более крупными клетками Li,
- на 4,5 В, которые выходят из трех каскадных АА(А) аккумуляторные батареи и
- для 5,0 В, если вы хотите использовать разъем USB или внешний источник питания.
Я собрал свой экземпляр с тремя батареями по 1,5 В. И измерено напряжения всех 32 светодиодов. Среднее напряжение стока примерно рабочее напряжение 4,2 В составило 0,358 В, средний ток на светодиод составил 14,19 мА. Среднее прямое напряжение для для синих светодиодов было 2,798 В, для зеленых 2,777 В и для красные 2,023 В. Средние токи составили 13,11 мА для синий, 15,31 мА для зеленого и 14,04 мА для красные светодиоды. Такие небольшие различия в токах светодиодов незаметны.
См. Расчетный лист Libre Office Больше подробностей.
Начало страницы | Недвижимость | Оборудование | крепление | Программное обеспечение | Выводы |
3.1 Печатная плата
Для удобного монтажа была разработана односторонняя разводка печатной платы. Это покрывает половину евро формата (100 на 80 мм). Это компоненты на печатной плате. Все отверстия, которые необходимо просверлить,
0,8 мм, только те, что для контактов динамика и батареи, а также
что касается контактов ISP6, они составляют 1 мм. Один мост был неизбежен.
3.2 Окончательный
После того, как оборудование будет готово, различные компоненты могут быть проверено. См. раздел «Программное обеспечение». тестовая программа.Плата покрыта крышкой из акрилового стекла толщиной 10 мм. расстояние, для которого отверстия для светодиодов, ключ и выключатель облажались.
Это вид со стороны. Нижний слой — акрил. стеклянная пластина, удерживающая батареи и динамик. Динамик имеет небольшие 3 мм отверстия для шума и фиксируется клеем. Расстояние от пластины до печатной платы 25 мм.
Начало страницы | Недвижимость | Оборудование | крепление | Программное обеспечение | Выводы |
4.
1 Загрузки Программное обеспечение доступно в виде исходного кода на ассемблере. здесь или можно посмотреть в браузере здесь.Для тестирования всех компонентов платы по отдельности я написал тестовое программное обеспечение здесь. Подробнее см. в главе 4.4.
4.2 Сборка
Перед сборкой убедитесь, что у вас правильные настройки выбрано. По умолчанию работает с 4.19Кристалл 4304 МГц. Я не могу нести ответственность, если вы приготовили яйцо на шесть минут вместо трех, только потому, что ваш таймер для яиц работает на Тактовая частота 2 МГц вместо указанной выше частоты, и вы пропустили изменение константы clock в исходном коде.Для имитации исходного кода включены некоторые переключатели, те ускоряют выполнение. Убедитесь, что все эти переключатели на ноль перед сборкой финальной версии.
4.3 Предохранители
При программировании вспышки фьюзы нужно менять один раз. Чтобы включить внешний кварц, предохранитель генератора должен быть установлен. После этого ATmega8515 работает с 4.19.4304 МГц.4.4 Диагностика оборудования
Для тестирования аппаратного обеспечения яичного таймера я написал количество подпрограмм, которые проверяют аппаратные компоненты. программное обеспечение доступно в виде исходного кода на ассемблере здесь. Он должен отредактировать, чтобы настроить его, затем снова собрать и записать шестнадцатеричный файл во флэш-память.Включает в себя следующие подпрограммы:
- Тест ввода-вывода порта: проверяет выходной контакт динамика через SBI и Инструкции CBI,
- Таймер 1 IO: проверяет динамик через переключение таймера OC1B 1,
- Светодиод: переключает светодиод на белый, поворачивая все три светодиода. включен, светодиод можно выбрать, установив dbgLedNr на число между 1 и 11,
- LedRot: вращает все 11 светодиодов, переключая их на синий цвет, зеленый и красный подряд,
- LedPwm: смешивает цвет dbgLedNmbr (1..11) с синяя часть dbgPwmBlue (0 . .. 255), зеленая часть в dbgPwmGreen и красная часть в dbgPwmRed, задержка (от 0 до 255) может быть добавлено и снижает скорость выполнения,
- Клавиша: если клавиша не нажата, LED1 горит синим цветом, если нажата: зеленый,
- Клавиша переключения: продвигает цвет соотв. светодиод каждый раз нажата клавиша, включает подсчет событий переключения на ключевой ввод.
4.5 Как работает ШИМ
Прежде всего: все функции, такие как- Светодиод ШИМ, прерывания клавиш
- и
- звуки запуска и остановки,
4.5.1 Синхронизация ШИМ
Во-вторых: вы пропустите счетчики секунд и минут. Это не организовано так, поскольку секунда точно не может быть определена с тактовой частотой 4,194304 МГц. Счетчики времени находятся позади следующий:- 240 (CTC-Divider) * 512 (цвета) * 256 (длина цикла ШИМ) * 8 (повторение ШИМ на цвет) составляет ровно 251 658 240 тактовых циклов, при тактовой частоте 4,194304 МГц ровно 60 секунд длинный.
- Таким образом, TC0-CTC необходимо настроить так, чтобы часы делились на 240.
- Цвета должны считаться от 0 до 511 в два этапа по 256 шагов каждый,
- Счетчик шагов ШИМ считает от 0 до 0 (256).
- Счетчик циклов ШИМ ведет обратный отсчет с 8 до 0.
Синхронизация ШИМ работает следующим образом:
- Тактовая частота 4,194304 МГц опережает таймер (предделитель = 1).
- TC0 работает в режиме CTC, а порт сравнения A установлен на 239. Это делит тактовую частоту на 240 и запускает прерывание с частотой 17.476,26 кГц, каждый 57,22046 мкс.
- Цикл ШИМ увеличивает регистр rPwm, сравнивает если достигнуты значения синего, зеленого и красного сравнения (и очищает соответствующие светодиоды, если они равны).
- Каждые 256 раз rPWM снова достигает нуля (каждый 14,65 мс). Если rPCnt, для которого ранее было установлено значение восемь, не достигает нуля, условие запуска цикла ШИМ повторяется, так что каждый цикл ШИМ повторяется восемь раз. Что означает 117,19 мс для восьми повторений.
- В фазе 1 ШИМ значения ШИМ зеленого светодиода уменьшается на единицу, а синий светодиод увеличивается на единицу. Если зеленый светодиод достигает нуля, начинается фаза 2, которая поворачивает синий светодиод выключен, а красный включен. Фаза 1 длится ровно 30 секунд.
- В фазе 2 ШИМ синее значение ШИМ уменьшается на единицу и красное значение увеличивается на единицу. Эта фаза также длится ровно 30 секунд.
4.5.2 Организация битов ШИМ
Следующая организация занимается оптимизацией программного обеспечения.32 светодиода (10 * 3 + 2) прикреплены к порты ввода-вывода, как показано здесь. Во время циклов ШИМ драйвер направление для активных светодиодов записывается в 1, для неактивных светодиодов он находится на 0. Это позволяет работать как с общим анодом, так и с светодиоды с общим катодом.
Организация наборов регистров была выбрана таким образом, чтобы избежать написать 22 разных ротины: по две на каждую минуту. Во время операции используются два набора регистров:
- R3:R0 удерживают условие запуска в каждом цикле ШИМ. Что необходимо, потому что каждый цикл PWM повторяется восемь раз, так что начальное условие необходимо каждый раз ШИМ перезапускается. Эти регистры копируются в второй устанавливается каждый раз, когда начинается цикл PWM. Во-первых цикла, первый зеленый светодиод полностью горит (ШИМ сравнивает значение = 0, никогда не достигает равенства), первый синий и первый красный светодиод выключается. Синий светодиод включается только после того, как его значение ШИМ больше нуля.
- R7:R4 удерживают текущее состояние на каждом шаге ШИМ. Всякий раз, когда синее значение сравнения достигает текущего ШИМ значение, синий бит в соответствующем регистре записывается до нуля. То же самое для зеленых и красных битов. Следующий сравнение, содержимое всех четырех регистров R7:R4 записывается в порты направления ввода/вывода.
4.5.3 Доступ CTC к битам PWM
Доступ к этим битам на разных фазах организован как следует. Указатель Y указывает на R0, синий бит, расположенный в регистр находится по адресу 0x01 и указывает на синий бит светодиод1. rBB используется во всех следующих процедурах и всегда указывает на синий светодиод текущей минуты.Установка этого синего бита в стартовом наборе регистров работает следующим образом (r — временный рабочий регистр, именуемый на ассемблере rmp. исходный код):
лд г, у ; Чтение содержимого регистра с R0 по r или r,rBB ; ИЛИ с синей битой ст Y,r ; Скопируйте результат в регистр R0Доступ к набору рабочих регистров немного отличается:
лдд г, Y+4 ; Чтение содержимого регистра R4 в r или r,rBB ; ИЛИ с синей битой станд Y+4,r ; Скопируйте результат в регистр R4Если установленный бит должен быть очищен (например, если цикл PWM счетчик соответствует синему значению сравнения, просто замените ИЛИ по EOR, который очищает ранее установленный бит.
Преимущество этого в том, что Y может указывать на любой из четырех регистров в начальном наборе регистров, а также к четырем рабочие регистры тоже за счет смещения. Если зеленый бит должен быть установлен, просто сдвиньте rBB один раз влево. Но если касается седьмого бита, сдвиг означает, что один переносится на переноску. В этом случае адрес в Y должен быть увеличен (на INC YL), а тот, что в переноске, должен быть повернут в бит 0 rBB.
Таким образом, перейти от первого светодиода ко второму очень просто: просто сдвиньте rBB три раза влево (и увеличьте YL плюс снова поворачивайте rBB всякий раз, когда перенос смещается из рББ). Но: это не так просто (см. пример ниже) переход от LED3 к LED4):
Много дел. И мы должны позаботиться о том, чтобы Подпрограмма обслуживания прерываний не длится дольше, и следующая Прерывание CTC приходит до того, как мы закончили это. К счастью, эта длительная процедура происходит только раз в минуту, поэтому отправка контроллера в спящий режим для снижения энергопотребления имеет смысл в любом случае. Доля сна в финальной версии составляет 89%, поэтому действительно имеет смысл использовать эту функцию.
Разумеется, все четыре рабочих байта должны быть записаны в четыре порта направления, потому что каждый шаг может изменить два из этих регистров (если красный или зеленый бит расположен один адрес выше, как в примере выше). Я решил выполнить вывод рабочего регистра, установленного в четыре порта направления перед любыми дальнейшими вычислениями в процедура ISR. Это гарантирует, что переключение светодиодов не зависят от длительности дальнейших процессов и всегда выполняется точно в такте с 7 по 10 после таймер достиг своего состояния прерывания, независимо от того, как длительные операции ISR длятся.
4.5.4 Обычный цикл CTC: сравнение цветов
При этом нормальный цикл ШИМ в службе прерывания Процедура сравнения Прерывание TC0 выглядит так, как показано на рисунке. здесь (справа). Он начинается с вывода рабочий регистр установлен на порты направления. Тогда СРЕГ считывается, и счетчик циклов ШИМ rPwm увеличивается. Если который достигает нуля, следует другой путь (см. ниже). Если не на нуле, три цвета текущего светодиода имеют должны быть проверены, достигли ли они своих сравнительных значений и быть выключенным.Сначала синее значение сравнения сравнивается с PWM. прилавок. Если равны (флажок Z устанавливается после сравнения), синий бит очищается с помощью EOR и записывается обратно в рабочий регистр.
Затем указатель rBB смещается влево, указывая на зеленый кусочек. Если флаг переноса установлен после сдвига, Y увеличивается и флаг переноса возвращается обратно в rBB. Y и rBB сейчас указать на зеленый цвет светодиода.
Зеленое значение сравнения теперь сравнивается с шагом ШИМ счетчик об/мин. Если они равны, зеленый бит этого светодиода сбрасывается.
Теперь снова rBB смещается, чтобы указывать на красный бит. Если красное значение сравнения равно rPwm, красный бит очищается.
В конце значения rBB и Y должны вернуться туда, где они начали с.
Блок-схема добавила количество тактов после произошло состояние прерывания TC0. Если все условия выбрать самый длинный путь (что не может быть) в общей сложности Потребуется 57 тактов. Как минимум (без переключения светодиоды, переносов при переключении нет) продолжительность 41 такт. Поскольку следующее прерывание CTC происходит через 240 тактов после предыдущий, эта нагрузка составляет от 17 до 24% и ни в коем случае превышает длину цикла СТС ТС0.
4.5.5 Повторение цикла ШИМ
Как описано выше, цикл ШИМ повторяется восемь раз в такого же цвета. Итак, эта процедура выполняет эти повторения: она считается счетчик вниз, если это не устанавливает флаг Z, начало значение в начальном наборе регистров просто копируется поверх работы набор регистров и после восстановления SREG возвращается из прерывать. Когда приходит следующее прерывание CTC, рабочий набор регистров записывается в порты DDR и становится активным. Эта часть еще короче, чем сравнительный прогон, но выглядит
только один раз в 256 случаях, поэтому не имеет большого влияния на
общее время выполнения.
4.5.6 Следующий цвет
Если восемь циклов ШИМ с одинаковыми синим, зеленым и красным цветом сравните значений, как rPwm, так и rPCnt достигают нуля. Это означает, что в зависимости от фазы- Значение зеленого уменьшается, а синего увеличивается в фазе 1, или
- значение синего уменьшается, а красного увеличивается в фазе 2.
Если в фазе 1 и зеленый, и синий значения достигают нуля, в
- установлен флаг фазы 2 и
- rBB переключается на зеленый светодиод, который выключается в стартовом регистре синий светодиод выключен, но красный светодиод еще не горит, потому что rRed все еще равен нулю. Этот будет включен в следующем цветовом цикле, а
- rBB возвращается в исходное положение.
4.5.7 Следующий светодиод
Если в фазе 2 и синее, и красное значения достигают нуля, минута закончилась, и должен быть активирован следующий светодиод.Здесь в качестве примера показано переключение с LED3 на LED4. LED3 с сине-зеленым диодом — крайняя левая часть. регистра R0, его красный бит находится в бите 0 регистра R1. Шаги следующие:
- сначала сбрасывается флаг фазы 2, так как следующий сочетание цветов фаза 1,
- , то текущий синий бит очищается монопольным ИЛИ с битовым указателем rBB, текущий красный бит не сбрасывается, а остается активным, чтобы сигнализировать о последнем полная минута, когда следующий светодиод меняет свой цвет,
- , то проверяется, включена ли последняя фаза (светодиод 11).
в настоящее время активно, проверив
- , если Y равен 3, и
- , если rBB равен 32 (= бит 5).
- переключение LED11 только на красный,
- остановка таймера TC0 и его прерывания,
- запись условия перезапуска (Y=0, rBB=1) в набор начальных регистров и
- установка флага «Остановлено».
- Если Y=3 и светодиод 10 активен (rBB находится в положении 8, соотв.
установлен бит 3), затем
- rBB LED11 установлен на красный бит LED10 (LED11 не имеет синего светодиода) и
- горит зеленый бит LED11.
- Если Y=3 и ни LED10, ни LED11 не активны, то следующий зеленый светодиод активируется непосредственно переключением rBB осталось четыре раза и выполнить остальные копирование процедур.
- Если Y еще не равно 3, проверяется, является ли Y=0 и rBB=1, потому что в этом случае очистка последнего светодиода не выполненный. Если LED1 активен, та же процедура переключения (четыре раза осталось до следующего зеленого светодиода) выполняется следующий.
- Если Y не равен 0 или rBB не равен 1, rBB сдвигается вправо на красный бит предыдущего светодиода, который выключен. В этом случае пять сдвигов влево переводят позицию rBB на следующую зеленый светодиод. Загорается следующий зеленый светодиод и отображается rBB. сдвинут один раз вправо, чтобы указать на синий бит следующего ВЕЛ. Наконец, начальные значения копируются в работу. набор регистров, и подпрограммы заканчиваются RETI.
4.5.8 Светодиоды с общим катодом?
Еще один совет: если вы используете светодиоды с общим катодом, только необходимо внести следующие изменения: при запуске установить все PORTx ко всем единицам, а не к нулю. Все остальное остается такой же. 50 кОм внутренних подтягивающих резисторов, которые включены, когда биты DDR выключены, вызывает ток менее 60 мкА через светодиоды, который мал и в любом случае невидим.Наверх страницы | Недвижимость | Оборудование | крепление | Программное обеспечение | Выводы |
4.6 Как работает звук
4.
6.1 TC1 как звуковой генератор Для генерации звука TC1 устанавливается в режим CTC, а сравнение Порт как CTC соответствует. Compare B устанавливается на 0 и управляет Выходной контакт OCR1B: если звук включен, контакт переключается, если он выключен, выходной контакт очищен.Продолжительность, в течение которой активируется звуковой сигнал, обрабатывается в зарегистрировать пару R25:R24. Эта пара отсчитывается. Если оно достигает нуля,
- флаг bSound снят,
- вывод OCR1B очищен, а
- Прерывание сравнения TC1 отключено.
4.6.2 Таблица гаммы
Чтобы включить частоту звукового тона, гамма интегрируется как таблица в исходном коде. Таблица gamutTable состоит из два слова для каждого тона: первое — значение CTC (с старший бит первым при считывании с помощью LPM) и продолжительность тона значение счетчика в течение одной секунды. Все октавы от А1 минор над А минор и 0 к г 7 находятся в таблице.В исходном коде константа cOctave определяет октава, из которой взяты 11 тонов. cOctave может диапазон от -2 до +6. -2 начинается с A1 младший или 55 Гц и простирается до e (165 Гц), -1 начинается с Второстепенный с частотой 110 Гц и диапазоном до е 1 (330 Гц). a 2 с частотой 880 Гц должно быть хорошим выбором (cOctave=2). Каждая минута играет следующий более высокий тон в гамме продолжительностью в одну секунду.
Пара регистров ZH:ZL указывает на текущую позицию гаммы. Если флаг bPlay установлен, запускается звуковой сигнал.
4.6.3 TC1 для проверки звука
Если ни один тон не активен, TC1 служит для проверки звукового флага. В этот режим,- Прерывания TC1 при сравнении соответствия B каждую 1 мс,
- уменьшает значение счетчика, настроенного на желаемое значение. проверить частоту,
- , если ноль проверяет установленный бит в регистре флагов на начать следующий тон и
- запускает генерацию звука с регистрационного тона. пара ZH:ZL указывает на в таблице гаммы.
- можно построить трехканальный ШИМ путем программное обеспечение с 8-битным разрешением на всех трех ШИМ каналы,
- ШИМ работает с частотой 68 Гц, а выводит восемь полных циклов ШИМ перед продвижением к следующему цвету, достаточно скорости для обмана мужчин глаз и во избежание эффекта мерцания,
- в отличие от ШИМ, построенных на таймерах, выходные каналы могут быть на любом из доступных входов/выходов пины (здесь: 32 пина) и не ограничиваются одним пином на канал, поэтому здесь у нас есть 32-канальный ШИМ, то, чего не дает ни MEGA, ни какой-либо XMEGA оборудование для,
- это можно сделать с часами контроллера частоты менее 2 МГц и выше, 90 192
- это точно, а точка переключения светодиодов каждые 57 мкс не зависит от различных задачи, которые необходимо выполнить в прерывании CTC, поместив выходные инструкции каналов PWM поверх процедура обслуживания прерывания,
- с использованием специальных инструкций AVR, таких как LD/ST, а также LDD/STD, задачи могут быть оптимально решен, так что структура программирования проста и остается прямолинейным, даже учитывая сложность заданий.