15с, 16c или 41c – вам какой? Собираем собственный эмулятор калькулятора HP

от автора


Я всю свою жизнь пользовался калькуляторами 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);
  • есть динамик для озвучивания нажатий кнопок;
  • ЖК-дисплей 192×64 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

Можно ли его программировать?

Да, при использовании любого эмулятора.

Зачем использовать RPN?

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

Почему вы использовали выводные компоненты?

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

Может ли он создавать графики?

Нет, это не графический калькулятор. Оригинальный HP-15C не имел таких возможностей. А так как эмулируем мы именно его, то и у PX — 15c их нет.

Почему именно 8-битный микроконтроллер?

Дело в том, что большинство 16, 32 или 64-битных вариантов не выпускаются в корпусах, которые бы позволяли монтировать их в отверстия платы, а ATMEGA328 очень популярен среди сообщества Arduino.

На чем писался код для него?

Весь код был написан на стандартном Си, оптимизирован на экономию пространства в ущерб быстродействию и скомпилирован на Mac с помощью GNU AVR Toolchain.

А можно такой купить?

PX-15с можно заказать на tindie.


ссылка на оригинал статьи https://habr.com/ru/company/ruvds/blog/595735/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *