Thermische printer wordt vaak bonprinter genoemd. Het wordt veel gebruikt in restaurants, geldautomaten, winkels en veel andere plaatsen waar bonnen of rekeningen vereist zijn. Het is een kostenbesparende oplossing en erg handig in gebruik zowel van de kant van de gebruiker als van de ontwikkelaar. Een thermische printer maakt gebruik van een speciaal printproces waarbij thermochroom papier of thermisch papier wordt gebruikt om te printen. De printerkop wordt verwarmd tot een bepaalde temperatuur dat wanneer het thermisch papier van de printkop passeert, de papiercoating zwart wordt in de gebieden waar de printerkop wordt verwarmd.
In deze tutorial zullen we een thermische printer CSN A1 verbinden met de veelgebruikte PIC-microcontroller PIC16F877A. Hier in dit project is een thermische printer aangesloten over de PIC16F877A en wordt een tactiele schakelaar gebruikt om het afdrukken te starten. Een meldings-LED wordt ook gebruikt om de afdrukstatus te melden. Het licht alleen op als het afdrukken bezig is.
Printerspecificaties en aansluitingen
We gebruiken CSN A1 thermische printer van Cashino, die gemakkelijk verkrijgbaar is en de prijs niet te hoog is.
Als we de specificatie op de officiële website zien, zullen we een tabel zien met de gedetailleerde specificaties-
Aan de achterkant van de printer zien we de volgende verbinding:
De TTL-connector biedt de Rx Tx-verbinding om te communiceren met de microcontrollereenheid. We kunnen ook het RS232-protocol gebruiken om met de printer te communiceren. De stroomconnector is bedoeld om de printer van stroom te voorzien en de knop wordt gebruikt om de printer te testen. Wanneer de printer van stroom wordt voorzien, zal de printer, als we op de zelftestknop drukken, een blad afdrukken waarop specificaties en voorbeeldregels worden afgedrukt. Hier is het zelftestblad-
Zoals we kunnen zien, gebruikt de printer een baudrate van 9600 om te communiceren met de microcontroller. De printer kan ASCII-tekens afdrukken. De communicatie is heel eenvoudig, we kunnen alles afdrukken door simpelweg UART te gebruiken, een tekenreeks of teken te verzenden.
De printer heeft een voeding van 5V 2A nodig om de printkop te verwarmen. Dit is het nadeel van de thermische printer, omdat deze tijdens het afdrukproces een enorme belastingstroom nodig heeft.
Vereisten
Om het volgende project te maken, hebben we de volgende dingen nodig: -
- Breadboard
- Sluit de draden aan
- PIC16F877A
- 2 stuks 33pF keramische schijfcondensator
- 680R-weerstand
- Elke kleur geleid
- Tactiele schakelaar
- 2 stuks 4.7k weerstanden
- Thermische printer CSN A1 met papierrol
- 5V 2A nominale voedingseenheid.
Schakelschema en uitleg
Het schema voor het besturen van de printer met PIC Microcontroller wordt hieronder gegeven:
Hier gebruiken we PIC16F877A als microcontrollereenheid. Een 4.7k-weerstand wordt gebruikt om de MCLR-pin aan te sluiten op de 5V-voeding. We hebben ook een externe oscillator van 20 MHz met 33pF condensatoren voor het kloksignaal aangesloten. Een meldings-LED is aangesloten op de RB2-poort met een 680R led-stroombegrenzende weerstand. De tactiele schakelaar is verbonden over de RB0-pin wanneer de knop wordt ingedrukt, deze levert Logic High, anders ontvangt de pin Logic Low door de 4.7k-weerstand.
De printer CSN A1 is verbonden met behulp van de kruisconfiguratie, de Microcontroller Transmit-pin is verbonden met de ontvangst-pin van de printer. De printer is ook aangesloten op de 5V- en GND-voeding.
We hebben het circuit in een breadboard gebouwd en getest.
Code Uitleg
De code is vrij eenvoudig te begrijpen. De volledige code voor het koppelen van thermische printers met PIC16F877A wordt gegeven aan het einde van het artikel. Zoals altijd moeten we eerst de configuratiebits in de PIC-microcontroller instellen.
// PIC16F877A Configuratiebitinstellingen // 'C' source line config statements // CONFIG #pragma config FOSC = HS // Oscillator Selectie bits (HS oscillator) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT uitgeschakeld) # pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT uitgeschakeld) #pragma config BOREN = ON // Brown-out Reset Bit inschakelen (BOR ingeschakeld) #pragma config LVP = OFF // Laagspanning (enkele voeding) In-Circuit Serial Programming Enable bit (RB3 / PGM-pin heeft PGM-functie; laagspanningsprogrammering ingeschakeld) #pragma config CPD = OFF // Data EEPROM Geheugencodebeschermingsbit (Data EEPROM-codebescherming uitgeschakeld) #pragma config WRT = OFF // Flash Program Memory Write Enable bits (schrijfbeveiliging uitgeschakeld; alle programmageheugen kan worden geschreven door EECON-besturing) #pragma config CP = OFF // Flash Program Memory Code Protection bit (codebescherming uitgeschakeld)
Daarna hebben we systeemhardwaregerelateerde macro's gedefinieerd en het eusart1.h-headerbestand gebruikt voor eusart-gerelateerde hardwarebesturing. De UART is geconfigureerd op 9600 baudrate in het header-bestand.
# omvatten
In de hoofdfunctie hebben we eerst de 'button press' gecontroleerd en ook switch debounce tactieken gebruikt om de switch glitches te elimineren. We hebben een if- statement gemaakt voor de conditie 'knop ingedrukt'. Eerst gaat de led gloeien en de UART zal de snaren printen. Aangepaste regels kunnen binnen het if-statement worden gegenereerd en kunnen als een string worden afgedrukt.
void main (void) { system_init (); while (1) { if (printer_sw == 1) {// schakelaar is ingedrukt __delay_ms (50); // debounce delay if (printer_sw == 1) {// schakelaar is nog steeds ingedrukt notification_led = 1; put_string ("Hallo! \ n \ r"); // Afdrukken naar thermische printer __delay_ms (50); put_string ("Handleiding thermische printer. \ n \ r"); __delay_ms (50); put_string ("Circuit Digest. \ n \ r"); __delay_ms (50); put_string ("\ n \ r"); put_string ("\ n \ r"); put_string ("\ n \ r"); put_string ("---------------------------- \ n \ r"); put_string ("Bedankt"); put_string ("\ n \ r"); put_string ("\ n \ r"); put_string ("\ n \ r"); notification_led = 0; } } } }
Volledige code en werkende video wordt hieronder gegeven.