
Я всю свою жизнь пользовался калькуляторами HP RPN, и мне жаль, что RPN-версии больше не производят. Они были упразднены в угоду стандартным инфиксным калькуляторам. Тем не менее я всегда хотел иметь HP15c, но вот никак не подворачивался случай его купить. Так что это моя первая попытка создать его самостоятельно.
В дизайне я использовал только выводные детали, чтобы было проще паять.
Мозгом калькулятора послужил ATMEGA328. Он взял на себя все – дисплей, опрос клавиш, звук, часы и т.д.
Выбор пал именно на этот микроконтроллер, поскольку он довольно распространен в сообществе Arduino и является одним из немногих, которые до сих пор производятся в корпусах, позволяющих монтировать их в отверстия на плате. Других полупроводников я не использовал.
Несмотря на то, что ATMEGA328 – это простой 8-битный микроконтроллер с частотой 8МГц, он все равно довольно быстр. В результате эмуляция работает в 4-5 раз шустрее оригинала.
Я также добавил динамик для озвучивания нажатий клавиш и кварцевый резонатор 32.768КГц для работы часов реального времени.
Эмулятор можно запускать на любом калькуляторе серии Voyager, а также на моем любимом HP41C.
Подборка фото




Конфигурация и особенности
- использованы только выводные детали, что существенно упрощает монтаж;
- работает в 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
) и включите его, кнопку не отпускайте.
Включится дисплей, на котором будет показана версия прошивки и мини-инструкция. Когда вы отпустите
.
(на 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-контактный штекерный разъем. Убедитесь, что разъем припаян короткой стороной, расположен вровень и находится с нужного края.
Прежде, чем паять дисплей, наклейте полоску двухстороннего скотча на микроконтроллер, чтобы дисплей лег поверх него надежно и ровно.
Схема

Список деталей
Деталь | Значение | Описание |
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-контактная, так что вам наверняка потребуется либо купить переходник, либо сделать его самостоятельно.


Я просто отрезал шлейф и припаял 6-контактный штыревую вилку.
Внимание!!! Убедитесь, что на программаторе выставлено напряжение 3В, иначе вы убьете дисплей.
3D-печать корпуса

Можете напечатать собственный корпус либо взять готовый вариант с Thingiverse:
- Для комплектов с дисплеем без металлической окантовки: 3D Case.
- Для комплектов с дисплеем с металлической окантовкой: Simple.
Раскладку клавиатуры в pdf можно взять отсюда:
RPN

RPN (Обратная польская запись) – это математическая нотация, позволяющая пользователям решать задачи по аналогии с тем, как они привыкли делать это на бумаге. Операторы (
+
,–
,x
,÷
) помещаются после аргументов (например, 3+4
становится 3 {ENTER} 4 +
), что дает возможность создавать стек из последовательностей чисел и операций, прорабатывая его снизу вверх. RPN избавляет от необходимости использования скобок в сложных вычислениях и уменьшает количество нажатий клавиш, существенно ускоряя решение задач и делая этот процесс более эффективным.Дисплей

ЖК-дисплей содержит 12,288 (192х64) пикселя, чего достаточно для отрисовки всех растровых шрифтов вместе со строкой состояния. Ну а про подсветку я уже говорил.
Мозг

В основе PX-15c лежит микроконтроллер ATMEGA328P от ATMEL (ныне Microchip). Выбор пал на него, потому что он довольно популярен в сообществе ардуинщиков и по-прежнему является одним из немногих, которые производятся в корпусах для монтажа в отверстия на плате.
Динамик

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

В комплекте задействовано 39 стандартных тактовых кнопки 6х6мм.
Часы

Время и дата всегда отображаются в строке состояния. Отсчет же ведется типовым кварцевым резонатором 32.768КГц.
Питание

Питание поступает от литиевой таблетки CR2032 3В емкостью 235мАч, которой при умеренном использовании калькулятора должно хватать на несколько месяцев. Для сохранения энергии PX-15c в режиме простоя замедляется, а спустя определенный промежуток бездействия впадает в сон. Подсветка при простое также отключается.
FAQ

Комментарии (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
Спасибо!