Таймер обратного отсчета на 0-9999 секунд на pic12f683

Таймер обратного отсчета на 0-9999 секунд на PIC12F683

Целью этого проекта является создание простого таймера обратного отсчета на 0-9999 секунд с звуковым сигналом и дисплеем. Необходимое время устанавливается при помощи двух кнопок без фиксации, а отсчет секунд отображается на 4 разрядном семи сегментом дисплее. В проекте используется микроконтроллер PIC12F683 для отсчета времени и микросхема MAX7219 для управления семи-сегментным дисплеем. Конец отсчета обозначается звуковым сигналом зуммера.

Принципиальная схема

Полная схема этого проекта приведена ниже. Две кнопки без фиксации (называются INC и TSET) используются для установки времени и запуска таймера. Они соединены параллельно и подключены к контакту AN3 АЦП микроконтроллера PIC12F683. На схеме видно, что при нажатии на кнопки на выходе получаются разные аналоговые напряжения. Когда кнопка INC нажата, напряжение на контакте на AN3 равно 0. Но если нажата кнопка TSET, напряжение на контакте AN3 около 2.5 В (делитель напряжения из двух резисторов 4,7 кОм). Если ни одна кнопка не нажата, то напряжение на контакте AN3 около 5В. Поэтому, опираясь на значение на выходе 10 битного АЦП, можно идентифицировать, какая кнопка нажата. Звуковой сигнал реализован при помощи ШИМ-сигнала на контакте GP2. В качестве дисплея используется 4 разрядный семи сегментный индикатор управляемый микросхемой MAX7219. Если вы не знакомы с микросхемой MAX7219, прочитайте мою статью Последовательный 4 разрядный семи сегментный индикатор для получения более подробной информации.

На фотографии показан полностью собранный проект. Я использую свою плату разработчика PIC12F и дисплейный модуль, состоящий их 4 разрядного семи сегментного индикатора и микросхемы MAX7219. Зуммер и кнопки установлены на макетной плате, но они могут легко поместиться на моей плате PIC12F.

Программа

Прошивка написана на C и скомпилирована в mikroC Pro для PIC микроконтроллеров. Часть программы для работы с MAX7219 взята из моего предыдущего проекта «Последовательный 4 разрядный семи сегментный дисплейный модуль». ШИМ сигнал 5 кГц появляется на контакте CCP1 при окончании времени таймера. Исходный код и HEX файл можно скачать ниже.

На рисунке выше показаны параметры фьюзов (внутренний генератор 4.0 МГц, MCLR, Power-Up timer, Brown out detection включены) для микроконтроллера PIC12F683.

Принцип работы

Таймер работает следующим образом. При подаче питания, дисплей инициализируется, и на всех 4 разрядах отображаются 0. Чтобы установить время, вам необходимо ввести значение одной цифры за один раз путем кратковременного нажатия TSET. При первом нажатии устанавливаются Единицы, по умолчанию 0. В это время другие разряды не горят. Чтобы установить цифровое значение от 0 до 9 используйте кнопку INC. При каждом нажатии INC, значение увеличивается на 1, и сбрасывается на 0 после 9. После установки значения Единиц, нажатием TSET выбираются Десятки, значение которых устанавливается аналогичным образом. Когда все 4 цифры заданы, вы можете запустить таймер путем удержания кнопки TSET примерно 2 секунды. Таймер запускается с коротким звуковым сигналом, а оставшееся время отображается на дисплее. Когда время истекает, дисплей мигает пять раз и звучит сигнал. На видео показана работа таймера.

Обратите внимание, что во время отсчета времени таймер не реагирует на нажатия кнопок INC и TSET. Если вы хотите сбросить или перезапустить таймер, нажмите кнопку Reset.

Вы можете купить 4 разрядный семи сегментный светодиодный индикатор SPI примерно за $12. Он позволяет вам работать с 4 разрядным 7-сегментным светодиодным индикатором, используя всего три порта ввода/вывода микроконтроллера, и позволяет управлять всеми сегментами, включая точки.

Таймер обратного отсчета на 0-9999 секунд на PIC12F683

Таймеры и реле времени

