การควบคุม LED ด้วย Microcontroller PIC โดยใช้โปรแกรม PIC CCS Compiler
การควบคุม LED ด้วย Microcontroller PIC โดยใช้โปรแกรม PIC CCS Compiler
หลอดแสดงผล LED (Light Emitting Diode ) หรือไดโอดเปล่งแสง เป็นอุปกรณ์อิเล็กทรอนิกส์ที่ใช้ในการแสดงผล นิยมใช้กันอย่างแพร่หลายเนื่องจากใช้งานง่าย และราคาถูก โดยส่วนใหญ่จะใช้แสดงสถานะการทำงานของอุปกรณ์และสถานะของไมโครคอนโทรลเลอร์ ในบทความนี้ จะพูดถึงการโปรแกรมควบคุมการทำงานของหลอด LED การประยุกต์ใช้งานไมโครคอนโทรลเลอร์ตระกูล PIC ควบคุมการทำงานหลอดแสดงผล LED ซึ่งเป็นการเขียนโปรแกรมควบคุมขั้นพื้นฐาน สำหรับผู้เริ่มต้นเขียนโปรแกรมเพื่อก่อให้เกิดในการทำงานของพอร์ตเอาต์พุตของ PIC
1.การทำงานของหลอดแสดงผล LED
หลอด LED แตกต่างจากหลอดใส้คือ หลอดไส้จะใช้การเผาใหม้ของขดลวด ทำให้เกิดความร้อนที่หลอดและทำให้เกิดแสงสว่างขึ้น แต่หลอดแสดงผล LED เป็นการทำปฏิกิริยาของสารกึ่งตัวนำชนิดเดียวกับทรานซิสเตอร์ จึงทำให้ไ่ม่เกิดความร้อนและปลอดภัยจากการใช้งาน
รูปร่างของ LED
การเปล่งแสงสว่างของ LED
สัญลักษณ์และตำแหน่งขาของ LED
การต่อวงจรการใช้งานของ LED
จากรูป วงจรด้านบนนี้ จะมีตัวต้านทาน (R) ต่ออยู่กับ LED เพื่อทำหน้าที่จำกัดกระแสให้เหมาะสมกับหลอดแสดงผล LED ไม่ให้หลอด LED สว่างมากเกินไปอาจจะทำให้พังเสียหายได้ โดยปกติแล้วหลอดแสดงผล LED จะใช้กระแสประมาณ 10 - 30 มิลลิแอมป์
2. การเชื่อมต่อไมโครคอนโทรลเลอร์ PIC กับหลอดแสดงผล LED
ในการเชื่อมต่อ PIC กับหลอดแสดงผล LED หลายๆ ตัวนั้น สามารถต่อได้โดยตรง เพราะพอร์ตเอาต์พุตของ PIC สามารถจ่ายกระแสเอาต์พุต ได้สูงถึง 25 มิลลิแอมป์ จึงสามารถขับหลอดแสดงผล LED ให้สว่างได้ โดยไม่ต้องต่อวงจรขยายกระแส แต่ในการต่อใช้งานจริงควรต่อไอซีบัฟเฟอร์ (IC Buffer) เพราะว่า ถ้าเกิดการลัดวงจร หรือช๊อตวงจรของหลอด LED จะเป็นการป้องกันไม่ให้ Microcontroller ได้รับความเสียหาย สำหรับไอซีบัฟเฟอร์ที่นิยมใช้กัน เช่น เบอร์ 74LS244, 74LS245, ULN2003, ULN2803 เป็นต้น
วงจรขยายกระแสโดยใช้ไอซีบัฟเฟอร์ (IC Buffer)
3. ไอซีบัฟเฟอร์เบอร์ 74LS245
เลือกใช้ไอซีบัฟเฟอร์เบอร์ 74LS245 เป็นตัวขยายกระแส เนื่องจากง่ายต่อการออกแบบลายวงจรพิมพ์เพราะสามารถกำหนดให้ด้านหนึ่งของไอซีเป็นอินพุต อีกด้านเป็นเอาต์พุตได้ (เช่น กำหนดให้ A1 เป็นอินพุต B1 ก็จะเป็นเอาต์พุต) ซึ่งขาทั้งสองอยู่ตรงข้ามกันทำให้เวลาออกแบบลายวงจรพิมพ์ทำได้ง่ายไม่ซับซ้อน ดังรูปข้างล่าง
รูปร่างลักษณะของ IC 74LS245
โครงสร้างของ IC 74LS245
ตารางกำหนดอินพุตของ IC 74LS245
การเชื่อมต่อไมโครคอนโทรลเลอร์ PIC กับหลอดแสดงผล LED
จากรูปการเชื่อมต่อวงจรด้านบนนี้ เป็นการเชื่อมต่อ Microcontroller PIC เบอร์ 16F877 ซึ่งเป็นไมโครคอนโทรลเลอร์ขนาด 40 ขา โดยต่อออกพอร์ต B ตั้งแต่ RB0-RB7 ผ่านไอซีบัฟเฟอร์เบอร์ 74LS245 เพื่อขยายกระแสไปขับโหลดแสดงผล LED ทั้ง 8 หลอด โดยต่อสัญญาณไฟ 5V เข้าที่ขา 11 และกราวน์เข้าที่ขา 12 ของไมโครคอนโทรลเลอร์
4. การส่งข้อมูลออกที่พอร์ตของ Microcontroller PIC
PIC ในแต่ละเบอร์จะมีพอร์ตการใช้งานไม่เท่ากันซึ๋งมีตั้งแต่ 2 พอร์ตจนถึง 5 พอร์ตแล้วแต่เบอร์ที่เลือกใช้ สำหรับ PIC16F877 จะมีอยู่ 5 พอร์ตคือ พอร์ต A, B, C, D และ E สามารถใช้งานเป็นพอร์ตอินพุตและพอร์ตเอาต์พุตได้ทั้ง 5 พอร์ต และสามารถกระทำคำสั่งในระดับบิตและไบต์ได้ ในการเขียนโปรแกรมส่งข้อมูลออกจากพอร์ตสามารถเขียนได้หลายรูปแบบดังนี้
4.1 การส่งข้อมูลออกพอร์ตแบบบิต
รูปแบบ output_ค่าข้อมูล (pin_พอร์ต);
ค่าข้อมูล คือ high หมายถึง ลอจิก "1" หรือ ไฟ 5V
Low หมายถึง ลอจิก "0" หรือ ไฟ 0V
ตัวอย่าง output_high(pin_B0);
หมายถึง ส่งลอจิก "1" หรือ 5 V ออกพอร์ต B ขา 0
output_low(pin_B0);
หมายถึง ส่งลอจิก "0" หรือ 0 V ออกพอร์ต B ขา 0
ตัวอย่างโปรแกรมที่ 4.1 ควบคุมหลอดแสดงผล LED 1 หลอด ที่ต่ออยู่กับพอร์ต B0 ติดดับสลับกัน
วิธีการคิด
ลำดับที่ 1 หลอดแสดงผล LED ติด ต้องส่งข้อมูลลอจิก "1" ออกพอร์ต B0 คือ
output_high(pin_B0);
ลำดับที่ 2 หลอดแสดงผล LED ติด ต้องส่งข้อมูลลอจิก "0" ออกพอร์ต B0 คือ
output_low(pin_B0);
เขียนโค๊ตใช้งานจริง
#include <16F877.h>
#fuses HS, NOPUT, NOWDT, NOPROTECH
#use delay (Clock = 4000000)
void main()
{
while(1)
{
output_high(pin_B0);
delay_ms(500);
output_low(pin_B0);
delay_ms(500);
}
}
อธิบายโปรแกรม
บรรทัดที่ 1 เป็นการเรียกไฟล์ 16F877.h มาร่วมในการคอมไพล์ ทำให้การเขียนโปรแกรม
สามารถใช้รีจิสเตอร์ของ PIC ได้
บรรทัดที่ 2 การกำหนดคุณสมบัติของอุปกรณ์
HS หมายถึง โหมดสัญญาณนาฬิกา แบบ High Speed Crystal/Resonator
คือทำงานที่ความถี่ 4 - 20 MHz
NOPUT หมายถึง ไม่ใช้งานวงจรเพาเวอร์อัพไทเมอร์
NOWDT หมายถึง ไม่ใช้งานวงจรวอตช์ดอกไทเมอร์
NOPROTECH หมายถึง ไม่ป้องกันการกอปปี้โปรแกรม
บรรทัดที่ 3 การเรียกฟังก์ชัน delay และกำหนดค่าสัญญาณนาฬิกาให้มีค่าความถี่เท่ากับ 4 MHz
บรรทัดที่ 5 การวนรอบส่งข้อมูลออกพอร์ต B0 และ while(1) หมายถึงวนรอบตลอดการ
บรรทัดที่ 6 ส่งข้อมูล หรือ ลอจิก "1" ออกที่พอร์ต B0
บรรทัดที่ 7 หน่วงเวลา 500ms หรือ 0.5 วินาที
บรรทัดที่ 8 ส่งข้อมูล หรือลอจิก "0" ออกที่พอร์ต B0
บรรทัดที่ 9 หน่วงเวลา 500ms หรือ 0.5 วินาที
ผลการรันโปรแกรม
การทำงานของโปรแกรมเริ่มจากส่งข้อมูล "1" ออกพอร์ต B0 ทำให้หลอดแสดงผลที่ต่อเข้ากับขา 0 ของพอร์ต B ติด จากนั้นหน่วงเวลาโดยใช้ฟังก์ชัน delay_ms หน่วงเวลาไว้ 500 ms หรือ 0.5 วินาทีแล้วให้หลอดแสดงผลดับด้วยการส่งข้อมูล "0" ออกพอร์ต B0 จากนั้นหน่วงเวลา 0.5 วินาที แล้ววนรอบกลับไปทำงานใหม่


ความคิดเห็น
แสดงความคิดเห็น