Bom dia a todos. Alguns anos atrás, uma velha caixa registradora descomissionada caiu acidentalmente em minhas mãos. Foi chamado "Elfos Micro-F". Porque Estou interessado em eletrônica e programação, incluindo a construção de vários dispositivos em microcontroladores, o dispositivo decidiu investigar. Tendo desmontado, vi:
- uma placa com enchimento eletrônico e um microcontrolador AT89C52 em um soquete
- exibição
- impressora térmica
- bateria
- teclado de filme
- dois LEDs

Fig. 1 Aparência da mesa de caixa
Naquela época, eu já tinha a experiência de criar dispositivos simples a partir do zero (relógios, relés controlados pela porta COM etc.). Compreender o dispositivo acabado parecia muito mais difícil. Para começar, encontrei na rede uma descrição desse dispositivo, um diagrama e uma documentação de reparo. Como se viu, existem vários esquemas, eles diferem bastante fortemente, embora os dispositivos sejam chamados quase da mesma forma. Mas no final, encontrei o circuito certo. Ele olhou para ela e percebeu que, de fato, o dispositivo de pagamento não é tão complicado.
Eu tive que descobrir:
- quão fácil é programar o microcontrolador para não arrastá-lo para frente e para trás, depois para o programador e depois para o quadro
- como estabelecer uma troca com um computador
- como trabalhar com RAM (e houve um AT24C08 serial)
- como desenhar algo no visor
- como obter as teclas digitadas
- e o mais importante! como produzir algo significativo para uma impressora térmica
Neste artigo, falarei sobre o início do meu trabalho. O objetivo final é criar uma impressora térmica a partir de uma antiga caixa registradora baixada.
Parte 1
Iniciar
No começo, decidi abandonar o microcontrolador que estava no quadro. Primeiro, ele só podia ser programado em um programador, o que eu não tinha para esse tipo de controlador. Em segundo lugar, ele tinha pouca memória flash interna para programas.
Tendo sido atormentado com a escolha, decidi pelo microcontrolador Winbond w78e58b. Ele estava no mesmo pacote (plcc44), tinha 32Kb de memória de programa e mais memória estática interna para armazenar variáveis e, o mais importante, permitia que você se programa usando o programador em circuito sem removê-lo do soquete!
Mas havia uma dificuldade: para começar a programá-lo, foi necessário um programador paralelo para esse tipo de microcontrolador para carregar o bootloader, com o qual eu mais tarde carregaria meu firmware. Encontrei informações sobre como criar um programador na Internet, montar um programador e um carregador de inicialização com patches!
Depois, houve outro problema - esta unidade não tinha um conector para conectar a um PC!

Fig. 2 Placa de interface original
Embora, como li nos manuais, houvesse um lenço assim e houvesse plugues no estojo do dispositivo e um conector na placa, mas não consegui esse emparelhamento. Naquela época, não estava à venda em lugar algum e não custava dinheiro doentio. Então eu decidi fazer a interface eu mesmo. Eu quebrei um plugue do gabinete, desmontei o soquete da rede local com um conector para RJ45, cortei esse conector em um pedaço da placa e colei na bilheteria para colar adesivos de fusão a quente. Como resultado, o par trançado usual foi inserido perfeitamente do lado de fora até um clique! Resta conectar os pinos do conector ao microcontrolador. Diretamente, é claro, é impossível, é necessário através de um conversor de nível, por exemplo, MAX232. Em um pequeno pedaço da tábua de pão, ele colocou o chip, os capacitores de cintas, soldou a fiação. Soldei um cabo para conectar a um computador a partir de um pedaço de par trançado. Por um lado, um conector RJ45 comum, por outro, uma mãe DB9 para um conector de porta COM.
A próxima tarefa foi encontrar um compilador, gratuito e não particularmente difícil para esses propósitos. Me deparei com microvisão keil. Era algum tipo de versão demo com um limite de comprimento de código. O suficiente para meus propósitos. O primeiro programa foi simples: enviar para o computador no programa terminal apenas algo como Hello world!
Eu escrevi um programa, a dificuldade estava apenas na inicialização inicial de portas e registros de serviço. Mas, depois de pesquisar na rede por exemplos, rapidamente lidei com isso. Em seguida, lancei o programa
8051IspWriter, que carrega o firmware. Para que o microcontrolador alternasse para o modo bay do firmware, era necessário ativar o gerenciador de inicialização embutido. Como se viu, isso pode ser feito colocando em curto a terra a saída do controlador antes de aplicar energia. Qual deles - encontrado na folha de dados no microcontrolador. O firmware foi carregado, após o que eu desliguei, liguei o caixa e vi meu texto na tela do terminal! O sistema funcionou!
Além disso, decidi controlar um pouco a caixa registradora ou piscar o LED. De acordo com o esquema, eu determinei para qual perna do microcontrolador este LED vai, escrevi um pisca-pisca simples e o LED começou a piscar no caixa! O caminho para o objetivo final já se tornou visível!
Trechos do código fonte:
void main(void) { UCHAR i; char c; static int data value; UCHAR bCassaTypeOld; UCHAR iNumSymbolsOld; jmpLDROM=0;