Änderung der Registrierkassen. Teil 1

Guten Tag allerseits. Vor einigen Jahren kam ich versehentlich in die Hände einer abgeschriebenen Registrierkasse. Es wurde "Elves micro-F" genannt. Weil Ich liebe Elektronik und Programmierung, einschließlich der Konstruktion verschiedener Geräte auf Mikrocontrollern, die das Gerät erforschen wollte. Nach der Untersuchung sah ich:


  • Platine mit elektronischer Füllung und AT89C52-Mikrocontroller in der Buchse
  • die Anzeige
  • Thermodrucker
  • Batterie
  • Folientastatur
  • zwei LEDs

Bild
Abb.1 Aussehen Kassierer


Zu dieser Zeit hatte ich bereits die Erfahrung, unprätentiöse Geräte von Grund auf zu erstellen (eine Uhr, ein Relais, das von einem COM-Port gesteuert wird usw.). Das fertige Gerät zu verstehen schien viel schwieriger zu sein. Zunächst fand ich im Netzwerk eine Beschreibung dieses Geräts, eine schematische Reparaturdokumentation. Wie sich herausstellte, gibt es mehrere Schemata, die sich ziemlich stark unterscheiden, obwohl die Geräte fast gleich heißen. Am Ende fand ich das gewünschte Schema. Er sah sie an und erkannte, dass das Registrierkassengerät nicht so kompliziert ist.


Ich musste herausfinden:


  • Wie einfach ist es, den Mikrocontroller so zu programmieren, dass er nicht zurück zum Programmierer und wieder zurück zum Board geht
  • Computer austauschen
  • wie man mit RAM arbeitet (und es gab eine serielle AT24C08)
  • Wie zeichnet man etwas auf dem Display
  • wie man Tastatureingaben erhält
  • und vor allem! So zeigen Sie etwas auf einem Thermodrucker an

In diesem Artikel werde ich über den Beginn meiner Arbeit sprechen. Das ultimative Ziel besteht darin, aus einer alten, zurückgezogenen Registrierkasse einen Thermodrucker zu erstellen.


Teil 1
Erste Schritte


Zuerst entschied ich mich, den Mikrocontroller im Board zu verlassen. Erstens war es möglich, es nur auf dem Programmierer zu programmieren, den ich für diese Art von Controller noch nicht hatte. Zweitens hatte er wenig internen Flash-Speicher für Programme.
Nach einer Wahl litt ich am Winbond w78e58b Mikrocontroller. Er befand sich im selben Paket (plcc44), hatte 32 K Programmspeicher und mehr internen statischen Speicher zum Speichern von Variablen, und vor allem erlaubte er sich, mit einem In-Circuit-Programmierer programmiert zu werden, ohne ihn aus dem Panel zu entfernen!


Aber auch hier gab es Schwierigkeiten: Um mit der Programmierung zu beginnen, wurde für diesen Mikrocontroller ein Parallelprogrammierer benötigt, um den Bootloader zu vernähen, mit dem ich später meine Firmware überfluten würde. Informationen darüber, wie man einen solchen Programmierer herstellt, habe ich im Internet gefunden, den Programmierer zusammengestellt, den Bootloader zusammengenäht!


Dann gab es ein anderes Problem - dieses Gerät hatte keinen Anschluss für den Anschluss an einen PC!


Bild
Abb.2 Ursprüngliche Schnittstellenkarte

Wie ich in den Handbüchern gelesen habe, gab es zwar ein solches Taschentuch, und es waren Stecker in der Hülle für das Gerät und ein Anschluss auf der Platine, aber das Pairing funktionierte nicht. Zu dieser Zeit war es nirgendwo zu kaufen, und es war den Armen in bar wert. Dann entschied ich mich, das Interface selbst zu machen. Ich löste einen Stecker aus dem Gehäuse, zerlegte die Steckdose mit dem RJ45-Stecker aus dem lokalen Netzwerk, schnitt diesen Stecker in ein Stück Platine und fügte ihn mit Heißkleber in die Kasse. Dadurch wurde das normale Twisted Pair perfekt außerhalb des Klickens eingefügt! Es ist noch notwendig, die Steckerstifte mit dem Mikrocontroller zu verbinden. Natürlich ist es nicht direkt möglich, es ist durch einen Pegelwandler, beispielsweise MAX232, erforderlich. Auf ein kleines Stückchen Steckbrett wurde die Mikroschaltung selbst gelegt, die Kondensatoren umreift und die Verdrahtung gelötet. Lötete das Kabel, um es aus einem verdrillten Paar mit dem Computer zu verbinden.


Die nächste Aufgabe bestand darin, einen Compiler zu finden, der für solche Zwecke kostenlos und nicht sehr schwierig ist. Ich habe keil microvision bekommen. Es war eine Art Demo-Version mit einer Begrenzung der Codelänge. Für meine Zwecke genug. Das erste Programm war einfach: Legen Sie einfach so etwas wie Hello World auf einem Computer in ein Terminalprogramm!


Ich habe das Programm geschrieben, die Komplexität lag nur bei der Initialisierung von Ports und Service-Registern. Aber auf der Suche nach Beispielen im Internet bin ich schnell damit fertig geworden. Als Nächstes habe ich das Programm
8051IspWriter gestartet , das die Firmware überschwemmt. Damit der Mikrocontroller in den Firmware-Download-Modus wechseln kann, muss der integrierte Bootloader aktiviert werden. Wie sich herausgestellt hat, kann dies geschehen, indem der Reglerausgang vor dem Einschalten mit dem Boden verbunden wird. Was genau - finden Sie im Datenblatt auf dem Mikrocontroller. Die Firmware wurde überschwemmt, danach schaltete ich den Kassierer aus und sah meinen Text auf dem Terminalbildschirm! Das System hat funktioniert!


Außerdem habe ich mich entschieden, die Registrierkasse ein wenig zu kontrollieren, oder lieber die LED zu blinken. Nach dem Schema habe ich festgestellt, welches Bein des Mikrocontrollers diese LED leuchtet, ich schrieb den einfachsten Blinker und die LED begann an der Kasse zu blinken! Der Weg zum Endziel ist bereits sichtbar geworden!


Auszüge aus dem Quellcode:


voidmain(void) 
{
    UCHAR               i;
    char                        c;
        staticint 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) ;
}

Jetzt auch beliebt: