Dalam SMART-AVR Basic telah tersedia command untuk mengakses perangkat yang menggunakan I²C Bus.
Dengan protocol ini rangkaian sangat sederhana sekali, karena tidak menggunakan banyak jalur melainkan hanya 2 jalur yaitu SDA (jalur data) dan SCL(jalur clock).
RTC (Real Time Clock) dengan menggunakan I²C Bus ini dikeluarkan oleh Dallas semiconductor dengan type DS1307. Dalam chip ini memuat pewaktuan hari, jam, menit dan detik.
Dengan menggunakan rangkaian di atas adalah contoh yang sederhana sekali, di mana informasi pewaktuan akan dikirim melalui serial port. Berikut adalah contoh listing programnya:
'****************************************
'READ / WRITE I2C RTC DS1307
'****************************************
RTC_INIT:
DELAY = 10
'aktifkan interupt
ASM: SEI
GOSUB DEVICE_ADD
'MENGAKTIFKAN OSCILATOR DS1307
I2CAL = 0
I2CDAT = 0
WRITE I2C
IF I2CEF = 1 THEN ERROR0
GOSUB DEVICE_ADD
'MENGAKTIFKAN SQWOUT PULSE 1 Hz
I2CDAT = 16
I2CAL = 7
WRITE I2C
IF I2CEF = 1 THEN ERROR0
SEND: RTC INIT OK
GOSUB ENTER
SEND: TEKAN S UNTUK SETTING
GOSUB ENTER
DELAY = 50
MAIN:
SEND: RTC READ -->
GOSUB TIME
TCOM = 13
WRITE COM
DELAY = 100
READ COM
'SET TIME IF COM = S
IF RCOM = 83 THEN SETHARI
GOTO MAIN
SETHARI:
RCOM = 0
GOSUB ENTER
SEND: TEKAN U MENGGANTI
GOSUB ENTER
SEND: TEKAN E DATA BENAR
GOSUB ENTER
DELAY = 25
1ST_DAY:
VAR0 = 1
LOOPHARI:
READ COM
IF RCOM = 85 THEN HARI_UP
'SET TIME IF COM = E
IF RCOM = 69 THEN SETJAM
GOSUB HARIDSP
TCOM = 13
WRITE COM
DELAY = 25
GOTO LOOPHARI
HARI_UP:
RCOM = 0
VAR0 = VAR0 + 1
DELAY = 25
IF VAR0 = 8 THEN 1ST_DAY
GOTO LOOPHARI
SETJAM:
GOSUB ENTER
RCOM = 0
I2CAL = 3
I2CDAT = VAR0
GOSUB DEVICE_ADD
WRITE I2C
SEND: DAY SAVED
GOSUB ENTER
SEND: JAM
GOSUB ENTER
DELAY = 25
1ST_HOUR:
VAR4 = 1
LOOPJAM:
READ COM
IF RCOM = 85 THEN VAL_UP_JAM
'SET TIME IF COM = E
IF RCOM = 69 THEN SETMEN
GOSUB TIMEDISP
TCOM = 13
WRITE COM
DELAY = 25
GOTO LOOPJAM
VAL_UP_JAM:
GOSUB VAL_UP1
VAR4 = VAR4 + 1
IF VAR4 = 25 THEN 1ST_HOUR
GOTO LOOPJAM
SETMEN:
GOSUB ENTER
RCOM = 0
I2CAL = 2
I2CDAT = BCD21
GOSUB DEVICE_ADD
WRITE I2C
SEND: HOUR SAVED
GOSUB ENTER
SEND: MENIT
GOSUB ENTER
DELAY = 25
1ST_MINUTE:
VAR4 = 0
LOOPMIN:
READ COM
IF RCOM = 85 THEN VAL_UP_MIN
'SET TIME IF COM = E
IF RCOM = 69 THEN SET_END
GOSUB TIMEDISP
TCOM = 13
WRITE COM
DELAY = 25
GOTO LOOPMIN
VAL_UP_MIN:
GOSUB VAL_UP1
VAR4 = VAR4 + 1
IF VAR4 = 60 THEN 1ST_MINUTE
GOTO LOOPMIN
SET_END:
GOSUB ENTER
I2CAL = 1
I2CDAT = BCD21
GOSUB DEVICE_ADD
WRITE I2C
SEND: MINUTE SAVED
GOSUB ENTER
GOTO MAIN
VAL_UP1:
RCOM = 0
DELAY = 30
HHI = 0
HLO = VAR4
FN:HEX2BCD
I2CDAT = BCD21
RETURN
ERROR0:
SEND: INIT ERROR
GOSUB ENTER
DELAY = 10
GOTO RTC_INIT
ERROR1:
SEND: ERROR WRITE I2C
GOSUB ENTER
DELAY = 30
GOTO MAIN
DEVICE_ADD:
I2CDEV = 208
I2CCA = 1
I2CAH = 0
I2CEF = 0
RETURN
TIME:
I2CAL = 3
GOSUB DEVICE_ADD
READ I2C
IF I2CEF = 1 THEN ERROR3
VAR0 = I2CDAT AND 7
GOSUB HARIDSP
I2CAL = 2
GOSUB DEVICE_ADD
READ I2C
IF I2CEF = 1 THEN ERROR3
VAR1 = I2CDAT AND 63
VAR20 = 48
GOSUB TIMEDISP
GOSUB SPACE
I2CAL = 1
GOSUB DEVICE_ADD
READ I2C
IF I2CEF = 1 THEN ERROR3
VAR2 = I2CDAT AND 127
VAR20 = 112
GOSUB TIMEDISP
GOSUB SPACE
I2CAL = 0
GOSUB DEVICE_ADD
READ I2C
IF I2CEF = 1 THEN ERROR3
VAR3 = I2CDAT AND 127
VAR20 = 112
GOSUB TIMEDISP
RETURN
ERROR3:
SEND: ERROR READ I2C
GOSUB ENTER
RETURN
WAIT10:
DELAY = 20
RETURN
TIMEDISP:
VAR9 = I2CDAT
VAR9 = VAR9 AND VAR20
SWAP = VAR9
FN:SWAP
D2ASC = SWAP
FN:DASC
TCOM = D2ASC
WRITE COM
VAR9 = I2CDAT
VAR9 = VAR9 AND 15
D2ASC = VAR9
FN:DASC
TCOM = D2ASC
WRITE COM
RETURN
SPACE:
TCOM = 58
WRITE COM
RETURN
HARIDSP:
IF VAR0 = 1 THEN MON
IF VAR0 = 2 THEN TUE
IF VAR0 = 3 THEN WED
IF VAR0 = 4 THEN THU
IF VAR0 = 5 THEN FRI
IF VAR0 = 6 THEN SAT
IF VAR0 = 7 THEN SUN
SEND: DAY ERROR
RETURN
MON:
SEND: MON
RETURN
TUE:
SEND: TUE
RETURN
WED:
SEND: WED
RETURN
THU:
SEND: THU
RETURN
FRI:
SEND: FRI
RETURN
SAT:
SEND: SAT
RETURN
SUN:
SEND: SUN
RETURN
ENTER:
DELAY = 5
TCOM = 13
WRITE COM
TCOM = 10
WRITE COM
RETURN
'****************************************
Setelah program di-download ke chip, untuk menjalankan cukup menghubungkan rangkaian dengan computer dan menjalankan program hyperterminal dengan setting baud 4800,8,N,1. Setelah rangkaian dijalankan akan tampil seperti berikut:
Dengan protocol ini rangkaian sangat sederhana sekali, karena tidak menggunakan banyak jalur melainkan hanya 2 jalur yaitu SDA (jalur data) dan SCL(jalur clock).
RTC (Real Time Clock) dengan menggunakan I²C Bus ini dikeluarkan oleh Dallas semiconductor dengan type DS1307. Dalam chip ini memuat pewaktuan hari, jam, menit dan detik.
Dengan menggunakan rangkaian di atas adalah contoh yang sederhana sekali, di mana informasi pewaktuan akan dikirim melalui serial port. Berikut adalah contoh listing programnya:
'****************************************
'READ / WRITE I2C RTC DS1307
'****************************************
RTC_INIT:
DELAY = 10
'aktifkan interupt
ASM: SEI
GOSUB DEVICE_ADD
'MENGAKTIFKAN OSCILATOR DS1307
I2CAL = 0
I2CDAT = 0
WRITE I2C
IF I2CEF = 1 THEN ERROR0
GOSUB DEVICE_ADD
'MENGAKTIFKAN SQWOUT PULSE 1 Hz
I2CDAT = 16
I2CAL = 7
WRITE I2C
IF I2CEF = 1 THEN ERROR0
SEND: RTC INIT OK
GOSUB ENTER
SEND: TEKAN S UNTUK SETTING
GOSUB ENTER
DELAY = 50
MAIN:
SEND: RTC READ -->
GOSUB TIME
TCOM = 13
WRITE COM
DELAY = 100
READ COM
'SET TIME IF COM = S
IF RCOM = 83 THEN SETHARI
GOTO MAIN
SETHARI:
RCOM = 0
GOSUB ENTER
SEND: TEKAN U MENGGANTI
GOSUB ENTER
SEND: TEKAN E DATA BENAR
GOSUB ENTER
DELAY = 25
1ST_DAY:
VAR0 = 1
LOOPHARI:
READ COM
IF RCOM = 85 THEN HARI_UP
'SET TIME IF COM = E
IF RCOM = 69 THEN SETJAM
GOSUB HARIDSP
TCOM = 13
WRITE COM
DELAY = 25
GOTO LOOPHARI
HARI_UP:
RCOM = 0
VAR0 = VAR0 + 1
DELAY = 25
IF VAR0 = 8 THEN 1ST_DAY
GOTO LOOPHARI
SETJAM:
GOSUB ENTER
RCOM = 0
I2CAL = 3
I2CDAT = VAR0
GOSUB DEVICE_ADD
WRITE I2C
SEND: DAY SAVED
GOSUB ENTER
SEND: JAM
GOSUB ENTER
DELAY = 25
1ST_HOUR:
VAR4 = 1
LOOPJAM:
READ COM
IF RCOM = 85 THEN VAL_UP_JAM
'SET TIME IF COM = E
IF RCOM = 69 THEN SETMEN
GOSUB TIMEDISP
TCOM = 13
WRITE COM
DELAY = 25
GOTO LOOPJAM
VAL_UP_JAM:
GOSUB VAL_UP1
VAR4 = VAR4 + 1
IF VAR4 = 25 THEN 1ST_HOUR
GOTO LOOPJAM
SETMEN:
GOSUB ENTER
RCOM = 0
I2CAL = 2
I2CDAT = BCD21
GOSUB DEVICE_ADD
WRITE I2C
SEND: HOUR SAVED
GOSUB ENTER
SEND: MENIT
GOSUB ENTER
DELAY = 25
1ST_MINUTE:
VAR4 = 0
LOOPMIN:
READ COM
IF RCOM = 85 THEN VAL_UP_MIN
'SET TIME IF COM = E
IF RCOM = 69 THEN SET_END
GOSUB TIMEDISP
TCOM = 13
WRITE COM
DELAY = 25
GOTO LOOPMIN
VAL_UP_MIN:
GOSUB VAL_UP1
VAR4 = VAR4 + 1
IF VAR4 = 60 THEN 1ST_MINUTE
GOTO LOOPMIN
SET_END:
GOSUB ENTER
I2CAL = 1
I2CDAT = BCD21
GOSUB DEVICE_ADD
WRITE I2C
SEND: MINUTE SAVED
GOSUB ENTER
GOTO MAIN
VAL_UP1:
RCOM = 0
DELAY = 30
HHI = 0
HLO = VAR4
FN:HEX2BCD
I2CDAT = BCD21
RETURN
ERROR0:
SEND: INIT ERROR
GOSUB ENTER
DELAY = 10
GOTO RTC_INIT
ERROR1:
SEND: ERROR WRITE I2C
GOSUB ENTER
DELAY = 30
GOTO MAIN
DEVICE_ADD:
I2CDEV = 208
I2CCA = 1
I2CAH = 0
I2CEF = 0
RETURN
TIME:
I2CAL = 3
GOSUB DEVICE_ADD
READ I2C
IF I2CEF = 1 THEN ERROR3
VAR0 = I2CDAT AND 7
GOSUB HARIDSP
I2CAL = 2
GOSUB DEVICE_ADD
READ I2C
IF I2CEF = 1 THEN ERROR3
VAR1 = I2CDAT AND 63
VAR20 = 48
GOSUB TIMEDISP
GOSUB SPACE
I2CAL = 1
GOSUB DEVICE_ADD
READ I2C
IF I2CEF = 1 THEN ERROR3
VAR2 = I2CDAT AND 127
VAR20 = 112
GOSUB TIMEDISP
GOSUB SPACE
I2CAL = 0
GOSUB DEVICE_ADD
READ I2C
IF I2CEF = 1 THEN ERROR3
VAR3 = I2CDAT AND 127
VAR20 = 112
GOSUB TIMEDISP
RETURN
ERROR3:
SEND: ERROR READ I2C
GOSUB ENTER
RETURN
WAIT10:
DELAY = 20
RETURN
TIMEDISP:
VAR9 = I2CDAT
VAR9 = VAR9 AND VAR20
SWAP = VAR9
FN:SWAP
D2ASC = SWAP
FN:DASC
TCOM = D2ASC
WRITE COM
VAR9 = I2CDAT
VAR9 = VAR9 AND 15
D2ASC = VAR9
FN:DASC
TCOM = D2ASC
WRITE COM
RETURN
SPACE:
TCOM = 58
WRITE COM
RETURN
HARIDSP:
IF VAR0 = 1 THEN MON
IF VAR0 = 2 THEN TUE
IF VAR0 = 3 THEN WED
IF VAR0 = 4 THEN THU
IF VAR0 = 5 THEN FRI
IF VAR0 = 6 THEN SAT
IF VAR0 = 7 THEN SUN
SEND: DAY ERROR
RETURN
MON:
SEND: MON
RETURN
TUE:
SEND: TUE
RETURN
WED:
SEND: WED
RETURN
THU:
SEND: THU
RETURN
FRI:
SEND: FRI
RETURN
SAT:
SEND: SAT
RETURN
SUN:
SEND: SUN
RETURN
ENTER:
DELAY = 5
TCOM = 13
WRITE COM
TCOM = 10
WRITE COM
RETURN
'****************************************
Setelah program di-download ke chip, untuk menjalankan cukup menghubungkan rangkaian dengan computer dan menjalankan program hyperterminal dengan setting baud 4800,8,N,1. Setelah rangkaian dijalankan akan tampil seperti berikut:
Selamat mencoba....
Tidak ada komentar:
Posting Komentar