751

Пишем программу для утюга на ассемблере

Серия Хобби

Пост носит сугубо техническо-юмористический характер, прошу всерьёз не воспринимать, а то были прецеденты


Всем привет! По причине того, что я имею официальный диагноз "Оператор ЭВМ", многие знакомые или родственники часто обращаются ко мне с просьбой что-нибудь починить. Ну, например, отвлечься от сортировки трёхмерных массивов, и сделать наконец-таки что-нибудь полезное для родины. Например, мультиварку или утюг. Но, чтобы это не было скучно, давайте попробуем написать исходный код для обыкновенного утюга. Для эстетичности и ради культурной ценности писать мы его будем на ассемблере.

Далее следует техническое описание, кому оно не интересно, а хочется сразу посмотреть результат, можете промотать до фотки с утюгом.

Ассемблер для AVR основан на RISC-архитектуре, что значительно позволяет упростить программу. Выберем микроконтроллер Attiny13, и напишем под него самую примитивную программу из возможных:

Чтобы не быть голословным, данная программа не задействует ОЗУ, а лишь устанавливает контроллер в конкретный режим работы. Далее я объясню, почему так.

Режим работы и данная программа весьма проста. Её можно выразить одним условием:
ТЕМП < K ? А : Б

Где темп - температура с датчика (напряжение на входе АЦП), к - требуемая константа температуры, а - состояние нагрева утюга, б - состояние охлаждения утюга

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

У людей, более-менее знакомых с темой сразу же возникнет два вопроса:

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

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

- В данном включении наша ATTINY13 действительно ничем не будет отличаться от обычного компаратора LM339. Отличия проявляются лишь в возможности изменения константы K (вот эта строчка):

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

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

Правда, здесь используется контроллер с большим количеством ножек, для того, чтобы ещё и вывести динамическую индикацию этой константы:

Вернёмся к утюгу. Наша программа имеет 5 "субрутин", не записывает и не читает ничего из ОЗУ, даже не инициализируется стек. По причине того, что она весьма линейна.

preset - установка режима работы контроллеров. Записываем параметры в регистры управления.
adc_start - начало преобразования АЦП (напряжение в значение регистра)
wait - ожидание снятия флага преобразования. Флаг снимается, когда преобразование завершено.
compare - сравнение констант. Данные с АЦП пишутся в регистр, константа также пишется в регистр и происходит их сравнение (в данном случае - ветвление) brsh - branch if same or higher, то есть переход, если в АЛУ установлен флаг C
enable - ветка, в которую мы попадаем, либо не попадаем. Включает ТЭН.

Саму методику преобразования я уже описывал в предыдущих постах, когда работал с посудомойкой, а именно, здесь
Реле возьмём из проекта с пылесосом на линуксе.

Также нам понадобится, собственно, утюг. Возьмём типичный советский утюг, так как на опыты его уже не жалко:

Программа готова, прошьём контроллер:

Далее испытаем работоспособность схемы на макете. Вместо терморезистора (его видно в пакетике) для испытаний стоит крутилка из предыдущих проектов:

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

Далее установим терморезистор в область ТЭНа:

Ещё одним недостатком схем на микроконтроллерах и микросхемах, в отличие от механики, является необходимость в источнике питания. Это может быть трансформатор силовой, импульсный или же конденсаторный блок питания. В нашем случае лень было заморачиваться с этим, так что пока наш утюг получил USB-интерфейс, и питается от него:

Ну вот, собственно говоря, и всё. Пост писал Kekovsky для pikabu.ru

IT-юмор

7.1K постов53.2K подписчиков

Правила сообщества

Не публикуем посты:
1) с большим количеством мата
2) с просьбами о помощи
3) не относящиеся к IT-юмору

Вы смотрите срез комментариев. Показать все
55
Автор поста оценил этот комментарий
Вы забыли добавить в утюг акселерометр, дабы при вертикальном положении он снижал температуру и при не дай бог горизонтальном и при этом неподвижном в течение какого то времени отключал его совсем.
раскрыть ветку (9)
2
DELETED
Автор поста оценил этот комментарий

Была такая мысль, но а вдруг утюгом гладят очень обильно, и надо подогреть его "на ходу" без установки на платформу. Обычно утюги работают именно так - иначе им бы просто ставили кнопку на размыкание в подставку, как в обогревателях.

раскрыть ветку (8)
1
Автор поста оценил этот комментарий

А гистерезис почему забыл?

раскрыть ветку (3)
1
DELETED
Автор поста оценил этот комментарий

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

раскрыть ветку (2)
1
Автор поста оценил этот комментарий
При остывании из за этой же инерции без гистерезиса у вас и начнется звонковая работа тэна, особенно если данные с ацп не сглаживать
раскрыть ветку (1)
2
DELETED
Автор поста оценил этот комментарий

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

0
Автор поста оценил этот комментарий
Ну тогда с таймингом 15 секунд
0
Автор поста оценил этот комментарий
Можно было акселерометр поставить, чтобы отслеживать использование утюгом. Если например не работаешь долго, то отключает нагрев. Как в паяльнике паяльник тс100)
раскрыть ветку (2)
1
DELETED
Автор поста оценил этот комментарий

У меня был утюг фирменный philips с Wi-Fi модулем. Можно было подключаться удалённо и проверять, выключил ли ты утюг на смартфоне, если забыл - то выключить, не возвращаясь домой.

раскрыть ветку (1)
3
Автор поста оценил этот комментарий
Розетку с mqtt, home assistant сам отключит утюг когда блютус телефона исчезнет из зоны видимости.
Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества