Самодельный калькулятор.

Был у меня калькулятор МК51. Вот такой вот: ru.wikipedia.org/wiki/Электроника_МК-51
Калькулятор активно использовался некоторое время, а потом начались проблемы с индикацией — начала отходить токопроводящая резинка индикатора. Калькулятор был убран подальше, а на замену ему был куплен citizen spr-350. Он уже на форуме промелькнул: forum.easyelectronics.ru/viewtopic.php?p=83778#p83778 (что-то ссылка не вставляется).

Однажды разобрал я старый МФУ, и обнаружил там очень тонкий LCD индикатор (COG) с 6 выводами на шлейфе, который сразу захотелось куда-то применить. Подписей на индикаторе не было, так что пришлось заняться реверс-инжинирингом, благо что МФУ продолжал выдавать сообщение об ошибке на LCD, даже если от него отключить всю периферию. (Вообще хорошо программа в МФУ работала — отключаешь печатающую часть, продолжает сканировать, отключаешь всю периферию — продолжает флешки читать, картридером, установленным на основной плате. Обычно похожие устройства, обнаружив первую же ошибку, намертво блокируются). Реверс-инжиниринг проводился с помощью осциллографа DISCO, с помощью встроенного логического анализатора. Выяснилось, что индикатор работает на протоколе, похожем на SPI — имеются 3 сигнальных линии — данных, тактовая, RS. Поскольку объем данных был достаточно большим, то я просто записал данные за несколько секунд анализатором, а потом написал программу, которая расшифровывала их (просто определялись байты, передаваемые на LCD). Результат выводился в текстовый файл, заодно выводились символы ASCII, соответствующие каждому принятому байту. Несколько пробных запусков программы давали на выходе хаотический набор символов, после чего я решил, что передача может идти начиная с младшего бита. (В spi первым обычно идет старший). Переписываю программу — заработало, в файле результата читается сообщение МФУ об ошибке. Позже я определил, как производится инициализация индикатора. После проведенного анализа индикатор был отложен, за неимением устройства, в которое его было бы можно поставить.

Как-то раз, разгребая всякие железки в шкафу, я переложил старый калькулятор в коробку с индикатором и остатками МФУ. Тут-то я и решил, что используя этот индикатор, можно дать сломанному калькулятору новую жизнь. (Места в калькуляторе хватало для индикатора и контроллера). Для проверки возможности использовать индикатор подключил его отладочной плате на at90usb162:

Суровый переключатель переключает индикатор от мфу к моей плате. Это позволяет инициализировать индикатор при помощи мфу, а потом управлять им с контроллера.
Программа была написана, индикатор заработал. Мне, правда, до сих пор не удалось понять, что за контроллер LCD там используется. Алгоритм работы похож на алгоритм st7036, часть команд совпадает, но как я уже сказал, данные передаются начиная с LSB, линия RS инвертирована. Если кто знает, что это за контроллер такой может быть, то напишите, пожалуйста.

Индикатор заработал, так что можно было начинать делать калькулятор. Делать решено было на STM8, поскольку хотелось использовать контроллер с 64 кб памяти (я не знал, сколько займут вычисления с плавающей запятой и вычисление выражений), а atmega644 достать проблематично, и стоит она в разы дороже. При этом, отладку и программирование можно вести всего по 3 проводам. Купил отладочную плату STM8L-discovery, поэкспериментировать с STM8, и для использования ее в качестве отладчика. В качестве управляющего контроллера взял STM8S207S8. Изготовил печатную плату. Получилось не очень хорошо, дорожки 0.4 мм для резиновой клавиатуры при переносе тонера кое-где отошли, пришлось маркером рисовать, много работать иголкой. Кроме того, это моя первая двухслойная плата.
Получилась такая плата.

После изготовления платы, и установки на нее контроллера и разъема индикатора опять обнаружились проблемы. Я ухитрился подключить индикатор к выводам контроллера с открытым стоком и при этом еще и неправильно развел разъем. Именно по этому сверху платы такая куча проводов. В этот раз контроллер еще как-то особенно плохо припаялся, постоянно возникали проблемы с контактом. В общем, сплошные грабли. Под конец все заработало как нужно, была написана программа(как ни странно, не такая уж она и сложная получилась, правда, часть алгоритмов по вычислению выражения я до этого продумал).
Результатом стала такая конструкция:


Назвать я решил калькулятор — МК200.
Работает калькулятор на частоте 125Кгц, но во время вычисления частота увеличивается до 16Мгц. В калькуляторе реализован ввод полного выражения, которое вычисляется при нажатии кнопки '='. Калькулятор способен выполнять основные арифметические действия, тригонометрические действия, возведение чисел в степень, в квадрат, извлечение квадратного корня, вычислять натуральный логарифм и экспоненту.
Есть 4 регистра памяти, в которых можно хранить различные константы, и затем использовать их при вводе выражения.
Числа в калькуляторе хранятся в 32-битном виде, так что операции возможны с числами не более, чем 1*10^38.(интересно, собираются ли в IAR делать поддержку 64-разрядных чисел для stm8?)
Так как индикатор питается от 5 вольт, то в схему входит простейший конденсаторный умножитель напряжения.
Поскольку схема потребляет ток 2мА, то через 3 мин после последнего нажатия кнопки калькулятор выключается.
Для тех кто не знает — у всех батареек есть определенный номинальный ток разряда. Для мелких батареек он не превышает 1ма. Если потребление тока будет выше, то батарейка разрядится намного быстрее, чем это вышло бы по расчетам.

Сначала я описал конструкцию здесь www.leningrad.su/calc/cforum.php?topicid=981, но, думаю, здесь она тоже будет интересна.

