Отладочная плата для устройств на МК Atmega8/48/88/168/328
Многие устройства в моих статьях строятся на основе отладочных плат. Сегодня поговорим об отладочной плате для микроконтроллеров Atmega8/48/88/168/328. Все они в DIP корпусе имеют 28 выводов и одинаковое их расположение, поэтому без проблем можно одну отладочную плату использовать для любого из вышеперечисленных микроконтроллеров. Возможности этой отладочной платы позволяют также установить, например, bootloader для arduino и использовать эту плату как arduino.
Общий вид готовой отладочной платы
Принципиальная схема отладочной платы:
Данная отладочная плата состоит из следующего набора элементов. Место для микроконтроллера в отладочной плате использовано с применением разъема для корпуса DIP-28. Применение такого разъема, в народе именуемого «кроватка» позволит в случае чего быстро заменить микроконтроллер на плате. Удобно, если по неопытности случайно залочить микроконтроллер, удобно его извлечь и «вылечить» при помощи другой схемы или просто быстро сменить тип используемого микроконтроллера.
Также для быстрой смены кварцевого резонатора использован разъем. Так как эта отладочная плата, могут возникать ситуации, когда необходимо перезапускать микроконтроллер. Для этой цели на плате предусмотрена кнопка S1 — при замыкании на землю вывода PC6, происходит рестарт или reset используемого микроконтроллера. Резистор R6 подтягивает плюс питания к этому выводу для предотвращения самопроизвольного перезапуска. Данная макетная плата имеет простое исполнение, поэтому добавил два модуля для светодиодов (по три светодиода в каждом модуле). Токоограничительные резисторы для светодиодов подобраны таким образом, что для каждого модуля можно использовать RGB светодиоды — удовлетворено условие баланса белого. Падение напряжения на красных светодиодах чуть меньше, чем у зеленых и синих, поэтому резисторы R1 и R5 имеют сопротивление 180 Ом. Кроме того, резисторы в анодах светодиодов ограничивают ток на уровне примерно 18 — 20 мА для максимальной яркости. каждый светодиод соединяется с портом микроконтроллера через перемычки (джемперы) 1 — 6. Также, благодаря штырьковым соединениям, при помощи проводка о двух концов с соответствующими разъемами типа «мама» можно соединять светодиоды с любыми другими выводами микроконтроллера. Таким образом, макетка позволит отлаживать многие простые задачи без особых телодвижений, соответствуя своей простоте относительно всеобъемлющих отладочных плат, содержащих все нужные и не нужные модули для отладки любых задач. Следуя данной концепции, на плате возможно два варианта питания — 5 вольт от USB порта через программатор и 3,3 вольта через три выпрямительных диода (P-N переход диода способствует падению напряжения примерно на 0,5 — 0,6 вольт в зависимости от применяемого типа, диоды Шоттки имеют несколько меньшее падение на переходе — порядка 0,2 вольта, их лучше не использовать). Данные режимы питания выбираются путем установки перемычек (джемперов) 7 или 10. При желании можно немного изменить печатную плату и поставить стабилизатор напряжения на 3,3 вольта, например микросхему AMS1117. Резистор R10 ограничивает ток питания отладочной платы. Его можно или убрать, или заменить на меньший или больший номинал в пределах необходимого, или просто заменить резистором номинала 0 Ом. Резистор R9 был установлен в основном с целью только подключения LCD дисплея для регулировки контраста экранчика. Однако, этот функционал не ограничивается только LCD — дисплеем, резистор можно использовать в любых других необходимых целях. И, наконец, АЦП микроконтроллера. Как правило он питается от основного напряжения через дроссель для большей стабильности напряжения и более правильных показаний. Также АЦП имеет канал опорного напряжения. Оно организовано микросхемой управляемого стабилитрона TL431 — он стабилизирует напряжение до 2,5 вольт в соответствии с подключением выводов как на схеме, и оно подается на вывод AREF. Но не всегда нужно именно 2,5 вольта опорного напряжения. Поэтому на плате организованы перемычки 8 и 9 для возможности подключения 5 вольт на вывод опорного напряжения, то есть взять его от вывода AVCC — питания АЦП.
Для подключения светодиодов на печатной плате предусмотрены контакты типа цанга вдоль края платы.
Все выводы микроконтроллера дублируются штырьками. Тут все понятно — для возможности подключения к выводам используемого микроконтроллера на отладочной плате каких-то своих модулей, схем или устройств. Штырьковые контакты питания +5 вольт и 0 вольт имеются по 5 штук на плате. Специально для программирования на печатной плате предусмотрен стандартный 10 пиновый разъем для программаторов AVR, например USBasp или AVRdoper или других.
Более подробно расположение штырьков (в том числе и для перемычек) относительно микроконтроллера можно посмотреть на печатной плате (ссылка будет ниже).
А вот так выглядит отладочная плата со стороны пайки:
Надеюсь аккуратность порадует Ваш профессиональный глаз.
Если данная статья окажется кому-то толчком для начала освоения микроконтроллеров и техники их основе, то ниже будет представлена прошивка и программный код как просто для тестирования этой отладочной платы, так и для кого-то первым опытом в прошивке микроконтроллера. Предлагаю, как и многие другие, просто моргать светодиодом.
Для этого в компиляторе необходимо определить частоту работы микроконтроллера, далее присоединить к проекту основные библиотеки компилятора для работы с выбранным микроконтроллером. Следующим шагом является обозначение куда будет подсоединяться светодиод. Далее у нас главная программа main, без нее никак нельзя, в начале главной программы инициализируется порт для работы со светодиодом. Внутри главной программы прописан бесконечный цикл while, то есть он никогда не закончится и будет крутиться по кругу от начала и до конца. А внутри этого цикла сама суть прошивки — светодиод зажигается, ждем 1 секунда, светодиод тухнет, ждем 1 секунду и так по кругу. Вот собственно и вся простая программа для тестирования.
Вот что необходимо для прошивки микроконтроллера atmega8 — fuse биты:
К статье прилагается печатная плата, нарисованная в Sprint Layout, также простая прошивка для микроконтроллера ATmega8, моргающая светодиодом для оценки работоспособности платы и просто для того чтобы данная схема не была просто железякой. Также для данной прошивки прилагается файл Proteus и исходник программного кода в AVRstudio 4. Небольшое видео для демонстрации. Ну, а при желании Вы всегда можете загрузить самостоятельно в микроконтроллер bootloader для arduino и использовать эту плату как arduino Uno или Nano. Сам я особо не любитель arduino, поэтому не делал на это большого акцента.
Источник
Отладочная плата с микроконтроллером ATmega328
Адаптированная цитата из Википедии на условиях распространения Attribution-ShareAlike
Arduino — торговая марка аппаратно-программных средств для построения простых систем автоматики и робототехники, ориентированная на непрофессиональных пользователей. Программная часть состоит из бесплатной программной оболочки (IDE) для написания программ, их компиляции и программирования аппаратуры. Аппаратная часть представляет собой набор смонтированных печатных плат, продающихся как официальным изготовителем, так и сторонними производителями.
Под торговой маркой Arduino выпускается несколько плат с микроконтроллером и платы расширения. Большинство плат с микроконтроллером снабжены минимально необходимым набором обвязки для нормальной работы микроконтроллера (стабилизатор питания, кварцевый резонатор, цепочки сброса и т. п.).
Arduino и Arduino-совместимые платы спроектированы таким образом, чтобы их можно было при необходимости расширять, добавляя в устройство новые компоненты. Эти платы расширений подключаются к Arduino посредством установленных на них штыревых разъёмов. Существует ряд плат с унифицированным конструктивом, допускающим конструктивно жесткое соединение процессорной платы и плат расширения в стопку через штыревые линейки. Кроме того, выпускаются платы уменьшенных габаритов (например, Nano, Lilypad) и специальных конструктивов для задач робототехники. Независимыми производителями также выпускается большая гамма всевозможных датчиков и исполнительных устройств, в той или иной степени совместимых с базовым конструктивом Ардуино.
Помимо стандартных конструктивов Ардуино сторонние разработчики создали множество миниатюрных клонов, сохранив только архитектурную и программную совместимость.
Микроконтроллеры для Arduino отличаются наличием предварительно прошитого в них загрузчика (bootloader). С помощью этого загрузчика пользователь загружает свою программу в микроконтроллер без использования традиционных отдельных аппаратных программаторов. Загрузчик соединяется с компьютером через интерфейс USB (если он есть на плате) или с помощью отдельного переходника UART-USB. Поддержка загрузчика встроена в Arduino IDE и выполняется в один щелчок мыши.
На случай затирания загрузчика или покупки микроконтроллера без загрузчика разработчики предоставляют возможность прошить загрузчик в микроконтроллер самостоятельно. Для этого в Arduino IDE встроена поддержка нескольких популярных дешевых программаторов, а большинство плат Arduino имеет штыревой разъем для внутрисхемного программирования (ISP для AVR).
В линейке устройств Arduino в основном применяются микроконтроллеры Atmel AVR ATmega328, ATmega168, ATmega2560, ATmega32U4, ATTiny85 с частотой тактирования 16 или 8 МГц.
- Петин В.А. Проекты с использованием контроллера Arduino. — БХВ-Петербург, 2014. — 400 с. — ISBN 9785977533379.
- Arduino -https://ru.wikipedia.org/wiki/Arduino
В китайском интернет-магазине aliexpress была куплена отладочная плата с микроконтроллером ATmega328P, совместимая с Arduino Pro Mini, но физически немного отличающаяся от неё. В данной статье будет показана распаковка, комплектация и быстрая проверка работоспособности. Будут приведены краткое описание и основные отличия от оригинальной отладочной платы. В конце будет показан пример работы данной платы с небольшой полезной программой, подсоединив к ней датчик препятствия и светодиод. В другой статье будет рассмотрен вариант использования платы без загрузчика и программирование её сторонней программой простым самодельным программатором.
Предисловие
У начинающего или рядового радиолюбителя, а иногда даже и у продвинутого, зачастую нет возможности использовать в своих конструкциях микроконтроллеры в корпусах TQFP, QFN или MLF в силу их маленького размера, тонких коротких выводов и маленького расстояния между выводами:
Трудности встречаются при создании платы для таких микроконтроллеров во время переноса рисунка или вытравливания, а так же при установке микроконтроллера на плату без применения паяльного фена или паяльной станции обычным паяльником:
Правда некоторые ухитряются сделать это даже весьма большим паяльником, но чаще всего выходом из ситуации является приобретение готовых модулей и отладочных плат в виде Arduino. Это довольно хорошее решение для новичков, так как на таких платах уже припаян микроконтроллер со всей необходимой обвязкой в виде стабилизатора и фильтра питания, а так же индикаторных светодиодов, кнопки сброса и кварцевого резонатора. Порты ввода-вывода удобно выведены и к ним можно подпаять проводники или контактные разъёмы:
Arduino Mini
На большинстве отладочных плат имеется преобразователь интерфейса USB-UART и микроконтроллер можно запрограммировать через USB-разъём компьютера без применения специальных программаторов. Так же в микроконтроллер загружена специальная небольшая программа, так называемый Boot Loader и выставлены необходимые FUSE-биты:
Arduino Nano
Текст программы пишется в простой и понятной среде Arduino IDE и в микроконтроллер загружается одним нажатием. Исходный текст легко адаптируется под разные версии отладочных плат с минимальными изменениями:
На самых популярных и распространённых отладочных платах установлены микроконтроллеры ATmega168/328 и в среде разработки Arduino IDE уже имеется их поддержка:
Перед тем, как перейти к приобретённой отладочной плате из Китая, коротко рассмотрим подлинную оригинальную отладочную плату Arduino Pro Mini:
Arduino Pro Mini
Arduino Pro Mini от SparkFun Electronics
Arduino Pro Mini — это отладочная плата на базе микроконтроллера ATmega168/ATmega328. Она имеет 14 цифровых входов/выходов (6 из которых могут использоваться как выходы ШИМ), 8 аналоговых входов, установленный резонатор, кнопку сброса и отверстия для монтажа штыревых разъемов. Плата поставляется без предварительно установленных разъемов, что позволяет использовать различные их типы или прямую пайку проводов. Расположение контактов совместимо с Arduino Mini. Существует две версии Pro Mini: одна работает от напряжения 3,3 В и имеет тактовую частоту генератора 8 МГц, другая — от 5 В и тактирование на 16 МГц. Плата Arduino Pro Mini была спроектирована и изготовлена организацией SparkFun Electronics.
Выводы Arduino Pro mini
Вкратце рассмотрим и изучим названия и назначение выводов на классической отладочной плате Arduino Pro mini:
Итак отладочная плата Arduino Pro Mini имеет 14 цифровых выводов, которые могут быть использованы как входы или как выходы, и 8 аналоговых выводов с разрешением 10 бит каждый.
Кроме этого некоторые выводы могут иметь специализированную функциональность:
- 0 (RX) и 1 (TX) — последовательная шина для приема (RX) и передачи (TX) последовательных данных TTL;
- 2 и 3 — внешние прерывания — эти контакты могут быть сконфигурированы так, чтобы инициировать прерывание;
- 3, 5, 6, 9, 10 и 11 — обеспечивают 8-разрядный ШИМ-выход;
- 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK) — шина SPI;
- 13 — встроенный светодиод, подключенный к цифровому выходу 13. Когда сигнал на этом выводе имеет высокий уровень, светодиод светится, когда уровень низкий, он погашен;
- A4 (SDA) и A5 (SCL) — поддержка шины I²C (TWI);
- вывод сброс используется для аппаратного сброса микроконтроллера.
На рисунке ниже схематически показано с каким выводом микроконтроллера соединён каждый контакт отладочной платы Arduino Pro Mini и как организовано питание микроконтроллера:
Перейдём к товару с Алиэкспресс и представляю Вам фотографию платы с сайта продавца:
К моменту покупки это был самый дешёвый образец и его стоимость составляла 90 рублей с бесплатной доставкой. Товар был доставлен в очень большом пупырчатом пакете:
Внутри находился ещё один, теперь уже антистатический пакет в котором и был герметично запечатан купленный товар:
Упаковка было произведена хорошо и надёжно, ничего не сломалось и не повредилось, за что спасибо продавцу. Как и было написано на сайте продавца, в комплектацию входила сама плата и три колодки штыревых контактов в общей сумме 48 отдельных единиц:
Длина самой платы не превышает длины спичинки:
Основной пакет, в который был упакован товар, просто огромный для такой маленькой платки. Если сравнить, то на фоне этого пакета плата выглядит просто крошечной:
На данной отладочной плате кроме микроконтроллера установлен кварцевый резонатор на частоту 16 МГц, микросхема стабилизации питания на 5 В, кнопка сброса, два индикаторных светодиода, и несколько конденсаторов и резисторов. Монтаж выполнен ровно и красиво, места пайки выглядят хорошо. В некоторых местах имеются остатки флюса, но это не критично:
Некоторой сложностью и неудобством оказалось впаивание гребёнки со штыревыми контактами. Контакты оказались из какого-то плохо залуживаемого материала, и впаять гребёнку полностью не предоставилось возможным. Пришлось вытаскивать контакты из гребёнки и залуживать их по одному:
Это нужно учесть при покупке платы у данного продавца. В будущем я не планирую использовать контактную гребёнку, а намерен подпаивать провода прямо к контактным площадкам. Поэтому на время проверки платы были впаяны только необходимые для этого выводы:
Это контакты для подачи питания 5 В и выводы для шины внутрисхемного программирования ISP:
- 11 — MOSI,
- 12 — MISO,
- 13 — SCK,
- RST — сброс,
- VCC — стабилизированное напряжение питания +5 В,
- GND — общий провод,
- RAW — напряжение питания 7 — 12 В.
Это стандартные выводы шины внутрисхемного программирования ISP, имеющейся у большинства микроконтроллеров AVR, и по этой шине можно записывать/считывать программу и FUSE-биты в/с микроконтроллер. В моём случае понадобились именно эти выводы, так как я использовал программатор для внутрисхемного программирования и так же с его помощью в микроконтроллер можно загрузить так называемый BootLoader. В последствии я буду использовать эту плату без программы-загрузчика, и о том как это делать будет рассказано в отдельной статье.. Я использовал простейший самодельный программатор COM-ISP, но так как их большое множество Вы можете использовать тот ISP-программатор, который имеется у Вас. Это простейший и самый доступный вариант, но так же можно использовать другой программатор, и подключать его через интерфейс UART к выводам RX и TX.
Во время проверки отладочной платы использовалась среда разработки Arduino IDE версии 1.8.2. В других версиях могут быть отличия.
Я подключил свой программатор к выводам отладочной платы в соответствии с приведённой выше распиновкой шины ISP и открыв Arduino IDE загрузил BootLoader в микроконтроллер. Как правило, отладочная плата поставляется с уже запрограммированным bootloader-ом, но так как приведённая здесь отладочная плата не является подлинной, то для надёжности лучше перезаписать программу-загрузчик.
Для этого на вкладке «Tools» в пункте «Board» предварительно нужно выбрать плату «Arduino Pro or Pro Mini», указать версию процессора в пункте «Processor», выбрать Ваш программатор в пункте «Programmer» и COM-порт в пункте «Port», к которому подключена плата через данный программатор. Затем в этой же вкладке «Tools» нажимаем на «Burn Bootloader» и записываем загрузчик в память микроконтроллера:
В это время в памяти микроконтроллера выделяется 2 килобайта пространства под программу загрузчика и устанавливаются определённые FUSE-биты. Программа загрузчика записывается в память микроконтроллера и выдаётся сообщение об успешном завершении процесса записи:
После завершения записи загрузчика и отсоединения вывода программатора «Сброс» от отладочной платы для нормального её запуска, светодиод, подключённый к тринадцатому выводу платы, начал мигать короткими вспышками:
После этого из Arduino IDE в микроконтроллер Я загрузил не делающую ничего полезного программу, и так как для загрузки использовался программатор, то на вкладке «Sketch» нужно выбрать опцию «Upload Using Programmer»:
После компиляции, в микроконтроллер программа загрузится с помощью выбранного ранее программатора:
Запуская микроконтроллер с ничего не делающей программой, светодиод, подключённый к тринадцатому выводу платы, перестал мигать короткими вспышками.
Если Вашего программатора нет в списке программаторов Arduino IDE, или Вы тоже используете простейший самодельный COM-ISP программатор, то его поддержку можно добавить в конфигурационные файлы Arduino IDE. Так же для загрузки скомпилированных hex-файлов в микроконтроллер, можно воспользоваться этим самодельным COM-ISP программатором и программой Uniprof, но по умолчанию она не поддерживает микроконтроллер Atmega328, так как его подписи и данных нет в папке подписей микроконтроллеров программы Uniprof. Для того, что бы Uniprof опознала Atmega328 и могла работать с ним, нужно добавить файл данных указанного микроконтроллера. Как всё это сделать, я так же расскажу в обещанной ранее статье.
Сейчас же вернёмся к проверке нашей отладочной платы и загрузим в микроконтроллер первую работающую программу:
Эта программа есть в примерах программ среды разработки Arduino IDE и она включает и выключает присоединённый к тринадцатому выводу платы светодиод с интервалом 1000 миллисекунд, или, что то же самое, в 1 секунду, что и видно на рисунке ниже:
Далее Я установил интервал включения/выключения на 400 миллисекунд и снова загрузил программу в микроконтроллер:
После запуска микроконтроллера светодиод стал мигать чаще:
После быстрой проверки микроконтроллера и отладочной платы со стандартным примером из среды разработки Arduino IDE, Я залудил остальные контакты на гребёнке и, прикрепив её к плате, растворителем почистил места пайки и всю плату от остатков флюса:
Прежде чем перейти к написанию более сложной программы рассмотрим отличия данной отладочной платы от оригинальной платы Arduino Pro Mini, а точнее основное отличие, заключающееся в расположении выводов с контактными площадками. Если взглянуть на обе платы, то видно, что на оригинальной плате выводы с контактными площадками расположены только по трём сторонам, при том, что на рассматриваемой здесь плате, контактные площадки занимают все четыре стороны платы, и аналоговые входы A4-A7 расположены с краю, вместе с остальными выводами, что в некоторых случаях даже более удобней, чем на оригинальной плате, у которой упомянутые аналоговые входы A4-A7 расположены за основным рядом контактов:
Остальные отличия,такие как тип резонатора или микросхемы стабилизатора питания, не столь существенны и в основном не влияют на совместимость данных плат друг с другом и с Arduino.
Убедившись в работоспособности и корректной отработке временных интервалов можно приступать к написанию более серьёзной программы.
Написание программы средней сложности
Для примера была поставлена задача спроектировать устройство, управляющее включением и отключением освещения на основе сигнала с датчика препятствия. Но это будет не просто включение и выключение, а при срабатывании датчика яркость освещения будет быстро нарастать до максимума и, после пропадания сигнала, по истечении заданного времени яркость должна плавно уменьшаться до полного погасания.
В микроконтроллере будет задействована ШИМ и логика работы программы будет следующей:
- периодически опрашивается состояние датчика и если он сработает, начнётся первый цикл быстрого нарастания яркости от нуля до максимума;
- по достижении максимальной яркости пойдёт отсчёт времени включённого состояния, по истечении которого, если датчик уже выключен, начнётся второй цикл медленного уменьшения яркости до полного отключения освещения;
- но если по истечении времени включённого состояния, от датчика всё ещё есть сигнал, то цикл уменьшения яркости не начнётся, и снова пойдёт отсчёт времени включённого состояния;
- в ситуации, когда по истечении времени включённого состояния, сигнала от датчика уже нет и начнётся второй цикл медленного уменьшения яркости, но не достигнув полного отключения освещения сигнал с датчика снова появится, то будет произведено завершение второго цикла уменьшения яркости, и уровень яркости в данный момент времени будет передан первому циклу, и яркость снова увеличится до максимума и опять пойдёт отсчёт времени включённого состояния.
Окончательный текст программы выглядит следующим образом:
Сначала назначаются номера выводов отладочной платы для подключения датчика и светодиода. В качестве вывода для подключения датчика может быть назначен любой цифровой или аналоговый вывод отладочной платы Arduino. А вот вывод для подключения светодиода должен поддерживать широтно-импульсную модуляцию и на отладочной плате Arduino Pro Mini это могут быть выводы 3, 5, 6, 9, 10 или 11. В данном случае используется вывод 11, так как он у нас уже распаян.
Далее задаётся время включённого состояния освещения, для удобства в секундах. Определяется начальная яркость светодиода и конвертируется ранее заданное время включённого состояния из секунд в миллисекунды. Это нужно для последующего использования этого значения в программе, так как используемая здесь функция задержки работает со значением в миллисекундах.
Потом идёт функция настройки, задающая определённые выводы как входы/выходы и устанавливающая необходимые значения на них. Это происходит один раз, при запуске микроконтроллера, и затем после функции настройки следует основной цикл программы, который будет повторятся бесконечно, пока работает микроконтроллер. Это стандартные и обязательные функции Arduino.
В основном цикле пишется текст самой программы, то — что будет делать микроконтроллер во время своей работы. В нашем случае сначала проверяется состояние датчика, и если он не сработал, то так будет продолжатся бесконечно, без произведения каких-либо других действий. После срабатывания датчика, по условию начинается цикл увеличения яркости в функции «for». В условии цикла стоит выражение «fadeValue = ((brightness/5)*5)+5» которое мы рассмотрим немного позже. Ну а пока работает этот первый цикл, то происходит увеличение значения на выходе с шагом в 5 делений и соответствующее увеличение яркости с каждым проходом цикла. По достижении этого значения своего максимального уровня 255 происходит завершение цикла и начало отсчёта времени включённого состояния, по истечении которого во втором цикле проверяется условие наличия сигнала с датчика, и если сигнал отсутствует начинается второй цикла уменьшения яркости до нуля. Наличие сигнала с датчика проверяется при каждом проходе цикла, и если до снижения яркости до нуля сигнал с датчика снова появится, то произойдёт преждевременное завершение второго цикла и значение уровня яркости в данный момент времени будет передано первому циклу, и яркость снова увеличится до максимума и весь процесс повторится.
Так зачем же нужно такое, на первый взгляд абсурдное, выражение fadeValue = ((brightness/5)*5)+5. Абсурдным его можно назвать с точки зрения привычной всем нам арифметики, но с точки зрения чисел в микроконтроллере, это выражение округляет предыдущее значение яркости до большего числа, кратному пяти. Дело в том, что в цикле увеличения значения яркости происходит увеличение на 5 единиц, а цикл завершается, если значение fadeValue станет больше 255. При этом значение яркости brightness всегда будет на 5 единиц меньше и будет иметь уровень brightness=fadeValue-5. При нулевом значении начальной яркости цикл завершится при значении fadeValue=260 и конечная яркость будет 255. Но если после преждевременного завершения второго цикла уменьшения яркости в первый цикл будет передано значение не кратное пяти, то цикл увеличения яркости может завершится со значением fadeValue=256 и тогда максимальная яркость не будет достигнута и переменная brightness будет иметь значение fadeValue-5=251. Что бы этого не происходило и яркость всегда достигала бы максимального значения, происходит деление предыдущего значения на 5, а так как brightness у нас имеет тип данных byte, то это целое число без плавающей запятой, и снова умножив результат на 5 получается значение, кратное пяти. Так как первый цикл — это увеличение яркости, то к полученному числу ещё прибавляется 5, что бы значение яркости начало возрастать и не было бы меньше значения после преждевременного завершения цикла уменьшения яркости.
Если по истечении времени включённого состояния сигнал от датчика продолжает поступать, то второй цикл уменьшения яркости не начнётся. Так же будет пропущен первый цикл, так как ему будет передано значение яркости 255, и после выражения fadeValue = ((brightness/5)*5)+5 значение переменной fadeValue будет 260, а по условию это больше для начала цикла. Опять начнётся отсчёт времени включённого состояния, и так будет происходить до тех пор, пока сигнал от датчика не пропадёт. В это время не будут производится никакие другие действия и уровень яркости будет поддерживаться на максимальном значении равным 255.
Данный текст программы несколько дней обсуждался на форуме по Arduino и постепенно доводился до совершенного. Так же было произведено наблюдение за значением переменной brightness в четырёх точках программы при разных вариантах срабатывания и отключения датчика. Наблюдение производилось через монитор серийного порта со следующим текстом программы:
Вот так выглядит наблюдение за монитором последовательного порта в результате работы данной программы:
Как можно видеть, ни один цикл не начинается, пока не сработает датчик препятствия, или при достижении максимальной яркости с включённым датчиком. Вот так это выглядит графически если открыть визуальное отображение данных с последовательного порта:
В устройстве был использован инфракрасный датчик препятствия, описанный в ранней статье:
Устройство и характеристики датчика Вы можете посмотреть перейдя по ссылке http://cxem.net/review/review61.php
Во время проверки и тестирования этого датчика было отмечено довольно большое потребление тока для автономных устройств. В некоторой степени это можно исправить, отказавшись от индикаторных светодиодов и немного пожертвовав дальнодействием. На плате датчика имеется два индикаторных светодиода — один для индикации подачи питания, и другой для визуального контроля срабатывания датчика. Для отключения индикации нужно будет удалить с платы два токоограничительных резистора, включённых последовательно со светодиодами. Я рекомендую удалять именно резисторы, а не светодиоды, так как во время удаления, светодиоды могут повредится и при надобности, для восстановления индикации на модуле датчика, нужно будет установить новые светодиоды, а в случае с резисторами, можно будет вернуть на место прежние. Кроме того не рекомендуется паять светодиоды поверхностного монтажа больше одного раза, а на плате модуля установлены именно такие светодиоды. Избавившись от индикации получается небольшой выигрыш по потребляемому току, но ещё больший выигрыш можно получить, увеличив сопротивление токоограничительного резистора излучающего инфракрасного светодиода. При этом с уменьшением потребляемого тока так же уменьшится дальнодействие датчика, и поэтому значение сопротивления данного резистора придётся подобрать под удовлетворительное дальнодействие. Делается это следующим образом. Подстроечным резистором на плате модуля нужно установить максимальную чувствительность, при которой сохраняется стабильное срабатывание. Затем нужно подобрать такое значение токоограничительного резистора светодиода, при котором достигается удовлетворительное для Вас дальнодействие. Завершив подбор резистора, можно ещё немного прибавить чувствительность подстроечным резистором, не нарушая стабильности и устойчивости датчика. Элементы, которые нужно удалить выделены красным цветом, а заменённый токоограничительный резистор зелёным:
После указанных изменений можно добиться уменьшения потребляемого тока в два раза при приемлемом дальнодействии датчика препятствия.
Модуль инфракрасного датчика препятствия и светодиод были соединены с рассматриваемой в данной статье отладочной платой по следующей схеме:
Перед включением, в микроконтроллер надо загрузить основную программу. Для этого снова подключаем программатор в соответствии с нужными выводами для программирования:
Далее в среде разработки нужно произвести загрузку программы. Текст программы написан без ошибок и компиляция с загрузкой завершаются успешно:
После загрузки программы в микроконтроллер, датчик препятствия и светодиод были соединены с отладочной платой проводами с разъёмами на концах. Вот так выглядит вся система в макете:
Для питания использовался обрезанный USB-кабель, подключённый к зарядному устройству:
К отладочной плате подсоединены два разъёма — один для питания, другой для входного и выходного сигналов:
Светодиод был использован сверхяркий, высокоэффективный, с номинальным рабочим током 150 мА:
После подачи питания и срабатывания датчика, как и ожидалось, яркость светодиода быстро нарастала до максимальной, а затем, после пропадания сигнала с датчика, по истечении времени включённого состояния, яркость медленно снижалась до полного погасания светодиода:
Также Вы можете посмотреть видео работы устройства и скачать исходные тексты программ. Это был просто пример самостоятельно работающей полезной программы на микроконтроллере AVR, но на его основе можно собрать разнообразные конструкции, и используя датчики разного типа и светодиоды большой мощности с питающими драйверами можно найти этому устройству применение в автоматических осветительных установках.
Всем спасибо за внимание, задавайте вопросы, оставляйте отзывы и пожелания. Подписывайтесь на статью, так как в дальнейшем Я расскажу и покажу как использовать данную отладочную плату без загрузчика, как изготовить простой самодельный COM-ISP программатор и добавить его поддержку в среду разработки Arduino IDE. Так же на примере описанной здесь платы покажу как считывать и загружать прошивки с помощью указанного программатора и программы Uniprof. После выхода новой статьи здесь будет добавлена ссылка на неё.
Источник