You are on page 1of 7

ไมโครคอนโทรลเลอร์ PIC ผลิตจาก Microchip ซึ่งในบ้านเราเองนิ ยมนำามาใช้

งานงานกันอย่างกว้างขวาง ซึ่งในบทความตอนนี้ จะขอกล่าวถึง ส่วน


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

เว็บไซต์ของ Microchip ครับ **


คุณสมบัติต่างๆของไมโครคอนโทรลเลอร์ท่ีเราควรทราบ เช่น ความถี่สูงสุด
ในการทำางาน , หน่วยความจำาประเภทต่างๆมีค่าเท่าไร , แรงดันในการ
ทำางาน , จำานวน Port I/O , ตอบสนองการอินเตอร์รพ
ั ได้กี่แห่ง ,มีTime กี่ตัว ,
มีPWM กี่ชุดมีA/D ภายในตัวมาให้หรือไม่ เป็ นต้น
ตารางดังกล่าวแสดงคุณสมบัติของไมโครคอนโทรเลอร์บางเบอร์ ซึ่งจะเห็น
ว่าแต่ละเบอร์จะมีคุณสมบัติท่ีเหมือนกันบางคุณสมบัติและบางเบอร์มี
คุณสมบัติแตกต่างกันไป

ตัวอย่างตำาแหน่งขา ของเบอร์ ไมโครคอนโทรเลอร์ PIC บางเบอร์ท่ีนิยมใช้


กัน
จะเห็นว่า ตำาแหน่งขาต่างๆของ IC จะมีตัวอักษรย่อกำากับไว้ และมีลูกศร
แสดงการทำางาน และบางตำาแหน่งขาจะมีอักษรย่อมากกว่า 1 กำากับอยู่ เรา
มาทำาความเข้าใจพื้ นฐานของการอ่านตำาแหน่งขา จะเห็นว่า 16F87X X ,มีขา
มากสุด และมีการใช้งาน ของคุณสมบัติต่างมากสุด แต่ของ 16F84 จะมี
คุณสมบัติในการทำางานน้อยมาก
ลูกศรชี้ทางเดียวแสดงว่าขานั้ นทำางานด้านเดียว แต่ถ้าลุกศรชี้ 2 ทิศทาง
แสดงว่าขานั้ นทำางาน 2 ทิศทางคือเป็ น input หรือ output ก็ได้
ขา VDD จะเป็ นตำาแหน่งไปเลี้ยง (+5V) และขา VSS จะต้องต่อลงกราวด์
(GND)
RA0..RA7 แสดงตำาแหน่งการใช้ขานั้ นเป็ น input หรือ output ที่port A นั้ นๆ

ส่วน RB...RC ก็แสดงตำาแหน่งของ port B และ C ด้วยเช่นเดียวกัน


ขา CLKIN และ CLKOUT ต่อกับคริสตอล ตามความถี่ที่กำาหนดไว้
ขา RB3/CCP1 ขานี้ จะทำางานได้ท้ ังเป็ น RB3 และ CCP1 ขึ้นอยู่กับการเขียน
โปรแกรมควบคุม

การใช้โมดูล CCP1 และ TIMER2 กำาเนิ ดสัญญาณ


(Pulse Generate)
โมดูล CCP(Capture/Compare/PWM) สามารถใช้กำาเนิ ดสำญญาณและมอดูเลชั่
นทางความกว้างของพัลส์ความละเอียดขนาด 10 บิท PWM (PulseWidth
Modulator) ซึ่งจะทำางานร่วมกันกับ TIMER2

CCP1 เป็ นโมดูลที่ เมื่อกำาหนดค่าเริม


