- Specificații și conexiuni ale imprimantei
- Condiții prealabile
- Diagrama și explicația circuitului
- Explicarea codului
Imprimanta termică este adesea denumită imprimantă de chitanțe. Este utilizat pe scară largă în restaurante, bancomate, magazine și multe alte locuri unde sunt necesare chitanțe sau facturi. Este o soluție rentabilă și foarte la îndemână de utilizat atât din partea utilizatorului, cât și din partea dezvoltatorului. O imprimantă termică utilizează un proces special de imprimare care folosește hârtie termocromă sau hârtie termică pentru imprimare. Capul imprimantei este încălzit la o anumită temperatură care, atunci când hârtia termică trece de la capul de imprimare, stratul de hârtie devine negru în zonele în care este încălzit capul imprimantei.
În acest tutorial, vom interfața o imprimantă termică CSN A1 cu microcontrolerul PIC utilizat pe scară largă PIC16F877A. Aici, în acest proiect, o imprimantă termică este conectată la PIC16F877A și un comutator tactil este utilizat pentru a începe imprimarea. Un LED de notificare este, de asemenea, utilizat pentru a notifica starea imprimării. Va străluci numai atunci când se desfășoară activitatea de imprimare.
Specificații și conexiuni ale imprimantei
Folosim imprimanta termică CSN A1 de la Cashino, care este disponibilă cu ușurință, iar prețul nu este prea mare.
Dacă vedem specificațiile pe site-ul său oficial, vom vedea un tabel care oferă specificațiile detaliate-
În partea din spate a imprimantei, vom vedea următoarea conexiune-
Conectorul TTL oferă conexiunea Rx Tx pentru a comunica cu unitatea de microcontroler. Putem folosi și protocolul RS232 pentru a comunica cu imprimanta. Conectorul de alimentare este pentru alimentarea imprimantei, iar butonul este utilizat pentru testarea imprimantei. Când imprimanta este alimentată, dacă apăsăm butonul de auto-testare, imprimanta va imprima o foaie în care vor fi tipărite specificațiile și liniile de probă. Iată foaia de autotest-
După cum putem vedea, imprimanta folosește 9600 baud rate pentru a comunica cu unitatea de microcontroler. Imprimanta poate imprima caractere ASCII. Comunicarea este foarte ușoară, putem imprima orice prin simpla utilizare a UART, transmiterea șirului sau a caracterului.
Imprimanta are nevoie de o sursă de alimentare de 5V 2A pentru încălzirea capului imprimantei. Acesta este dezavantajul imprimantei termice, deoarece necesită un curent de încărcare uriaș în timpul procesului de imprimare.
Condiții prealabile
Pentru a realiza următorul proiect, avem nevoie de următoarele lucruri: -
- Breadboard
- Conectați firele
- PIC16F877A
- 2buc condensator de ceramică 33pF
- Rezistor 680R
- Orice culoare condusă
- Comutator tactil
- 2buc rezistențe 4.7k
- Imprimantă termică CSN A1 cu rolă de hârtie
- Unitate de alimentare nominală 5V 2A.
Diagrama și explicația circuitului
Schema pentru controlul imprimantei cu microcontroler PIC este prezentată mai jos:
Aici folosim PIC16F877A ca unitate de microcontroler. Un rezistor de 4.7k este utilizat pentru a conecta pinul MCLR la sursa de alimentare de 5V. De asemenea, am conectat un oscilator extern de 20 MHz cu condensatori de 33pF pentru semnalul de ceas. Un LED de notificare este conectat pe portul RB2 cu rezistor de limitare a curentului cu LED 680R. Comutatorul Tactile este conectat între pinul RB0 atunci când butonul este apăsat va oferi Logic ridicat în caz contrar PIN - ul va primi Logic scăzut de rezistor 4.7K.
Imprimanta CSN A1 este conectată utilizând configurația încrucișată, pinul de transmisie microcontroler este conectat cu pinul de recepție al imprimantei. Imprimanta s-a conectat și la sursa de 5V și GND.
Am construit circuitul într-o placă de testare și l-am testat.
Explicarea codului
Codul este destul de simplu de înțeles. Codul complet pentru interfața imprimantei termice cu PIC16F877A este dat la sfârșitul articolului. Ca întotdeauna, trebuie mai întâi să setăm biții de configurare în microcontrolerul PIC.
// PIC16F877A Setări de biți de configurare // Instrucțiuni de configurare a liniei sursă „C” // CONFIG #pragma config FOSC = HS // Oscillator Selection bits (HS oscilator) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled) # pragma config PWRTE = OFF // Bit de activare Timer de pornire (PWRT dezactivat) #pragma config BOREN = ON // Brown-out Reset Enable bit (BOR activat) #pragma config LVP = OFF // Low-Voltage (Single-Supply)) Bit de activare a programării seriale în circuit (pinul RB3 / PGM are funcția PGM; programare de joasă tensiune activată) #pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off) #pragma config WRT = OFF // Flash Program Memory Write Enable bits (Protecție la scriere dezactivată; toată memoria programului poate fi scrisă de către controlul EECON) #pragma config CP = OFF // Program de memorie Flash bit Protecție cod (Protecție cod dezactivată)
După aceea, am definit macrocomenzile legate de hardware-ul sistemului și am folosit fișierul antet eusart1.h pentru controlul hardware-ului eusart. UART este configurat la 9600 Baud rate în fișierul antet.
#include
În funcția principală , am verificat mai întâi „apăsarea butonului” și am folosit, de asemenea, tactici de comutare pentru a elimina erorile comutatorului. Am creat o declarație if pentru condiția „buton apăsat”. Mai întâi ledul va străluci și UART va imprima șirurile. Liniile personalizate pot fi generate în instrucțiunea if și pot fi tipărite ca șir.
void main (void) { system_init (); while (1) { if (printer_sw == 1) {// comutatorul este apăsat __delay_ms (50); // întârziere debounce dacă (printer_sw == 1) {// comutatorul este încă apăsat notification_led = 1; put_string ("Bună ziua! \ n \ r"); // Print to Thermal printer __delay_ms (50); put_string ("Tutorial pentru imprimantă termică. \ 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 („Mulțumesc”); put_string ("\ n \ r"); put_string ("\ n \ r"); put_string ("\ n \ r"); notification_led = 0; } } } }
Codul complet și videoclipul de lucru sunt prezentate mai jos.