Выключатель нагрузки с ограничителем времени включенного состояния (К561ТМ2, CD4060)
Для питания многих устройств применяются автономные источники питания, энергию которых нужно экономить. Кроме того нужно экономить и потребление электроэнергии от электросети, и не допускать бесполезного горения различных лампочек и ненужной работы других электроприборов. Здесь предлагается схема …

Таймер для отключения питания устройств с низким потреблением тока

Мультиметр, — сейчас самый популярный прибор радиолюбителя, но у него есть и недостатки. Автономное питание, это, безусловно, достоинство, но прибор очень легко забыть выключить, и тогда довольно слабая батарея 6F22 (аналог «Кроны») может быстро израсходоваться Лучшим способом избежать …

Цифровой лабораторный секундомер на 0,01-99 секунд (CD4060, 74C926)

Схема самодельного цифрового секундомера, который позволяет измерять временные интервалы от 0,01 секунды, до 99,99секунд. В основе прибора микросхема ММ74С926 (или другие аналоги «74С926», которая представляет собой десятичный четырехразрядный счетчик, объединенный с системой индикации …

Автомат для циклического обнуления или прерывания питания (CD4060)

Эта схема предназначена для циклического обнуления или прерывания питания какого-либо устройства, нуждающегося в таком действии. Собрана на микросхеме CD4060. Период прерывания (обнуления) зависит от настройки резистора R1 и может быть от одного до 4-5 часов …

Несложный таймер для управления нагрузкой на 220В (CD4060)

Этот таймер предназначен для ограничения продолжительности работы электроприбора. Время можно выставить от 5 минут до 90 минут. Время задается при помощи RC-цепи, переменным резистором, поэтому точность не калиброванная. Особенностью таймера является его полное отключение от электросети …

Электронное реле для временного включения низковольтной нагрузки

Данное устройство представляет собой реле времени, включающее низковольтную нагрузку при нажатии кнопки, и выключающее её через 1-10 минут (время устанавливается при помощи переменного резистора) после отпускания кнопки. Схема показана на рисунке. Продолжительность включенного состояния нагрузки …

Циклический таймер, каждые 60 минут включает нагрузку на 5 минут

Схема несложного самодельного устройства, которое через каждые 60 минут включает нагрузку на время 5 минут. Применение данного устройства может быть самое различное, например, управление скважным насосом или другим устройством, которое нужно каждый час включать на небольшое время, например …

Таймер для каждодневного включения нагрузки (CD4060B, CD4001)

Есть вещи, которые нужно делать каждый день, примерно, в одно и то же время. Например, включать вечером свет во дворе, и выключать его утром, или поливать цветы, кормить рыбок. Этот таймер предназначен для выполнения за человека такой работы, как включение и выключение нагрузки один раз в сутки …

Универсальный двоичный таймер на микросхемах CD4060B и диодах

Этот необычный таймер позволяет включать нагрузку через время,заданное с точностью до секунды, от 1 секунды до более чем 97 суток. Необычность таймера в сложности с ним обращения, и необходимости некоторых математических вычислений для задания времени (желательно как приложение к нему иметь …

Таймер для ограничения времени работы 12-вольтового оборудования

На рисунке показана схема автомата для ограничения времени работы оборудования. питающегося от источника постоянного тока с номинальным напряжением12V. Работа ограничителя. Ограничитель питается параллельно нагрузке. Для включения служит кнопка без фиксации Чтобы включить нагрузку нужно нажать эту …

Таймер на Arduino Nano с LCD 1602

Для этого занятия нам потребуется:

  • плата Arduino Uno / Arduino Nano / Arduino Mega;
  • дисплей LCD 1602;
  • энкодер ардуино / тактовые кнопки;
  • зуммер, светодиод и резистор 220 Ом;
  • макетная плата;
  • провода «папа-папа», «папа-мама».

Первый вариант проекта — таймер на Ардуино с управлением от кнопки. При нажатии на первую и вторую кнопку можно увеличивать и уменьшать временной интервал в минутах. При клике на третью кнопку, подключенную к пину 6 Ардуино Нано, запускает обратный отсчет. По окончании отсчета зажигается светодиод и включается звуковой сигнал. Четвертая кнопка, подключенная к пину 8, служит для сброса таймера.

Читайте также  Замена проводки в панельном доме без штробления

Схема сборки таймера на Ардуино с кнопками


Схема сборки таймера своими руками на Ардуино Нано с дисплеем
Также таймер можно в любой момент остановить нажатием на третью кнопку. После сборки электрической схемы, загрузите следующий пример программы таймера на Ардуино. Обратите внимание, что для работы часов на дисплее с I2C модулем, потребуется установить библиотеку LiquidCrystal_I2C.h. Эту и другие популярные библиотеки можно скачать на нашем сайте на странице — Библиотеки для Ардуино.

Скетч для таймера на Ардуино Нано с кнопками

Их положительное качество — высокое быстродействие, малые габариты, высокая надежность. К недостаткам следует отнести низкую нагрузочную способность (ток нагрузки канала коммутации обычно не должен превышать 10 мА), а также высокую чувствительность к помехам.

Ключевой элемент КМОП-коммутатора включается при подаче на управляющий электрод напряжения «высокого» уровня и отключается при подаче «низкого». Сопротивление ключа во включенном состоянии состовляет несколько десятков Ом; в разомкнутом — превышает сотни МОм.

КМОП-коммутаторы могут быть использованы в качестве промежуточных элементов управления других коммутирующих устройств (транзисторов, реле, оптоэлектронных приборов и т.п.).

Рис. 5. Схема реле времени на КМОП-коммутаторе К561КТ3.

На рис. 5 показана схема КМОП-коммутатора на одном из четырех равнозначных элементов микросхемы К561КТЗ .

В схеме использована кнопка без фиксации положения. В исходном состоянии на управляющем электроде микросхемы (вывод 13) присутствует напряжение низкого уровня.

Коммутирующий элемент (выводы 1, 2) разомкнут, ток через сопротивление нагрузки не протекает. Конденсатор С1 через нормально замкнутый контакт кнопки SB1 заряжен до напряжения питания устройства.

Если кратковременно нажать на кнопку SB1, конденсатор С1 оказывается подключенным к управляющему электроду (вывод 13) микросхемы. Канал коммутатора включается.

Через резистор R3 напряжение высокого уровня поступает на управляющий электрод, фиксируя и поддерживая включенное состояние коммутатора.

Если кнопку SB1 оставить нажатой более продолжительное время, то конденсатор С1 разрядится через резистор R1. Напряжение на управляющем электроде микросхемы снизится до «низкого» уровня, произойдет самовыключение коммутатора.

Динамику процесса включения — выключения КМОП-коммутатора иллюстрируют диаграммы, приведенные на рис. 6. Устройство (рис. 5) можно использовать и для формирования импульсов заданной длительности.

Рис. 6. Динамику процесса включения — выключения КМОП-коммутатора.

Примечание. Для подачи питания на микросхему ее вывод 14 (см. Приложение) соединяют с плюсовой шиной питания, вывод 7 — с общей шиной. Незадействованные выводы входов управления рекомендуется соединить с шиной питания или общей шиной напрямую либо через резистор сопротивлением 1 МОм.

Рис. 7. Схема замены переключателя КМОП-коммутаторами.

Напряжение, снимаемое с сопротивления нагрузки (рис. 5), может быть использовано для управления другими цепями, например, переключателем (рис. 7).

Этот переключатель является аналогом тумблера, позволяющего, например, изменять полярность питающего напряжения. В то же время число коммутируемых цепей может быть увеличено включением дополнительных КМОП-коммутаторов.

В устройстве (рис. 7) управление коммутацией сигналов можно производить переключателем SA1, либо КМОП- или транзисторным коммутатором (рис. 8, 9).

Рис. 8. Схема для получения управляющего сигнала, выполненная на транзисторе.

Рис. 9. Схема для получения управляющего сигнала, выполненная на К561КТ3.

Управляющие сигналы «0/1» и »1/0» подаются со схем (рис. 8, 9) на соответствующие цепи управления, обозначенные на схеме рис. 7 крестиками.

Таймер обратного отсчета на 0-9999 секунд на pic12f683

  • ШДК
  • Статьи
    • Схемы
      • Arduino
      • Управление шаговыми двигателями
      • Металлоискатели
      • разное
      • для Авто
      • разное на микроконтроллерах
      • всё на таймере NE555
      • Конструктор схем
      • Осциллографы
      • Измерительная аппаратура
      • Роботы
      • Световые эффекты,управление светом
      • Термостат
      • Инверторы и преобразователи
      • Защиты от перепадов напряжения
      • Паяльные станции
      • Аудио
      • Дозиметры
      • Часы
      • Выключатели, переключатели,ИК,РФ
      • Таймеры
      • КУБ светодиодный
    • Программаторы
      • PIC microchip
      • AVR ATmega и ATtiny
      • Общее
    • Электрические двигатели
      • машины постоянного тока
      • машины переменного тока
    • Генераторы
      • генератора независимого возбуждения
      • синхронный генератор
    • Авто-инжектор
      • Элементы ЭСУД, описание
    • Законы электротехники
      • Основные законы из ТОЭ и др.
    • Конкурсные работы 2015
    • Конкурсные работы 2014
    • Конкурсный работы 2013
    • Конкурсные работы 2012
  • Скачать
    • Программирование
    • Электрические расчеты
    • Электрические программы
    • Справочник
    • Книги по релейной защите
    • Авто
    • Библиотека электромонтера
    • Журналы
      • Everyday Practical Electronics
      • Радио
      • Радиоаматор
      • Радиолюбитель
      • Радиоконструктор
      • Схемотехника
      • Радио Хобби
      • Радиомир
      • Ремонт и сервис
      • Электрик
      • Elektor Electronics
    • Разное
      • Книги, разные
      • Программы,разные
  • Ссылки
    • Сайты связанные с электричеством
    • Авто сайты
  • Видео
    • Самоделки
    • Обучение Arduino
    • дуга,разряд,пожар.
    • Обучающие видео ролики
    • P-CAD Schematic
    • РОБОТЫ
    • Техническое обслуживание компьютера
    • Изготовление печатных плат
  • Проекты
    • Заказать прошивку
    • Регистрация программистов
    • С миру по байту
  • Информация
    • О сайте
    • Реклама
    • Добавить статью
    • Обратная связь
    • Обмен банерами
  • Электроника из Китая
  • В помощь студенту
    • Электрические машины
    • Эксплуатация релейной защиты

Таймер — одна из наиболее популярных радиолюбительских конструкций Вниманию читателей предлагается еще один вариант В отличие от других подобных устройств на микроконтроллерах, здесь выдержку устанавливают не нажатиями на кнопки, а обычным переменным резистором.
Простота управления, цифровая индикация, возможность быстрой установки нового значения выдержки делают этот таймер удобным для применения в качестве кухонного Продолжительность выдержки может быть любой пределах 1. 85 мин.

Схема таймера показана на рисунке. Микроконтроллер DD1 работает по программе, коды которой приведены в таблице. После включения питания и инициализации регистров микроконтроллера программа конфигурирует вывод RA2 как выходной и устанавливает на нем высокий логический уровень. После первоначальной зарядки конденсаторов С2 и СЗ программа переходит в фазу установки продолжительности выдержки. Циклически выполняется подпрограмма «OneShot», заимствованная из статьи А. Долгого «Аналоговое управление в микроконтроллерном устройстве» («Радио». 2005, № 4, с. 33), а также проверяется состояние кнопки SB1. Светодиод HL1 погашен.

Полученное в результате работы подпрограммы число в зависимости от положения движка переменного резистора R1 может находиться в пределах 1 .254 Программа преобразует его в продолжительность выдержки в минутах, причем каждым трем последовательным значениям этого числа соответствуют одинаковые выдержки. Таким образом, максимальная выдержка — 255/3 = 85 мин. Установленное значение программа выводит на двухразрядный цифровой индикатор HG1.HG2.

Обнаружив нажатие на кнопку SB1, программа переходит в фазу отсчета выдержки, сигнализируя об этом включением светодиода HL1. Фактически идет подсчет прерываний от таймера TMR0. Так как он настроен (вместе с предварительным делителем) на коэффициент пересчета 4000, а период повторения счетных импульсов при частоте кварцевого генератора 4 МГц равен 1 мкс, прерывания происходят каждые 4 мс. Как только их число достигнет 15000 (это значит, что прошло 0,004×15000 = 60 с), программа уменьшает выведенное на индикатор значение на единицу и начинает подсчет прерываний заново.

Когда заданное число минут пройдет, с выхода RA4 микроконтроллера через усилитель на транзисторе VT1 на динамическую головку ВА1 поступит прерывистый сигнал частотой 1000 Гц. Через 6 с сигнал прекратится и программа таймера вернется в фазу установки выдержки.

Если кнопка SB1 нажата до истечения установленной выдержки, таймер прекращает ее дальнейший отсчет и, не подавая звуковой сигнал, переходит в фазу установки. При переходах из одной фазы в другую программой предусмотрены секундные паузы, до истечения которых кнопку SB1 необходимо отпустить.
Налаживание таймера сводится к подборке конденсатора СЗ. Его емкость должна быть такой, чтобы при максимальном сопротивлении переменного резистора R1 на индикатор было выведено число 85. Подбирая резистор R16, устанавливают необходимую громкость звукового сигнала.

Читайте также  Светильник с подвеской к смонтированной тросовой проводке

Питать таймер можно от любого источника постоянного напряжения 3.. .5 В, желательно стабилизированного. Потребляемый ток не превышает 100 мА. Переменный резистор должен быть с линейной характеристикой регулирования. Светодиодные индикаторы АЛС324Б можно заменить другими с общим анодом, а микроконтроллер PIC16F84A — более ранней моделью PIC16F84.

Видео от пользователя goda :

Коментарии от goda :

Таймер собрал, работает, поскольку таймер нужен был для лампы засветки, использовал переменный резистор 10кОм получился диапазон 0-10мин на полностью выкрученой в право ручке резистора. Погрешность на максимальном значении 85мин получается 1-2 сек. Выход звука не понадобился ,поэтому на плате его нет,сигнал с ножки 0,4 вольта идет проверил прибором.

Реле использовал на 12 вольт другого не оказалось.Можно использовать на 5вольт без особой переделки платы.Подстроечный конденсатор не понадобились на мой диапазон 0-10мин. При первом включение(подача питания) щелкает реле, потом работает нормально.

Важно. На моей плате применена тактовая кнопка для включения, у кнопки проходящие контакты, через нее идет минус питания на м.к. Если кто-то будет использовать выносную кнопку, нужно установить перемычку. При запуске отсчета времени переменник не реагирует на поворот ручки, пока кнопкой не остановиш отсчет времени. Индикатор использовал большой 2,0см х2,5см называется КЕМ-5621-BSR с общим анодом поэтому понадобились два транзистора BC547 для цепи анода.

Корпус переменного резистора подпаиваем на минус, иначе (прыгают показания при прикосновении).


Скачать исходник и прошивку

Скачать [49,28 Kb] (cкачиваний: 364) две печатки от Nikolai4, под два типа реле, питание от зарядки мобилы все влазит в корпус с вилкой.

Таймер на Ардуино с обратным отсчётом

Таймер на Ардуино с обратным отсчетом с кнопками или энкодером и дисплеем LCD 1602 I2C — интересный и полезный проект. Рассмотрим несколько вариантов таймера с отсчетом времени на Arduino Nano или Uno, которые можно использовать на кухне или в аквариуме для включения световой и звуковой индикации или реле от Ардуино. А вы можете выбрать для себя наиболее подходящий вариант данного проекта.

Простой таймер Ардуино millis()

Чтобы понять принцип работы функции millis() Arduino продемонстрируем пример программы счетчика с выводом времени на монитор порта. Команда millis позволяет осуществлять задержу в выполнении программы без delay и осуществлять при выполнении программы многозадачность. Отсчет времени начинается сразу после загрузки программы в микроконтроллер и открытия монитора порта Arduino IDE.

Пояснения к коду:

  1. секунда прибавляется через 995 мс, так как на выполнение других операций тратится некоторое количество миллисекунд. Если программируемый таймер будет спешить, то количество миллисекунд следует добавить.

Таймер на Arduino Nano с LCD 1602

Для этого занятия нам потребуется:

  • плата Arduino Uno / Arduino Nano / Arduino Mega;
  • дисплей LCD 1602;
  • энкодер ардуино / тактовые кнопки;
  • зуммер, светодиод и резистор 220 Ом;
  • макетная плата;
  • провода «папа-папа», «папа-мама».

Первый вариант проекта — таймер на Ардуино с управлением от кнопки. При нажатии на первую и вторую кнопку можно увеличивать и уменьшать временной интервал в минутах. При клике на третью кнопку, подключенную к пину 6 Ардуино Нано, запускает обратный отсчет. По окончании отсчета зажигается светодиод и включается звуковой сигнал. Четвертая кнопка, подключенная к пину 8, служит для сброса таймера.

Схема сборки таймера на Ардуино с кнопками

Также таймер можно в любой момент остановить нажатием на третью кнопку. После сборки электрической схемы, загрузите следующий пример программы таймера на Ардуино. Обратите внимание, что для работы часов на дисплее с I2C модулем, потребуется установить библиотеку LiquidCrystal_I2C.h. Эту и другие популярные библиотеки можно скачать на нашем сайте на странице — Библиотеки для Ардуино.

Скетч для таймера на Ардуино Нано с кнопками

Пояснения к коду:

  1. в цикле while секунда вычитается через 995 мс, так как на выполнение других операций тратится некоторое количество миллисекунд. Если таймер будет спешить, то количество миллисекунд следует добавить;
  2. сбросить таймер можно только, остановив обратный отсчет времени.

Кухонный таймер Ардуино с энкодером

Сейчас рассмотрим, как сделать таймер на Ардуино своими руками с энкодером и LCD. Принцип управления, подобен предыдущему варианту. Поворотом ручки энкодера можно задать необходимый временной интервал, а нажатием на ручку можно запускать и останавливать обратный отсчет времени. Далее размещена схема сборки проекта на Arduino Nano, этот проект можно собрать и на плате Arduino Uno.

Схема таймера на Ардуино Уно / Нано

Кроме сборки готовой схемы, предлагаем вам скачать чертеж корпуса для проекта из фанеры, который можно изготовить на лазерном ЧПУ станке. Готовую программу и макет корпуса для часов таймера на Ардуино Нано можно скачать по ссылке здесь. После сборки схемы загрузите пример скетча в микроконтроллер. В коде добавлены подробные комментарии для понимания работы программы и даны пояснения.

Скетч таймера обратного отсчета времени

Пояснения к коду:

  1. частоту звукового сигнала можно изменить через команду tone();
  2. для скетча потребуется установить библиотеку RotaryEncoder.

Заключение. В этом обзоре представлено лишь два варианта изготовления часов с таймером для аквариума или кухни своими руками. В комментариях вы можете оставить вопросы по данному проекту (если они есть) или предложить свой вариант проекта с обратным отсчетом времени, который можно добавить к этому обзору.

Термостат + таймер обратного отсчета, LED 2×4.

Один из вариантов схемы термостата и таймера, который можно применить для небольшой автоматизации, связанную с температурой и временной задержкой.

Сам по себе термостат и таймер обратного отсчета представляет собой два автономных устройства, с возможностью коммутировать выход термостата на одну из кнопок управления таймером, при этом можно получить необходимую для автоматики логическую цепочку, об этом ещё с абзаца «Настройки и кнопки управления».

  • Термометр, диапазон измеряемых температур от -55.0°C до 125.0 °C. Точность 0.1°C.
  • Термостат ; установка порога срабатывания в диапазоне от -55.0°C до 125.0 °C. Шаг установки 0.1°C.
  • Дельта термостата, диапазон от 0.2°C до 9.9 °C. Шаг установки 0.1°C.

Сигнал управления с термостата выведен на два выхода ( PD 1, PD 2) которые всегда работают в инверсии по отношению к друг другу.

  • Таймер обратного отсчета ; диапазон то 1 секунды до 90 минут. Установка времени отсчета с шагом 1 секунда.

Сигнал управления с таймера выведен на два выхода ( PD 3, PD 4) которые всегда работают в инверсии по отношению к друг другу.

Применение в схеме сдвиговых регистров 74НС595, позволило освободить достаточное количество портов микроконтроллера, чтобы сделать необходимое управление схемой согласно заданных функций.

Настройки и кнопки управления.

Термостат; вход в настройки термостата из основного режима, происходит при однократном нажатии кнопки Кн2 (при этом происходит подтверждение действия, мигание текущей температуры).

Далее при однократном нажатии Кн3 , переход к установке порога срабатывания термостата.

Еще нажатие Кн3 , переход к установке дельты термостата (зона гистерезиса).

Еще на Кн3 , произойдет переход в основное, рабочее состояние схемы, или …. Кн4 (СБРОС), находясь в любом пункте настройки, приведет к возвращению в основной режим работы схемы, или … автоматически, если в течение 20секунд не нажимать кнопки управления, происходит возвращение в основной режим работы схемы.

Таймер обратного отсчета; вход в настройки таймера обратного отсчета из основного режима, происходит при однократном нажатии кнопки Кн1 (при этом происходит подтверждение действия, мигание текущей времени таймера).

Далее при однократном нажатии Кн3 , переход к установке секунд таймера.

Читайте также  Провод для открытой проводки на изоляторах

Еще нажатие Кн3 , переход к установке минут таймера.

Еще один раз на Кн3 , произойдет переход в основное, рабочее состояние схемы, или …. Кн4 (СБРОС), приведет к возвращению в основной режим работы схемы, или автоматически…….

Установленные значения настроек, сохраняются, в энергонезависимой памяти МК.

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

(Варианты, управления ПУСК , для начала обратного отсчета.)

Кн3 — ПУСК / ПАУЗА (порты МК переходят – из состояния PD 3 в лог. 0 , PD 4 в лог. 1, в состояние PD 3 в лог. 1 , PD 4 в лог. 0)

Кн5 – ПУСК (разовый пуск, дополнительные нажатия на Кн5 не приведут к изменению отсчета, только Кн3 сброс или Кн4 пауза)

Кн6 – ПУСК (пуск, дополнительные нажатия на Кн6 будут возобновлять отсчет времени, заданный в настройках таймера, или Кн3 сброс, Кн4 пауза)

Кн4 – СБРОС (отображаемое значение времени в 00:00, PD 3 в лог. 0 , PD 4 в лог. 1).

Основные детали схемы; МК ATmega8 — любая буква и корпус, 74нс595 , кварц 4МГц , светодиодные индикаторы ОА .

Еще раз, про применение в этой схеме, микросхем 74 hc 595….

На первый взгляд принципиальная схема выглядит несколько громоздко, при обычных схемных решениях МК—> LED 2х4 , там тоже ведь непросто коммутировать компактно все соединения сегментов и анодов.

В данном случае МК—>74 hc 595—> LED 2х4 , минус схемы только в одном, в том, что нужно использовать дополнительно сдвиговые регистры, остальное можно отнести к преимуществам. Печатная плата прилагается (для индикаторов размера 0.36″ (9мм)., односторонняя) компактная разводка под сегменты и аноды индикатора.

Плата индикации соединяется с платой МК пятью проводками (шлейф может быть длинной до 70 см.)

FUSE. Схема МК работает с кварцем, на частоте 4MHz.

Схема, плата, прошивка обновлены до версии 1.1.

ТВ-таймер обратного отсчета на микроконтроллере AVR

Однажды один мой друг спросил, на чем бы я сделал таймер обратного отсчета, чтобы на телевизоре показывал большие цифры. Понятно, что можно подключить ноутбук / iPad / Android и написать приложение, только ноутбук — громоздко, а написанием мобильных приложений ни друг, ни я никогда не занимались.

И тут я вспомнил, что видел в сети проекты тв-терминалов на микроконтроллере AVR. В голове сразу появилась идея объединить маленькие символы в большие и мы решили попробовать. Как-то само собой получилось, что основную работу пришлось делать мне.

Конечно, небольшой опыт разработки устройств на МК у меня есть, но всегда проще взять готовое, поэтому я начал с активного поиска готового решения вывода на телевизор. Основным критерием поиска стала, в первую очередь, простота, по возможности, использование языка С без ассемблерных вставок, высокое качество изображения.

Найдено было много проектов, но оказалось, что большинство из них критериям не особо соответствуют. Впоследствии стало ясно, что главное — понять принцип формирования видеосигнала, а дальше дело пойдет. Но на данном этапе безусловным фаворитом стал проект Максима Ибрагимова «Простой VGA/видео адаптер», он и лег в основу моей поделки. Однако, в процессе работы от него осталась только структура, реализацию пришлось переделать практически полностью.

Дополнительной задачей, которую я практически сам себе придумал, стало задание начального времени с ИК-пульта.

В качестве основного контроллера я решил использовать ATMega168, работающий на 20МГц. Аппаратная часть формирователя видеосигнала выглядит так:

Начал я с того, что выкинул из проекта все, что касается VGA, так как его делать не планировал. Попутно изучал стандарты кодирования видеосигнала, наиболее доступной мне показалась картинка с сайта Мартина Хиннера:

.

По этой картинке делал генератор сигнала синхронизации.

В основе генератора — Timer1 в режиме fastPWM. Дополнительно глобальной переменной организован счетчик синхроимпульсов. По каждому прерыванию переполнения таймера происходит проверка номера синхроимпульса на ключевое значение, изменение длительности следующего синхроимпульса и период следующего синхроимпульса (полная строка / половина строки). Если не требуется изменений, делаются стандартные действия — увеличивается счетчик синхроимпульсов, изменяются другие переменные.

В конце каждой строки контроллер вгоняется в сон, по прерыванию по переполнению таймера просыпается, после чего сразу вызывается функция MakeSync(), задающая настройки таймера на следующий период синхронизации, после чего, если номер синхросчетчика попадает в видимую область, начинается вывод видеосигнала.

Вывод видеосигнала организован через SPI, работающий на максимальной частоте, равной половине частоты тактового сигнала.

Сам процесс вывода осуществляется в каждой строке функцией DrawString, которой в качестве параметров передается указатель на массив цифр для вывода, указатель на используемый шрифт и количество выводимых символов. Также при выводе используются глобальные переменные номера выводимой строки в каждом шрифте и номера символа. Внутри каждого символа, в цикле с количеством итераций, равному ширине данного символа в байтах, эти байты шрифта передаются в регистр SPDR.

Кроме того, аппаратная реализация SPI в контроллере AVR не может передавать несколько байт данных подряд. После каждого байта один бит пропускается, из-за чего возникают разрывы на изображении.

Чтобы победить этот недостаток, пришлось воспользоваться трюком, предложенным в проекте TellyMate, который заключается в переключении ножки вывода видео в высокоимпедансное состояние, когда нужно, и таким образом повторять последний бит в выводимом байте. Эта часть функции очень критична по времени и отказ от ассемблера привел к необходимости использовать бубен найти хитрое решение.

После того, как изображение было получено, стало ясно, что ни о каком приеме и разборе ИК-посылок с пульта не может идти речи, просто не хватит скорости, поэтому оставил прием команд по UART. Приемом ИК займется другой микроконтроллер.

Также добавил второй буфер, который нужен для отображения часов. Соответственно, шрифтов будет тоже два. Структура файла шрифта состоит из собственно, битмапов символов, константы высоты шрифта и массивов смещений каждого символа и ширины каждого символа.

Также имеется структура, описывающая шрифт, для более простого доступа из программы.

Шрифты генерировал программой DotFactory.

Во время невидимой части кадра делается ход часов и таймера, а также реакция на команды, полученные по UART.

В качестве контроллера, декодирующего ИК-пульт и отправляющего команды по UART, я взял ATTiny45. Поскольку у него нет аппаратного UART, на просторах интернета была найдена очень компактная функция программного UART, работающего только на отправку, а также простая функция чтения команд с пульта (без декодирования).

Все это было быстренько собрано в кучу и откомпилировано. Коды кнопок пульта жестко прошиты в коде. Дополнительно сделал мигание светодиода при приеме команды.

/*
* Tiny85_UART.c
*
* Created: 19.04.2016 21:22:52
* Author: Antonio
*/

// пороговое значение для сравнения длинн импульсов и пауз
static const char IrPulseThershold = 9;// 1024/8000 * 9 = 1.152 msec
// определяет таймаут приема посылки
// и ограничивает максимальную длину импульса и паузы
static const uint8_t TimerReloadValue = 100;
static const uint8_t TimerClock = (1 IrPulseThershold) ir.rx_buffer |= 1;
>
else <
ir.rx_started = 1;
ir_start_timer();
>
TCNT0 = TimerReloadValue;
>

void dbg_puts(char *s)
<
while(*s) dbg_putchar(*s++);
>