่ ต้นในการทำางานให้แล้ว
[COLOR=#NaNNaNNaN]โมดูลนี้ จะทำางานต่อไปได้เองโดยอิสระ[/COLOR]

ทำาให้ MCU ไม่ต้องเสียเวลา วนลูปในการ จัดการ กับเอาต์พุต ในขณะที่


โมดูลนี้ ทำางาน MCU สามารถที่จะควบคุมการเปิ ด-ปิ ดสัญญาณ ผ่านทางรีจิ

สเตอร์ควบคุมได้
- จึงทำาให้สามารถใช้งานในการกำาเนิ ดสัญญาณอย่างเช่นการสร้างความถี่

40KHz เพื่อเป็ นความถี่พาหะ(CARRIER FREQUENCY )ของ Infrared Remote


control (IR)
การทำางานของโมดูล CCP1/TIMER2 ในการกำาเนิ ดสัญญาณ
ส่วนกำาเนิ ดสำญญาณ [COLOR=#NaNNaNNaN]TIMER2[/COLOR] ได้รบ

สัญญาณนาฬิกา FOSC/4 จากระบบ โดยกำาหนดตัวหารความถี่ (Prescaler) ได้
จาก [COLOR=#NaNNaNNaN]T2CON[/COLOR]
รีจิสเตอร์ PR2 เป็ นตัวกำาหนดคาบเวลา
[COLOR=#NaNNaNNaN]CCPR1[/COLOR] มีขนาด 16 บิทใช้ในการควบคุม

duty cycle ประกอบด้วย


CCPR1H
และ
CCPR1L

รีจิสเตอรควบคุมคือ [COLOR=#NaNNaNNaN]CCP1CON[/COLOR]
CCP1CON<3:0>จะต้องกำาหนดเป็ น 11xx = PWM mode

ขั้นตอนการใช้งาน CCP1 กำาเนิ ดสำญญาณ

1. หาคาบเวลาของ PWM (PWM PERIOD) เพื่อกำาหนดค่าให้กับ PR2

1.1. กำาหนดความถี่ (จะได้คาบเวลาของพัลส์ช=1/f ) และ ดิวตี้ไซเคิลของ

พัลส์
1.2. คำานวนหาค่ารีจิสเตอร์ PR2 เพื่อกำาหนดคาบเวลาของ TIMER2 เพื่อใช้

ผลิตความถี่ หาได้จากสูตร
เมื่อ T = คาบเวลา (1/f) ของพัลส์ , Tosc = คาบเวลา (1/f) ของ XTal , P= ค่า
ของ ปรีเสกลเลอร์ 1,4,16 โดยที่ค่า PR2 เป็ นเลขจำานวนเต็มและมีค่าน้อยกว่า
256

2. หาดิวตี้ไซเคิลของ PWM (PWM DUTY CYCLE) เพื่อกำาหนดค่าให้กับ


CCPR1(CCPR1L:CCP1CON<5:4>)

2.1. หาดิวตี้ไซเคิลของ PWM

d= percent-duty cycle , T = = คาบเวลาของพัลส์

2.2. หาค่าที่จะโปรแกรมลงในรีจิสเตอร์ CCPR1L:CCP1CON<5:4> จาก

2.3. ค่าที่คำานวนได้ CCPR1L:CCP1CON<5:4> ซึ่งมีขนาด 10 บิทโดยจะต้อง

เก็บไว้ใน CCPR1L= 8 บิท และ CCP1X: CCP1Y 2 บิทขวาสุดจะอยู่ในรีจิสเตอร์


CCP1CON<5:4> (บิทที่ 5 และ 4 ตามลำาดับ )

การกำานดค่าให้กับรีจิสเตอร์ CCPR1L:CCP1CON<5:4>
3. กำานดค่าให้กับ T2CON
TMR2 = 0 ,Clear ค่า TMR2

T2CON<7> ไม่ใช้ให้=0

T2CON<6:3> เป็ นการกำาหนดค่า POSTScaler ไม่มีผลกำาหนดให้เป็ น 1111


T2CON<2> = On/Off Timer2
T2CON<0:1> กำานด Prescaler

จากข้อ 3 หาก T2CON<2> =1 Timer2 ก็จะเริม


่ ต้นทำางานทันที

ตัวอย่างที่1 การคำานวน เมื่อใช้ XTAL= 4MHz และกำาเนิ ดสัญญาณความถี่


1KHz ดิวตี้ไซเคิล = 50% ใช้ Prescaler =4

คาบเวลาของสัญญาณ T = 1/1e3 = 0.001 sec


คาบเวลาของ XTAL Tosc = 1/4e6 = 2.5e-7 sec
PR= (0.001 / (4*2.5e-7 * 4)) - 1 = [COLOR=#NaNNaNNaN]249[/COLOR]
Dpwm = (50*1e-3)/100 = 5e-4 sec
CCP1CON CCP1CON<3:0> = (5e-4)/(2.5e-7 * 4) = 500 แปลงเป็ นไบนารี 10 บิท
= [COLOR=#NaNNaNNaN]01111101[/COLOR]
[COLOR=#NaNNaNNaN]00[/COLOR]
ตัวอย่างที่2 การคำานวน เมื่อใช้ XTAL= 4MHz และกำาเนิ ดสัญญาณความถี่
40KHz ดิวตี้ไซเคิล = 50% ใช้ Prescaler =1

คาบเวลาของสัญญาณ T = 1/40e3 = 2.5e-5 sec


คาบเวลาของ XTAL Tosc = 1/4e6 = 2.5e-7 sec
PR= (2.5e-5 / (4*2.5e-7 * 1)) - 1 = [COLOR=#NaNNaNNaN]24[/COLOR]
Dpwm = (50* 2.5e-5) / 100 = 1.25e-5 sec
CCP1CON CCP1CON<3:0> = (1.25e-5) / (2.5e-7 * 1) = 50 แปลงเป็ นไบนารี 10

บิท = [COLOR=#NaNNaNNaN]00001100[/COLOR]
[COLOR=#NaNNaNNaN]10[/COLOR]
ตัวอย่างการกำาหนดค่าเริม
่ ต้นในฟั งชัน

อ้างถึง
//40KHz OSC
void InitPWM(void)
{
PR2 = 24; //Set TIMER2 frequency
CCPR1L = 0B00001100; //Set TIMER2 duty cycle
CCP1CON = 0B00101111; //Set x,y CCP1CON<5:4> any CCP1CON<3:0> =
11xx = PWM mode
TMR2 = 0; //Clear TMR2 first
T2CON = 0B01111000; //T2CON<0:1>Set prescaler ,T2CON<2>=0 stop
Timer2

You might also like