Калькулятор с Бейсиком
2020-01-02, Ar Ar
В своё время определённое распространение имели карманные калькуляторы, в которых сразу запускался интерпретатор Бейсика. Как в домашних компьютерах, популярных примерно тогда же, но с выводом информации на встроенный дисплей небольшого разрешения. Это позволяло непрофессиональным программистам писать программы для довольно сложных расчётов, не занимая телевизор. К середине девяностых популярность этих калькуляторов упала в связи с набором популярности более универсальных КПК, где Бейсик был лишь одним из возможных приложений, наряду с другими. В современных смартфонах так же: нужен Бейсик - качаешь из магазина приложений. Теперь же, когда многие применяют в самоделках микроконтроллеры, не редкостью стали калькуляторы с Бейсиком, изготовленные своими руками. Для тех, кто застал оригиналы, это - ностальгия, для мастеров помоложе - возможность пощупать, какими они были. Перед вами - одна из множества таких конструкций в исполнении автора Instructables под ником SANUKI UDON.
Компании Casio и Sharp применяли в таких калькуляторах 4-битные микропроцессоры, Kyocera - 8-битные, Ангстрем и Интеграл - 16-битные. Мастер решил выбрать золотую середину и применил в своём варианте современный 8-битный микроконтроллер ATmega328P, поскольку для него уже существует интерпретатор ArduinoBASIC. Только здесь он адаптирован к дисплею меньшего разрешения и клавиатуре CardKB, в составе которой уже есть необходимый микроконтроллер.
Для сборки калькулятора, помимо собстверно CardKB, потребуются: батарейный отсек 2хАА или 2хААА, PMOLED-дисплей на микросхеме SSD1306, а также при желании сохранять и считывать файлы - микросхема флеш-памяти, например, 24LC256. Макетная плата типа breadboard и перемычки "дюпон" необязательны, лучше соединить всё пайкой. ArduinoBASIC изначально рассчитан на PMOLED-дисплей с интерфейсом SPI, но мастер переделал прошивку так, чтобы она работала с дисплеем с интерфейсом I2C. На КДПВ показан второй вариант калькулятора, гдп дисплей еще меньше, а элемент питания -типа CR2025 или CR2032.
Сбоку на плате CardKB расположен разъём, куда выведена шина I2C, туда же подаётся и питание. Если есть микросхема памяти, на переходной плате или нет, она подключается параллельно дисплею согласно цоколёвке из даташита. Мастер не уточняет, прилагается ли к CardKB кабель с ответной частью разъёма. Если не прилагается, а у вас нет такого кабеля, можно припаять проводники к плате с обратной стороны.
Соединив всё электрически, мастер приступает к переделке ArduinoBASIC под применённое им железо. Результат выкладывает сюда. Также необходимо погасить имеющийся на плате RGB-светодиод, который по умолчанию светит всеми тремя кристаллами на полную мощность. И не только увеличивает потребляемый ток, но и светит прямо в глаза пользователю. Поэтому необходимо также скачать стандартную библиотеку NeoPixel отсюда, а при компиляции выбрать ATmega328p (3.3V, 8Mhz). После компиляции выбрать Export compiled Binary и получить двоичный файл.


Чтобы залить файл в CardKB, нужен программатор USB-ISP и самодельный переходник. В качестве ПО для управления программатором подойдёт avrdude или avrdude-GUI (это то же самое, но с GUI). Фьюзы перезаписывать нельзя. Да, чуть сложнее, чем с Arduino, где достаточно USB-кабеля и встроенных средств Arduino IDE.

Приложение: как перед компиляцией корректировать файл SSD1306ASCII_I2C.h в зависимости от разрешения PMOLED-дисплея.
Для дисплея с разрешением 128 × 32:
#define OLED_WIDTH 128
#define OLED_HEIGHT 32
#define OLED_COLMAX 21
#define OLED_ROWMAX 4
Для дисплея с разрешением 128×64:
#define OLED_WIDTH 128
#define OLED_HEIGHT 64
#define OLED_COLMAX 21
#define OLED_ROWMAX 8
Реализованный здесь Бейсик по синтаксису наиболее похож на применённый в домашнем компьютере ZX81, поэтому при написании программ для калькулятора можно руководствоваться документацией к этому компьютеру.
Этот пост может содержать партнерские ссылки. Это означает, что я зарабатываю небольшую комиссию за ссылки, используемые без каких-либо дополнительных затрат для вас. Дополнительную информацию смотрите в моей политике конфиденциальности.
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.