Циклический таймер своими руками схема на attiny13

Добавил пользователь Евгений Кузнецов
Обновлено: 05.10.2024

Потребовалось регулировать температуру маленького 12-ти вольтового паяльника Baku 938 мощностью 8 Вт , но в интернете попадались схемы ШИМ на дискретных элементах, например, схемы на таймере 555, к561ла7, к561лн2, на мультивибраторе из транзисторов.

ШИМ или PWM — процесс управления мощностью, подводимой к нагрузке, путём изменения скважности импульсов, при постоянной частоте.

Собрав несколько из них, ни одна меня не устроила, у них был слишком крутой спад\подъем сопротивления при вращении ручки переменного резистора - от 2 кОм сразу подскакивало к 7 кОм, и следовательно, при этом, к примеру, подключенный для теста на исток полевого транзистора, компьютерный вентилятор со скорости 20 процентов сразу поднимал обороты до 90-100 процентов. В общем, чтобы пользоваться схемой, пришлось бы вращать потенциометр с прецизионной точностью и\или с замером сопротивления при вращении.

Сначала я отнесся к ней скептически, но зря, потому что схема минимальна по обвязке, по сравнению с дискретными схемами найденными ранее. Микросхема маленькая и дешевая, изготавливается в корпусах SOIC,DIP, QFN, MLF, ножек всего 8, как и у таймера NE\LM555.

ШИМ на ней получается точным и легко регулируется.

Смотрите также статьи по теме:


Наглядная схема (принципиальную схему смотрите по ссылке выше на сайте-источнике).

Описание чипа Atmel (Microchip) ATTiny13A

ATTiny13A - это 8 битный AVR микроконтроллер с программируемой Flash памятью внутрисистемно, размером 1 КБ.


Распиновка (pinout) микроконтроллера ATTiny13A

В чем отличие ATTiny13 от ATTiny13A ?

Tiny13A - это более новый и улучшенный микроконтроллер от Atmel.

Ранее выпускались два варианта Тини13 - с обычным (ATTiny13, работает от 2.7 вольт) и пониженным (ATTiny13V, работает от 1.8 вольт) питанием.

При этом первый вариант работает на частоте до 20 Мгц, второй - до 10Мгц.

С выходом Тини13А убрали разделение мк по питанию, Тини13А работает и от 1.8 вольт (в этом режиме, при пониженном низковольтном питании его невозможно заставить работать на высокой частоте).

Примечание по сборке схемы

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

Светодиоды лучше брать с тусклым свечением, разные яркие цвета могут раздражать, особенно ярко светится синий светодиод. Яркость можно снизить применив в цепи питания светодиодов резисторы, например, до 2 кОм.

Можно обойтись и без светодиодов (следовательно и еще без трёх резисторов), они просто нужны для индикации и отображения режима работы.

Также можно обойтись и без линейного стабилизатора напряжения LM7805 (КРЕН5), если схема питается напряжением в 5 вольт, и регулируемая нагрузка работает от такого же напряжения, а не от 12 вольт.

Для стабильности напряжения можно добавить керамические конденсаторы (на наглядной схеме выделены квадратом салатового цвета) - 0,33 микроФарад (334) на вход 7805, и 0,1 микрофарад (104) на выходе 7805.

Используемая нагружаемая мощность будет ограничена полевым (MOSFET) транзистором.

Прошивка

Почитав комментарии на оригинальной странице, увидел несколько комментариев об ошибке - надо вначале держать кнопку 30 секунд, чтобы ШИМ запустился, что конечно же ну очень долго.

Пришлось его скачать и открыть исходник в нем. Исправив ошибку с ожиданием в 30 секунд - решил проверить и залить прошивку. Но прошивка не захотела литься, подумав что это ошибка компилятора BascomAVR, было решено написать свой код для ATTiny13 на Си в Atmel Studio 7, конечно с сохранением оригинальной схемотехники, чтобы было можно только лишь залить прошивку и ничего не переделывать на печатке.

Написал тестовый код в Atmel Studio, скомпилировал прошивку, заливаю в attiny13 – опять ошибка:

mismatch 0x000000

C:\Program Files\eXtreme Burner – AVR\Data\chips.xml

Найти ATTiny13 и между тегами 64 Вместо 64 написать 32 – после этого ATTiny13 начал шиться без проблем.

Спустя несколько дней программа была написана.

Индикация включения - при включении очень быстро и с реверсом перельются все три светодиода.

Переключение режимов осуществляется нажатием на кнопку, действует циклически.

При возникновении дополнительных вопросов по работе с кодами для микроконтроллеров , вам может помочь статья:

Пояснения по работе устройства с новой прошивкой

