Вводная

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

Вот только с началом санкций даже такое простое лабораторное оборудование купить стало невозможно. Вот хороший пример: http://www.optimum-lab.ru/product/tajmer-laboratornyj/. Отличное лабораторное устройство, но как почти прямо пишет продавец - купить его сейчас не так и просто. Другой случай: https://www.chipdip.ru/product/at8n-24-240v-ac-dc. Не такая удобная и привлекательная разработка как предыдущий вариант, зато в наличии. Но стоит почему-то непотребно много, когда для такой задачи достаточно обычного реле и таймера. А этот вариант: https://www.chipdip.ru/product0/8002563209 совмещает нездоровую цену и нездоровые сроки поставки.

Доставать качественное оборудование все сложнее
Доставать качественное оборудование все сложнее

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

Тратить деньги на устройство, которое нужно нечасто и не сильно мне не хочется, а потому решено сделать самому, из подручных компонентов, не вкладываясь избыточно. Что нужно для реле времени? Собственно, реле и время. И интерфейс для управления временем этого реле. Устройство не должно быть дорогим, должно содержать минимум санкционных компонентов (или не содержать их вовсе) и корректно выполнять свою функцию. Соответственно, для разработки должны быть выбраны материалы и компоненты которы производятся либо имеют отечественные аналоги. У себя я обнаружил MCS-48. Причем аж в нескольких видах: оригинальный 8049 и КР1816ВЕ39. Отличный вариант для моего устройства: уже в наличии, никакой избыточности по мощностям. Конечно, КР1816ВЕ39 выпускался в Киеве, и уже снят с выпуска, но я уверен что технологии остались где-то в академии наук, а значит в любой момент выпуск востребованных процессоров можно будет возобновить уже в России.

Важная особенность - независимо от наличия внутреннего ПЗУ, это семейство при прижатии ногии EA к питанию переходит в режим использования внешнего ПЗУ. Очень удачно что и разного рода ПЗУ у меня тоже есть!

Компоненты

Мозг я нашел, это MCS-48. Осталось определиться с интерфейсом ввода и индикации. Так как я хотел чтобы устройство было эффективно не только в экономическом плане, но и в плане удобства пользователя, то интерфейс ввода я решил ограничить двумя кнопками:

  1. Изменяет выбранный параметр

  2. Вход или выход из режима настройки

У этого микроконтроллера есть три выхода, состочние которых можно проверить одной инструкцией условного перехода! Но кнопки только две, так что и используем только два из них: T0 и T1. Значит, одной кнопкой входим в режим настроек и переключаемся по очереди между всеми изменяемым параметрами, а второй непосредственно их меняем. При этом сразу после запуска активируется режим настроек, чтобы реле не сработало когда не надо. Настраивать нужно не так много - текущее время и время активации реле (время активности можно сделать жестко заданным).

Индикация тоже должна быть максимальна удобна для пользователя, а потому для нее я решил использовать двустрочный дисплей с интерфейсом совместимым с HD44780. Дисплей имеет синхронный параллельный интерфейс, это нам подходит.

Запитать все это было логично от популярного источника пяти вольт - USB. К сожалению, данный микроконтроллер не поддерживает протокол USB, иначе можно было бы значительно расширить функционал устройства.

Обратите внимание, все примененные устройства имеют почти прямые почти отечественные аналоги. Увы, не все использованные мною детали были отечественного производства, но это будет легко исправить при масштабировании. А значит эта разработка останется актуальна в условиях тотального импортозамещения, и проект получается очень компактным в плане сложностей закупки и бюджетный в области трат. За минимальные деньги и время можно получить настолько функциональное устройство!

Разработка

