![](https://habrastorage.org/webt/nw/ak/-f/nwak-fe_hy2n5fmtxcoabbd2p08.jpeg)
Я всю свою жизнь пользовался калькуляторами HP RPN, и мне жаль, что RPN-версии больше не производят. Они были упразднены в угоду стандартным инфиксным калькуляторам. Тем не менее я всегда хотел иметь HP15c, но вот никак не подворачивался случай его купить. Так что это моя первая попытка создать его самостоятельно.
В дизайне я использовал только выводные детали, чтобы было проще паять.
Мозгом калькулятора послужил ATMEGA328. Он взял на себя все – дисплей, опрос клавиш, звук, часы и т.д.
Выбор пал именно на этот микроконтроллер, поскольку он довольно распространен в сообществе Arduino и является одним из немногих, которые до сих пор производятся в корпусах, позволяющих монтировать их в отверстия на плате. Других полупроводников я не использовал.
Несмотря на то, что ATMEGA328 – это простой 8-битный микроконтроллер с частотой 8МГц, он все равно довольно быстр. В результате эмуляция работает в 4-5 раз шустрее оригинала.
Я также добавил динамик для озвучивания нажатий клавиш и кварцевый резонатор 32.768КГц для работы часов реального времени.
Эмулятор можно запускать на любом калькуляторе серии Voyager, а также на моем любимом HP41C.
Подборка фото
![](https://habrastorage.org/webt/rb/zu/h4/rbzuh4cfcen2dgmuonhk0qvc2gq.png)
![](https://habrastorage.org/webt/-h/sl/2i/-hsl2ikonnjx4coppijipdsmd3o.png)
![](https://habrastorage.org/webt/pb/mk/sx/pbmksxyk2vcbr0wbfaigj5s6iw0.png)
![](https://habrastorage.org/webt/hs/hv/7e/hshv7eaozxw8bxarbtjpa-dfc1e.png)
Конфигурация и особенности
- использованы только выводные детали, что существенно упрощает монтаж;
- работает в 4-5 раз быстрее оригинала;
- память:
- PX15c и PX16c несут такой же объем памяти, что и оригинал.
- PX41c имеет в 2.5 раза больше памяти, чем оригинал (аналогично установке полутора модулей памяти);
- память энергонезависима (при отключении калькулятора не сбрасывается);
- автоматическое отключение;
- в основе один 8-битный ATMEGA328 с частотой 8МГц (аналогичен Arduino Uno);
- есть динамик для озвучивания нажатий кнопок;
- ЖК-дисплей 192x64 px с подсветкой;
- часы реального времени (кварцевый резонатор 32.768КГц);
- питание от одной батареи CR2032 3В 235мАч;
- потребление энергии: 1мкА в выключенном режиме, 350мкА в простое, 3мA в рабочем (при выключенном динамике и подсветке);
- декодер клавиш: на PX15 и Px16 в режиме программирования названия клавиш отображаются в верхней части дисплея;
- размер немного меньше оригинала: 4.2" x 2.67" (10.668 x 6.7818см).
Настройки
При выключенном калькуляторе зажмите кнопку
.
(на PX41c зажать 0
) и включите его, кнопку не отпускайте.![](https://habrastorage.org/webt/w5/v1/za/w5v1zanhfhuurqrq7b_niksgrx8.png)
Включится дисплей, на котором будет показана версия прошивки и мини-инструкция. Когда вы отпустите
.
(на PX41c это 0
), отобразятся настройки.Настроить можно следующее:
-
BKLT
: яркость подсветки (0-9); -
BKTM
: таймаут подсветки в секундах (0-255); -
CONT
: контраст (0-15); -
SLPT
: таймер сна (0-255); -
BEEP
: звук клавиш; -
1224
: формат отображения времени (12hr or 24hr); -
Time and Date
: часы устанавливаются в формате 24hr.
PX15c и PX16c:
Для выбора опции используйте клавиши
÷
и X
.Для изменения параметра используйте
+
и -
.PX41c:
Для выбора опций используйте клавиши
9
и 6
.Для изменения параметра используйте
3
и R/S
.Советы по сборке
- Убедитесь, что все компоненты размещены вровень с платой.
- Для лучшей фиксации деталей можно слегка подогнуть выводы.
- Начните с пайки самых коротких компонентов (резисторов, конденсаторов, программирующей головки и резонатора). Если конденсаторы окажутся чересчур высокими, то они не позволят ровно закрепить дисплей поверх микроконтроллера, тогда их нужно будет немного отогнуть в сторону.
- Затем припаяйте микроконтроллер, переключатель и крепление батареи.
- Убедитесь, что выемка или точка на микроконтроллере совпадает с маркировкой платы.
- Далее припаяйте все 39 тактовых кнопок. Будет удобнее сразу закрепить все переключатели на плате и перевернуть ее, положив на ровную поверхность.
- Надавите на заднюю часть платы, чтобы выровнять все переключатели.
- Сначала припаяйте по одному контакту каждого переключателя и убедитесь, что они расположены вровень с платой, затем припаяйте остальные контакты.
- Дальше на очереди динамик. Обратите внимание на полярность.
- Последним паяем дисплей. Припаяйте к нему 9-контактный штекерный разъем. Убедитесь, что разъем припаян короткой стороной, расположен вровень и находится с нужного края.
Прежде, чем паять дисплей, наклейте полоску двухстороннего скотча на микроконтроллер, чтобы дисплей лег поверх него надежно и ровно.
Схема
![](https://habrastorage.org/webt/5l/et/pt/5letpttdt1jv92ve0vqof0ojnha.png)
Список деталей
Деталь | Значение | Описание |
C1, C2 | 0.1мкФ | Разделительный конденсатор |
C3 | 0.1мкФ | Сопротивление динамика |
U1 | ATMEGA328P | Микроконтроллер |
J1 | 6-контактные штыревые разъемы (мама) | Программирующая головка Pi |
BAT | Крепление батареи | Крепление батареи CR2032 |
SPK | Зуммер | Динамик |
XTAL | Кварцевый резонатор 32.768КГц | Часы |
R1 | 10кОм | Подтягивающий резистор сброса |
R2 | 10Ом | Резистор ЖК-подсветки |
BTN | Тактовые кнопки 6х6мм (высота 7мм) | Основные кнопки |
RST | Тактовая кнопка 6х3.5мм | Кнопка сброса |
DISP | ЖК-дисплей 192х64 | Дисплей |
Прошивка
Текущая версия прошивки v0.85.
Скачать для PX15c
Скачать для PX16c
Скачать для PX41c
Исправлено/Добавлено:
- Исправлен сбой функции самодиагностики (PX-15c все еще выдает
ERROR 9
). - Исправлен сбой индикатора низкого заряда батареи.
- Уменьшен дребезг клавиш.
- Активация меню настроек теперь через клавиши
ON
и0
, (нажатиемON
и.
меняется основание системы счисления. - В меню настроек:
- Клавиши
3
и∑
увеличивают и уменьшают значение на 10. - Для доступа к настройкам эмулятора нажать
9
:.-
RUNC
: количество циклов, выполняемых за раз. -
KEYC
: сколько циклов клавиши ожидать до ее обработки. -
DBOU
: продолжительность эффекта антидребезга кнопок. -
DISC
: только для 41c, количество циклов до повторной отрисовки дисплея. -
SSPC
: только для 41c, количествоSlow Speed Cycles
до ускорения. -
BATL
: текущий заряд батареи, не настраивается. -
BATT
: порог низкого заряда батареи, не настраивается.
-
- Клавиши
Баги
Версия прошивки v0.85
- 15c: в режиме
Prog
декодер клавиш не декодируетSTO
иRCL
при использовании/
,*
,-
и+
. Тоже касается функцииTEST
. Среднееx
отображается какX
.
Версия прошивки v0.81
- В редких случаях при включении калькулятора не включается дисплей. Похоже, что это происходит только при низком заряде батареи. Лечится повторным включением устройства.
- При выполнении самодиагностики (нажатие клавиш
ON
иX
при запуске) выводитсяERROR 9
. Для возвращения калькулятора в рабочее состояние нужно нажать клавишу сброса.
Первый релиз: версия прошивки v0.80
- Изредка при включении калькулятора не включается дисплей. Похоже, что это происходит из-за низкого заряда батареи. Исправляется выключением и повторным включением.
- В режиме программирования декодер клавиш отображает метку прокрутки наоборот.
- Когда возникает состояние Overflow, дисплей показывает ±9.999999999×1099, но не мигает, как это делал оригинал.
Известные проблемы
- В PX15c: выполнение внутренней диагностики (нажатием клавиш ON и X при запуске) выводит ERROR 9. Для возвращения калькулятора в рабочее состояние нужно нажать сброс.
- Инструкция паузы (PSE) короче, так как выполняется быстрее, чем на оригинале.
Внимание! Нажатие сброса или загрузка новой прошивки приводит к стиранию всего содержимого.
Обновление прошивки
Для обновления прошивки вам потребуется стандартный программатор AVR SPI, например usbasp. Также можно использовать Arduino Uno в качестве ISP программатора.
Кроме того, для программирования МК вам потребуется avrdude или иное ПО.
Большинство AVR-программаторов оснащены 6-контактной (2х3) или 10-контактной (2х5) гребенкой. В нашем калькуляторе используется 6-контактная, так что вам наверняка потребуется либо купить переходник, либо сделать его самостоятельно.
![](https://habrastorage.org/webt/5j/5v/at/5j5vathwpnbhhvkussb0aexnpou.png)
![](https://habrastorage.org/webt/zq/t2/gl/zqt2gliqogw2qrvzckm1dkl8_w0.png)
Я просто отрезал шлейф и припаял 6-контактный штыревую вилку.
Внимание!!! Убедитесь, что на программаторе выставлено напряжение 3В, иначе вы убьете дисплей.
3D-печать корпуса
![](https://habrastorage.org/webt/cv/gf/or/cvgforpi7obyc2_exfqgoqjynzi.png)
Можете напечатать собственный корпус либо взять готовый вариант с Thingiverse:
- Для комплектов с дисплеем без металлической окантовки: 3D Case.
- Для комплектов с дисплеем с металлической окантовкой: Simple.
Раскладку клавиатуры в pdf можно взять отсюда:
RPN
![](https://habrastorage.org/webt/9y/rv/51/9yrv51yrt7hkdft-lj7i-txy4-s.png)
RPN (Обратная польская запись) – это математическая нотация, позволяющая пользователям решать задачи по аналогии с тем, как они привыкли делать это на бумаге. Операторы (
+
,–
,x
,÷
) помещаются после аргументов (например, 3+4
становится 3 {ENTER} 4 +
), что дает возможность создавать стек из последовательностей чисел и операций, прорабатывая его снизу вверх. RPN избавляет от необходимости использования скобок в сложных вычислениях и уменьшает количество нажатий клавиш, существенно ускоряя решение задач и делая этот процесс более эффективным.Дисплей
![](https://habrastorage.org/webt/pw/lm/v_/pwlmv_zyp39xnuztoeu_-pwddzc.png)
ЖК-дисплей содержит 12,288 (192х64) пикселя, чего достаточно для отрисовки всех растровых шрифтов вместе со строкой состояния. Ну а про подсветку я уже говорил.
Мозг
![](https://habrastorage.org/webt/n1/gw/ka/n1gwkady1z-gdoyvkrpznolsnna.png)
В основе PX-15c лежит микроконтроллер ATMEGA328P от ATMEL (ныне Microchip). Выбор пал на него, потому что он довольно популярен в сообществе ардуинщиков и по-прежнему является одним из немногих, которые производятся в корпусах для монтажа в отверстия на плате.
Динамик
![](https://habrastorage.org/webt/k4/ny/mp/k4nymposm8zlpwokh89uwetkjmc.png)
Я взял стандартный магнитный динамик, который использовал для озвучивания нажатия клавиш.
Тактовые кнопки
![](https://habrastorage.org/webt/1y/p2/3a/1yp23a5kc8qft-pulduyhv36p6u.png)
В комплекте задействовано 39 стандартных тактовых кнопки 6х6мм.
Часы
![](https://habrastorage.org/webt/di/ke/ze/dikezeeqtgptpobgo_k8nlq5kvc.png)
Время и дата всегда отображаются в строке состояния. Отсчет же ведется типовым кварцевым резонатором 32.768КГц.
Питание
![](https://habrastorage.org/webt/pt/qc/qi/ptqcqit5ag9ka7jgerstz9odzv8.png)
Питание поступает от литиевой таблетки CR2032 3В емкостью 235мАч, которой при умеренном использовании калькулятора должно хватать на несколько месяцев. Для сохранения энергии PX-15c в режиме простоя замедляется, а спустя определенный промежуток бездействия впадает в сон. Подсветка при простое также отключается.
FAQ
![](https://habrastorage.org/webt/kg/hq/9z/kghq9za934md5ceo14bxovinlgy.jpeg)
Комментарии (11)
dlinyj
19.12.2021 18:33+2Очень классная статья, как по мне, создание калькуляторов наверное ещё более увлекательное занятие, чем их коллекционирование.
Спасибо за перевод, теперь ещё одна хотелка в вишлисте.forthuser
19.12.2021 18:56+5IVEE — a Powerful Programable RPN Calculator based on FORTH
The hardware is simple: — Arduino Pro Micro — OLED display (128x64 pixel) with SSD1306- or SSD1309-controller — 16 keys (push buttons) optional: — LIPO battery — LIPO battery charger (TP4056) — ON/OFF-switch ...
P.S. У автора этого проекта есть ещё несколько реализованны RPN калькуляторов. ????
AndreyDmitriev
20.12.2021 08:18+2Я всю жизнь пользовалься "Электроника МК-61", и до сих пор пользуюсь, но теперь уже в виде приложения в смартфоне, а сам калькулятор на полке лежит. Я, кстати, пробовал перейти на другой эмулятор (программированием уже не пользуюсь, а время еггогологии прошло), но каждый раз возвращался к МК-61, поскольку там другое расположение клавиш + - * / и "ввод" и это важно. Просто дело привычки, как и обратная польская нотация.
Hp15c и сейчас можно купить подержанный. Где-то 100-300 евро цена вопроса. Новый сейчас лежит на ебее за 600.
forthuser
20.12.2021 13:11+1Для МК-61 сделано и такое уже.
Разбор кода ИК1302 от МК-61 (МК-52) (разбор команд процессора ИК1302 и алгоритмов его работы в виде блок-схемы)
AKudinov
20.12.2021 09:13+6Как по мне, SMD-компоненты значительно легче паять, чем выводные. Очень чувствуется, когда их на плате много, тем более, если это какие-нибудь резисторы или, ещё хуже, керамические конденсаторы.
barbaris76
20.12.2021 10:20+1ОПН в первую очередь хороша тем, что позволяет, используя стек, прилично так сокращать длину вычислительных выражений. Что во времена появления первых ПМК, когда микросхемы были большие, а память маленькая, имело очень важное значение.
Ну, и, да - когда немного осваиваешься с ОПН, понимаешь, что инстинктивно она гораздо удобнее и быстрее, чем обычная со скобками и "равно" ))
courser
Подскажите, плз, полное название индикатора.
dlinyj
У него на разных фотографиях разный индикатор. Так что можно просто погуглить по запросу «192x64 LCD» и выбрать тот, который больше нравится.
teuchezh
ERM19264_UC1609
courser
Спасибо!