หน่วยการเรียนที่ 1 · ds1307 4.7 k 4.7 k scl sda + 5 v 8 5 6 4 sda...

15
วงจรสวิตซ์ด้วยแสงอินฟาร์เรด ()แบบรับส่งโดยตรง ()แบบรับการสะท้อนของคลื่น รูปที4.1 ลักษณะการติดตั ้งตัวรับส่งสัญญาณอินฟาร์เรดที่ใช้ตัวสอบวัตถุ วงจรตรวจจับอุณหภูมิแบบดิจิตอลที่ใช้การสื่อสารแบบ 1-Wire รูปที4.2 โครงสร้างของตัวตรวจวัดอุณหภูมิเบอร์ DS18B20 4.7K DS18B20 + 5 V 3 2 1 Pulse out รูปที4.3 การต่อใช้งาน DS18B20

Transcript of หน่วยการเรียนที่ 1 · ds1307 4.7 k 4.7 k scl sda + 5 v 8 5 6 4 sda...

วงจรสวตซดวยแสงอนฟารเรด

(ก)แบบรบสงโดยตรง

(ข)แบบรบการสะทอนของคลน

รปท 4.1 ลกษณะการตดตงตวรบสงสญญาณอนฟารเรดทใชตวสอบวตถ วงจรตรวจจบอณหภมแบบดจตอลทใชการสอสารแบบ 1-Wire

รปท 4.2 โครงสรางของตวตรวจวดอณหภมเบอร DS18B20

4.7K

DS18B20

+ 5 V

32

1

Pulse out

รปท 4.3 การตอใชงาน DS18B20

POWER SUPPLYSENSE

INTERNAL VDD

DQ

VDD

64- Bit ROMAND

1-Wire PORT

MEMORY ANDCONTROL LOGIC

SCRATCHPAD

8-BIT CRCGENERATOR

TEMPERATURE SENSOR

HIGH TEMPERATURETRIGGER , TH

LOW TEMPERATURETRIGGER , TL

รปท 4.4 โครงสรางภายในไอซตรวจวดอณหภมเบอร DS18B20 สตรทใชค านวณหาคาของอณหภมทวดไดสามารถหาไดจาก

Temperature = Temp_read - 025 + (Count_per_c) – ( Count_remain) Count_per_c

วงจรสรางฐานเวลาจรง ( RTC )

ตารางท 4.1 โครงสรางภายในไอซ DS1307 ในสวนรายละเอยดของแตละบต

07H OUT 0 0 SQWE 0 0 RS1 RS0

00H CH 10 SECONDS SECONDS 00 - 59

01H 0 10 MINUTES MINUTES 00 - 59

02H 0 10 HR HOURS 10HR A/P

1224

01 - 1200 - 23

03H 0 0 0 0 0 DAY

04H 0 0 10 DATE DATE

05H 0 0 0 MONTH 01 -12

06H 10 YEAR YEAR 00 - 99

01 - 28/2901 - 3001 - 31

10MONTH

B7 B6 B5 B4 B3 B2 B1 B0

Address

4.7 KΩ4.7 KΩDS1307

SCLSDA

+ 5 V

8

56

4

SDASCL

Batt3 V

2

1X1

X2

SQW/OUT7SQW/OUT

32.768K

15p

15p3

รปท 4.5 วงจรทสมบรณของวงจรสรางฐานเวลาจรง ล าดบขนการทดลอง 1. ตอวงจรในชดทดลองดงรปท 4.5

20MHz

20pF 20pF

10 KΩ

+ 5 V

PIC1

6F87

7A

MCLRRESET

1231

13 14

11 32

1

OSC1 OSC2

VSS

VDD VDD

VSS

270ΩX8a

cdefgdp

b

com3 com2 com1 com0 dot

common cathodeRD0RD1RD2RD3RD4RD5RD6RD7

RC3RC2RC1RC0

2.2KΩX5

100 µF+

RC4

0.01 µF1N4148

C103X5

a

cdefgdp

b

4221dot

DIGITRB0

0.1 µF

1.5 KΩ

+ 5 V

470 Ω

infarate

Photo transistor

LFD038AUB-20

รปท 4.6 วงจรการทดลองของขอท 1 อานขอมลจากสญญาณระดบดจตอล 2. เขยนโปรแกรมขางลางลงในคอมพวเตอร แลวบนทกเปนชอ DIGITAL1.pbp

@ DEVICE PIC16F877A, HS_OSC, LVP_OFF, BOD_OFF, WDT_OFF DEFINE OSC 20 TRISD = %00000000 TRISC = %00000000 TRISB = %11111111

sign VAR PORTB.0 I VAR BYTE N VAR WORD M VAR BYTE N = 0

ADCON1 = 7 MAIN: GOSUB SENSOR

GOSUB DISP GOTO MAIN END SENSOR: IF(sign = 1) Then SENSOR Pause 5 N = N + 1 loop: IF (sign = 0 )Then loop Pause 5 Return DISP: ADCON1 = 7

For i = 1 TO 100 M = N DIG 0 LookUp M,[$3f,$06,$5b,$4f,$66,$6d,$7d,$07,$7f,$6f],PORTD PORTC = $02 M = N DIG 1 LookUp M,[$3f,$06,$5b,$4f,$66,$6d,$7d,$07,$7f,$6f],PORTD PORTC = $04 M = N DIG 2 LookUp M,[$bf,$86,$b,$cf,$e6,$ed,$fd,$87,$ef,$cf],PORTD PORTC = $08 M = N DIG 3 LookUp M,[$3f,$06,$5b,$4f,$66,$6d,$7d,$07,$7f,$6f],PORTD PORTC = $00 Next i Return

3. ตอวงจรตามรปท 4.7

20MHz

20pF 20pF

10 KΩ

+ 5 V

PIC1

6F87

7A

MCLRRESET

1231

13 14

11 32

1

OSC1 OSC2

VSS

VDD VDD

VSS

270ΩX8a

cdefgdp

b

com3 com2 com1 com0 dot

common cathodeRD0RD1RD2RD3RD4RD5RD6RD7

RA3RA2RA1RA0

2.2KΩX5

100 µF+

RA4

0.01 µF1N4148

C103X5

a

cdefgdp

b

4221dot

DIGITRC0

0.1 µF

+ 5 V

10 KΩ

DS18B20

3

2

1

LFD038AUB-20

รปท 4.7 วงจรการทดลองของขอท 3 อานขอมลจากตวตรวจวดอณหภมแสดงผลท LED 7 Segment

4. เขยนโปรแกรมขางลางลงในคอมพวเตอร แลวบนทกเปนชอ DIGITAL2.pbp @ DEVICE PIC16F877A, HS_OSC, LVP_OFF, BOD_OFF, WDT_OFF DEFINE OSC 20 TRISD = %00000000 TRISC = %11111111 TRISA = %00000000 temp VAR WORD

cre VAR BYTE cpe VAR BYTE DQ VAR PORTC.0 I VAR BYTE N VAR WORD M VAR BYTE N = 0

ADCON1 = 7 MAIN: GOSUB readtemp

GOSUB DISP

GOTO MAIN END readtemp: OWOut DQ,1,[$cc,$44] waitloop: OWIn DQ,4,[cre] OWOut DQ,1,[$cc,$be] OWIn DQ,0,[temp.LOWBYTE,temp.HIGHBYTE,skip 4,cre,cpe] temp = (((temp>>1)*100)-25)+(((cpe-cre)*100)/cpe) N = temp/100 Return DISP: For i = 1 TO 100 PORTD = $04 PORTA = $01 PORTD = $58 PORTA = $02 M = N DIG 0 LookUp M,[$3f,$06,$5b,$4f,$66,$6d,$7d,$07,$7f,$6f],PORTD PORTA = $04 M = N DIG 1 LookUp M,[$bf,$86,$b,$cf,$e6,$ed,$fd,$87,$ef,$cf],PORTD PORTA = $08 M = N DIG 2 LookUp M,[$3f,$06,$5b,$4f,$66,$6d,$7d,$07,$7f,$6f],PORTD PORTA = $10 Next i Return

5. เขยนโปรแกรมขางลางลงในคอมพวเตอร แลวบนทกเปนชอ DIGITAL3.pbp @ DEVICE PIC16F877A, HS_OSC, LVP_OFF, BOD_OFF, WDT_OFF DEFINE OSC 20 TRISD = %00000000 TRISC = %11111111 TRISA = %00000000 temp VAR WORD

cre VAR BYTE cpe VAR BYTE DQ VAR PORTC.0 I VAR BYTE N VAR WORD M VAR BYTE N = 0

ADCON1 = 7 MAIN: GOSUB readtemp

GOSUB DISP GOTO MAIN END readtemp: OWOut DQ,1,[$cc,$44] waitloop: OWIn DQ,4,[cre] OWOut DQ,1,[$cc,$be] OWIn DQ,0,[temp.LOWBYTE,temp.HIGHBYTE,skip 4,cre,cpe] temp = (((temp>>1)*100)-25)+(((cpe-cre)*100)/cpe) N = (temp*/461)+3200 N = N/10 Return DISP: For i = 1 TO 100 PORTD = $04 PORTA = $01 PORTD = $79 PORTA = $02

M = N DIG 0 LookUp M,[$3f,$06,$5b,$4f,$66,$6d,$7d,$07,$7f,$6f],PORTD PORTA = $04 M = N DIG 1 LookUp M,[$bf,$86,$b,$cf,$e6,$ed,$fd,$87,$ef,$cf],PORTD PORTA = $08 M = N DIG 2 LookUp M,[$3f,$06,$5b,$4f,$66,$6d,$7d,$07,$7f,$6f],PORTD PORTA = $10 Next i Return

6. ตอตามรปท 4.8

รปท 4.8 วงจรการทดลองของขอท 6 อานขอมลจากตวตรวจวดอณหภมแสดงผลท LCD

7. เขยนโปรแกรมขางลางลงในคอมพวเตอร แลวบนทกเปนชอ DIGITAL4.pbp @ DEVICE PIC16F877A, HS_OSC, LVP_OFF, BOD_OFF, WDT_OFF DEFINE OSC 20

DEFINE LCD_DREG PORTD DEFINE LCD_DBIT 4

20MHz

20pF 20pF

10 K?

+ 5 V

PIC1

6F87

7A

MCLRRESET

1231

13 14

11 32

1

OSC1 OSC2

VSS

VDD VDD

VSS

100 µF+

0.01 µF1N4148

RC0

0.1 µF

+ 5 V

10 K?

DS18B20

3

2

1

RD4RD5RD6RD7

RE1RE0

10 K?

BRIG

HTNE

SSLCD

46

RSE

D7 D6 D5 D4 D3 D2 D1 D0 GND K

2

3+V

Vo

14 13 12 11 10 9 8 7 1 16 R/W5

10?15

A

+ 5 V

DEFINE LCD_RSREG PORTE DEFINE LCD_RSBIT 2 DEFINE LCD_EREG PORTE

DEFINE LCD_EBIT 1 digit VAR BYTE temp VAR WORD temp1 VAR WORD temp2 VAR WORD cre VAR BYTE cpe VAR BYTE DQ VAR PORTC.0 ADCON1 = 7

main: GoSub readtemp GoSub disp GoTo main End

readtemp: OWOut DQ,1,[$cc,$44] waitloop: OWIn DQ,4,[cre]

OWOut DQ,1,[$cc,$be] OWIn DQ,0,[temp.LOWBYTE,temp.HIGHBYTE,skip 4,cre,cpe]

temp = (((temp>>1)*100)-25)+(((cpe-cre)*100)/cpe) temp1 = temp/10

temp2 = (temp*/461)+3200 Return disp: LCDOut $fe,1,"TEMP = ",DEC(temp1/100),".",DEC2(temp1//100)," C" LCDOut $fe,$c0,"TEMP = ",DEC(temp2/100),".",DEC2(temp2//100)," F" Return

8. ตอตามรปท 4.9

20MHz

20pF 20pF

10 KΩ

+ 5 V

PIC1

6F87

7A

MCLRRESET

1231

13 14

11 32

1

OSC1 OSC2

VSS

VDD VDD

VSS

100 µF+

0.01 µF1N4148

RC1

0.1 µF

+ 5 V

1

2 X2

X1

32.768KHz

15p

15p

GND Batt

3 V4 3

10KW

10KW

8

65

7

SDASCL

VCCSQWSQW

DS13

07

SW1 SW1 SW3

+ 5 V

SW4

10 KΩ

10 KΩ

10 KΩ

10 KΩ

RC0

RB0RB1RB2RB3

RB4 PIEZO

PIEZO

RD4RD5RD6RD7

RE1RE0

10 KΩ

BRIG

HTNE

SSLCD

46

RSE

D7 D6 D5 D4 D3 D2 D1 D0 GND K

2

3+V

Vo

14 13 12 11 10 9 8 7 1 16 R/W5

10Ω15

A

+ 5 V

รปท 4.9 วงจรการทดลองของขอท 8 อานขอมลจากตวก าเนดฐานเลาจรงแสดงผลท LCD

9. เขยนโปรแกรมขางลางลงในคอมพวเตอร แลวบนทกเปนชอ DIGITAL5.pbp @ DEVICE PIC16F877A , HS_OSC, LVP_OFF, BOD_OFF, WDT_OFF

DEFINE OSC 20 DEFINE LCD_DREG PORTD DEFINE LCD_DBIT 4 DEFINE LCD_RSREG PORTE DEFINE LCD_RSBIT 1 DEFINE LCD_EREG PORTE DEFINE LCD_EBIT 0

TRISD = $00 SW1 VAR PORTB.0 SW2 VAR PORTB.1 SW3 VAR PORTB.2

SW4 VAR PORTB.3 SPK VAR PORTB.4 address con $00 sec VAR byte minute VAR BYTE hour VAR BYTE day VAR BYTE date VAR BYTE month VAR BYTE year VAR BYTE d0 VAR BYTE d1 VAR BYTE hr VAR BYTE mn VAR BYTE ss VAR BYTE sda VAR PORTC.0 scl VAR PORTC.1 cont CON %11010000

'---------------- Initial --------------------- TRISB = %11101111

adcon1 = 7 hr = 0 mn = 0 ss = 0 '---------------- main program -----------------

start: if (SW1 = 0 and SW2 = 0) then pause 2000 if (SW1 = 0 and SW2 = 0) then

gosub beep1 pause 1000 gosub setting

endif

endif gosub read_time gosub display_time goto start end

'------------- End of main Program --------------- setting: lcdout $fe,1,"set time"

pause 2000 lcdout $fe,1 hour = 0 minute = 0 sec = 0 gosub display_time gosub set_time return

set_time: pause 500 loop2: if sw1 = 1 then pause 50

if (SW2=0) then gosub click

pause 50 hr = hr+1 if hr > 23 then hr = 0 d0 = hr dig 0 d1 = hr dig 1 d1 = d1<< 4 hour = d1|d0 gosub display_time pause 200 endif if (sw3=0) then

gosub click

pause 50 mn = mn+1 if mn > 59 then mn = 0 d0 = mn dig 0 d1 = mn dig 1 d1 = d1<< 4 minute = d1|d0 gosub display_time pause 150

endif if (SW4 = 0) then gosub click pause 50 ss = ss+1

if ss > 59 then ss = 0 d0 = ss dig 0 d1 = ss dig 1 d1 = d1<< 4 sec = d1|d0 gosub display_time pause 150 endif goto loop2 endif gosub write_time return

write_time: i2cwrite sda,scl,cont,address,[sec,minute,hour] return

read_time: i2cread sda,scl,cont,address,[sec,minute,hour] return

display_time: lcdout $fe,$80,hex2 hour,":",$fe,$84,hex2 minute,":" lcdout $fe,$c0,hex2 sec

return beep1: freqout spk,20,2000

pause 200 freqout spk,20,2000 pause 100 return

click: freqout spk,5,2000 return

10. ตอตามรปท 4.10

20MHz

20pF 20pF

10 KΩ

+ 5 V

PIC1

6F87

7A

MCLRRESET

1231

13 14

11 32

1

OSC1 OSC2

VSS

VDD VDD

VSS

100 µF+

0.01 µF1N4148

0.1 µF

RD4RD5RD6RD7

RE1RE0

10 KΩ

+ 5 V

BRIG

HTNE

SSLCD 16X2

46

RSE

D7 D6 D5 D4 D3 D2 D1 D0 GND K

2

3+V

Vo

14 13 12 11 10 9 8 7 1 16 R/W5

10Ω15

A

RC0

รปท 4.10 วงจรอานคาความถแสดงผลท LCD 11. เขยนโปรแกรมขางลางลงในคอมพวเตอร แลวบนทกเปนชอ DIGITAL6.pbp

@ DEVICE PIC16F877A , HS_OSC, LVP_OFF, BOD_OFF, WDT_OFF DEFINE OSC 20

DEFINE LCD_DREG PORTD DEFINE LCD_DBIT 4 DEFINE LCD_RSREG PORTE DEFINE LCD_RSBIT 0

DEFINE LCD_EREG PORTE DEFINE LCD_EBIT 1 TRISD = $00 F VAR PORTC.0 N VAR WORD ADCON1 = 7

MAIN: GOSUB MEANS GOSUB DISP GOTO MAIN END MEANS: COUNT F,200,N N = N*5 RETURN

DISP: LCDOut $fe,1,"FREQ = ", DEC N," Hz" PAUSE 50

RETUR