Alteração de caixas registradoras. Parte 1

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

imagem
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!


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

Source: https://habr.com/ru/post/pt424627/


All Articles