วันเสาร์ที่ 22 สิงหาคม พ.ศ. 2552

แจกโค็ด SENSOR

แจกโค็ดครับ เป็นโค็ด อ่านค่าเซนเซอร์อนาล็อกแล้วให้ค่าออกเป็นดิจิตอลครับ แบบ 8 ช่องครับ

ใช้ PIC 16f877 // 20M
วงจรก็ต่อ ldr เข้าขาอนาล็อก A0 A1 A2 A3 A5 E0 E1 E2 Output จะออก D0 D1 D2 D3 D4 D5 D6 D7
สวิตซ์เซ็ต Active Low เซ็ตสีเข้ม B0 เซ็ตสีขาว B1 LED แสดงผลการเซ็ต C3 C6
การเซ็ตกด SW ทั้งสองตัวแล้วเปิดไฟ จะเป็นการเข้าโหมด Set แล้วกด เซ็ต สีเข้มก่อน จากนั้น กดเซ็ตสีขาว เสร็จแล้วโปรแกรมจะเก็บค่าลง ROM เพื่อใช้ในครั้งต่อไป จะได้ไม่ต้องเซ็ตทุกครั้ง การใช้งานก็เปิดไฟเลย โปรแกรมก็จะอ่านค่าจาก ROM ที่เราเซ็ตใว้มาใช้ครับ แล้วก็จะแสดง OUTPUT เลย หากอยากรู้ ลอจิกก็เอามิเตอร์วัดเอาครับ ส่วนใครขี้เกียจวัด ก็แก้โปรแกรมอีกนิดหน่อย ต่อ LED แสดงผลด้วยเลยก็ได้ครับ ไม่ว่ากัน
โค็ดนี้ผมเขียนขึ้นเอง และ ไม่สงวนลิขสิทธินะครับ ท่านสามารถนำไปศึกษาได้ หรือ นำไปใช้ได้เลยครับ

ขออย่างเดียว Comment กันหน่อย
DEFINE OSC 20
DEFINE ADC_BITS 8
DEFINE ADC_SAMPLEUS 50
DEFINE CCP1_REG PORTC
DEFINE CCP1_BIT 2
DEFINE CCP2_REG PORTC
DEFINE CCP2_BIT 1

TRISA = 255
TRISB = 255
TRISC = 00
TRISD = 00

adcon1 = 0

white VAR PORTB.1
blue VAR PORTB.0

sr3 VAR word
sr2 VAR word
sr1 VAR word
sr0 VAR word
sl0 VAR word
sl1 VAR word
sl2 VAR word
sl3 VAR word

mr3 VAR word
mr2 VAR word
mr1 VAR word
mr0 VAR word
ml0 VAR word
ml1 VAR word
ml2 VAR word
ml3 VAR word

mrr3 VAR word
mrr2 VAR word
mrr1 VAR word
mrr0 VAR word
mll0 VAR word
mll1 VAR word
mll2 VAR word
mll3 VAR word

a VAR word
b VAR word
c VAR word
d VAR word
e VAR word
f VAR word
g VAR word
h VAR word

portc =%11111111
portd =%11111111
pause 250

chk_st:
IF (white=0)AND(blue=0) Then
portc =%10110111
Gosub setup
gosub set
gosub wait_sen
EndIF

pause 250

read 5,a
read 7,b
read 9,c
read 11,d
read 13,e
read 15,f
read 17,g
read 19,h

pause 250
portc =%10110111
pause 250

readsen:
ADCIN 0,sl3 :ADCIN 1,sl2 :ADCIN 2,sl1 :ADCIN 3,sl0
ADCIN 4,sr0 :ADCIN 5,sr1 :ADCIN 6,sr2 :ADCIN 7,sr3
IF (sl3>=a) Then
high portd.0
else
low portd.0
EndIF
IF (sl2>=b) Then
high portd.1
else
low portd.1
EndIF
IF (sl1>=c) Then
high portd.2
else
low portd.2
EndIF
IF (sl0>=d) Then
high portd.3
else
low portd.3
EndIF
IF (sr0>=e) Then
high portd.4
else
low portd.4
EndIF
IF (sr1>=f) Then
high portd.5
else
low portd.5
EndIF
IF (sr2>=g) Then
high portd.6
else
low portd.6
EndIF
IF (sr3>=h) Then
high portd.7
else
low portd.7
EndIF
GoTo readsen

setup:
IF (white=0)AND(blue=0) Then
GoTo setup
EndIF
pause 250
portc =%11111111
return

set:
s_blue:
IF (blue=1) Then
goto s_blue
else
ADCIN 0,ml3 :ADCIN 1,ml2 :ADCIN 2,ml1 :ADCIN 3,ml0
ADCIN 4,mr0 :ADCIN 5,mr1 :ADCIN 6,mr2 :ADCIN 7,mr3
pause 250
portc =%11110111
EndIF
s_white:
IF (white=1) Then
goto s_white
else
ADCIN 0,mll3 :ADCIN 1,mll2 :ADCIN 2,mll1 :ADCIN 3,mll0
ADCIN 4,mrr0 :ADCIN 5,mrr1 :ADCIN 6,mrr2 :ADCIN 7,mrr3
pause 250
portc =%10110111
EndIF
pause 500
portc =%11111111
return

wait_sen:
a=(mll3-ml3)/2
b=(mll2-ml2)/2
c=(mll1-ml1)/2
d=(mll0-ml0)/2
e=(mrr0-mr0)/2
f=(mrr1-mr1)/2
g=(mrr2-mr2)/2
h=(mrr3-mr3)/2

pause 250

a=a+ml3:b=b+ml2:c=c+ml1:d=d+ml0
e=e+mr0:f=f+mr1:G=G+mr2:H=H+mr3

pause 250

write 5,a
write 7,b
write 9,c
write 11,d
write 13,e
write 15,f
write 17,g
write 19,h

pause 250
return

2 ความคิดเห็น:

  1. สวัสดีครับ พอดีกำลังศึกษาเรื่องนี้อยู่พอดี
    แต่ว่าไม่เก่งภาษาC เท่าไหรอ่าครับ

    ไม่ทราบว่าใช้โปรแกรมอะไร compile ครับ
    พอดีตอนนี้ผมกำลังหัดเขียนกับโปรแกรม CCS C compiler อ่าครับ

    แบบว่ามือใหม่เพิ่งหัดเล่นหุ่นอ่าครับ หัดเขียนโปรแกรมด้วย
    เห็นโค๊ด น่าสนใจมาก แต่ไม่ค่อยมีความรู้ เลยอยากจะลองเอาโค๊ดไป compile ดู

    อยากขอคำแนะนำสำหรับมือใหม่หน่อยครับ(แบบว่าหัดเขียนพื้นฐานอยู่เลยอ่าครับ)

    ตอบลบ
  2. ต้องขอโทษด้วยที่ตอบช้าครับ ผมใช้ CCS 4.093 ครับ ถ้าส่งเมล์มาจะดีกว่าครับเพราะผมเช็คเกือบทุกวัน

    ตอบลบ