เครื่องพิมพ์ความร้อนมักเรียกว่าเครื่องพิมพ์ใบเสร็จ มีการใช้กันอย่างแพร่หลายในร้านอาหารตู้เอทีเอ็มร้านค้าและสถานที่อื่น ๆ อีกมากมายที่ต้องใช้ใบเสร็จหรือบิล เป็นโซลูชันที่คุ้มค่าและมีประโยชน์มากในการใช้งานจากฝั่งของผู้ใช้และจากฝั่งผู้พัฒนา เครื่องพิมพ์ความร้อนใช้กระบวนการพิมพ์พิเศษซึ่งใช้กระดาษเทอร์โมโครมิกหรือกระดาษความร้อนในการพิมพ์ หัวเครื่องพิมพ์ได้รับความร้อนที่อุณหภูมิหนึ่งซึ่งเมื่อกระดาษความร้อนผ่านจากหัวพิมพ์การเคลือบกระดาษจะเปลี่ยนเป็นสีดำในบริเวณที่หัวเครื่องพิมพ์ได้รับความร้อน
ในการกวดวิชานี้เราจะเชื่อมต่อเครื่องพิมพ์ความร้อน CSN A1 ที่มีใช้กันอย่างแพร่หลาย PIC ไมโครคอนโทรลเลอร์ PIC16F877A ในโครงการนี้เครื่องพิมพ์ความร้อนเชื่อมต่อผ่าน PIC16F877A และใช้สวิตช์สัมผัสเพื่อเริ่มการพิมพ์ ไฟ LED แจ้งเตือนยังใช้เพื่อแจ้งสถานะการพิมพ์ จะเรืองแสงเฉพาะเมื่อกำลังดำเนินกิจกรรมการพิมพ์
ข้อกำหนดเครื่องพิมพ์และการเชื่อมต่อ
เราใช้เครื่องพิมพ์ความร้อน CSN A1จาก Cashino ซึ่งหาซื้อได้ง่ายและราคาไม่สูงเกินไป
หากเราเห็นข้อมูลจำเพาะบนเว็บไซต์อย่างเป็นทางการเราจะเห็นตารางที่ให้ข้อมูลจำเพาะโดยละเอียด -
ที่ด้านหลังของเครื่องพิมพ์เราจะเห็นการเชื่อมต่อดังต่อไปนี้ -
เชื่อมต่อ TTL ให้การเชื่อมต่อ Rx Tx ในการสื่อสารกับหน่วยไมโครคอนโทรลเลอร์ เรายังสามารถใช้โปรโตคอล RS232 เพื่อสื่อสารกับเครื่องพิมพ์ ขั้วต่อสายไฟใช้สำหรับเปิดเครื่องพิมพ์และปุ่มนี้ใช้สำหรับการทดสอบเครื่องพิมพ์ เมื่อเครื่องพิมพ์กำลังขับเคลื่อนถ้าเรากดปุ่มทดสอบตัวเองเครื่องพิมพ์จะพิมพ์แผ่นงานที่จะพิมพ์ข้อมูลจำเพาะและเส้นตัวอย่าง นี่คือแผ่นทดสอบตัวเอง -
ดังที่เราเห็นเครื่องพิมพ์ใช้อัตรารับส่งข้อมูล 9600 ในการสื่อสารกับหน่วยไมโครคอนโทรลเลอร์ เครื่องพิมพ์สามารถพิมพ์อักขระ ASCII การสื่อสารนั้นง่ายมากเราสามารถพิมพ์อะไรก็ได้เพียงแค่ใช้ UART ส่งสตริงหรืออักขระ
เครื่องพิมพ์ต้องการแหล่งจ่ายไฟ 5V 2Aเพื่อให้หัวเครื่องพิมพ์ร้อน นี่เป็นข้อเสียเปรียบของเครื่องพิมพ์ความร้อนเนื่องจากต้องใช้กระแสไฟฟ้ามากในระหว่างกระบวนการพิมพ์
ข้อกำหนดเบื้องต้น
ในการสร้างโครงการต่อไปนี้เราต้องการสิ่งต่อไปนี้: -
- เขียงหั่นขนม
- เกี่ยวสายไฟ
- PIC16F877A
- 2 ชิ้น 33pF ตัวเก็บประจุแผ่นเซรามิก
- ตัวต้านทาน 680R
- นำสีใดก็ได้
- สวิตช์สัมผัส
- ตัวต้านทาน 4.7k 2 ชิ้น
- เครื่องพิมพ์ความร้อน CSN A1 พร้อมม้วนกระดาษ
- หน่วยจ่ายไฟ 5V 2A
แผนภาพวงจรและคำอธิบาย
แผนผังสำหรับการควบคุมเครื่องพิมพ์ด้วยไมโครคอนโทรลเลอร์ PICมีดังต่อไปนี้:
ที่นี่เราใช้PIC16F877Aเป็นหน่วยไมโครคอนโทรลเลอร์ ใช้ตัวต้านทาน 4.7k เพื่อเชื่อมต่อพิน MCLR กับแหล่งจ่ายไฟ 5V เราได้เชื่อมต่อออสซิลเลเตอร์ภายนอก20 MHzกับตัวเก็บประจุ 33pF สำหรับสัญญาณนาฬิกา LED การแจ้งเตือนเชื่อมต่อผ่านพอร์ต RB2 ที่มีตัวต้านทาน จำกัด กระแสไฟ LED 680R สวิทช์สัมผัสเชื่อมต่อทั่ว RB0 ขาเมื่อกดปุ่มมันจะช่วยให้ ลอจิกสูง มิฉะนั้นขาจะได้รับ ลอจิกต่ำ โดยต้านทาน 4.7k
เครื่องพิมพ์ CSN A1 เชื่อมต่อโดยใช้การกำหนดค่าข้ามไมโครคอนโทรลเลอร์ส่งพินเชื่อมต่อกับพินรับของเครื่องพิมพ์ เครื่องพิมพ์ยังเชื่อมต่อกับแหล่งจ่าย 5V และ GND
เราสร้างวงจรในเขียงหั่นขนมและทดสอบ
คำอธิบายรหัส
รหัสค่อนข้างเข้าใจง่าย รหัสที่สมบูรณ์ สำหรับการเชื่อมต่อเครื่องพิมพ์ความร้อนกับ PIC16F877A มีให้ที่ส่วนท้ายของบทความ เช่นเคยเราต้องตั้งค่าบิตการกำหนดค่าในไมโครคอนโทรลเลอร์ PIC ก่อน
// PIC16F877A Configuration Bit Settings // คำ สั่งการกำหนดค่าบรรทัดต้นทาง 'C' // CONFIG #pragma config FOSC = HS // Oscillator Selection bits (HS oscillator) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled) # pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled) #pragma config BOREN = ON // Brown-out Reset Enable bit (BOR enable) #pragma config LVP = OFF // Low-Voltage (Single-Supply) การเขียนโปรแกรมแบบอนุกรมในวงจรเปิดใช้งานบิต (พิน RB3 / PGM มีฟังก์ชัน PGM เปิดใช้งานการเขียนโปรแกรมแรงดันไฟฟ้าต่ำ) #pragma config CPD = OFF // บิตการป้องกันรหัสหน่วยความจำ EEPROM ข้อมูล (ปิดการป้องกันรหัสข้อมูล EEPROM) #pragma config WRT = OFF // Flash Program Memory Write เปิดใช้งานบิต (ปิดการป้องกันการเขียนหน่วยความจำโปรแกรมทั้งหมดอาจถูกเขียนโดยการควบคุม EECON) #pragma config CP = OFF // บิตป้องกันรหัสหน่วยความจำโปรแกรมแฟลช (ปิดการป้องกันรหัส)
หลังจากนั้นเรากำหนดมาโครที่เกี่ยวข้องกับฮาร์ดแวร์ของระบบและใช้ไฟล์ส่วนหัว eusart1.h สำหรับการควบคุมฮาร์ดแวร์ที่เกี่ยวข้องกับ eusart UART กำหนดค่าไว้ที่ 9600 Baud rate ภายในไฟล์ส่วนหัว
# รวม
ในฟังก์ชั่น หลัก อันดับแรกเราจะตรวจสอบ 'การกดปุ่ม' และใช้กลยุทธ์การดีเบตของสวิตช์เพื่อกำจัดข้อบกพร่องของสวิตช์ เราได้สร้างคำสั่ง if สำหรับเงื่อนไข 'ปุ่มกด' ขั้นแรกไฟ LED จะเรืองแสงและ UART จะพิมพ์สตริง เส้นที่กำหนดเองสามารถสร้างขึ้นภายในคำสั่ง if และสามารถพิมพ์เป็นสตริงได้
โมฆะ main (โมฆะ) { system_init (); ในขณะที่ (1) { ถ้า (printer_sw == 1) {// สวิตช์ถูกกด __delay_ms (50); // debounce delay ถ้า (printer_sw == 1) {// สวิทช์ยังคงกด notification_led = 1; put_string ("สวัสดี! \ n \ r"); // พิมพ์ไปยังเครื่องพิมพ์ความร้อน __delay_ms (50); put_string ("บทแนะนำเครื่องพิมพ์ความร้อน \ n \ r"); __delay_ms (50); put_string ("เซอร์กิตไดเจสต์ \ n \ r"); __delay_ms (50); ใส่ _ สตริง ("\ n \ r"); ใส่ _ สตริง ("\ n \ r"); ใส่ _ สตริง ("\ n \ r"); put_string ("---------------------------- \ n \ r"); put_string ("ขอบคุณ"); ใส่ _ สตริง ("\ n \ r"); ใส่ _ สตริง ("\ n \ r"); ใส่ _ สตริง ("\ n \ r"); Notification_led = 0; } } } }
รหัสที่สมบูรณ์และวิดีโอที่ใช้งานได้รับด้านล่าง