Режимы работы:
0 - Все светодиоды выключены, Значение ШИМ - 0 (0%)
1 - Моргает светодиод 1, ШИМ - 32 (12%)
2 - Моргает светодиод 2, ШИМ - 64 (25%)
3 - Моргает светодиод 3, ШИМ - 96 (37.6%)
4 - Все светодиоды переливаются, ШИМ - 128 (50%)
5 - Горит светодиод 1, ШИМ - 160 (62.7%)
6 - Горит светодиод 2, ШИМ - 192 (75.2%)
7 - Горит светодиод 3, ШИМ - 224 (87.8%)
8 - Все светодиоды моргают, ШИМ - 255 (100%)

ШИМ - 0 (0%) - питание на "регулируемом устройстве" отсутствует, например, паяльник не греется.

ШИМ - 255 (100%) - полная мощность работы "регулируемого устройства".

Для включения автосохранения значения ШИМ необходимо удержать кнопку в течении 3-х секунд, для отключения - осуществить тоже самое.

При этом при включении автосохранения на 1,5 секунды загорится светодиод 1.
При отключении - на 1,5 секунды загорится светодиод 3.Удерживать кнопку можно в любом режиме, но лучше это делать в режиме 0- так будет нагляднее.

Не стоит забывать, что при включенном автосохранении каждый раз, при нажатии на кнопку записываются данные в EEPROM, ресурс записи EEPROM в Atmel AVR - 100 000.

Программирование ATTiny13 микроконтроллера

  1. Для заливки прошивки в ATTiny потребуется: USB ASP Программатор микроконтроллеров ATmega AVR.
  2. Программа eXtreme Burner AVR.

Необходимо поставить фьюз на работу от внутреннего тактового генератора на 9,6 Мгц

Т.к. я пользуюсь eXtreme Burner AVR то во вкладке Fuse\Bits записываю такие байты вместо выставления галок(в других программах-прошивальщиках галки):

Младший байт(Low Byte\Fuse) – 7A

Старший байт (High Byte\Fuse) – EB

Для того, чтобы знать какие галки ставить в других программах, чтобы микроконтроллер работал на частоте 9.6Мгц , можно использовать данный сайт:

Слева вверху, где написано Байты конфигурации вводим – 7A в окошечко LOW

и EB в окошечко HIGH – получаем указание на то, где следует поставить галки.

Собранное в корпус устройство ШИМ с вынесенной кнопкой:

(Принципиальная схема и печатная плата имеется на приведенном выше сайте.)


Плата ШИМ, упакованная в корпус от другого устройства и подключенный к ней паяльник.

Файлы прошивки в формате HEX:

Оригинальная, скомпилированная из приведенных ниже исходников:

Прошивка с более высокой частотой (Не тестировалась на реальной схеме!):

Прошивка по просьбе одного из пользователей нашего сайта, частота ШИМ - около 2,3 килоГерц:

В данной прошивке всего три режима

1 - ШИМ 80%, светится светодиод 1

2 - ШИМ 90%, светится светодиод 1,2

3 - ШИМ 100%(Постоянное питание), светится светодиод 1, 2 и 3

Исходник с подробными комментариями также прилагается, можно изменить под свои нужды:

Средний рейтинг / 5. Количество оценок:

Мы сожалеем, что эта публикация Вас не устроила.

Напишите, пожалуйста, что Вам конкретно не понравилось, как можно улучшить статью?(оценка будет засчитана только при наличии отзыва)

Привет датагорцам!
Я затеял ремонтные работы дома, и мне понадобилась система автоматического управления освещением, которое должно выключаться днём и, соответственно, включаться ночью. Я фанат AVR-контроллеров и решил я поискать на просторах Интернета готовые наработки, но, к сожалению, не нашёл ничего подходящего.

Фото-реле на микроконтроллере ATTiny13

Содержание / Contents

↑ Схема фото-реле


Схема имеет собственный бестрансформаторный блок питания, построенный на C1, C2, R1, R2, стабилитроне D1 и диодном мосте BR1.

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

На стабилитроне получается напряжение 9,1 В. Это на 2 В выше, чем минимальное допустимое входное напряжение для нормальной работы стабилизатора 78L05 и достаточное для работы реле (хоть и номинальное напряжение катушки у него 12 В, об этом позже).
Диод D3 служит для защиты стабилизатора 78L05. Ёмкости C3, C4, C5 являются его стандартной обвеской. Транзистор Q1 это ключ для реле RL1, резистор R4 ограничивает базовый ток. Ёмкости C6, C7, C8 сглаживают шумы на линиях контроллера.

