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-юмору

Вы смотрите срез комментариев. Показать все
4
DELETED
Автор поста оценил этот комментарий

А как же pid-регулирование с самообучением?

раскрыть ветку (14)
4
Автор поста оценил этот комментарий
Хрен с ним пид, гистерезис где? Он включаться сколько раз в минуту будет? И на сколько хватит тогда реле?
раскрыть ветку (2)
1
Автор поста оценил этот комментарий
Хрен с ним пид, гистерезис где?
а он самообразовался бы из просадки по питанию, если бы не USB
раскрыть ветку (1)
1
DELETED
Автор поста оценил этот комментарий

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

Иллюстрация к комментарию
0
DELETED
Автор поста оценил этот комментарий

Может нейросеть в утюг интегрировать? Была такая идея

раскрыть ветку (10)
0
DELETED
Автор поста оценил этот комментарий
Вот вроде бред, а на железной дороге можно и не такое замутить, а после деньжат срубить. Главное - доказать, что это нужно:)
раскрыть ветку (9)
0
DELETED
Автор поста оценил этот комментарий

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

раскрыть ветку (8)
0
DELETED
Автор поста оценил этот комментарий
XD
Иллюстрация к комментарию
0
DELETED
Автор поста оценил этот комментарий
Была идея собрать систему мониторинга для самогонного аппарата. Нейросеть в данном случае будет сама контролировать процесс брожения.
раскрыть ветку (5)
0
Автор поста оценил этот комментарий
А потом еще и бухать с нейросетью
0
Автор поста оценил этот комментарий
Нейросеть в данном случае будет сама контролировать процесс брожения.
с брожением вроде все не сложно, там всякие манипуляции при перегонке обычно
0
DELETED
Автор поста оценил этот комментарий

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

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

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

Нейросеть может определять, кто гладит утюгом: мужчина или женщина (по инерционному датчику) и менять температуру соответственно. А если утюг надолго остается подошвой вниз без движения, то орать « Вася, блять, дыру прожжёшь, я Машке звоню!»

0
DELETED
Автор поста оценил этот комментарий
Тогда рассмотрите вариант создания преобразователя Гильберта. У меня в ВКР в ПО Matlab нейронка создавала копию реального сигнала (синусоида), сдвинутую по фазе. Применяется в QPSK
0
DELETED
Автор поста оценил этот комментарий
Сейчас покумекаю, где можно нейронку впихнуть
Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку

Темы

Политика

Теги

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

Сообщества

18+

Теги

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

Сообщества

Игры

Теги

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

Сообщества

Юмор

Теги

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

Сообщества

Отношения

Теги

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

Сообщества

Здоровье

Теги

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

Сообщества

Путешествия

Теги

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

Сообщества

Спорт

Теги

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

Сообщества

Хобби

Теги

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

Сообщества

Сервис

Теги

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

Сообщества

Природа

Теги

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

Сообщества

Бизнес

Теги

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

Сообщества

Транспорт

Теги

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

Сообщества

Общение

Теги

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

Сообщества

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

Теги

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

Сообщества

Наука

Теги

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

Сообщества

IT

Теги

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

Сообщества

Животные

Теги

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

Сообщества

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

Теги

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

Сообщества

Экономика

Теги

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

Сообщества

Кулинария

Теги

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

Сообщества

История

Теги

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

Сообщества