"Электроника МК-52" с контроллером ESP32

Нет ответов
ptrav
Offline
Зарегистрирован: 09.04.2017

В стародавние времена, компьютеры были большие, а программы - маленькие...

В СССР / СНГ с середины 1980-х и до примерно середины 1990-х микрокалькулятор МК-52 был заветной мечтой если не каждого школьника, то уж точно каждого студента инженерных и научных специальностей. Настоящие компьютеры стоили дорого и стояли в лабораториях, к ним была очередь желающих. PC-XT потихоньку заменяли бронебойные терминалы системы ЕС, а то и перфораторы. Игровой/домашний сегмент тогдашнего "рынка" обеспечивался многочисленными клонами "ZX Spectrum", но к "Спеку" требовались как минимум телевизор и магнитофон, так что о портативности речь не шла. МК-52 позволял носить рудиментарный, но вполне работоспособный "персональный компьютер" в кармане.

У МК-52 были предшественники: первый советский программируемый микрокалькулятор Б3-21 (1977 год и ценник 350 рублей при зарплате инженера в районе 100 в месяц), славный Б3-34 (1980 год, 120 рублей) и сравнительно редкий МК-54. Кузен МК-52, общедоступный MK-61, был выполнен в корпусе от МК-54 и стоил 70 полновесных советских. Читаем статью на Хабре: https://habr.com/ru/post/505612/

У всех предшественников МК-52 была фундаментальная проблема: при выключении питания - ну или при разряде батарей - содержимое программной памяти стиралось. Для энтузиастов безошибочно вбить сотню команд по-новой не представляло труда, но для остальных... МК-52 получил энергонезависимую память - целых 512 байт! Можно было также приобрести внешние модули ППЗУ или ПЗУ с программами. При всех ограничениях, МК-52 позволял студентам считать курсовые, навигаторам прокладывать курс, а инженерам - считать прочность балок. МК-52 (с блоком ПЗУ "Астра") ходил на кораблях ВМФ и даже один раз слетал в космос на корабле "Союз ТМ-7".

Короче, ностальгия юности, как-то так.

Под Новый Год получил в подарок убитый МК-52 с выеденным коррозией отсеком батарей. На нижней стороне корпуса: год-месяц выпуска: "91-10", серийный номер: "576965" и цена: "115 руб". Я не думаю, что было выпущено полмиллиона МК-52, но номер впечатляет. Платы по виду были целыми.

Первым движением было попробовать прочистить батарейный отсек и изготовить новые контактные пластины. Вставил батарейки... и убедился, что индикатор выгорел "в ноль". То есть при нажатии кнопок явно что-то происходит, и если глядеть на дисплей в затемнённой комнате, то можно увидеть десятичную точку и призраки цифр на месте нижних двух разрядов, но это всё. Напряжение на индикаторе есть, проверка осциллографом показывает сигналы, то есть плата рабочая. Начал искать индикатор на замену. На Авито продают подержанные МК-52 за несколько сотен денег, но гарантий, ессессвенно, никто не даёт, да и калечить одну машинку, чтобы починить другую - как-то глупо.

Затею с починкой решено было отложить, но шаловливые ручки они такие шаловливые. Короче, попробуем заменить мозги МК-52 на новомодный ESP32, а выгоревший индикатор - на TFT 320х240! На эмуляторе летают "Лунолёты" и считаются программы из книжки А.Шелеста. "ЕГГОГ" поддерживается частично (ИМХО в работе кроме сообщений Error и Infinity ничего не надо). Вместо 105 шагов программы - 64 килобайта, то есть до 10000 линий кода. Базовых регистров памяти 20 вместо 15, ещё есть 4000 косвенных регистров. То есть всё примерно в 100 раз больше, чем в оригинале.

Итак, воссоздание МК-52 "в железе". При разработке хотелось, чтобы конструкция была воспроизводима без большой квалификации, а также - по желанию - и без корпуса исторического МК-52. Пайка классическая - через дырочки, без поверхностного монтажа. Из инструментов нужны: паяльник с прибамбасами, тестер, пассатижи-кусачки-отвёртка. Программирование - в IDE Ардуино.

Основная страница проекта (по-английски) - на Хакадее: https://hackaday.io/project/176772-mk-52-resurrect

Комплектующие обойдутся примерно в 1200 руб (то есть по цене "как нового старого" MK-52 на Авито).

Самый бюджетный вариант - распаять всё на макетной печатной плате 7x18 см (берём плату 12х18 с АлиЭкспресс за 140 руб, лишнее выпиливаем лобзиком).

* TFT дисплей 2.4 дюйма 240x320 SPI ILI9341 с интерфейсом SD-карты, без сенсорного экрана (1 шт): самая дорогая часть комплекта, на Али просят 400-500 руб плюс доставка. Для эстетов можно также взять экран 2.8 дюймов, но он несколько дороже, и для вставки в оригинальный корпус плату приходится подрабатывать надфилем!
* Модуль-плата ESP32 Dev 30-pin v 1 или аналог (1 шт): на Али от 250 руб за штуку;
* SD-карта: любого размера > 128 Мб;
* Держатели под батареи 2 х АА (2 шт): на Али по 50 руб за штуку;
* Перезаряжаемые батареи АА (4 шт): можно использовать и одноразовые;
* Кнопки 6х6 мм (32 шт + ещё одну на "сброс", если хочется): на Али по 80 руб за 100 шт; если надо круче, то можно купить замечательные навороченные кнопочки с прозрачными пластиковыми колпачками по 700 руб за 50 штук (и 18 кнопок останутся на другие проекты);
* CD4040BM/BC (1 шт): 12-битный счётчик, на Али по 80 руб за 10 шт;
* CD4051BM/BC (2 шт): 8-канальный аналоговый мультиплексор, на Али по 60 руб за 10 шт;
* Транзисторы полевые 2N7000 (2 шт):  на Али по 60 руб за 20 шт;
* Транзистор полевой BS250/BS208 (1 шт): на Али по 160 руб за 10 шт;
* Резисторы 430 Ом (3 шт);
* Резистор 4.7 М (1 шт);
* Резисторы 10 к (6 шт);
* Резистор примерно 5 к (1 шт) - номинал подобрать по месту для срабатывания входа ESP32;
* Диод Шоттки сигнальный (1 шт) - любой;
* Если хочется: светодиод (1 шт) - любой подходящий по цвету, току и диаметру (3 мм);
* Туда же: резистор примерно 1 к (подобрать по току/светимости) - для светодиода.