С питанием пришлось повозиться. Дело в том, что максимально допустимый ток через стабилитрон D1 (если он на 1 Вт) составляет 31 мА. Значит потребляемый ток реле вместе со стабилизатором напряжения U2 и контроллером U1 не должен превышать этого значения. Следует учесть возможные колебания Сети от 235 В до 190 В. При ёмкости C1 0,47 мкФ ток через стабилитрон составляет ок. 22 мА при уровне входного напряжения 220 В, теоритически есть запас.
Проведя опыты я выяснил, что применённое реле надёжно срабатывает при напряжении 6,9 В и токе 18 мА, а отпускание происходит аж при 2 В. На практике я наблюдал, как при сетевом напряжении 190 В реле продолжало нормально работать.



↑ Наладка фото-реле

↑ Программа

Программа для контроллера была написана на языке Си. Код занимает 100% его ОЗУ и 99% флеш-памяти. Помимо функции управления реле, в МК вложен программный UART, который отправляет раз в секунду данные о статусе работы. Сделал я его чисто как дополнение, для учебных целей.

UART работает на скорости 9600 символов в секунду, имеет 8 битов и 1 стоповый бит, без контроля чётности.

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

Исходный код постарался закомментировать, где можно.

Фьюзы настроены на частоту 9,6 МГц и включение порога напряжения питания от 2.7 В.
Бит CKDIV8 снимается в 1, дабы убрать делитель на 8.
Бит BODLVL1 ставится в 0 — активный, для активации ограничения питания до 2,7 В.
Остальные биты заводские.


Корпус случайно нашёл в хоз. магазине. Это баночка от хлорных таблеток, подходит как родная!

↑ Файлы

🎁datagor-hex.7z 1.59 Kb ⇣ 46 - Прошивки LED + UART для заливки (hex)
🎁proteus.zip 20.82 Kb ⇣ 42 - Схему отлаживал в Proteus v8.4 SP0
🎁pcb.zip 22.72 Kb ⇣ 49 - Печатную плату рисовал в SprintLayout v6.0

Программу писал в CodeVision AVR 3.12 (исходники):
🎁source_code_led.zip 44.36 Kb ⇣ 44 - с функцией LED на ножке 6 МК
🎁source_code_uart.zip 61.46 Kb ⇣ 45 - с функцией UART на ножке 6 МК

↑ Заключение

Данная система работает у меня уже неделю и претерпела мелкие доработки кода, так что устройство проверено практикой!

Вселенная на проводе


Но как быть, если провод для передачи данных один единственный? Для этого придумали различные методы кодирования сигнала, наиболее известным из которых является манчестерское кодирование:

Манчестерский код довольно прост в понимании и реализации: в нем нулевые и единичные биты исходных данных кодируются направлением изменения сигнала (0-1 или 1-0) в середине каждого бита. Тем не менее есть еще более простые способы передачи данных, особенно если не столь важна скорость.

EV1527

Программная реализация

Благодаря своей примитивности метод кодирования/декодирования легко реализуется программно и занимает очень мало места. Настолько мало, что код приемника и передатчика можно уместить в ATtiny13 с 1024 байтами памяти, и еще останется место для какой-нибудь полезной работы (!) Я не буду подробно расписывать код, он довольно короткий и хорошо задокументирован. Исходники и примеры доступны здесь и распространяются под MIT лицензией. Как вы догадываетесь, вся библиотека — это один лишь заголовочный файл tinyrf.h.

Таймер (а точнее тактовый генератор) у ATtiny может быть очень кривым, поэтому при каких-либо проблемах с приемом/передачей в первую очередь необходимо попробовать подкрутить F_CPU, а в идеале — откалибровать генератор. С этим я столкнулся, когда проверял правильность отсчета времени таймером. Так по мнению ATtiny13, работающего на частоте 4.8МГц, выглядит меандр с шириной импульса 350 микросекунд:

Поначалу я грешил на вычислительные затраты, но при понижении до частоты 1.2 МГц ситуация наоборот улучшилась:

Разгадка оказалась проста — у многих версий ATtiny13 внутри стоят 2 разных тактовых генератора: на 9.6 МГц и 4.8 МГц, причем первый более-менее откалиброван с завода, а второй — как получится. Частоты 1.2 МГц и 0.6 МГц соответственно получаются с помощью деления на 8, поэтому погрешности сохраняются. Тем не менее, как показали эксперименты, разница в 50мкс оказалась несущественной, поэтому прием/передача практически всегда работают нормально без лишних калибровок и настроек.


Как видно, некоторые параметры можно конфигурировать с помощью директив, можно даже частично перенастроить сам протокол. Полный список доступных директив можно найти здесь

Примеры использования

  • Передатчик — FS1000A
  • Приемник — MX-RM-5V

Пример №1 — управляем светодиодами

Исходник. Пример по сути представляет собой реализацию радиореле на 4 канала: передатчик последовательно передает 8 различных команд (4 на включение и 4 на выключение) с интервалом по 0.5 секунды между ними, приемник принимает и зажигает/гасит светодиоды, которых у него 4.

Схема передатчика:

В качестве антенны — такой же кусок провода:


Пример работы:

