Termal yazıcı genellikle makbuz yazıcısı olarak adlandırılır. Restoranlarda, ATM'lerde, mağazalarda ve makbuz veya fatura gerektiren diğer birçok yerde yaygın olarak kullanılmaktadır. Uygun maliyetli bir çözümdür ve hem kullanıcı hem de geliştirici açısından kullanımı çok kullanışlıdır. Bir termal yazıcı, baskı için termokromik kağıt veya termal kağıt kullanan özel bir baskı işlemi kullanır. Yazıcı kafası, termal kağıt baskı kafasından geçerken yazıcı kafasının ısındığı alanlarda kağıt kaplaması siyaha dönecek şekilde belirli bir sıcaklıkta ısıtılır.
Bu eğitimde, yaygın olarak kullanılan PIC mikro denetleyici PIC16F877A ile termal yazıcı CSN A1 arasında arayüz oluşturacağız. Burada bu projede, PIC16F877A'ya bir termal yazıcı bağlanır ve yazdırmayı başlatmak için dokunsal bir anahtar kullanılır. Yazdırma durumunu bildirmek için bir bildirim LED'i de kullanılır. Yalnızca yazdırma etkinliği devam ederken parlayacaktır.
Yazıcı Özellikleri ve Bağlantıları
Cashino'dan kolay temin edilebilen ve fiyatı çok yüksek olmayan CSN A1 Termal Yazıcı kullanıyoruz.
Teknik özellikleri resmi web sitesinde görürsek, ayrıntılı özellikleri sağlayan bir tablo göreceğiz.
Yazıcının arka tarafında aşağıdaki bağlantıyı göreceğiz-
TTL konektörü, mikro denetleyici birimiyle iletişim kurmak için Rx Tx bağlantısını sağlar. Yazıcıyla iletişim kurmak için RS232 protokolünü de kullanabiliriz. Güç konektörü yazıcıya güç sağlamak içindir ve düğme, yazıcı test amacıyla kullanılır. Yazıcıya güç verildiğinde, kendi kendini sınama düğmesine basarsak, yazıcı, özelliklerin ve örnek satırların yazdırılacağı bir sayfa yazdırır. İşte kendi kendini sınama sayfası-
Gördüğümüz gibi yazıcı, mikro denetleyici birimiyle iletişim kurmak için 9600 baud hızı kullanıyor. Yazıcı ASCII karakterlerini yazdırabilir. İletişim çok kolaydır, sadece UART kullanarak, dize veya karakter ileterek her şeyi yazdırabiliriz.
Yazıcı, yazıcı kafasını ısıtmak için 5V 2A güç kaynağına ihtiyaç duyar. Bu, baskı işlemi sırasında büyük yük akımı aldığı için termal yazıcının dezavantajıdır.
Önkoşullar
Aşağıdaki projeyi yapmak için aşağıdakilere ihtiyacımız var: -
- Breadboard
- Kabloları bağlayın
- PIC16F877A
- 2 adet 33pF seramik disk kondansatör
- 680R direnci
- Herhangi bir renk led
- Dokunsal anahtar
- 2 adet 4.7k direnç
- Termal Yazıcı CSN A1, kağıt rulolu
- 5V 2A nominal güç kaynağı ünitesi.
Devre Şeması ve Açıklama
Yazıcıyı PIC Mikroişlemci ile kontrol etme şeması aşağıda verilmiştir:
Burada mikrodenetleyici ünitesi olarak PIC16F877A kullanıyoruz. MCLR pinini 5V güç kaynağına bağlamak için 4.7k direnç kullanılır. Ayrıca saat sinyali için 33pF kapasitörlü 20 MHz'lik harici bir osilatör bağladık. 680R ledli akım sınırlama direnci ile RB2 portuna bir bildirim LED'i bağlanır. Dokunsal anahtarı düğmesi sağlayacak basıldığında RB0 pimi karşısına bağlı olduğu mantık yüksek alacak aksi pimi Mantık düşük 4.7K direnç ile.
Yazıcı CSN A1, çapraz konfigürasyon kullanılarak bağlanır, Mikrodenetleyici Aktarım pimi yazıcının Alma pini ile bağlanır. Yazıcı ayrıca 5V ve GND beslemesine de bağlanmıştır.
Devreyi bir devre tahtasında kurduk ve test ettik.
Kod Açıklama
Kodun anlaşılması oldukça basit. Termal Yazıcının PIC16F877A ile arayüzlenmesi için tam kod makalenin sonunda verilmiştir. Her zaman olduğu gibi, öncelikle PIC mikro denetleyicide yapılandırma bitlerini ayarlamamız gerekir.
// PIC16F877A Yapılandırma Bit Ayarları // 'C' kaynak satırı yapılandırma ifadeleri // CONFIG #pragma config FOSC = HS // Osilatör Seçim bitleri (HS osilatörü) #pragma config WDTE = KAPALI // Watchdog Zamanlayıcı Etkinleştirme biti (WDT devre dışı) # pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT devre dışı) #pragma config BOREN = ON // Brown-out Reset Enable bit (BOR etkin) #pragma config LVP = OFF // Düşük Voltaj (Tek Kaynak) Devre İçi Seri Programlama Etkinleştirme biti (RB3 / PGM pini PGM işlevine sahiptir; düşük voltajlı programlama etkin) #pragma yapılandırması CPD = KAPALI // Veri EEPROM Bellek Kodu Koruma biti (Veri EEPROM kod koruması kapalı) #pragma config WRT = OFF // Flash Program Belleği Yazmayı Etkinleştirme bitleri (Yazma koruması kapalı; tüm program belleği EECON kontrolü ile yazılabilir) #pragma config CP = OFF // Flash Program Bellek Kodu Koruma biti (Kod koruması kapalı)
Daha sonra sistem donanımı ile ilgili makroları tanımladık ve eusart ile ilgili donanım kontrolü için eusart1.h başlık dosyasını kullandık. UART, başlık dosyası içinde 9600 Baud hızında yapılandırılır.
#Dahil etmek
Gelen ana işlevi, öncelikle anahtar pürüzleri ortadan kaldırmak için 'düğmesine basın' da kullanılan anahtar filtreleme taktikleri kontrol etti. 'Düğmeye basıldı' durumu için bir if ifadesi oluşturduk. Önce led parlayacak ve UART dizeleri yazdıracaktır. Özel satırlar if ifadesinin içinde oluşturulabilir ve bir dize olarak yazdırılabilir.
void main (void) { system_init (); while (1) { if (printer_sw == 1) {// anahtarına basıldığında __delay_ms (50); // gecikmeyi geri al (printer_sw == 1) {// anahtara hala basılıyken notification_led = 1; put_string ("Merhaba! \ n \ r"); // Termal yazıcıya yazdır __delay_ms (50); put_string ("Termal Yazıcı Eğitimi. \ n \ r"); __delay_ms (50); put_string ("Devre Özeti. \ n \ r"); __delay_ms (50); put_string ("\ n \ r"); put_string ("\ n \ r"); put_string ("\ n \ r"); put_string ("---------------------------- \ n \ r"); put_string ("Teşekkür Ederiz"); put_string ("\ n \ r"); put_string ("\ n \ r"); put_string ("\ n \ r"); bildirim_led = 0; } } } }
Tam Kod ve Çalışma Videosu aşağıda verilmiştir.