Пайка довольно незатейливая.

Сначала создаём матрицу из 32 кнопок: по 4 кнопки на столбец, 8 столбцов. Кнопки занумерованы как ниже. Заметим, что 32-я кнопка паяется отдельно - она будет служить для включения - выключения питания, а также для кнопки Cx. Проверяем всё тестером.

Далее на той же плате распаиваем микросхемы U1-U3, диод D2 и все резисторы 10к, присоединяя ножки, как показано на схеме.

В качестве опции можно также установить светодиод D1 с резистором R4. Резистор R5 (на 5к) можно впаять и сразу, но с прицелом, что придётся подбирать. Проверяем тестером сопротивление между ножкой 16 U1 и землёй, должны быть мегаомы. Временно подключаем туда 3.3V с ESP32 (ножка 1 на модуле, проверьте надписи!), землю - естественно на GND. Запитываем ESP32 через USB. Можно померить ток питания клавиатуры - должно быть не более 2-3 мА. Моментально соединяем ножку 11 U1 с 3.3V - это сброс. Меряем напряжение между ножкой 3 микросхемы U2 и землёй, должно быть ноль. Там же при нажатой кнопке 1 должно быть 3.3V. Если на ножку 10 U1 (это счётчик) подать моментально 3.3V, то схема начинает реагировать на нажатие кнопки 2 вместо 1, и так далее. Если счётчик "щёлкнуть" 32 раза, то кнопки отключаются, и загорается светодиод D1. Клавиатура проверена.

Далее на той же плате собираем схему питания - 3 транзистора и 5 сопротивлений. Одновременно на плате можно подпаять держатель батареек. Проверив сопротивление на проводах питания, временно соединяем исток Q1 с VIN (ножка 30) ESP32 (проверьте надписи на модуле!) Ещё раз замерив сопротивления, вставляем батарейки. При нажатой кнопке 32 модуль должен быть запитан, а на выходе диода D2 должна быть логическая единица (выше 2.7V). Если не так, то надо подобрать резистор R8. Далее при нажатой кнопке 32 соединяем 3.3V с ЕSP32 с точкой между резисторами R10 и R1 и отпускаем кнопку 32. ЕSP32 должен быть запитан, а на диоде D2 - логический ноль. Схема питания проверена.

Загружаем скетч с Гитхаба https://github.com/myak555/MK-52_Resurrect/tree/main/MK-52_ESP32 . Запускаем Ардуино IDE, устанавливаем библиотеки для ESP32: собственно микроконтроллер и TFT_eSPI. Библиотеки FS, SD и SPI для ESP32 должны встать автоматически при установке контроллера. В IDE, выбираем плату "ESP32 Dev Module" и порт. Грузим скетч MK-52_ESP32.ino, всё по умолчаниям. Компилируем и загружаем в ESP32.

Теперь ESP32 можно впаивать в плату согласно схеме. Соединения такие (проверьте, что написано на конкретном модуле!):

GND (ножка 2) - земля
3.3V (ножка 1) - на ножку 16 микросхемы U1
VIN (ножка 30) - питание с батарей - на транзистор Q1
GPIO35 (ножка 20) - сигнал с кнопки 32 - на диод D2
GPIO33 (ножка 22) - управление питанием - к резисторам R1, R10
GPIO25 (ножка 23) - KBD CLK - к ножке 10 микросхемы U1
GPIO27 (ножка 24) - KBD SENSOR - к ножке 3 микросхемы U2
GPIO26 (ножка 25) - KBD RST - к ножке 11 микросхемы U1
По желанию можно впаять дополнительную кнопочку "сброс" между EN (ножка 16) и землёй.

Прозвонив линии питания тестером, вставляем батарейки. При нажатии кнопки 32 ESP32 должен включаться, при нажатии кнопки 3, а потом кнопки 32 - выключаться. Если проблема, то уменьшаем резистор R5, подпаивая параллельно что-нибудь в районе 10-15к.

Последнее действие - присоединение модуля экрана и читалки карточек. Экраном и SD управляют 8 линий (три линии VSPI общие):

GPIO02 - данные TFT DC
GPIO04 - сброс TFT RST
GPIO05 - выбор SD (CS)
GPIO15 - выбор TFT (CS)
GPIO18 - VSPI CLK - TFT SCK и SD SCK
GPIO19 - VSPI MISO - TFT SDO/MISO и SD MISO
GPIO21 - TFT LED PWM (управляет подсветкой экрана)
GPIO23 - VSPI MOSI - TFT SDI/MOSI и SD MOSI

Кроме того, надо присоединить VCC модуля к VIN ESP32 (ни в коем случае не к 3.3V!) и соединить GND. Последний раз проверяем питание, загружаем на карточку любимые программы: https://github.com/myak555/MK-52_Resurrect/tree/main/MK-52_Sample_Programs

По предварительному опыту использования, извлечение из сумки калькулятора с закрытой крышкой неизменно вызывает у знающих людей завистливое "Ого!" Потом крышка открывается... а там - экран на 2.8 дюйма!