![](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
Можно ли его программировать?
Да, при использовании любого эмулятора.
Зачем использовать RPN?
RPN считается более интуитивным и эффективным способом ввода данных в калькулятор. Однажды его попробовав, вы не захотите возвращаться к инфиксным калькуляторам.
Почему вы использовали выводные компоненты?
Идея в том, чтобы сделать сборку доступной даже для тех, кто не обладает высокими навыками пайки.
Может ли он создавать графики?
Нет, это не графический калькулятор. Оригинальный HP-15C не имел таких возможностей. А так как эмулируем мы именно его, то и у PX — 15c их нет.
Почему именно 8-битный микроконтроллер?
Дело в том, что большинство 16, 32 или 64-битных вариантов не выпускаются в корпусах, которые бы позволяли монтировать их в отверстия платы, а ATMEGA328 очень популярен среди сообщества Arduino.
На чем писался код для него?
Весь код был написан на стандартном Си, оптимизирован на экономию пространства в ущерб быстродействию и скомпилирован на Mac с помощью GNU AVR Toolchain.
Где можно найти оригинальные мануалы?
А можно такой купить?
PX-15с можно заказать на tindie.
![](https://habrastorage.org/webt/kg/hq/9z/kghq9za934md5ceo14bxovinlgy.jpeg)