Шина памяти, шина данных и GPIO в случае MCS-48 - это все одна шина. А что на ней выставлено - нужно определять по состоянию выходов ALE и PSEN. Точнее, в этом микроконтроллере нет GPIO в привычном понимании, но есть кое-что получше. Это Quasi bi-directional ports. Из особенностей - там нет жесткого нуля и единицы на выходе, а при записи определенного значения оно на короткий промежуток выдает высокий ток, а затем мягко подтягивает. Ровно то, что нужно: почти невозможно сжечь и минимум сложностей в проектировании и настройке.

Итак, общая схема такая:

Общая схема устройства
Общая схема устройства

Ничего сложного нет. Так как внутренняя память мне неподвластна, но можно заставить его работать с внешней памятью если подать высокий сигнал на вход EA.
Способ обращения ко внешней памяти прост: P20-P23 содержит 4 бита адреса A8-A11, D0-D7 содержит сначала 8 бит адоеса A0-A7, а затем принимает 8 бит данных D0-D7. Используются вспомогательные пины: ALE, PSEN. Так же есть пин WR, RD для использования внешней RAM, но я таким заниматься не буду.

Алгоритм чтения данных из внешней памяти:

  1. ALE поднимается в 1

  2. На шину адреса устанавливается адрес

  3. ALE опускаеется в 0

  4. Внешнее устройство считывает адрес

  5. PSEN опускается в 0

  6. Внешнее устройство выдает данные на шину данных

  7. PSEN поднимается в 1

  8. MCU считывает данные с шины данных

Программирование и производство

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

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

  • Недоступный для пользователя стек. Точнее, данные из него самому модифицировать можно, но только обращаясь в ту же область памяти. Ничего похожего на PUSH/POP тут нету. Впрочим, тут и указатель стека состоит из трех бит.

  • Отсутствие команд для работы с тригонометрическими функциями. Увы, хороший ПИД-регулятор будет сделать не так уж и просто.

  • Почти все регистры хранятся в памяти, причем есть команда которая переключает банк регистров (базовый адрес регистровго файла в памяти). Удобно для обработки прерываний.

  • Power-on-reset тут нету, и при подаче питание микроконтроллер начинает работу из неопределенного состояния. Зато вход Reset имеет встроенный триггер шмидта, и если повесить на него конденсатор потолще - то при включении получится этот самый power-on-reset.

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

Спрут проводов на макетной плате
Спрут проводов на макетной плате

С лицевой стороны устройство получилось не менее симпатичным! Возможно, вам покажется что тут слишком много компонентов для такой плевой задачи. И вы будете правы: две микросхемы можно спокойно исключить, они нужны исключительно для отладки. Да, этот контроллер можно отлаживать, и отладчик уже встроен в него: если между испульсами ALE подавать низкий уровень на SS - устройство остановит выполнение программы, оставив на шине адрес следующей инструкции. Остается вооружиться мультиметром - и можно знать что происходит внутри!

К сожалению, прошить ПЗУ мне было нечем. Я проверил прошивку на компьютере как мог, благо что компилятор поставляется вместе с очень хорошим симулятором. Покупка прошивальщика параллельных флешек - удовольствие недешевое, а учитывая что мне он нужен всего на один раз - еще и бессмысленное. Так что я решил снова собрать устройство из подручных компонентов, которое решит поставленную задачу. Конечно, было желание и тут применить MCS-48, но возникает проблема курицы и яйца. А тратить аж целый 32-х битный микроконтроллер на такую плювую задачу никак не хотелось. А потому было разработано следующее решение:

Универсавльный программатор для памяти с паралльным интерфейсом
Универсавльный программатор для памяти с паралльным интерфейсом

Это прибор для ручного управления процессом пришивки. Так как я ценю UX превыше всего - то ограничился не только щелкалками на выходах микросхемы, а еще и удобно расположенными переключателями и индикаторами адреса/данных. Устройство само по себе рассчитано на более популярные флешки серии 010 (AT010, SST010), но через переходник к нему можно подключить любое другое устройство. Например, мою HN462732.

Так как я использую специальную ПЗУ, которая стирается ультрафиолетом, то стереть ее нужно до прошивки. Лампы для стирания у меня нет, но есть мощный ультрафиолетовый фонарик, который отлично справляется с работой:

Стирание микросхемы
Стирание микросхемы

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

Теперь можно и прошить. Собрав простенький адаптер для моей флешки (перекинуты адреса, выведено наружу +25 вольт и E на тумблер с диодом), я приступил к работе. Это заняло некоторое время.

Итак, вот что у меня получилось:

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

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

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

Комментарии (44)


  1. Arhammon
    00.00.0000 00:00
    +2

    Самое сложное в этих устройствах - сделать человеческий интерфейс и корпус с цифровой клавиатурой, чтоб не вводить 31:53 с 2х кнопок...

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


    1. Dakar
      00.00.0000 00:00
      +3

      А два энкодера не спасут отца русской демократии? Один на мин, другой на сек.


      1. iig
        00.00.0000 00:00

        В таймере для кухни нет особого смысла задавать интервалы вида 59:59. Можно и на 1 енкодере попробовать, но с обратной логарифмической зависимостью.


        1. hogstaberg
          00.00.0000 00:00

          Я неоднократно делал на энкодере с отслеживанием скорости поворота. Быстрее крутишь - бо́льшие интервалы прибавляются/убавляются. Медленнее - ме́ньшие. Весьма удобно и интуитивно получается.


          1. iig
            00.00.0000 00:00

            Да, так тоже достаточно удобно и сразу понятно. Но походу енкодер просто стОит дороже чем весь таймер вместе с мембранными кнопками ;) (на Али таких тысячи - начиная от 2$ ).


      1. Arhammon
        00.00.0000 00:00

        Надо испытывать, но по опыту лабороторных БП энкодеры самый худший из возможных вариантов, даже 2 резистора грубо-точно на порядок удобнее, а с клавиатурами на БП жуткий дефицит. А для кухонного таймера скорее характерны минуты и изредка часы и +/- 30 секунд.


        1. engine9
          00.00.0000 00:00

          А почему энкодеры в таком применении плохи?


          1. Arhammon
            00.00.0000 00:00
            +1

            Они ничего по сравнению с кнопками не меняют, принцип тот же прибавить-убавить. Можно конечно эмулировать переменный резистор/механику и рисовать шкалу, но это всё равно далеко от нажать 0-0-5-0-старт.


            1. iig
              00.00.0000 00:00
              +1

              5 движений вместо 2 ;)

              Для кухонного таймера интервалы меньше 10с бессмыссленны. И больше 3 часов, пожалуй, тоже. Если делать клавиатуру - по в виде кнопок "10с", "20с", "1м", "3м", "5м", "10м", "20м", "1ч". Тогда любой разумный интервал будет вводиться в 2-3 нажатия.


              1. Arhammon
                00.00.0000 00:00

                Навело на мысль о клавиатуре 1-2-5 как в банкнотном ряду, на первый взгляд может быть юзабельно. Но для массовых устройств слишком заумно.


                1. iig
                  00.00.0000 00:00

                  В микроволновках такое достаточно часто встречается.


                  1. Arhammon
                    00.00.0000 00:00

                    Да, еще одна бесячая вещь на кухне - это микроволновка с приборной панелью космолета) Что характерно 1-2-5 где любое число вводится 2 нажатиями все таки не используют, тут надо немного думать. А включая таймер думать не хочется, отсюда и дубовая система 0-5-0-0, хотя можно ценой еще 2-3х кнопок сделать часть действий очень быстрыми 5-М.


                  1. engine9
                    00.00.0000 00:00

                    А как вводится второе значение кнопки? Долгим нажатием?


                    1. olartamonov
                      00.00.0000 00:00

                      Второе значение — это максимум для данной кнопки. Т.е. первая ставит от 10 минут до 1 часа (в реальности до 50 минут), потом снова по кругу.

                      ЗЫ. На другой микроволновке у меня энкодер, чувствительный к скорости и диапазону (т.е. в зависимости от — один щелчок добавляет секунду, 10 с, 30 с, минуту). Чуть удобнее, чем эти кнопки.


                      1. iig
                        00.00.0000 00:00

                        Хм. У меня можно по 10 сек хоть и до часа дошагать ;) В каждой песочнице свои правила.


                      1. olartamonov
                        00.00.0000 00:00

                        Что интересно, у меня точно такая же микроволновка. Видимо, прошивку обновить надо...


                      1. iig
                        00.00.0000 00:00

                        У меня LG белого цвета ;) Просто фотку в интернетах найти быстрее ;)


    1. An_private
      00.00.0000 00:00
      +1

      Не зря же на рынке либо 3 кнопки, либо механика

      Ненавижу и то и то. В своё время нашёл такой таймер в виде яблочка, который у автора на первых иллюстрациях (только красный). Лет пять отработал, потом кнопки всё-таки сдохли (в условиях кухни даже регулярная протирка спиртом перестала помогать). Потом нашёл на Ali всё-таки нормальный таймер с нормальным цифровым набором, каковой и трудится по сей день на кухне (уже года три как).


      1. Olegun
        00.00.0000 00:00

        Если не затруднит, то пожалуйста направьте личным сообщением фотку или ссылку кнопочного варианта таймера. Я никак не могу найти приемлемый вариант.


        1. An_private
          00.00.0000 00:00

          Вот такой у меня сейчас:

          https://aliexpress.ru/item/4000473568441.html

          Вот еще нашел на алишке с набором:

          https://aliexpress.ru/item/1005001656942788.html


  1. randomsimplenumber
    00.00.0000 00:00
    +3

    Тематичненько ;) Запах журнала "Радио" поутру;)

    ЗЫ: на Али есть терморегуляторы за $1.30 - STM8, кнопки, индикатор, реле. Думаю, можно перешить под таймер;)


  1. An_private
    00.00.0000 00:00
    +11

    Так, я не понял. Если уж импортозамещение, то почему я на плате вижу 74HC14. Только хардкор, только КР555ТЛ2. То же самое касается ПЗУ. Что КР573РФ2 было не найти?

    Я надеюсь ЖКИ от МЭЛТ?

    А вот за макетку респект, респект - найти макетку именно нашего производства (с русскими координатными метками) - это круто.


  1. sergopl
    00.00.0000 00:00
    +3

    Нет, нету ламповости, использованные мозги не подходят. Где К580ВМ80 - мучится можно еще долго...


    1. iig
      00.00.0000 00:00

      Где К580ВМ80 - мучится можно еще долго...

      Очень простой процессор - нет особых мучений ;) GPIO добавить отдельным чипом, или наколхозить на регистрах. Питание дурацкое, да.


      1. nipper
        00.00.0000 00:00

        Последние вроде уже только +5В хотели.


        1. checkpoint
          00.00.0000 00:00

          Однопорядное питание появилось только в КР580ВМ1, коих было выпущено всего около 1000 шт, если верить Википедии.


          1. nipper
            00.00.0000 00:00

            Странно, я сейчас собираю клон "Специалиста" из набора, там лежит КР580ВМ80А из питания только +5 хочет


            1. checkpoint
              00.00.0000 00:00

              Где Вы его взяли и откуда такая уверенность про "только +5" ? Поделитесь ссылкой на проект.

              Я тоже собираю с детьми 8-ми битник, но выбрал 65с02 от WDC, в том числе и из-за питания.


              1. nipper
                00.00.0000 00:00

                Был не прав, посыпаю голову пеплом! Есть там и -5 и похоже +12 тоже. Ссылку на набор отправлю в личку на всякий случай, чтоб не думали, что реклама.


                1. checkpoint
                  00.00.0000 00:00
                  +1

                  В Википедии есть такое вот интересное замечание:

                  Так же, как и прототип 8080, процессор требовал трёх источников питания: −5 В, +12 В и +5 В. Также публиковалось сообщение о возможности работы КР580ВМ80А в нештатном режиме от одного источника +5 В при подаче +5 В вместо +12 В, «земли» вместо −5 В и снижении тактовой частоты ниже до 1,4—1,5 МГц[5].

                  Т.е. на пониженных частотах вполне вероятно, что напряжения 0В достаточно для нормального запирания транзисторов и процессор будет работоспособным. Если у Вас есть несколько лишних микросхем КР580ВМ80А стоило бы проверить эту теорию.


                  1. iig
                    00.00.0000 00:00

                    на пониженных частотах вполне вероятно, что напряжения 0В достаточно для нормального запирания транзисторов

                    Первоапрельская магия уже закончилась ;)

                    ЗЫ: пишут, что это связано не с частотой, а с качеством кремния. https://habr.com/ru/post/249613/#comment_8700831


  1. progchip666
    00.00.0000 00:00
    +2

    Как проект выходного дня(похоже что не одного) в рамках хобби весьма занимательно.

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


    1. randomsimplenumber
      00.00.0000 00:00
      +6

      Как попытка экономии

      Обратите внимание на дату;)


  1. engine9
    00.00.0000 00:00
    +5

    У кнопочных нокий есть очень удобная фича, на которую наткнулся случайно. Если начать вводить цифры с клавиатуры то сам телефон предложит пункт "таймер".

    Например, если набрать 15 и потом таймер, включится таймер на 15 секунд. Если ввести 2212, то таймер установится на 22 минуты и 15 секунд. Если пятизначное число ввести, то самое старшее число будет количеством часов: 32215 = 3:22:15. Очень удобно, кто будет проектировать свой таймер — берите на заметку UX, интуитивный.

    P.S.: C пластырём смешно получилось.


    1. Gutt
      00.00.0000 00:00

      P.S.: C пластырём смешно получилось.

      Главное, что всё остальное тут очень всерьёз.


  1. VadimProfii
    00.00.0000 00:00
    +2

    Сохранил с времен аналоговой фотографии два реле " Сура-2" Как говорится- ламповые и теплые....


    1. engine9
      00.00.0000 00:00
      +1

      Ах этот звук сигнала, не спутаешь ни с чем и никогда! :)


  1. DaddyReal
    00.00.0000 00:00
    +1

    Лабораторный таймер в формфакторе тамагочи- это дизайнерский шедевр.


    1. randomsimplenumber
      00.00.0000 00:00

      Техно-панк-тамагочи! ;)


  1. VT100
    00.00.0000 00:00
    +2

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


  1. vadimk91
    00.00.0000 00:00

    Думаю, этот стартап обречен на успех, планирую отправиться с ним в бизнес-инкубатор Селигера.

    После этой фразы решил поднять рейтинг статье))

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


  1. Kib0rg
    00.00.0000 00:00
    +1

    И вас с первым апреля :) За стрелку часов на видео отдельный плюсик


  1. mishkin79
    00.00.0000 00:00

    Прецизионный генератор импульсов - счётчик - логика - релейная часть. Чтобы I9 не ставить для нескучных обоев на логическую часть можно регистры логики программировать двумя кнопками 0 и 1 и одну кнопку на старт-стоп(программирование). Калькулятор в телефоне как конвертор данных в двоичный формат применять) С первым апреля!


  1. Mike-M
    00.00.0000 00:00

    Другой случай: www.chipdip.ru/product/at8n-24-240v-ac-dc. Не такая удобная и привлекательная разработка как предыдущий вариант, зато в наличии. Но стоит почему-то непотребно много

    ЧиД давно славится своей запредельной ценовой политикой )

    Если не обращать внимания на дату публикации статьи (1 апреля) и говорить серьезно, то тот же таймер AT8N сейчас легко можно приобрести в нескольких компаниях, по цене почти в два раза дешевле. Для этого достаточно всего лишь вбить в поисковую строку Яндекса указанную модель таймера.