Библиотека совместима с некоторыми другими микроконтроллерами из серии ATtiny, один из них — ATtiny85, который известен тем, что используется в Arduino-совместимой плате Digispark. Это сильно упрощает эксперименты, потому что его можно прошить через обычный USB порт из Arduino IDE без всяких программаторов. Я портировал пример мигания светодиодами в скетч для заливки в Digispark с той лишь разницей, что вместо управления 4-мя внешними диодами в нем переключается только 1 светодиод, встроенный в Digispark (висит на пине PB1). Важно отметить, что в скетчах не нужно указывать частоту в F_CPU, потому что Arduino IDE подставляет ее сама при компиляции.


Схема приемника и передатчика:

Пример работы:

Приемник предварительно проверяет корректность полученной команды, пытаясь сравнить на равенство:

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

Пример №2 — приемник и передатчик в одном флаконе

  • Слушает эфир и ожидает получения 2-байтовой команды (из предыдущего примера)
  • После получения команды выжидает 2 секунды и ретранслирует ее повторно с помощью передатчика
  • Ожидает следующую команду

И если раньше переключение светодиодов происходило так:

Кому-то пост может показаться внезапным и странным, но основная его цель — в очередной раз продемонстрировать, что не стоит списывать со счетов простые железки, ведь при желании из них можно выжать значительно больше. Многие избегали использования в своих проектах ATtiny13 и ему подобных из-за низкой доступности библиотек, но я надеюсь, что с появлением TinyRF, для многих станет одной проблемой меньше. В приведенных примерах показано лишь взаимодействие МК между собой, тем временем TinyRF можно приспособить и для управления некоторыми серийными устройствами вместо пульта, если они используют тот же EV1527-подобный протокол. Этот протокол легко клонируется дешевыми обучаемыми пультами:


Поэтому с помощью ATtiny при желании можно добавить радиоуправление в другие существующие устройства — на что хватит фантазии.


Отсчет времени и контроль по нему за нагрузками в нашей машине это вполне обычное дело. Такие таймеры с включением – отключением могут применяться для подогрева стекла, зеркал заднего вида, или даже освещения салона или ДХО. Быть может кто-то решит применить таймер и для своих целей, мало ли у кого какие задачи. И если эти задачи стоят перед вами, то вы находитесь на верном пути, ведь в этой статье я и расскажу о таймере на микроконтроллере Attiny13а.

Плюсы таймера отключения-включения нагрузки в машине на микроконтроллере

Таймер отключения-включения нагрузки в машине (на микроконтроллере) схема

Не смотря на то, что схема вроде как в этом таймере не все, то есть важно еще и программирование, о котором я говорил, но начнем именно с нее.


Если описать работу схемы, то стоит начать с микроконтроллера. Он является сердцем! Питание производится на ножки 4 и 8, через стабилизатор напряжения LM7805. Второй стабилизатор может быть использован для получения логической 1 на вход 4, если есть в этом необходимость. То есть необходимо начать отсчет после кратковременного сигнала от сети автомобиля. Если же в этом нет необходимости, то есть будет просто кнопка без фиксации, которую нажал и пошел отсчет, то LM – ку на 4 ногу не ставим, а ставим просто кнопку от плюса (пунктирная линия). В итоге, импульсный сигнал запускает работу программы, которая начинает отсчет по циклам. Появляется индикация на светодиоде, в моем случае на индикаторе LED. Индикатор требует инверсного сигнала, поэтому в программе вместо высокого уровня у меня низкий, если у вас просто светодиод, а не индикатор, то ставим все же высокий! Транзистор и реле необходимо для управления более высокими токами, но это уже классика.
Еще о тумблере на 6 ножке. Этот тумблер может изменять время срабатывания таймера, увеличивая время задержки в 10 раз, если есть + . Если тумблер выключен, то время выдержки таймера 1 к 1.
Собственно на этом заканчивается принципиальная схема и начинается программная часть, о которой косвенно уже рассказал.

Таймер отключения-включения нагрузки в машине (на микроконтроллере) скетч

Теперь о программе. Ее можно открыть и скопировать. После вставляем в среду Ардуино и заливаем через Ардуино (уже девайс) в качестве программатора. Из особенностей скетча стоит выделить цикличность, которую задает коэффициент h. Вы можете изменить в скетче количество циклов, тем самым изменив время задержки для таймера, а также изменить h. Все остальные пояснения приведены в программе, если что не понятно, то спрашиваем ниже в комментариях.
Все, осталось подвести итог. Таймер на микроконтроллере очень универсальный девайс, о чем я уже и говорил! При реализации этого проекта устанавливайте микроконтроллер в колодку, для возможности его снятия и перезаливки. Устройство весьма прагматичное, во всех смыслах! Осталось рассказать о том же самом, но в видео.

Читайте также: