Asynchronous serial interface ระหว่าง PC กับ PIC16F877 ตอนที่ 3
คราวนี้เราจะมาพูดถึงในส่วนของ PIC กันบ้าง หลักการทำงานคือ เริ่มต้นด้วยการทำการ converse ค่า analog ที่ channel 0 มาเป็น ค่า digital ขนาด 10 bit เมื่อได้ค่ามาแล้ว ก็ทำการส่งออกทาง serial 2 bytes จากนั้นก็ทำการหน่วงเวลานาน 1 sec แล้วกลับไปทำซ้ำเดิม อย่างนี้ไปเรื่อยๆ
MAIN_LOOP: ; main loop
nop
Start_Conv:
bsf ADCON0,GO ; Start A/D conversion
Wait:
btfss PIR1,ADIF ; Wait for conversion to complete
goto Wait
movfw ADRESH ; Write A/D result
movwf AtoD_H
;
BANK1 ; Select to memory BANK1
movfw ADRESL
BANK0 ; Select to memory BANK0
movwf AtoD_L
;
movfw AtoD_H
movwf TXREG
Wait_Send_1St: ; Send Higher byte first
btfss PIR1,TXIF
goto Wait_Send_1St
movfw AtoD_L
movwf TXREG
Wait_Send_2nd:
btfss PIR1,TXIF ; Send Lower byte second
goto Wait_Send_2nd
;
call Delay_1Sec
goto MAIN_LOOPจาก code เราจะไม่ใช้การ interrupt เราจะใช้วิธีตรวจดู flag TXIF เมื่อ TXIF ถูก setted จะหมายความว่า ตอนนี้ serial buffer ไม่มีข้อมูล เราสามารถ ที่จะโหลดค่าใหม่เข้าไปใน buffer ได้
ทดสอบโปรแกรม
1. เราเริ่มต้นด้วยการ run program ที่เขียนด้วย delphi ขึ้นมาก่อน ซึ่งค่าเริ่มต้นจะเป็น 0.00 Volts
2. ทำการ Run โปรแกรม หลังจากอัดโปรแกรมเข้าใน ICD เรียบร้อยแล้ว
3. จากนั้น ก็ทำการหมุนตัวต้านทานปรับค่าได้ ซึ่งต่อกับ A/D channel 0 เพื่อทำการเปลี่ยนค่าแรงดันไฟฟ้า เป็นค่าต่าง ๆ
4. ตัวเลขของโปรแกรม AtoD monitor จะเปลี่ยนไปตามค่า voltage ทีเปลี่ยนไป
สรุป สำหรับ AtoD ที่มีใน PIC16F87X นั้นจะมีขนาด 10 bit ซึ่งก็เพียงพอสำหรับงานทั่วๆไป แต่ถ้างานที่ต้องการความละเอียดสูงๆ คงต้องเลือกที่มีขนาด 12 bit ขึ้นไปครับสำหรับ Source code สามารถ Download ได้ที่นี่ครับ