Таймер на микроконтроллере atmega8
Хочу предложить мастерам Самоделкина для рассмотрения и возможного повторения, очень простую схему, очень хорошего таймера. С удобной навигацией по меню, с жидкокристаллическом LCD дисплеем , с часами реального времени, с минимально возможным количеством деталей и при всем этом можно запрограммировать целых сто временных отрезков в течении суток.
Компактные размеры
Видео проверки таймера
Сердцем данного таймера является очень популярный и уже не дорогой микроконтроллер Atmega8. Вы можете сказать, что для прошивки нам потребуется программатор которого нет, но это не так, для прошивки Atmega достаточно всего пять коротких 10-15 см. проводков подключенных через резисторы 150-200 Ом. напрямую к LPT порту по этой схеме.
Вот по этой причине, эти микроконтроллеры стали самыми популярными у радиолюбителей.
На этом рисунке Вы видите: Схему распиновки ножек МК для подключения и прошивки.
Пункт 1. Подготовим все необходимое для изготовления таймера.
Самые обязательные радиодетали схемы, остальное обычно можно подобрать у себя дома, самая маленькая микросхема, это часы DS1307.
Нам потребуются такие радиоэлементы:
• Микроконтроллер Atmega8
• Интегральные часы DS1307
• LCD жидкокристаллический индикатор
• Стабилизатор 7805
• Конденсатор 500-1000 Мф — 16 вольт.
• Реле или электронный ключ (в зависимости от нагрузки которая планируется подключаться).
• Резисторы сопротивлением 5,1ком — 3 шт., резистор переменный (по мануалу LCD дисплея).
• Кнопки без фиксации — 4 шт.
• Батарейка таблетка на 3 вольта.
• Текстолит для платы.
• Небольшой трансформатор ~220в. -> ~6-12в.
• Коробка распаечная для корпуса.
+ Для программатора: резисторы 150-200 Ом. — 4 шт., разъем LPT порта (для удобства, не обязателен).
Обязательные инструменты каждого радиолюбителя:
• Паяльник для пайки микросхем, паяльник для пайки пассивных радиодеталей и проводов.
• Тестер для прозвонки дорожек и проверки радиодеталей.
• Олово, канифоль.
+ Принтер лазерный (для изготовления платы или другой способ).
Пункт 2. Приступим к изготовлению.
Таймер будем делать по этой главной схеме.
Как видите на ней отсутствует схема блока питания и выходного исполнительного устройства, это потому, что возможно вы решите использовать выносной стабилизированный БП, а также не известно какую нагрузку вы планируете подключать, поэтому, каждый должен сам выбрать исполнительное устройство под свои технические требования.
Лично я своем таймере применил вот такую схему БП и исполнительное устройство на транзисторе и реле.
Но вы можете захотеть в качестве исполнительного устройства применить триаки, тиристоры и симисторы, варианты таких схемных показаны ниже.
Они более компактные (без радиатора), но менее мощные, чем простое реле.
В соответствии с главной принципиальной схемой + БП + ИУ и анализом монтажных габаритов вашей коробки для корпуса, а также размеров подобранных радио элементов, проектируем форму, размер и рисунок дорожек на плате. Для этого удобно пользоваться программой Sprint Layout.
Для моего устройства получилась вот такая простая плата.
Полученный рисунок переносим с помощью специального маркера или по технологией ЛУТ (с помощью лазерного принтера и утюга) на медный слой текстолита. Если у вас принтер лазерный Brother (как у меня), то идею с ЛУТ лучше сразу забросить, по причине используемого в нем тугоплавкого тонера ~400C вместо обычных~200С, я кстати когда-то по глупости купил этот принтер именно для ЛУТ :(., поэтому в результате моя плата рисована маркером.
На готовую плату припаиваем детали согласно схеме, особое внимание обращаем при монтаже и пайке микросхемы часов и кварцевого элемента. Длина дорожек между ними должна быть минимальной, а лучше использовать микро кварц из наручных часов и припаять его непосредственно к ножкам МС часов. Все свободное пространство рядом с МС часов и кварца заполняем площадками корпуса (GND). Батарея необходима для поддержания часов в рабочем состоянии во время отключения от сети. Если по какой-то причине вы не стали устанавливать эту батарейку, то посадите плюсовой провод на корпус, иначе часы просто не пойдут.
*Прошивка* multitimer100.rar [5.35 Kb] (скачиваний: 1542)
Автор прошивки специально для удобства (за что ему спасибо) и не стал изменять заводские фьюзы, что очень сильно облегчает, без заморочки, прошивку для начинающего радиолюбителя. Если МК еще не использовался, новый из магазина, то просто заливаете прошивку и все, но если уже есть изменения в фьюзах, то надо выставить их так CKSEL=0001. Все остальное просто и не нуждается в пояснении.
Пункт 3. Сборка.
Для корпуса очень удобно использовать распаечные коробки из пластмассы, они бывают разных размеров и форм.
В прорезанную ножом крышку, при помощи термоклея из пистолета, закрепляем LCD экран., прорезаем отверстия под кнопки управления и кнопку питания.
Подрезаем выступающий клей.
Размещаем все узлы внутри корпуса, постоянно проверяя как закрывается крышка, при необходимости переносим или подгибаем мешающие. Все закрепляется на термоклее.
На собранную схему подаем питание, должно появиться такое изображение, часы стартуют с нулей.
Управление меню осуществляется четырьмя кнопками.
Меню состоит из трех пунктов, СLOCK -установка часов, TIMЕ — установка таймеров и RESET -сброс всех установленных таймеров.
Сначала заходим (*) в меню часов и выставляем точное время.
Подсказка по управляющим кнопкам в нижней строке дисплея, в каждом меню разное, поэтому описывать кнопки нет необходимости.
Теперь все готово чтобы корректно задавать временные записи таймера, после нажатия решетки, программа записывается в постоянную память МК.
На видео в начале статьи можно посмотреть подробнее о меню.
Я применяю этот таймер для полива гидропоники.
Становитесь автором сайта, публикуйте собственные статьи, описания самоделок с оплатой за текст. Подробнее здесь.ТАЙМЕР НА МИКРОКОНТРОЛЛЕРЕ
На нашем сайте, посвящённом различным электронным самоделкам, уже неоднократно публиковались схемы простых таймеров. Конечно они уступают современным промышленным аналогам, где имеется дисплей, возможность программирования и другие сервисные функции. И вот пришло время разместить такую схему, которая на равных будет конкурировать с лучшими фирменными образцами. Цифровой таймер используются для управления работой электрических устройств, по запрограммированному графику. Этот программируемый таймер делается на основе микроконтроллера
Схема программируемого таймера на микроконтроллере
Здесь 5 вольтовое реле управляется транзистором PN2222, который, в свою очередь, управляется RB3 PIC16F628A. Цифровые входы из 4 кнопок читаются с помощью порта ввода/вывода RA2, RA3, RA4, и RB0. Стандартный 16?2 символьный ЖК-дисплей используется для отображения состояния устройства, программы, меню и времени. ЖК работает в 4-битном режиме, поэтому только 6 выводов I/O PIC16F628A необходимы для работы. Пьезоэлектрический зуммер дает звуковой сигнал, когда таймер запускается и останавливается. Он также подает звуковой сигнал, когда устройство включено или выключено. Напряжение питания схемы поступает от стабилизатора LM7805. На вход её подается 9 В от сетевого адаптера. Подсветка LED повышает читаемость дисплея LCD в условиях низкой освещенности состоянии.
Работа таймера и функции кнопок
Таймер получает команды от 4-х кнопок. Их функции следующие:
Время: позволяет задать время включения и выключения. Когда таймер изначально включен, устройство находится в выключенном состоянии, и время 0. Нажав эту кнопку, можно переключаться между on и off на дисплее.
Выбор: позволяет выбрать между on и off параметрами, а также часовой и минутной цифрой. Выбранная цифра увеличивается нажатием кнопки ON/OFF.
Ввод: когда соответствующее время выбрано, нажатие данной кнопки завершит установки.
Пуск/стоп: чтобы запустить или остановить таймер. Если он уже включен, вы можете остановить его в любое время при нажатии на эту кнопку.
Теперь давайте посмотрим, как всё это работает в сложном режиме. Предположим, устройство, подключенное к реле необходимо включать через 3 минуты. Далее, после включения, оно должно проработать 20 минут. В этом случае как только запускается таймер, устройство будет включено через 3 минуты и останется активным на 20 минут. После этого оно будет выключено снова. Скачать все прошивки для контроллера и рисунок печатной платы можно в архиве.
Форум по таймерам
Схемы на микроконтроллерахПриветствую, друзья.
Хочу представить вам мою конструкцию программируемого таймера.
Данный таймер предназначен для отсчета заданных промежутков времени.
Он может иметь как непрерывно-циклический режим работы (бесконечный цикл «включение-пауза»), так и ограниченно-циклический (заданное количество циклов «включение-пауза»), либо однократное включение — на заданное время включения.
Время включения, время паузы и количество рабочих циклов задаются независимо.
Характеристики таймера
Квант времени может быть выбран равным одной секунде или одной минуте, соответственно, время включения и время паузы могут находиться в диапазоне от 1 до 255 секунд или минут, количество рабочих циклов может быть в диапазоне от 1 до 255.Таким образом, минимальный промежуток времени может быть равным 1 секунде, максимальный – 4 часам и 15 минутам.
Отсчет времени начинается после нажатия кнопки старта (кнопку надо нажимать менее двух секунд).
Блок-схема программы таймера изображена на рис. 1.
Все константы – время включения, время паузы, количество рабочих циклов, величина кванта времени, режим работы также хранятся в энергонезависимой памяти, и могут быть изменены в любую сторону (перепрограммированы) посредством DIP-переключателей и отдельной кнопки программирования.
Для удобства таймер оснащен световой и звуковой сигнализацией.
Питаться таймер может как от сетевого адаптера с выходным постоянным напряжением 15-20 В, так и от аккумулятора напряжением 12 В.
Описание работы схемы таймера
Схема устройства изображена ниже. Его основа – микроконтроллер ATMega8L.
В качестве источника тактового сигнала используется внутренний RC-генератор микроконтроллера частотой 1 МГц. Для повышения точности отсчета временных интервалов используется синхронизация внутреннего таймера-счетчика Т/С2, (далее – таймера Т2) микроконтроллера от внешнего кварцевого резонатора BQ1 на частоту 32768 Гц. При коэффициенте деления 128 8-разрядный таймер Т2 переполняется каждую секунду, генерируя прерывание.
Исполнительным устройством служит реле К1, которое управляется посредством ключа на транзисторе VT1 с вывода РС5 микроконтроллера. Его контакты выведены на внешние клеммы разъема X2 и могут быть использованы для управления внешними цепями, в том числе и сетевым напряжением 220 В.
Звуковые сигналы подает пьезокерамический излучатель BQ2 (со встроенным звуковым генератором), который управляется выводом РС4 микроконтроллера. Питание на микроконтроллер (+5 В) подается с выхода интегрального стабилизатора DA1. Напряжение на вход DA1 подается либо с выхода интегрального стабилизатора DA2 (+12 В), либо с аккумулятора, выбор осуществляется с помощью перемычки J1.
Светодиод HL1 зеленого цвета индицирует наличие питающего напряжения. Светодиод HL2 красного цвета служит для индикации режима работы и количества включений реле в предыдущем цикле работы. При срабатывании реле (на время включения) светодиод HL2 загорается на 1,5 с и на 0,25 с гаснет, если реле обесточено (время паузы) светодиод загорается на 0,25 с и на 1,5 с гаснет. После окончания отсчета времени светодиод HL2 гаснет. Таким образом, по характеру свечения HL2 видно, в каком состоянии находится таймер.
Конденсаторы С2 – С6 блокировочные. Диоды VD2, VD3 служат защитой от ошибочной полярности источников напряжения, диод VD1 – защита от ЭДС самоиндукции, возникающей при коммутации реле.
Движковые DIP-переключатели SA1 — SA8 служат для задания величины времени включения, времени паузы и количества рабочих циклов. Такие же переключатели SB1 – SB4 служат для выбора программируемой величины — времени включения, времени паузы, режима работы, количества рабочих циклов и величины кванта времени. Соответствие переключателей программируемой величине приведено в табл. 1.
Задавать время включения/паузы и количества рабочих циклов надо в двоичном виде, что является некоторым неудобством. Но для перевода десятичных величин в двоичные можно использовать калькулятор, встроенный в Windows. При программировании следует помнить, что нулю двоичной величины соответствует положение ON переключателей, единице – положение OFF. Программирование производится с помощью кнопки программирования S1. Старт таймера осуществляется посредством стартовой кнопки S2.
Программировать таймер нужно перед стартом отсчета времени (сразу после включения) или после окончания рабочего цикла.
В процессе отсчета времени программирование невозможно. Если начался отсчет времени, таймер нечувствителен к нажатию кнопок и изменению положения DIP-переключателей. Таймер остановится после окончания отсчета времени или исчезновении напряжения питания.
Звуковая сигнализация таймера
Звуковая индикация таймера работает следующим образом. При нажатии на кнопку старта в течение менее 2 с (переход в рабочий режим) раздается короткий звуковой сигнал длительностью 0,1 с, свидетельствующий о начале отсчета времени. Если используется ограниченно-циклический режим, то сразу по окончании отсчета времени раздается звуковой сигнал длительностью 2 с. Если кнопка старта нажата более 2 с, раздается 5 звуковых сигналов длительностью 0,1 с — и таймер возвращается в исходный режим.
При программировании таймера процедура успешного программирования необходимой величины сопровождается двумя сигналами по 0,1 с. Если произошла ошибка (например, ошибочно задан нулевой интервал времени включения, чего быть не должно) раздается звуковой сигнал длительностью 1 с. При ошибке надо проверить положение DIP-переключателей SB1 – SB4.
При программировании микроконтроллера должны быть запрограммированы следующие фьюзы — SUT0, SUT1, CKSEL1, CKSEL2, CKSEL3, BODEN, BODLEVEL. Так как производится запись в энергонезависимую память (данные в которой могут искажаться при медленном снижении напряжения питания), то используется встроенная схема BOD (Brown-Out Detection) микроконтроллера, которая отслеживает питающее напряжение и производит сброс микроконтроллера при снижении его ниже 4 В.
Конструкция таймера
Конструктивно таймер собран на плате из фольгированного стеклотекстолита толщиной 1,5 мм размерами 83×52 мм. Топология печатной платы изображена на рис. 3, расположение деталей на ней – на рис. 4. В исходном состоянии в EEPROM запрограммированы следующие значения констант: время включения – 10 с, время паузы – 10 с, количество циклов включения – 3, квант времени – одна секунда, режим работы – циклически-ограниченный.
Транзистор VT1 можно заменить на КТ3102 с любым буквенным индексом или аналогичным. В качестве светодиодов можно использовать любые современные высокоэффективные светодиоды с заметным свечением при токе 2-3 мА. Реле К1 – постоянного тока, типа JZC-22F, но можно использовать и другое с катушкой на 12 В, подходящее по току контактов и типоразмеру.
Программирование таймера
Рассмотрим примеры перепрограммирования таймера. Отметим, что при программировании следует учитывать внутреннюю логику встроенной в микроконтроллер программы. Рабочий цикл – это время включения плюс время паузы. Количество рабочих циклов может быть и нулевым – это означает, что реле включается однократно на время включения. Таким образом, чтобы включить реле N раз, надо задать N – 1 рабочих циклов, соответственно, если задать N рабочих циклов, реле включится N + 1 раз.
Пример 1. Время включения – 10 сек, время выключения – 8 сек, режим работы – циклически-ограниченный, количество рабочих циклов — 5.
Для начала запишем все числа в двоичном виде: число 10 – это 00001010, 8 – 00001000, 5 – 00000101. Включаем таймер, ставим переключатель SB3 – ON (квант времени – секунда), SB4 — ON (циклически-ограниченный режим), SB2/SB1 – ON/OFF (время включения), на переключателях SA1 – SA8 набираем число 00001010 (SA2, SA4 – OFF, все остальные – ON) и нажимаем кнопку программирования. Слышим два коротких сигнала.
Далее ставим SB2/SB1 – OFF/ON (время паузы), набираем на SA1 – SA8 число 00001000 (SA4 – OFF, остальные – ON), вновь нажимаем кнопку программирования, вновь слышим два коротких сигнала. Теперь ставим SB2/SB1 – OFF/OFF (количество рабочих циклов), набираем на SA1 – SA8 число 00000101 (SA1, SA3 – OFF, остальные – ON), вновь нажимаем кнопку программирования, слышим два коротких сигнала. Выключаем и вновь включаем питание – и таймер с новыми значениями констант готов к работе.
Пример 2. Время включения – 4 сек, время выключения – 3 сек, режим работы – циклически-непрерывный.
Число 4 – 00000100, число 3 – 00000011. Включаем таймер, ставим SB3 –ON (квант времени – секунда), SB4 – OFF (циклически-непрерывный режим), SB2/SB1 – ON/OFF (время включения), на переключателях SA1 – SA8 набираем число 00000100 (SA3 – OFF, все остальные — ON), нажимаем кнопку программирования, слышим два сигнала. Далее ставим SB2/SB1 – OFF/ON ( время паузы), набираем на SA1 – SA8 число 00000011 (SA1, SA2 – OFF, остальные – ON), нажимаем кнопку программирования, слышим два коротких сигнала. Выключаем и вновь включаем питания – и таймер с новыми значениями констант готов к работе.
Пример 3. Время включения – 20 мин однократно.
Число 20 – 00010100. Включаем таймер, ставим SB3 – OFF (квант времени — минута), SB4 – ON (циклически ограниченный режим), SB2/SB1 – ON/OFF (время включения), на переключателях SA1 – SA8 набираем 00010100 (SA3, SA5 – OFF, остальные – ON), нажимаем кнопку программирования, слышим два коротких сигнала. Ставим SB2/SB1 – OFF/OFF (количество рабочих циклов), набираем на SA1 – SA8 число 00000000 (все переключатели – ON), нажимаем кнопку программирования, слышим два коротких сигнала. Выключаем и вновь включаем питание – таймер с новыми значениями констант готов к работе.
Архив с описанием, топологией платы, программой и прошивкой можно скачать здесь.
До встречи на блоге!
Простой таймер на PIC16F628A. Схема и описание
Это схема простого таймера построенного на микроконтроллере PIC16F628A и индикаторе LCD 1602. Идея таймера позаимствована с одного португальского сайта по радиоэлектронике.
Микроконтроллер PIC16F628A в данной схеме тактируется от внутреннего генератора , который является достаточно точным для данного случая, но поскольку выводы 15 и 16 остаются незанятыми, то можно было бы использовать внешний кварцевый резонатор для большей точности.
Таймер на PIC16F628A. Описание работы
Как уже было сказано ранее, этот проект создан на основе уже существующего проекта, но на самом деле обе схемы отличаются друг от друга, и поэтому код был практически полностью переписан. В таймере для управления есть три кнопки: «START/STOP», «MIN» и «SEC»
- «START/STOP» — для запуска и приостановки таймера.
- «MIN» — для установки минут. Количество минут устанавливаются от 0 до 99, а затем все начинается снова с 0.
- «SEC» — для установки секунд. Секунду также устанавливаются от 0 до 59 и потом снова с 0.
Одновременное нажатие на «MIN» и «SEC» приводит к сбросу таймера во время работы.
Когда время на таймере достигает 00:00, раздается звуковой сигнал (3 коротких и 1 длинный звуковой сигнал) и светодиод HL1 загорается. В качестве звукоизлучателя применен зуммер электромагнитного типа. После этого, при нажатии одной из кнопок, происходит сброс таймера и выключение светодиода HL1.
Когда таймер производит обратный отсчет на выводе 13 (RB7) находится высокий уровень, а при остановке таймера появляется низкий логический уровень. Данный вывод можно использовать для управления внешними исполнительными устройствами. питание таймера осуществляется от cстабилизированного источника на 78L05.
Перемычка J1 предназначена для калибровки таймера. При ее замыкании таймер входит в режим настройки. С помощью кнопок «MIN» и «SEC» можно увеличить/уменьшить значение внутреннего параметра, который позволяет замедлять или ускорять работу таймера. Это значение сохраняется в EEPROM. Если находясь в этом режиме нажать кнопку «START/STOP», то этот параметр будет сброшен до значения по умолчанию.
Код написан и скомпилирован с mikroC PRO для PIC.
Параметры проекта:
- Генератор: INTOSC
- Частота генератора: 4 МГц
- Сторожевой Таймер: отключен
- Power-up таймер: включен
- RA5/MCLR/VPP : отключен
- Brown-out: включен
Фото готового таймера:
Скачать прошивку и рисунок печатной платы (unknown, скачано: 3 212)
Суточный таймер на микроконтроллере Attiny13
В современном мире автоматизация проникла буквально во все области жизни человека. Всем нам порой хочется, чтобы бездушная автоматика сделала за нас какую-нибудь скучную рутинную работу – полила цветы, проветрила помещение, покормила кошку, напоила собаку… Не с проста говорят, что лень – двигатель прогресса, ведь ленивый человек готов потрудиться и создать такое электронное устройство, которое сделает за него всё, что потребуется. А уж если ленивый человек дружит с паяльником, то дело остаётся за малым, лишь создать эту самую автоматику.
В этой статье рассмотрим процесс создания электронного таймера, который в заданное время включит и выключит нагрузку. Такому таймеру можно найти множество применений – например, раз в сутки с его помощью поливать цветы, или грядки в огороде. Автоматически включать свет ночью и выключать днём, когда светло, или же раз в сутки наливать воду в поилку домашнему питомцу. В общем, устройство получается абсолютно универсальным, область применения ничем не ограничивается.
Схема:
На схеме имеются две управляющие кнопки, пронумерованные цифрами «1» и «2». Кнопка «1» устанавливается время включения нагрузки, а кнопка «2», соответственно, время выключения. Для лучшего понимания принципа работы рассмотрим такой пример: имеется ёлочная гирлянда, которую нужно каждый день включать в 13:00 и выключать в 15:00. Значит, для установки временных интервалов работы таймера нужно в 13:00 нажать кнопку «1», при этом реле включится примерно на минуту, затем дождаться 15:00 и нажать кнопку «2», реле опять-таки включится примерно на минуту, сигнализируя об успешной установке времени. В дальнейшем реле будет автоматически включать гирлянду в 13:00 и выключать в 15:00 каждый день. Мигающий светодиод свидетельствует о работоспособности устройства.
Схема содержит в себе две микросхемы – микроконтроллер Attiny13 и часовую микросхему DS1307. Напряжение питания всей схемы – 12 вольт. Благодаря линейному стабилизатору 78l05 на плате микросхемы получают нужное им питание 5 вольт, а обмотка реле питается от 12-ти вольт. Параллельно обмотке реле следует поставить маломощный диод, например, 1N4148. Транзистор SS8050, управляющий реле можно заменить на любой другой маломощный NPN транзистор. Кнопки в обвязке микроконтроллера следует взять без фиксации.
Особенность часовой микросхемы DS1307 состоит в том, что она может работать от резервного питания, если вдруг пропадёт основное. Для этого к её выводам 3 и 4 нужно подключить источник питания на 3 вольта, например, батарейку CR2032. В этом случае при пропадании питания отсчёт времени будет продолжаться, как только основное питание появиться вновь, устройство продолжит работать в прежнем режиме, включая и выключая реле в заданные часы. Не следует забыть ставить параллельно питанию как основному, так и резервному конденсаторы электролитические и керамические, для подавления помех любого рода. Резистор светодиода, идущий от 7-й ноги часовой микросхемы, можно уменьшить до 0,5 – 1 кОм, тогда его яркость заметно увеличится.
Перед установкой на плату микроконтроллера его необходимо прошить, файлы прошивки к статье прилагаются. Удобнее всего это делать с помощью USBASP программатора. При использовании нового, ранее не используемого микроконтроллера фьюзы менять не нужно. С завода микроконтроллеры Attiny13 тактируются от внутреннего генератора с частотой 9,6 МГц, делитель на 8 включен.
Печатную плату можно сделать по лазерно-утюжной технологии, так называемый «ЛУТ». Фото моей платы:
После залуживания плата приобретает такой вид:
Список необходимых деталей:
Резисторы 0,125 Вт:
• 6,8 кОм (682) – 1 шт.
• 10 кОм (103) – 1 шт.
• 4,7 кОм (472) – 2 шт.
• 3 кОм (302) – 1 шт.
Конденсаторы:
• 100 мкФ (электролитич.) – 2 шт.
• 100 нФ (керамич.) – 2 шт.
Остальное:
• Микроконтроллер Attiny13 (+ панелька) – 1 шт.
• Микросхема DS3107 (+ панелька) – 1 шт.
• Транзистор SS8050 – 1 шт.
• Диод 1N4148 – 1 шт.
• Кнопка без фиксации – 2 шт.
• Стабилизатор 78l05 – 1 шт.
• Светодиод на 3 вольта – 1 шт.
• Кварц 32768 Гц – 1 шт.
• Реле на 12 вольт – 1 шт.
Фото собранного мной устройства:
Схема, печатная плата и файлы для прошивки находятся в архиве: pechatnaya-plata-i-fayly-proshivki.zip [36.13 Kb] (скачиваний: 560)
Становитесь автором сайта, публикуйте собственные статьи, описания самоделок с оплатой за текст. Подробнее здесь.Простой электронный таймер
Здравствуйте, господа самоделкины!Помню, ещё каких-то лет 10 назад на процедуре в больнице видел самые настоящие, суровые такие, песочные часы. Их было несколько разных по объёму, рассчитанных на разное время, и для каждого больного медсёстрам приходилось брать разные часы, в зависимости от индивидуального времени процедуры. Наблюдать за падающими песчинками, конечно интересно, но ведь в нашем распоряжении есть современные электронные технологии. Пусть и в процессе работы электронного таймера не видно, как в нём заряжаются и разряжаются конденсаторы, но зато он позволяет вращением ручки задавать необходимое время отсчёта и допускает подключение на выход разнообразной нагрузки: будь то индикация истёкшего времени светом, звуком, либо автоматическое включение каких-либо приборов. Схема электронного таймера показана ниже.
Принцип работы этой схемы действительно похож на работу песочных часов. При нажатии кнопки S1 (она должна быть без фиксации) запускается отсчёт времени, при этом на выходе OUT присутствует напряжение питания. Как только выйдет время, таймер остановится, выход OUT окажется обесточенным, светодиод LED1 при этом индицирует состояние выхода — если он горит, значит, идёт отсчёт времени, если погашен, то таймер находится в ждущем режиме.
Время отсчёта задаётся подстроечным резистором R1, при указанных номиналах на схеме максимальное время отсчёта таймера составляет 3-4 минуты. Если есть необходимость увеличить максимальное время, то можно поднять ёмкость конденсатора С1 в 2-3 раза, тогда время может будет задавать вплоть до 10-15 минут, и даже больше. Резистор R1 имеет номинал 5 МОм, что довольно много, если такого нет в наличии, то его можно заменить более низкоомным, но при этом максимальное отсчитываемое время уменьшится (а это можно компенсировать увеличением ёмкость конденсатора). Именно эта цепь R1 C1 задаёт время таймера, микросхема NE555 после нажатия кнопки начинает «отслежить» напряжение на конденсаторе, и как только он зарядится через высокоомный подстроечный резистор до определённого напряжения, она обесточит выход, что является окончанием отсчёта времени.
Коммутирует выход OUT транзистор Т1, сюда можно ставить практически любые NPN транзисторы, например, BC547, КТ315, BD139. На выход можно подключить пьзопищалки со встроенным генератором, отдельные светодиоды либо светодиодные ленты (для них лучше взять транзистор помощней). Также к выходу можно подключить обычное реле, в этом случае схема сможет коммутировать даже мощную сетевую нагрузку, осветительные приборы, нагреватели. Обратите внимание, что при подключении реле нужно поставить параллельно его обмотке диод для гашения импульсов самоиндукции, катодом к плюсу питания. Схема потребляет небольшой ток, не более 10 мА в ждущем режиме, а в режиме отсчёта времени ток будет потреблять в первую очередь нагрузка, поэтому мощность источника питания нужно выбирать исходя из предполагаемого применения таймера. Напряжение питания схемы лежит в предалах 9 — 12 вольт.
Переходим к сборке. Схема собирается на миниатюрной печатной плате, файл которой для программы Sprint Layout прилагается к статье. Плата выполняется методом ЛУТ, некоторые фотографии процесса и краткое их описание ниже.
Переносим рисунок, напечатанный лазерным принтером на термотрансферной бумаге на подготовленный текстолит. Кусочек текстолита рекомендую выпилить по размеру чуть больше, чем рисунок платы, чтобы было место для крепления платы.
Теперь травим плату, для этого идеально подойдёт раствор перекиси водорода, лимонной кислоты и поваренной соли. После этого сверлим отверстия и немного зашкуриваем дорожки.
Для завершения создания платы осталось только залудить медные поверхности, чтобы они были долговечными и красиво блестели.
Теперь осталось запаять на плату детали. Плата предусматривает установку двух сдвоенных клеммных колодок, одна используется для подачи на плату питания, вторая является обозначенным на схеме выходом OUT. Светодиод индикации выхода припаивается на плату возле выходного разъёма. Обязательно нужно смыть с платы флюс, иначе схема будет работать нестабильно, из-за влияния паразитных сопротивлений между дорожками. Кнопку можно использовать практически любую, идеально на плату подойдёт распространённая тактовая, как на фото этой конструкции.
Таймер готов! Теперь можно подавать на плату питание, устанавливать подстроечный резистор в нужное положение и использовать таймер по назначению. Вместо подстроечного резистора можно использовать потенциометр, выведенный с платы на проводах. В этом случае можно создать для него шкалу, проградуированную в секундах или минутах, подобранную для таймера с использованием секундометра. Такой таймер можно использовать, например, либо в составе готового устройства, либо как отдельное полноценное устройство. Например, в качестве «песочных часов» для тех, кто не может себя заставить чистить зубы положенные три минуты 🙂
Также кнопку таймера можно заменить, например, герконом у двери и использовать его так, чтобы свет продолжал гореть некоторое время после открытия/закрытия двери. Главное преимущество схемы — малое потребление тока и отсутствие каких-либо лишних и зачастую ненужных элементов управления, только кнопка и подстройка времени. Удачной сборки!
plata.zip [2.75 Kb] (скачиваний: 27)
Источник (Source) Становитесь автором сайта, публикуйте собственные статьи, описания самоделок с оплатой за текст. Подробнее здесь.
Данный таймер предназначен для точного обратного отсчета заданных временных интервалов от 1 секунды до 99 минут. Он имеет возможность установки времени обратного отсчета в формате минут и секунд.
Разрешение в диапазоне от 1 секунды до 9 минут и 59 секунд составляет 1 секунду, а в диапазоне от 10 до 99 минут увеличивается до 10 секунд. Встроенное реле и простое, интуитивное управление позволяют использовать данный таймер в несложных системах автоматизации.
Питание схемы таймера осуществляется от источника постоянного ток с напряжением в диапазоне 8 … 12 В. Выпрямительный диод VD1 (1N4007) защищает от ошибочной полярности подключения. Напряжение питания стабилизировано DA1 (78L05). Основой таймера является микроконтроллер ATtiny261, работающий от внутреннего тактового генератора.
Состояние работы отображается на трехразрядном 7-сегментном дисплее с общим анодом (BA56-12EWA). Катоды мультиплексированного светодиодного дисплея соединены через токоограничивающие резисторы R6…R13 с портами PA0…PA7 микроконтроллера. Роль ключей, управляющих анодами дисплея, выполняют транзисторы VT2…VT4 (BC557), которые подключены к портам PB2…PB4 микроконтроллера ATtiny261.
В качестве исполнительного элемента использовано электромагнитное реле на 12В с нормально замкнутыми и нормально разомкнутыми контактами 8А/230В.
Электронный цифровой таймер 220ВПрограммируемый таймер 7 дней, 12/24 часов…
Для управления таймером используются три кнопки SW1…SW3. Управление таймером простое и интуитивно понятное. Кнопки SW1 и SW2 используются для увеличения или уменьшения значения, а кнопка SW3 используется для начала обратного отсчета. Каждое нажатие кнопки SW2 увеличивает значение, а нажатие кнопки SW1 уменьшает его. Чтобы изменить значение быстрее необходимо удерживать кнопку дольше.
На дисплее в диапазоне от 1 секунды от 9 минут до 59 секунд изменение составляет 1 секунду, а выше этого диапазона — 10 секунд. Установленное значение сохраняется в энергонезависимой памяти, поэтому нет необходимости вводить его снова после повторного включения устройства.
Мигание точки третьего разряда указывает на работу таймера. После запуска обратного отсчета в любой момент, путем нажатия кнопки SW3, можно остановить работу таймера. В этом режиме цифры на дисплее начнут мигать. Повторное, короткое нажатие кнопки SW3 возобновит обратный отсчет, в то время как длительное нажатие кнопки SW3 вернет устройство к начальному значению.
Скачать печатную плату и прошивку (23,0 KiB, скачано: 569)
— Руководство для начинающих — Базовое и стандартное использование таймера и счетчика и часов микроконтроллера
Таймеры и счетчики настолько важны, что вы найдете много примеров по всему этот учебник серии. Как следует из названия, таймеры могут сообщать время и считать. Counting и время учитывает некоторые действительно крутые вещи, такие как управление яркостью Светодиоды, контролирующие угол сервоосей, принимающие данные датчиков, которые передают в ШИМ (широтно-импульсная модуляция — подробнее об этом в другом учебнике), делая таймер (как на плите), или просто добавив переменную времени в ваш микроконтроллер проект.
Но сначала важно знать, что внутри (или снаружи) микроконтроллеров AVR есть часы. Фактически, все микроконтроллеры имеют часы (или используют тот, который находится вне микроконтроллера). Микроконтроллерам нужны часы, чтобы наши программы могли выполняться в такт с часами. Это основная функция микроконтроллеров. Основная инструкция обрабатывается, когда проходит тик от часов. Точно так же, как эти программы, которые мы пишем, по мере того, как такты часов проходят, инструкции обрабатываются во времени с тактами часов.
Функции таймера и счетчика в микроконтроллере просто считаются синхронно с часами микроконтроллера. Однако счетчик может рассчитывать только до 256 (8-разрядный счетчик) или до 65535 (16-разрядный счетчик). Это далеко от 1000000 тиков в секунду, которые обеспечивает стандартный микроконтроллер AVR. Микроконтроллер обеспечивает очень полезную функцию, называемую предварительным масштабированием. Предварительное масштабирование — просто способ для счетчика пропустить определенное количество тактов микроконтроллера. Микроконтроллеры AVR позволяют предварительно масштабировать (пропускать) числа: 8, 64, 256 и 1024.То есть, если 64 установлен как прескалер, то счетчик будет считать только каждый раз, когда часы тикают 64 раза. Это означает, что за одну секунду (когда микроконтроллер тикает миллион раз) счетчик будет считать только до 15 625. Вы могли видеть, что если счетчик считает до этого числа, то вы сможете мигать светодиодом каждую секунду.
В основном, таймеры имеют регистр управления и регистр, который содержит счет число.Регистр управления содержит несколько переключателей для включения и выключения функций. И вы уже догадались … одной из особенностей является то, какую предварительную настройку выбрать. Контроль регистр называется TCCR0 или TCCR1 (регистр управления таймером / счетчиком). TCCR0 является 8-битный регистр управления и имеет только 8-битный регистр управления, так что есть только 8 переключателей для включения и выключения. TCCR1 является 16-разрядным, поэтому он имеет 16 переключателей для включения и выключен, но он поставляется в двух 8-битных регистрах, помеченных A и B (TCCR1A и TCCR1B).Переключатели: FOC (Force Output Compare), WGM (Waveform Generation). Mode), COM (режим сравнения результатов сравнения) и CS (выбор часов).
Регистр, который содержит счет, называется регистром TCNT. И есть 8-битный версия (TCNT0) и 16-битная версия (TCNT1). Регистр TCNT1 фактически получает число из двух других 8-битных регистров для создания полного 16-битного числа, но это все сделано за кулисами (абстрагировано), поэтому вам не нужно беспокоиться о том, как TCNT1 получает 16-битную способность, просто подумайте, что это волшебство.
На видео показаны две программы: одна показывает только мигание одного светодиода. примерно за 1 секунду, и другая программа, которая преследует один ряд из 7 светодиодов каждую секунду, и еще один ряд из 7 светодиодов, чеканка каждого в 1 секунду. Последняя программа здесь показан, поскольку он имеет большинство функций, используемых с 16-битным таймером.
Не повторяя предыдущие посты, программа инициализирует порты для светодиодов и устанавливает таймер / счетчик # 1 (16-битный таймер).Контроль TCCR1B регистр используется для установки коэффициента предварительного масштабирования 64 с переключателями CS10 и CS11.
Поскольку мы хотим, чтобы один из 7 светодиодов гнался по 1/7 секунды, мы берем число 15 625 (1000000/64 — помните, что 1000000 — это тактовая частота микроконтроллера 1 МГц) и разделите его на 7, чтобы получить ~ 2232,143. Теперь вы говорите, но вы используете только 2232 в пограмме !! это потому, что TCNT1 будет принимать только целые числа (без десятичных дробей).Сейчас Вы говорите, время будет выключено на количество десятичных! Правда, но Внутренние часы AVR в любом случае +/- 10% неточны. Если используется внешний кристалл, Вы должны использовать идеальное число, которое представляет соответствующий счет.
Вы заметите, что TCNT1 также сбрасывается в ноль вручную. Это нужно иначе TCNT1 будет продолжать считать после установленного условия 2232.Есть другие функции управления, которые имеют автоматическое обнуление этого числа, но мы получим что в другом уроке. Остальные части программы используют материал, который мы узнали я предыдущие уроки (включение и выключение светодиодов и массивов).
#includeint main (void)
{ DDRB = 0b01111111;
PORTB = 0b00000000;
DDRD = 0b01111111;
PORTD = 0b00000000;
TCCR1B | = 1
int LEDNumber [2];
while (1)
{ если (TCNT1> 2232)
{ TCNT1 = 0;
PORTB = 1
LEDNumber [0] ++;
if (LEDNumber [0]> 6)
{
LEDNumber [0] = 0;
PORTD = 1 << LEDNumber [1];
LEDNumber [1] ++;
if (LEDNumber [1]> 6)
LEDNumber [1] = 0;
} } } },
от Jon Wilder
Раз за разом я вижу, как новички пытаются начать работать со встроенной электроникой, только чтобы ошеломиться и не знать, с чего начать. Некоторые даже совершают ошибку, пытаясь написать свой собственный код без предварительного глубокого понимания микроконтроллера / микропроцессора, с которым они работают, языка программирования, с которым они работают, или даже базовых концепций программирования. Не волнуйтесь, хотя … эта статья должна стать хорошим учебником для начинающих погружаться в мир встроенной электроники.
В этой статье не делается попытка рассказать о каком-либо конкретном микроконтроллере / микропроцессоре, но это скорее учебник для пояснения общих понятий, применимых ко всем микроконтроллерам / микропроцессорам.
Во-первых, давайте … давайте зададим себе пару вопросов. Первый вопрос —
Что такое микроконтроллер?
Микроконтроллер — это крошечный микрокомпьютер на чипе. Он имеет ЦП, ОЗУ (оперативное запоминающее устройство), регистры специальных функций, память программных ПЗУ, память ПЗУ данных, от одного до нескольких параллельных портов ввода-вывода (ввода / вывода) и может иметь множество периферийных устройств, включая но не ограничиваясь аналого-цифровой преобразователь (АЦП), цифро-аналоговый преобразователь (ЦАП), Serial UART, один или несколько таймеров, / на источник опорного напряжения чипа, захвата / сравнения / ШИМ (широтно-импульсная модуляция) модуля компараторов Главный синхронный последовательный порт для связи SPI (последовательный периферийный интерфейс) / I2C (Inter Integrated Circuit), USB-порт, Ethernet-порт, на микросхемах, а также множество других периферийных устройств.
Что такое микропроцессор (подождите, вы имеете в виду, что на самом деле есть разница)?
Микропроцессор — это все, что есть микроконтроллер, но без программного ПЗУ на чипе. Код программы находится вне микросхемы в отдельной внешней микросхеме EPROM.
Программное ПЗУ и ПЗУ данных
Встроенное в микросхему ПЗУ (постоянное запоминающее устройство) на микроконтроллере похоже на жесткий диск микроконтроллера. У него есть два раздела. Один раздел зарезервирован для хранения программного кода, а другой раздел зарезервирован для постоянного хранения данных, которые используются микросхемой во время обычного выполнения программы.На данном микроконтроллере PIC с, скажем, 8K программного пространства, пространство программы будет занимать адреса ПЗУ 0x0000 — 0x1FFF (или 0 — 8191 в десятичном виде). Пространство данных начинается с адреса ПЗУ программы 0x2100. Если бы пространство ПЗУ данных было длиной 256 байт, пространство ПЗУ данных занимало бы адреса ПЗУ 0x2100–0x21FF (или 8448–8704 в десятичном виде).
CPU
CPU обозначает центральный процессор. Это в основном «мозги» микроконтроллера. Это то, что выбирает инструкции из памяти кода и выполняет инструкции, которые он выбирает.
ОЗУ данных
ОЗУ данных (оперативное запоминающее устройство) — это пространство данных, которое используется для временного хранения постоянных и переменных значений, которые используются микроконтроллером во время нормального выполнения программы. Объем физического ОЗУ на данном микроконтроллере варьируется от одного микроконтроллера к другому. ОЗУ данных на микроконтроллере организовано в несколько «регистров», каждый со своим уникальным «адресом». Регистр ОЗУ на 8-битном микроконтроллере может содержать всего 8 бит или один байт данных.Типичная спецификация пространства ОЗУ может указывать, что она составляет 256 x 8. Это означает, что в ОЗУ имеется в общей сложности 256 регистров, и эти регистры могут содержать 8 битов каждый.
Регистр — это просто место в памяти, в которое вы можете записывать или считывать данные. Некоторые из нас называют регистры «местоположениями».
Регистры специальных функций
Регистры специальных функций (или просто SFR) на микроконтроллере аналогичны регистрам в ОЗУ данных. Вы можете записывать данные в них, а также читать данные из них.Различия между ними заключаются в том, что некоторые SFR напрямую контролируют встроенное аппаратное обеспечение микроконтроллера, в то время как другие контролируются встроенным аппаратным обеспечением микроконтроллера.
Каждый бит в SFR назначается функции. В SFR у вас есть биты управления и флажки. Управляющие биты похожи на «переключатели», которые включают или выключают функцию в зависимости от того, записали ли вы 1 или 0 в эту позицию бита в SFR. Биты флага похожи на «световые индикаторы», которые указывают, существует ли данное условие в зависимости от того, является ли бит флага 1 или 0.Управляющие биты напрямую управляют оборудованием. Флаговые биты контролируются аппаратными средствами. В любой конкретной программе мы обычно пишем управляющие биты, пока читаем биты флага (некоторые биты флага должны быть очищены вручную путем записи в них в зависимости от микроконтроллера… подробнее об этом позже).
Каждому элементу оборудования на микроконтроллере будет присвоен как минимум 1 SFR. Некоторому оборудованию может быть назначено несколько SFR. Обратитесь к спецификации вашего микроконтроллера, чтобы узнать больше о его конкретной организации SFR.
Биты конфигурации
Большинство микроконтроллеров имеют специальные биты, известные как «биты конфигурации». Эти биты настраивают специальные параметры на микроконтроллере, включая, но не ограничиваясь, —
* Тип генератора
* Вкл. / Выкл. Сторожевого таймера
* Вкл. / Выкл. Таймера включения питания
* Вкл. / Выкл. Сброса коричневого цвета
* Вкл. / Выкл. Программирования низкого напряжения
* Вкл. / Выкл. Вкл / Выкл
На микроконтроллере PIC есть даже биты конфигурации для защиты программного кода и кода данных.Эти биты предотвращают чтение программы или пространств данных внешним программным обеспечением, чтобы другие не могли украсть ваш код. На чипе Atmel AT89S (производная 8051) это устанавливается так называемыми «битами блокировки».
Некоторые называют биты конфигурации «битами предохранителей». Это происходит из-за старых микропроцессоров, в которых имелись настоящие «предохранители» на микросхеме, которые могли сгореть, если бы некоторые функции управления битами предохранителей были отключены. Эти предохранители были «запрограммированы один раз»… после того, как они сгорели, их нельзя было «раздувать».Однако с появлением флэш-памяти, доступной на современных микроконтроллерах, на чипе больше нет буквальных «предохранителей». Но сам термин перенесен из-за битов конфигурации, по существу обеспечивающих тот же контроль, что и биты предохранителей.
ALU (Арифметико-логическое устройство)
Этот аппаратный элемент в основном отвечает за все математические и логические операции, выполняемые микроконтроллером. На большинстве микроконтроллеров ALU будет иметь 3 флага, связанных с ним —
* Нулевой бит — Этот бит флага устанавливается в 1 аппаратным обеспечением всякий раз, когда математическая операция приводит к нулевому результату.Аппаратные средства сбрасывают его до 0, когда математическая операция приводит к ненулевому результату.
* Бит переноса / заимствования — Этот бит флага работает как бит переноса для операций сложения, а также как флаг заимствования для операций вычитания. «Перенос» происходит, когда результат операции сложения приводит к значению, превышающему то, что способен удерживать регистр. В 8-битном регистре может храниться максимальное значение 255 (FF в шестнадцатеричном или 11111111 в двоичном виде).
Если операция сложения приводит к результату больше 255, флаг переноса устанавливается в 1.Если в результате операции сложения результат меньше 255, перенос не выполняется, поэтому флаг переноса сбрасывается до 0.
Для операций вычитания флаг переноса используется вместо флага заимствования. Флаг заимствования работает напротив флага переноса. Если операция вычитания приводит к отрицательному результату, флаг заимствования очищается до 0. Если операция вычитания приводит к положительному результату, флаг заимствования устанавливается на 1.
* Бит переноса / заимствования цифры — Этот бит флага аналогичен флагу переноса / заимствования, но он работает только для указания того, происходит ли перенос / заимствование только между битами 3 и 4.
Биты флага ALU можно прочитать в любое время, чтобы узнать, были ли результаты математических операций равны нулю, положительны / отрицательны или больше / меньше чем, и т. Д. И т. Д.
Нулевой бит — это удобный бит флага, который позволяет нам сравнивать два значения, чтобы определить, равны они или нет. Если мы возьмем два числа и вычтем их, результат будет нулевым, если он равен, а ненулевым, если не равным. Таким образом, чтобы сравнить два значения, чтобы увидеть, равны они или нет, мы вычитаем их, затем читаем / проверяем нулевой бит, чтобы увидеть, является ли бит 1 или 0.Если нулевой бит = 1, результат вычитания равен нулю, что означает, что два значения равны. Если нулевой бит = 0, результат вычитания не равен нулю, что означает, что два значения не равны.
Бит переноса / заимствования — это удобный флаг, который позволяет нам сравнивать два значения, чтобы увидеть, является ли одно значение больше / меньше другого значения. Пример … у нас есть два значения: VALUE1 и VALUE2. В коде мы выполняем эту операцию —
ЗНАЧЕНИЕ1 — ЗНАЧЕНИЕ2 = ЗНАЧЕНИЕ3
После выполнения операции вычитания мы читаем / проверяем состояние максимума / минимума бита переноса / заимствования.
Если VALUE2 больше VALUE1, результат вычитания будет отрицательным, что очистит бит переноса / заимствования до 0. Если VALUE2 меньше VALUE1, результат вычитания будет положительным, что установит перенос / позаимствовать бит до 1.
Обратитесь к листу данных, чтобы узнать, какая SFR содержит эти биты. На микроконтроллерах PIC биты флага ALU находятся в STRUS SFR. На MCS-51 они находятся в PSW SFR (Слово статуса программы).
Счетчик программ
Счетчик программ — это «указатель адреса», который сообщает ЦПУ, где найти следующую инструкцию для выполнения в ПЗУ программы.ЦП будет извлекать инструкцию, находящуюся по адресу ПЗУ программы, который в данный момент загружен в счетчик программ.
Когда микроконтроллер перезагружается, счетчик программы инициализируется равным 0x0000. Процессор получит инструкцию, которая находится по адресу ПЗУ программы 0x0000. Как только эта инструкция получена, счетчик программы автоматически увеличивается до значения 0x0001. Счетчик программ непрерывно автоматически увеличивается на значение 1, что заставляет ЦП последовательно обращаться к содержимому каждой ячейки регистра в ПЗУ программы.Это продолжается до тех пор, пока процессор не выберет и не выполнит инструкцию, которая изменяет значение счетчика программы. Такими инструкциями, которые делают это, являются инструкции перехода (ajmp и ljmp на MCS-51, goto на PIC), вызовы подпрограмм (acall и lcall на MCS-51, вызов на PIC) и любые инструкции, которые добавляют или вычитают значение из или из счетчик программ.
Стек
Стек на микроконтроллере в основном используется во время вызовов подпрограмм и переходит к обработчику прерываний.Это буфер «Last In First Out», который используется для хранения адресов возврата. Во время вызова подпрограммы адрес текущего счетчика программы «помещается» в стек с добавлением смещения +1, затем счетчик программы изменяется со значением адреса, в котором находится вызываемая подпрограмма. Это заставляет счетчик программ перейти к коду подпрограммы для выполнения подпрограммы.
В конце подпрограммы будет инструкция «возврат» (ret на MCS-51, возврат на PIC). После выполнения инструкции возврата стек «выталкивается», а последнее значение адреса ПЗУ, помещенное в стек, извлекается из стека и возвращается в счетчик программ.Это заставляет счетчик программы вернуться к инструкции, которая находится после инструкции, которая вызвала подпрограмму (отсюда необходимость смещения +1 в момент, когда адрес ПК помещается в стек), и выполнение программы продолжается с того места, где оно было прервано. до вызова подпрограммы.
Некоторые микроконтроллеры имеют «программный стек» (MCS-51). Программный стек использует часть внутреннего пространства ОЗУ микроконтроллера в качестве пространства стека. Другие микроконтроллеры имеют аппаратный стек (PIC).В случае аппаратного стека этот стек представляет собой свое собственное выделенное пространство, которое отделено от всех других областей памяти чипа.
На некоторых микроконтроллерах стек доступен для записи. Это позволяет нам использовать стек для временного резервного копирования критических регистров во время вызовов подпрограмм и выполнения обработчика прерываний. Перед выполнением подпрограммы или обработчика прерываний содержимое регистров для резервного копирования помещается в стек. Затем, непосредственно перед возвратом из подпрограммы или обработчика прерываний, содержимое, которое мы поместили в стек в начале подпрограммы, извлекается из стека по одному за раз, а затем восстанавливается в исходное положение в обратном порядке. толкнул на стек (помните … последний вошел первым).
Хорошим примером этого может служить то, как мы выполняем резервное копирование аккумулятора и регистров PSW на MCS-51 во время выполнения процедуры обработки прерывания —
Код (текст):
push ACC; резервное копирование аккумулятора в стек
push PSW; резервное копирование слова состояния программы в стек
; выполнить код обработчика прерываний здесь
pop PSW; восстановить слово состояния программы
pop ACC; восстановить аккумулятор
reti; вернуться к основному коду из прерывания
Как видите, мы сначала помещаем содержимое аккумулятора в стек, а затем помещаем содержимое PSW в стек после него.Затем выполняется код обработчика прерываний.
После выполнения кода обработчика прерываний PSW сначала извлекается из стека, затем после него извлекается аккумулятор из стека… в порядке, обратном тому, как они были выдвинуты.
Типичная SFR
Типичная SFR настроена, как показано ниже.
Код (текст):
| ПОРТ 1 SFR |
———————————————————
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| P1.7 | P1.6 | P1.5 | P1.4 | P1.3 | P1.2 | P1.1 | P1.0 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Это SFR защелки порта на микроконтроллере MCS-51 для параллельного порта 1. Каждый порт MCS-51 является 8-битным параллельным портом, и каждый из битов в SFR порта назначается каждому выводу порта. P1.0 будет контактом 0 на порте 1, P1.1 будет контактом 1 на порте 1, P1.2 будет контактом 2 на порте 1 и т. Д. И т. Д.
Как показано, у нас есть все нули, записанные в каждый из битов SFR защелки порта 1.Это переведет все контакты на порт 1 в низкое состояние (0 вольт). Если бы мы записали 1 в любой из битов SFR порта, это установит вывод, связанный с позицией бита, в которую мы записываем «1» в верхнем состоянии (+ 5 В).
Например, давайте запишем значение 01010101 в порт 1 SFR —
Код (текст):
| ПОРТ 1 SFR |
———————————————————
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| P1.7 | P1.6 | P1.5 | P1.4 | P1.3 | P1.2 | P1.1 | P1.0 |
| 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 |
Как показано, это установит контакты P1.0, P1.2, P1.4 и P1.6 в верхнее состояние, в то время как контакты P1.1, P1.3, P1.5 и P1.7 находятся в нижнем состоянии.
Слово в таблицах … и почему они так важны
Не все микроконтроллеры созданы равными. Каждый из них разработан с определенным оборудованием на чипе. Микроконтроллеры разных производителей имеют разную архитектуру.Вы обнаружите, что микроконтроллеры PIC сильно отличаются от микроконтроллеров MCS-51 так же, как MCS-51 сильно отличается от, скажем, Motorola 65xx в отношении того, как реализованы SFR, как организована ОЗУ данных, набор команд, слово конфигурации, как работают параллельные порты и т. д.
ЕДИНСТВЕННЫЙ способ точно знать, как работать с вашим микроконтроллером и его оборудованием, — это обратиться к его техническому описанию. Таблица данных объясняет каждую SFR, каждую часть встроенного аппаратного обеспечения, абсолютные максимальные электрические характеристики, организацию памяти программ / данных, как подключены параллельные порты и как они работают, сводку набора команд (для тех из вас, кто кодирует в сборке язык) и т. д.Практически все, что вам, как программисту, нужно будет знать о вашем микроконтроллере, содержится в техническом описании микроконтроллера.
Большинство из них находятся в свободном доступе в Интернете с помощью простого поиска в Google (я пока не нашел ни одного). Заявление о том, что вы не можете найти таблицу, не является приемлемым оправданием, когда дело доходит до этого. ЕДИНСТВЕННАЯ причина, по которой кто-то отказывается просматривать таблицу, заключается либо в том, что они слишком ленивы, либо в том, что они их не понимают, но не хотят, чтобы другие знали, что они этого не делают.Я скажу прямо сейчас, хотя … большинство вопросов форума, касающихся микроконтроллеров, можно было бы ответить самостоятельно, если бы человек нашел время, чтобы найти ответ в техническом описании.
Таблицы абсолютно обязательны. Вы не сможете написать свой собственный код без них.
Об авторе
Джон Уайлдер является независимым инженером-электронщиком и энтузиастом электроники более 20 лет. Он провел четыре года в ВМС США в качестве специалиста по авиационной электронике.Джон также играет на гитаре с 13 лет и начал интегрировать электронику и музыку с 15 лет. Джон создал свой первый ламповый усилитель в 17 лет. «Музыкальная электроника», говорит Джон, это его любовь и страсть.
Джон также является частым участником и страстным членом инженерного сообщества Electro-Tech-Online. На Electro-Tech-Online вы можете задавать вопросы и получать ответы от ваших коллег-инженеров по всем вопросам — от микроконтроллеров, возобновляемых источников энергии и автомобильной электроники до моделирования цепей и проектирования.Кроме того, существуют специализированные форумы MCU для 8051/8951, AVR, ARM, Arduino, Oshonsoft Project, а также хранилище кода, где участники делятся фрагментами кода.
Следуйте за Джоном в Твиттере на @PICmcuguy.
,Микроконтроллер — это компьютер. Все компьютеры — речь идет о персональном настольном компьютере, большом мэйнфрейме или микроконтроллере — имеют несколько общих черт:
- Все компьютеры имеют ЦП (центральный процессор), который выполняет программы. Если вы сейчас сидите за настольным компьютером и читаете эту статью, процессор на этом компьютере выполняет программу, которая реализует веб-браузер, отображающий эту страницу.
- CPU загружает программу откуда-то. На настольном компьютере программа браузера загружается с жесткого диска.
- Компьютер имеет некоторое ОЗУ (оперативное запоминающее устройство), где он может хранить «переменные».
- И у компьютера есть несколько устройств ввода и вывода, чтобы он мог общаться с людьми. На настольном компьютере клавиатура и мышь являются устройствами ввода, а монитор и принтер — устройствами вывода. Жесткий диск — это устройство ввода-вывода — он обрабатывает как ввод, так и вывод.
Используемый вами настольный компьютер — это «компьютер общего назначения», который может запускать любую из тысяч программ.Микроконтроллеры — это «компьютеры специального назначения». Микроконтроллеры делают одну вещь хорошо. Существует ряд других общих характеристик, которые определяют микроконтроллеры. Если компьютер соответствует большинству этих характеристик, то вы можете назвать его «микроконтроллером»:
- Микроконтроллеры
- — это « встроенный » внутри какого-либо другого устройства (часто это потребительский продукт), чтобы они могли контролировать функции или действия продукта. Поэтому другое название микроконтроллера — «встроенный контроллер».« Микроконтроллеры
- — это , выделенные для одной задачи и запускающие одну конкретную программу. Программа хранится в ПЗУ (постоянное запоминающее устройство) и, как правило, не изменяется. Микроконтроллеры
- часто представляют собой устройств с низким энергопотреблением . Настольный компьютер почти всегда подключен к сетевой розетке и может потреблять 50 ватт электроэнергии. Микроконтроллер с батарейным питанием может потреблять 50 милливатт
- Микроконтроллер имеет выделенное устройство ввода и часто (но не всегда) имеет небольшой светодиод или ЖК-дисплей для вывода .Микроконтроллер также получает данные от устройства, которым он управляет, и управляет устройством, посылая сигналы различным компонентам в устройстве. Например, микроконтроллер внутри телевизора принимает вход от пульта дистанционного управления и отображает вывод на экране телевизора. Контроллер управляет селектором каналов, акустической системой и некоторыми настройками электроники кинескопа, такими как оттенок и яркость. Контроллер двигателя в автомобиле получает данные от датчиков, таких как датчики кислорода и детонации, и управляет такими вещами, как топливная смесь и время зажигания.Контроллер микроволновой печи принимает ввод с клавиатуры, отображает вывод на ЖК-дисплее и управляет реле, которое включает и выключает микроволновый генератор.
- Микроконтроллер часто бывает небольшим и недорогим . Компоненты выбраны таким образом, чтобы минимизировать размер и быть как можно более дешевыми.
- Микроконтроллер часто, но не всегда, в некотором смысле . Например, микроконтроллер, управляющий двигателем автомобиля, должен работать при экстремальных температурах, с которыми обычный компьютер обычно не справляется.Микроконтроллер автомобиля на Аляске должен нормально работать при -30 градусах F (-34 C), в то время как тот же микроконтроллер в Неваде может работать при 120 градусах F (49 C). Когда вы добавляете тепло, естественным образом генерируемое двигателем, температура в моторном отсеке может доходить до 150 или 180 градусов F (65-80 C). С другой стороны, микроконтроллер, встроенный в видеомагнитофон, вообще не имеет повышенной прочности.
Фактический процессор , используемый для реализации микроконтроллера, может широко варьироваться.Например, сотовый телефон, показанный на вкладке «Внутри цифрового сотового телефона», содержит процессор Z-80. Z-80 — это 8-битный микропроцессор, разработанный в 1970-х годах и изначально использовавшийся в домашних компьютерах того времени. Мне сказали, что Garmin GPS, показанный в разделе «Как работают GPS-приемники», содержит версию Intel 80386 с низким энергопотреблением. Изначально 80386 использовался в настольных компьютерах.
Во многих продуктах, таких как микроволновые печи, спрос на процессор довольно низкий, и цена является важным фактором.В этих случаях производители обращаются к специализированным микросхемам микроконтроллеров — микросхемам, которые изначально были предназначены для недорогих, небольших и маломощных встроенных процессоров. Motorola 6811 и Intel 8051 являются хорошими примерами таких чипов. Существует также линейка популярных контроллеров под названием «PIC microcontrollers», созданная компанией Microchip. По сегодняшним стандартам эти процессоры невероятно минималистичны; но они чрезвычайно недороги при покупке в больших количествах и часто могут удовлетворить потребности дизайнера устройства с одним чипом.
Типичная микросхема микроконтроллера младшего класса может иметь 1000 байтов ПЗУ и 20 байтов ОЗУ на чипе вместе с восемью выводами I / 0. В больших количествах стоимость этих чипов иногда может составлять всего лишь копейки. Вы, конечно, никогда не собираетесь запускать Microsoft Word на таком чипе — Microsoft Word требует, возможно, 30 мегабайт оперативной памяти и процессор, который может выполнять миллионы инструкций в секунду. Но тогда вам не нужен Microsoft Word для управления микроволновой печью. С микроконтроллером у вас есть одна конкретная задача, которую вы пытаетесь выполнить, и важна низкая стоимость и низкое энергопотребление.
,Встроенный- Товары
- Клиенты
- Случаи использования
- Переполнение стека Публичные вопросы и ответы
- Команды Частные вопросы и ответы для вашей команды
- предприятие Частные вопросы и ответы для вашего предприятия
- работы Программирование и связанные с ним технические возможности карьерного роста
- Талант Нанимать технический талант
- реклама Связаться с разработчиками по всему миру