Хабрахабр

[Из песочницы] Переделка кассовых аппаратов. Часть 1

Несколько лет назад мне в руки случайно попал старый списанный кассовый аппарат. Всем добрый день. Т.к. Назывался он "Элвес микро-Ф". Разобрав его я увидел: я увлекаюсь электроникой и программированием, в том числе и построением различных устройств на микроконтроллерах, аппарат решил исследовать.

  • плату с электронной начинкой и микроконтроллером AT89С52 в панельке
  • дисплей
  • термопринтер
  • аккумулятор
  • пленочная клавиатура
  • два светодиода

1 Внешний вид кассы image
Рис.

Разбираться в готовом устройстве казалось намного сложнее. На тот момент у меня уже был опыт создания простеньких устройств с нуля (часы, реле с управлением от СОМ порта и т.п.). Как оказалось, схем есть несколько, различаются они довольно сильно, хотя называются при этом аппараты практически одинаково. Для начала я нашел в сети описание этого аппарата, схему, ремонтную документацию. Поглядел на нее и понял что по сути устройство кассы не такое уж и сложное. Но в итоге, нужную схему я нашел.

Мне надо было разобраться в:

  • как полегче программировать микроконтроллер чтобы не тягать его туда сюда, то в программатор, то назад в плату
  • как наладить обмен с компьютером
  • как работать с оперативной памятью (а там стояла последовательная AT24C08)
  • как рисовать что-то на дисплее
  • как получать нажатия клавиш
  • и самое главное! как выводить что-то осмысленное на термопринтер

Конечная цель — создать из старой списанной кассы термопринтер. В данной статье, я расскажу о начале моих работ.

Часть 1
Начало

Во-первых, его можно было программировать только на программаторе, которого для этого типа контроллеров у меня еще и не было. Вначале я решил отказаться от того микроконтроллера, который стоял в плате. Он был в таком же корпусе (plcc44), имел 32Кб памяти программ и больше внутренней статической памяти для хранения переменных, а главное, позволял программировать себя при помощи внутрисхемного программатора, не вынимая его из панельки! Во-вторых, у него было мало внутренней флеш памяти для программ.
Помучавшись с выбором, я остановился на микроконтроллере Winbond w78e58b.

Информацию о том, как сделать такой программатор я нашел в интернете, собрал программатор, зашил bootloader! Но и тут была сложность: чтобы начать его программировать, потребовался параллельный программатор для этого типа микроконтроллера, чтобы зашить bootloader, с помощью которого уже потом я бы заливал свои прошивки.

Далее была еще одна проблема — у данного аппарата не было разъема для подключения к ПК!

2 Оригинальная плата интерфейса

Хотя как я вычитал в мануалах, платка такая была, причем и заглушки в корпусе аппарата для нее были и разъем на плате, но достать эту платку сопряжения не получалось. image
Рис. Тогда я решил изготовить интерфейс самостоятельно. На тот момент ее было в продаже нигде, да и денег она стоила нехилых. В результате снаружи стала отлично до щелчка вставляться обычная витая пара! Выломал из корпуса одну заглушку, разобрал розетку от локальной сети с разъемом для RJ45, вырезал этот самый разъем в кусочком платы и вклеил в корпус кассы на термоклей. Напрямую конечно нельзя, надо через преобразователь уровней, например MAX232. Осталось подключить контакты разъема к микроконтроллеру. Спаял кабель для подключения к компу из куска витой пары. На маленьком кусочке макетной плате разместил саму микросхему, конденсаторы обвязки, припаял проводки. С одной стороны обычный RJ45 коннектор, с другой DB9 мама для разъема СОМ порта.

Мне попался keil microvision. Следующая задача была — это найти компилятор, бесплатный и не особо сложный для таких целей. Для моих целей хватало. Это была какая-то демо версия с ограничением на длину кода. Первая программа была простая: вывести на комп в терминальную программу просто что-то типа Hello world!

Но поискав в сети примеры, я с этим быстро справился. Программу я написал, сложность была только в начальной инициализации портов и служебных регистров. Для того чтобы микроконтроллер перешел в режим залива прошивки, надо было активизировать встроенный bootloader. Далее, я запустил программу
8051IspWriter, которая заливает прошивки. Какой именно — нашел в даташите на микроконтроллер. Как оказалось, это можно сделать, замкнув на землю вывод контроллера перед подачей питания. Система работала! Прошивка залилась, после чего я выключил, включил кассу и на экране терминала увидел свой текст!

По схеме определил к какой ноге микроконтроллера идет этот светодиод, я написал простейшую мигалку и на кассе стал мигать светодиод! Далее, я решил немного поуправлять самой кассой, а точнее помигать светодиодом. До конечной цели уже стал виден путь!

Выдержки из исходного кода:

void main(void) { UCHAR i; char c; static int data value; UCHAR bCassaTypeOld; UCHAR iNumSymbolsOld; jmpLDROM=0; // пишу в порты начальные значения чтобы не спалить термоголовку и шаговик P0 |= 0x01; // PPWR = 1 P1 |= 0x20; // PM1 = 1 P1 |= 0x40; // PM2 = 1 P3 &= ~0x40; // SI = 0 P3 &= ~0x20; // CLOCK = 0 P3 |= 0x80; // LATCH = 1 P3 |= 0x10; // STBA = 1 P3 |= 0x08; // STBB = 1 // эта процедура из библиотеки для работы с СОМ портом initUart(BAUD_RATE_19200); puts("Hello world!"); while(1) ;
}

Теги
Показать больше

Похожие статьи

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

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

Кнопка «Наверх»
Закрыть