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


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

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


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


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


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

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


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


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


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


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


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

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


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


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


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


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


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) ;
}

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


  1. Alexeyslav
    27.09.2018 17:06

    AT24C08 всё-таки это не оперативная память а EEPROM.
    Контроллер был заменён на pin-2-pin совместимый? Похоже по дальнейшему тексту что да. Но в статье этот факт не упомянут.


    1. Aleks3122 Автор
      27.09.2018 21:04

      Да, eeprom, ошибся, но я использовал ее впоследствии в качестве массива для хранения данных программ. Контроллер конечно совместим по выводам 100%, поэтому не пришлось никаких переделок в схеме делать.


  1. dmitryrf
    27.09.2018 19:28
    +3

    Начало интересное, но кроме начала как-то ничего больше и нет…


  1. tormozedison
    27.09.2018 21:12
    +1

    "Научите" его печатать на ленте фотографии со смартфона. С дизерингом.


  1. neco
    28.09.2018 06:29

    давно уже вынашиваю идею повесить термопринтер от кассы в туалете и печатать цитаты с баша…


    1. tormozedison
      28.09.2018 06:38

      На термобумаге бисфенол.


    1. Alexeyslav
      28.09.2018 10:02

      Временный пароль от вай-фая, для гостей. с фоткой гостя, которому он выдан.


  1. goodic
    28.09.2018 10:12

    Сколько лет в «Штрихе» отработал, а про плату интерфейсную не слы шал. Если автору интересно, есть в таком же корпусе Фискальный регистратор. У которого уже и контроллер поинтереснее и интерфейсные разъемы есть. Но нет автомномности и клавиатура сильно урезана. Могу поделиться
    Я решил пойти по пути «сделать приставку к нему и работать с ним по родному протоколу». Благо он не сложный. Но пока есть задачи интереснее. Лежит и ждет своего часа.


    1. Aleks3122 Автор
      28.09.2018 15:49

      Я только начал сюда писать, а эта переделка у меня старая — от 2010 года. После этого аппарата я писал прошивки для множества других. Главный критерий на что писать — это распространенность и функциональные возможности. Планирую в следующих статьях описать тонкости создания прошивок для меркуриев и штрихов ФР. Последние — самые интересные: печатают быстро, бумага до 80 мм, нет никаких аккумуляторов встроенных (а это скорее плюс, чем минус)