Исходники — prj_1.zip
  • +7
  • 25 марта 2011, 22:12
  • citizen

Комментарии (34)

RSS свернуть / развернуть
Впечатляет!
0
Вспомнился кабинет математики в школе, у нас на стене висело подобное чудо но размером примерно 1 метр на 50 см(может больше не помню) функционально МК-51

З.Ы. Молодец, неплохо вышло
0
в него б еще подсветку вывести(включение подсветки сделать какой-то комбинацией клавиш)…
0
Забавненько. Но неповторимо, в первую очередь из-за ЖКИ. Из какой он хоть МФУ-шки?
А чем не устроила STM8L серия? Она же вроде специально для батарейных устройств с малым потреблением.
0
  • avatar
  • Vga
  • 26 марта 2011, 00:17
Вот, точно забыл написать, поставил stm8s, а у них минимальное напряжение 2.95в. На самом деле до 2.7 работает. Причина в том, что выбирал по каталогу терраэлектроники, и stm8l с 64кб там просто нет. Даже и не знаю, есть ли такие в природе.
Подсветку туда ввести нельзя — индикатор не позволяет. Да и не слышал я про калькуляторы с подсветкой — энергии жрет много.
Индикатор от МФУ Brother DCP-110. Можно попробовать похожий индикатор найти.
Тоже забыл написать — поскольку индикатор питается от 3 вольт, то в схему входит простейший конденсаторный умножитель напряжения.
0
индикатор питается от 3 вольт
Описался, от 5 вольт.
0
Ну если он трансфлективный — подсветку можно попробовать прикрутить. Правда, для этого надо искать или EL-лампу или светорассеивающую подложку для СИД.
0
Еще раз говорю — проблема в питании, самому калькулятору не хватает, думаю вот серебряно-цинковые батарейки использовать.
0
иногда удобство важнее экономии
0
С подсветкой калькулятор больше 10 минут не проработает
0
да прям. светодиод от 2032 полчаса как минимум работает.
надо другие батарейки использовать.
0
И все полчаса напряжение не опускается ниже 2.7В? Изначально предполагалось использовать 2032, еще на стадии экспериментов я заметил, что если контроллер работает на 16Мгц, то потребляемый ток — 10ма, и под таким током минут через 10 калькулятор отключался.
Теперь я решил использовать серебряно-цинковые, они вроде постоянно 1.5 держат.
0
мб и опускается. так проблема решается умным dc-dc преобразователем.
0
Не поможет там преобразователь. Я уже написал — у cr2032 номинальный ток потребления — 0.5 ма. Если с нее брать больший ток, то она садиться очень быстро.
0
аккум засунь. по размерам не сильно больше
0
Пробовал мелкий от mp3 плеера — не влезает. Надо всю плату переделывать.
0
У тебя ж оно не заняло 64кб, как я понял. Можно откатиться на STM8L.
0
Ну заново делать всю конструкцию я уже не буду. Тем более что может, к IAR приделают поддержку 64-битных чисел. Или сам захочу что-нибудь в программу добавить.
0
супер!… так и до ПК не далеко :)
0
Ну и кстати, где доки на конструкцию? Схема, сорцы. Фотки это конечно хорошо, но все-таки специфика сообщества такова, что хочется вкурить в схему/прошивку)
0
  • avatar
  • Vga
  • 26 марта 2011, 02:08
Добавил в статью ссылку на исходники. Однако с комментариями только та часть, которая вычислет математическое выражение, содержащееся в строке.
Схемы у меня нет. Как обычно, сразу разводил плату, поскольку конструкция достаточно простая — контроллер, клавиатура, индикатор, умножитель напряжения.
0
Ну срисуй, там рисовать-то, и индикатор задокументируй. А то сорцы к пинам же привязаны (в таких областях, как, скажем, работа с индикатором).
0
А что, кто-то хочет повторить? В таком же корпусе, как и у меня? Сама по себе схема ничего интересного не представляет. А вырисовывать ее та еще проблема — искать в сети stm8 дя eagle, вырисовывамь матричную клавиатуру, индикатор. И в исходниках, ничего интересного, кроме математического модуля, нет.
0
Ну, во первых — чтобы хотя бы понимать, какая кнопка на чем висит. Во вторых, как я уже сказал — интересует распиновка индикатора.
0
Ну, как подключен индикатор, видно из файлов lcd.h и lcd.c

#define LCD_DDR         PE_DDR
#define LCD_PORT_CR1    PE_CR1
#define LCD_PORT_CR2    PE_CR2

#define LCD_DDR2        PD_DDR
#define LCD_PORT_CR12   PD_CR1
#define LCD_PORT_CR22   PD_CR2

#define LCD_ODR         PE_ODR
#define LCD_ODR2        PD_ODR

#define LCD_CLK_PIN   6 //portd
#define LCD_DATA_PIN  0 //porte
#define LCD_CS_PIN    5 //portd

Кнопки — у меня на специальном листке была нарисована разводка клавиатуры.
А зачем вы так подробно разбираете код, он все равно очень не оптимальный и не интересный?
0
корпус не нравится :)
0
Почему? Наоборот — раритетный корпус :) Помню этот calc, нравится…
0
грязный :)
0
Ему уже 20 лет, поцарапался.
0
Да вы знатный извращенец!
0
Существуют ли калькуляторы, умеющие делать всякие преобразования с матрицами размером от 2х2 до 6х6?
0
Матлаб! :)
0
Вероятно, какие-нибудь суровые от TI или HP. Типа такого www.leningrad.su/calc/hp49gplus.php
0
Рульный калькулятор. Бывшая однокурсница себе похожий из Америки привезла. Калькулятор, который строит графики. Вся группа завидовала.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.