** บทความและโครงงานนี้เป็นความคิดเห็นของผู้เขียนเอง ซึ่งผู้อ่านไม่จำเป็นต้องเห็นด้วยเสมอไปครับ
หาก มีข้อเสนอแนะ หรือพบข้อความใดๆ ผิก กรุณาแจ้งมายังผู้เขียนด้วยครับ จะได้ทำการแก้ไขข้อมุลให้
ถูกต้อง ครับ
กลับหน้าหลัก บทความ
 

PIC ภาษา C ตอน รับค่าจากสวิตช์ (1)

การเขียน PIC ด้วยภาษา C ตอนที่ผ่านๆมาจะเป็นการกำหนดค่าส่งออก โดยใช้ outport ซึ่งผมหวังว่าคงได้ นำไปใช้ทดลองเขียนและปรับแต่งความความต้องการของแต่ละท่านแล้ว บทความตอนนี้ลองมาดูการรับค่า ของ port ต่างๆกัยบ้างนะครับ ซึ่งในที่นี้จะเป็นการรับค่าจากสวิตช์ เป็นหลัก
ซึ่งการรับค่านี้ไม่ว่าจะเป็นสวิตช์ทั่วไป สวิตช์แบบเมตริกซ์ หรือ สวิตช์แบบหมุน ก็ใช้หลักการเดียวกันครับ


จากรูป จะเห็นว่า เมื่อสวิตช์อยู่ในสภาวะปกติ (คือยังไม่ได้กด หรือหน้าสัมผัสของสวิตช์ยังเปิดอยู่) ถ้ามองทางด้านวงจรแล้วจะมีกระแสจากแหล่งจ่านผ่าน R เข้าที่ไมโครคอนโทลเลอร์ ซึ่งสภาวะนะไมโครคอนโทลเลอร์จะมองว่า จะสีสัญญาณเข้า คือสภาวะเป็น 1

แต่เมื่อเรากดสวิตช์(หน้าสัมผัสของสวิตช์ติดกัน) กระแสจะไหลจากแหล่งจ่ายผ่าน R ผ่านสวิตช์ ไหลลงดิน(-) ตัวไมโครคอนโทรเลอร์จะมองเป็นไม่มีสัญญาณเข้า คือ สภาวะเป็น 0 ครับ
** สัญญาณจะเข้า หรือ จะออกจากไมโครคอนโทลเลอร์จะเป็น 2 สภาวะ คือ Hi , Low หรือ 1 กับ 0 เท่านั้น

มาดูวงจรแบบง่ายๆกันก่อนครับ
#include<16F877.h>
#FUSES NOWDT,NOPROTECT,NOLVP,XT
#USE delay(clock=20000000)
#BYTE PA=5 // กำหนดสถานะ port
#BYTE PB=6 // กำหนดสถานะ port
#BIT S1=PA.0 //กำหนดค่า S1คือ port PA0
void main()
{
set_tris_b(1); // กำหนดค่าเป็น input
set_tris_b(0); // กำหนดค่าเป็น output
while(1)
{
if(S1==0) // ถ้าสวิตช์ถูกกด
output_b(0X01);
if(S1==1) // ถ้าสวิตช์ไม่ถูกกด
output_b(0X00);
}


การทำงานของ program คือ ผมจะให้ port A ที่ PA0 เป็นตำแหน่งรับค่าจากสวิตช์ และ portB ที่ PB0 เป็นตำแหน่ง ขับ หลอด LED
โดยหลักการทำงานคือ เมื่อ สวิตช์ S1 ถูกกดเมื่อไร หลอดไฟ LED 1 ก็จะติดครับ ซึ่งจะใช้ ฟังก์ชันเงื่อนไข if เป็นหลัก

code ดังกล่าวอาจจจะยังไม่สมบูรณ์มากนักแต่เพื่อเป็นการให้เห็นการเขียนแบบง่ายๆก่อน แล้วตอนต่อๆไป คงจะมี ลูกเล่น หรือ เทคนิคต่างๆมากกว่านี้ครับ

แล้วถ้าใช้สวิตช์มากกว่า 1 ตัวจะทำอย่างไร ลองเขียนดูนะครับ แล้วจะนำมา เขียนให้ในบทความตอนต่อไปครับ


เขียนเมื่อ 2 มี.ค. 2554