Minggu, 20 September 2015
ATtiny2313 Capacitive Touch Switch Sebagai Kunci Rahasia Sepeda Motor
Kali ini saya berbagi masalah kunci rahasia yang saya gunakan di motor baru saya. Banyak project - project mengenai masalah kunci rahasia untuk kendaraan, tapi saya ingin membuat sendiri lain dari yang sudah ada. Kalau umumnya kunci rahasia berupa saklar sentuh / touch switch, magnetic switch, kode lampu dan lain-lain. Khusus saklar sentuh umumnya harus ada metal yang harus di sentuh, lain halnya project yang saya berikan justru bidang sentuh berada di balik plastik body kendaraan.
Dengan menyentuh body plastic yang dirahasiakan, maka relay akan 'ON'. Berikut adalah schematic rangkaian yang saya buat untuk kendaraan saya:
Rangkaian bekerja sesaat setelah power supply 12volt dari kunci contact kendaraan diaktifkan. Buzer atau lampu akan menyala 3x setelah itu saya harus menyentuh bidang sentuh yang dirahasiakan untuk mengunci relay, setelah itu kendaraan baru bisa di start. Jika saya telat menyentuh, artinya saya tidak ada kesempatan lagi untuk mengaktifkan relay, jalan satu-satunya harus mematikan rangkaian melalui kunci kontak. Jadi penyentuhan touch switch memang saya buat demikian supaya hanya saya yang tahu :D :D :D. Untuk variasi penghubungan contact point relay bisa mengacu project-project yang di bagi di internet.
IC ATtiny2313 harus diprogram / diisi dulu supaya bisa bekerja sesuai dengan fungsi diatas. Berikut adalah data flash yang dimasukkan di chip attiny2313 (copy ke notepad dan di save sebagai namefile.hex):
:020000020000FC
:100000000FED0DBF00E601BF8E9A96988D9A9598D8
:10001000A0980AE0002E23D005E0502E1AD05A9462
:10002000E9F777D016D06BD010D073D00ED071D046
:100030000CD06FD06ED06DD016D0A09901C0FFCF7C
:10004000969A959A66D09698FFCF969A6CD0969885
:10005000089519D0A0926400B0926500089513D05D
:100060000A94E9F70895A0980ED0009064001090CB
:1000700065003B2C2A2C26D0112D002D023808F4C7
:100080000895A09A0895AA24BB24C698C798BE9A3A
:10009000BF9A2BD0BE98C79ABF9A27D0B69B05C0EF
:1000A000BF98C798BE9A06D0F5CFC698C798BE9A93
:1000B000BF9A0895DD2401E0C02EAC0CBD1C0A2DB2
:1000C0001B2D08950218130808F008950024112428
:1000D000089505D004D003D002D001D0089540E2A5
:1000E0004A95F1F700000000089512E01A95F1F723
:1000F0000000000008953EE13A95F1F708954FE0C1
:100100002FEF3FEF3A95F1F72A95D9F74A95C1F7C6
:10011000089515E024E63FEF3A95F1F72A95D9F7CF
:100120001A95C1F7089512E024E63FEF3A95F1F7EA
:0A0130002A95D9F71A95C1F7089532
:00000001FF
Selamat mencoba
Rabu, 27 November 2013
Digital Touch Switch dengan ATTiny2313
Jumat, 29 Juli 2011
SMART AVR dengan Tiny I2C Stepper Controller
- protocol data menggunakan komunikasi I2C
- 2 motor stepper dengan kerja secara individual
- 4 mode yang dapat di aplikasikan ke masing - masing motor
- addressable sampai dengan 8 buah device tiny stepper conctroller
Ragkaian tiny stepper conctroller dapat dengan mudah dihubungkan dengan SMART AVR seperti gambar berikut:
protocol untuk tiny stepper conctroller menggunakan I2C, dimana protokol ini sudah tersedia di dalam Smart AVR dan beberapa contoh program telah saya berikan misalnya mengakses real time clock RTC DS1307.Di dalam TSC ini menggunakan komunikasi I2C dalam satu kali frame pengiriman data meliputi I2CDEV, I2CAL dan I2CDAT seperti ditunjukkan gambar berikut

Dalam aplikasi program Device address dari tiny stepper conctroller adalah 01100xxx0 dimana nilai x adalah posisi switch dari S2, S1 dan S0. I2CDAT adalah referensi speed yang merupakan lebar delay sebesar 0.5mS/step I2CAL merupakan Address Low yang berfungsi sebagai pengatur mode masing masing motor yang dapat dijabarkan sebagai berikut:
- 1000 0000 --> motor B dir. X
- 0100 0000 --> motor B dir. Y
- 0010 0000 --> motor B hold
- 0001 0000 --> motor B no power
- 0000 1000 --> motor A dir. X
- 0000 0100 --> motor A dir. Y
- 0000 0010 --> motor A hold
- 0000 0001 --> motor A no power
Untuk dir X maupun Y adalah arah putar motor ke kiri atau ke kanan tergantung dari wiring motor yang digunakan.
Pengoprasian TSC dengan menggunakan SMART AVR Basic sangat mudah, hanya menggunakan perintah WRITE I2C, maka motor steper akan melakukan perintah - perintah yang kita berikan.
Contoh tampilan video dapat di download di:
https://www.youtube.com/watch?v=Z_Sq5gD_oqk

Contoh program untuk TSC ini saya berikan dengan posisi S2, S1 dan S0 terbuka sehingga I2CDEV = 01101110B = 110Dec.
Listing programnya:
'*****************************
INIT:
GOSUB DEVICE_ADD
DELAY = 10
START:
I2CAL = 4
I2CDAT = 30
WRITE I2C
IF I2CEF = 1 THEN ERROR0
DELAY = 10
I2CAL = 64
I2CDAT = 3
WRITE I2C
IF I2CEF = 1 THEN ERROR0
DELAY = 10
I2CAL = 128
I2CDAT = 30
WRITE I2C
IF I2CEF = 1 THEN ERROR0
DELAY = 25
I2CAL = 64
I2CDAT = 2
WRITE I2CIF I2CEF = 1 THEN ERROR0
DELAY = 40
I2CAL = 4
I2CDAT = 10
WRITE I2C
IF I2CEF = 1 THEN ERROR0
DELAY = 25
I2CAL = 8
I2CDAT = 2
WRITE I2C
IF I2CEF = 1 THEN ERROR0
GOSUB WAIT
I2CAL = 128
I2CDAT = 150
WRITE I2C
IF I2CEF = 1 THEN ERROR0
DELAY = 50
I2CAL = 4
I2CDAT = 2
WRITE I2C
IF I2CEF = 1 THEN ERROR0
DELAY = 20
FOR VAR5 = 1 TO 5
I2CAL = 128
I2CDAT = 20
WRITE I2C
GOSUB WAIT
I2CAL = 8
WRITE I2C
DELAY = 10
I2CAL = 64
I2CDAT = 10
WRITE I2C
GOSUB WAIT
I2CAL = 4
WRITE I2C
DELAY = 10
NEXT VAR5
I2CAL = 1
WRITE I2C
GOSUB WAIT
I2CAL = 16
WRITE I2C
DELAY = 100
GOTO START
DEVICE_ADD:
I2CDEV = 110
I2CCA = 1
I2CAH = 0
I2CEF = 0
RETURN
ERROR0:
DELAY = 10
GOTO START
WAIT:
DELAY = 1
RETURN
'******* END of Program *************
Demikian contoh project yang bisa saya bagikan semoga bermanfaat.
Salam
Hendryawan
henel.automation@gmail.com
Minggu, 13 Juni 2010
Smart-AVR sebagai Kontrol temperatur ON/OFF menggunakan LM35
Untuk programnya sangat sederhana mirip dengan contoh sebelumnya, hanya saja dalam contoh sebelumnya data temperature dikirim melalui port komunikasi sedangkan contoh kali ini data temperature dikirim ke LCD modul. Berikut listing programnya:
‘***********************************************************************
DELAY = 2
CLRLCD
TEXT: SUHU LM35 + SP
CLR PB1
MAIN:
LOCATE = 64
'baca temperature
READ AIN4
VAR1 = ADCL / 2
TEXT: T:
VAR10 = VAR1
VAR2 = VAR1
GOSUB TAMPIL
TEXT: C
'baca set point
READ AIN2
AH = ADCH
AL = ADCL
BH = 0
BL = 4
FN:DIV16
TEXT: SP:
VAR11 = CL
VAR2 = CL
GOSUB TAMPIL
'baca status relay
GOSUB REL_STAT
'membandingkan PV dengan SP
IF VAR10 > VAR11 THEN RELAY_OFF
VAR12 = 1
SET PB1
GOTO MAIN
RELAY_OFF:
CLR PB1
VAR12 = 0
GOTO MAIN
REL_STAT:
IF VAR12 = 0 THEN OFF_STAT
TEXT: RL:ON
RETURN
OFF_STAT:
TEXT: RL:OFF
RETURN
TAMPIL:
'MENAMPILKAN BILANGAN VAR2 KE LCD
HHI = 0
HLO = VAR2
FN:HEX2BCD
VAR0 = BCD43 AND 15
D2ASC = VAR0
FN:DASC
LCDDATA = D2ASC
WRITE LCD
VAR0 = BCD21 AND 240
SWAP = VAR0
FN:SWAP
D2ASC = SWAP
FN:DASC
LCDDATA = D2ASC
WRITE LCD
VAR0 = BCD21 AND 15
D2ASC = VAR0
FN:DASC
LCDDATA = D2ASC
WRITE LCD
Setelah di kompil dan didownload ke Smart-AVR akan mempunyai tampilan seperti berikut:
Demikian contoh program yang bisa saya berikan dan selamat mencoba.
Regards,
Hendryawan
henel.automation@gmail.com
0812 17 13 025
Jumat, 11 Juni 2010
Membaca Sensor Temperature LM35 dengan SMART-AVR Basic
LM35 mempunyai output berupa tegangan analog dengan spesifikasi 10mV/ ÂșC.
Dalam contoh project ini saya menggunakan rangkaian seperti di atas. Informasi temperature saya tampilkan melalui serial data yang bisa di baca dengan hyperterminal dengan setting 4800,8,N,1.
Dari rangkaian di atas, tegangan analog di baca oleh ADC chanel 4 seperti ditunjukkan dalam program berikut:
DELAY = 2
MAIN:
ENTER:
‘****************************************************************
Demikian contoh program yang bisa saya berikan dan selamat mencoba.
Regards,
Hendryawan
henel.automation@gmail.com
0812 17 13 025
Sabtu, 15 Mei 2010
Multi sensor 1-wire DS18B20 dengan SMART-AVR Basic
FN:OWRESET, yang berfungsi untuk me-reset 1-wire device
FN:OWWRITE, yang berfungsi menulis 1byte data ke 1-wire device
FN:OWREAD, yang berfungsi membaca 1byte data ke 1-wire device
FN:OWSEARCH, yang berfungsi mencari dan memetakan ”64-BIT LASERED ROM CODE” 1-wire device ke dalam internal rom table SMART-AVR Basic. Dalam perintah ini juga menghasilkan informasi berapa banyak device yang tersambung dalam 1-wire bus, informasi ini tersimpan dalam variable OWAMOUNT.
FN:OWMATCROM, yang berfungsi untuk mengakses 1-wire yang bersesuaian dengan 64bit ROM yang terkirim, dalam perintah ini harus di tentukan device numbernya dulu dengan memberi nilai dalam variable OWNUMBER dalam SMART-AVR Basic ini dibatasi dari 0 s/d 15 device saja. Seperti biasa saya membuat rangkaian uji coba seperti rangkaian terdahulu, mudah dan pengembangannya tergantung masing-masing pengguna, untuk rangkaian multi sensor bisa dilihat diatas. Berikut listing program multi sensor DS18B20:
'****************************************
'READ temperature 3pcs 1WIRE DS18B20
'****************************************
DELAY = 5
SEND: membaca 3 pcs DS18B20
GOSUB ENTER
DELAY = 50
PREMAIN:
FN:OWRESET
VAR0 = OWPRESENCE
IF VAR0 = 0 THEN LOOP1
FN:OWSEARCH
SEND: 1WIRE device found =
VAR2 = OWAMOUNT
GOSUB TAMPIL
SEND: pcs
GOSUB ENTER
MAIN:
OWNUMBER = 0
SEND: temp.1=
GOSUB PERDEVICE
OWNUMBER = 1
SEND: temp.2=
GOSUB PERDEVICE
OWNUMBER = 2
SEND: temp.3=
GOSUB PERDEVICE
TCOM = 13
WRITE COM
DELAY = 25
GOTO MAIN
PERDEVICE:
FN:OWMATCHROM
'COMMAND 44Hex / 68Dec CONVERT TEMP
OWBUF0 = 68
FN:OWWRITE
FN:OWRDROM
VAR0 = OWBUF0
VAR1 = OWBUF1
VAR0 = VAR0 AND 240
SWAP = VAR0
FN:SWAP
VAR0 = SWAP
VAR1 = VAR1 AND 15
SWAP = VAR1
FN:SWAP
VAR1 = SWAP
VAR2 = VAR0 OR VAR1
GOSUB TAMPIL
RETURN
LOOP1:
SEND: 1WIRE chip tidak ditemukan
GOSUB ENTER
DELAY = 200
GOTO PREMAIN
TAMPIL:
HHI = 0
HLO = VAR2
FN:HEX2BCD
VAR0 = BCD43 AND 15
D2ASC = VAR0
FN:DASC
TCOM = D2ASC
WRITE COM
VAR0 = BCD21 AND 240
SWAP = VAR0
FN:SWAP
D2ASC = SWAP
FN:DASC
TCOM = D2ASC
WRITE COM
VAR0 = BCD21 AND 15
D2ASC = VAR0
FN:DASC
TCOM = D2ASC
WRITE COM
'3X SPACE CHAR
TCOM = 32
WRITE COM
TCOM = 32
WRITE COM
TCOM = 32
WRITE COM
RETURN
ENTER:
DELAY = 5
TCOM = 13
WRITE COM
TCOM = 10
WRITE COM
RETURN
'****************************************
Dalam listing program di atas terlihat lebih mudah dalam mengakses multi 1-wire sensor. Program akan mengirim hasilnya melalui RS232 dan bias dilihat dengan menggunakan program hyperterminal biasa, berikut contoh tampilannya:
Demikian contoh program yang bias saya berikan dan selamat mencoba.
Regards,
Hendryawan
henel.automation@gmail.com
0812 17 13 025
single 1-wire temperatur sensor DS18B20 dengan SMART-AVR Basic
FN:OWRESET, yang berfungsi untuk me-reset 1-wire device
FN:OWWRITE, yang berfungsi menulis 1byte data ke 1-wire device
FN:OWREAD, yang berfungsi membaca 1byte data ke 1-wire device
Dalam proses menulis maupun membaca data tersimpan di OWBUF0. Maksudnya dalam proses write, data yang terkirim adalah nilai dari variable OWBUF0. Demikian pula sebaliknya, dalam proses read, data yang terbaca disimpan dalam variable OWBUF0. Dalam contoh program yang saya berikan akan menampilkan nilai temperature yang bisa dilihat dengan menggunakan hyperterminal yang umum ada dalam program MS Windows. Berikut contoh listing programnya:
'****************************************
'READ temperature single 1WIRE DS18B20
'****************************************
DELAY = 5
SEND: membaca single DS18B20
GOSUB ENTER
DELAY = 50
MAIN:
FN:OWRESET
VAR0 = OWPRESENCE
IF VAR0 = 0 THEN LOOP1
'COMMAND SKIP ROM CCHex / 204Dec
OWBUF0 = 204
FN:OWWRITE
'COMMAND CONVERT TEMP 44Hex / 68Dec
OWBUF0 = 68
FN:OWWRITE
FN:OWRESET
'COMMAND SKIP ROM CCHex / 204Dec
OWBUF0 = 204
FN:OWWRITE
'COMMAND READ SCRATCHPAD BEHex / 190Dec
OWBUF0 = 190
FN:OWWRITE
FN:OWREAD
VAR0 = OWBUF0
FN:OWREAD
VAR1 = OWBUF0
VAR0 = VAR0 AND 240
SWAP = VAR0
FN:SWAP
VAR0 = SWAP
VAR1 = VAR1 AND 15
SWAP = VAR1
FN:SWAP
VAR1 = SWAP
VAR2 = VAR0 OR VAR1
SEND: TEMPERATURE =
GOSUB TAMPIL
TCOM = 13
WRITE COM
DELAY = 100
GOTO MAIN
LOOP1:
SEND: 1WIRE chip tidak ditemukan
GOSUB ENTER
DELAY = 200
GOTO MAIN
TAMPIL:
HHI = 0
HLO = VAR2
FN:HEX2BCD
VAR0 = BCD43 AND 15
D2ASC = VAR0
FN:DASC
TCOM = D2ASC
WRITE COM
VAR0 = BCD21 AND 240
SWAP = VAR0
FN:SWAP
D2ASC = SWAP
FN:DASC
TCOM = D2ASC
WRITE COM
VAR0 = BCD21 AND 15
D2ASC = VAR0
FN:DASC
TCOM = D2ASC
WRITE COM
TCOM = 32
WRITE COM
TCOM = 32
WRITE COM
RETURN
ENTER:
DELAY = 5
TCOM = 13
WRITE COM
TCOM = 10
WRITE COM
RETURN
'****************************************
Dan berikut adalah hasil yang bisa dilihat dengan hyperterminal.
Selamat mencoba dan tunggu contoh program untuk multi-point sensor 1-wire DS18B20 pada waktu yang akan datang.
Regards,
Hendryawan
henel.automation@gmail.com
0812 17 13 025
Minggu, 02 Mei 2010
Mengakses RTC dengan 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:
Selamat mencoba....
CONTOH PROGRAM TIMER dalam SMART-AVR Basic
TIMER RUN digunakan untuk menjalankan internal timer
TIMER STOP digunakan untuk menghentikan internal timer
TIMER CLR digunakan untuk menghentikan sekalian me-reset nilai timer (TIMH dan TIML) internal timer.
Timer ini bekerja berdasarkan interrupt timer0 ATMEGA8.
Berikut contoh programnya:
‘*******************************************************
CLRLCD
TEXT: TEST TIMER
ASM: SEI
VAR10 = 0
VAR11 = 0
MULAI:
TIMER RUN
LOOP1:
AH = TIMH
AL = TIML
'5000Dec --> 1388Hex -->BH=13Hex = 19Dec BL=88Hex=136Dec
BH = 19
BL = 136
CL = 0
FN:CMP16
IF CL = 1 THEN MSECOND
HHI = TIMH
HLO = TIML
LOCATE = 64
GOSUB TAMPIL
GOTO LOOP1
MSECOND:
TIMER CLR
TIMER RUN
VAR10 = VAR10 + 1
HHI = 0
HLO = VAR10
LOCATE = 20
GOSUB TAMPIL
GOTO LOOP1
TAMPIL:
FN:HEX2BCD
VAR0 = BCD65 AND 240
SWAP = VAR0
FN:SWAP
D2ASC = SWAP
FN:DASC
LCDDATA = D2ASC
WRITE LCD
VAR0 = BCD65 AND 15
D2ASC = VAR0
FN:DASC
LCDDATA = D2ASC
WRITE LCD
VAR0 = BCD43 AND 240
SWAP = VAR0
FN:SWAP
D2ASC = SWAP
FN:DASC
LCDDATA = D2ASC
WRITE LCD
VAR0 = BCD43 AND 15
D2ASC = VAR0
FN:DASC
LCDDATA = D2ASC
WRITE LCD
VAR0 = BCD21 AND 240
SWAP = VAR0
FN:SWAP
D2ASC = SWAP
FN:DASC
LCDDATA = D2ASC
WRITE LCD
VAR0 = BCD21 AND 15
D2ASC = VAR0
FN:DASC
LCDDATA = D2ASC
WRITE LCD
RETURN
‘*******************************************************
Dalam tampilan LCD akan tampil nilai TIMER dan nilai setiap pencapaian timer sebesar 5000.
Timer ini dapat digunakan untuk aplikasi penundaan
SMART-AVR Basic untuk kendali MOTOR STEPPER
Dalam gambar di atas saya berikan rangkaian penggerak motor yang sederhana, dimana hanya menggunakan sebuah motor stepper bekas floppy disk, driver ULN2803 dan sebuah ttl ke rs232 konverter untuk berkomunikasi ke computer sebagai control gerakan putar kiri atau kanan.
Untuk program saya mnggunakan perintah komunikasi READ COM dan fasilitas timer untuk menentukan kecepatan putar motor stepper. Berikut adalah listing programnya:
‘*******************************************************
ASM: SEI
MAIN:
READ COM
'jika data RCOM = R maka putar kanan
IF RCOM = 82 THEN KANAN
'jika data RCOM = L maka putar kiri
IF RCOM = 76 THEN KIRI
GOTO MAIN
KANAN:
SET PC4
CLR PC3
CLR PC2
CLR PC1
GOSUB TUNDA
SET PC3
GOSUB TUNDA
CLR PC4
GOSUB TUNDA
SET PC2
GOSUB TUNDA
CLR PC3
GOSUB TUNDA
SET PC1
GOSUB TUNDA
CLR PC2
GOSUB TUNDA
SET PC4
GOSUB TUNDA
CLR PC1
GOSUB TUNDA
GOTO MAIN
KIRI:
SET PC1
CLR PC2
CLR PC3
CLR PC4
GOSUB TUNDA
SET PC2
GOSUB TUNDA
CLR PC1
GOSUB TUNDA
SET PC3
GOSUB TUNDA
CLR PC2
GOSUB TUNDA
SET PC4
GOSUB TUNDA
CLR PC3
GOSUB TUNDA
SET PC1
GOSUB TUNDA
CLR PC4
GOSUB TUNDA
GOTO MAIN
'nilai TIML menentukan kecepatan putar motor
TUNDA:
TIMER RUN
LOOP1:
IF TIML > 15 THEN TIM_TERCAPAI
GOTO LOOP1
TIM_TERCAPAI:
TIMER CLR
RETURN
‘*******************************************************
Setelah program di download, untuk menjalankannya cukup dengan menggunakan program hyperterminal dengan setting baud 4800,8,N,1.Setelah kabel komunikasi terhubung dan rangkaian dihidupkan, hanya dengan menekan tombol L untuk putar kiri dan R untuk putar kanan atau tombol lain untuk menghentikannya.
Selamat mencoba.
Selasa, 30 Maret 2010
Mengatur Kecepatan Motor DC dengan SMART-AVR Basic
Banyak rangkaian untuk mengatur motor DC, tetapi dalam hal ini saya hanya memberikan contoh saja, untuk pengembangan lebih lanjut tergantung selera masing-masing pecinta elektronika.
Dalam rangkaian yang saya berikan menggunakan optocoupler TLP521 hanya untuk melindungi system cpu dari polusi tegangan yang dihasilkan dari motor DC, meskipun dalam rangkaian percobaan yang saya buat hanya menggunakan motor DC kecil.
Ada dua buah LED yang berguna untuk indikasi saat kecepatan naik atau turun.
Berikut adalah rangkaian yang saya gunakan untuk percobaan kali ini:
‘******************************************
'Contoh PWM untuk mengatur motor DC
VAR11 = 0
LOOP:
SET PB2
CLR PB3
VAR11 = VAR11 + 5
GOSUB MASUK
IF VAR11 > 250 THEN HOLD_HI
GOTO LOOP
LOOP1:
SET PB3
CLR PB2
VAR11 = VAR11 - 5
GOSUB MASUK
IF VAR11 <>
Rabu, 03 Maret 2010
Latihan No.7 "Communication"
Dengan menggunakan rangkaian yang tertera dalam Latihan No.1 tentang digital output, saya akan memberikan contoh program dengan menggunakan perintah WRITE COM dan CPTEXT (lihat tutorial Smart-AVR untuk lebih jelasnya), seperti berikut:
SET PB1
SET PB2
DELAY = 30
CLR PB1
CLR PB2
MULAI:
CPFLAG = 0
CLR PB1
CPTEXT: test12345
SET PB1
DELAY = 25
IF CPFLAG = 1 THEN BETUL
CLR PB2
SEND: SALAH
GOSUB ENTER
GOTO MULAI
BETUL:
SET PB2
SEND: DATA SAMA
GOSUB ENTER
GOTO MULAI
ENTER:
COM = 13
WRITE COM
COM = 10
WRITE COM
RETURN
Setelah program dicompile dan didownload, perlu dihubungkan dengan perangkat luar, dalam hal ini saya menghubungkan Smart-AVR dengan PC menggunakan program Hyperterminal yang biasanya selalu ada dalam aplikasi windows. Buatlah setting hyperterminal dengan baud 4800,8,N,1.
Setelah program dijalankan dan sudah terhubung dengan PC, ketiklah beberapa karakter dan kemudian enter, jika yang diketik adalah test12345 lalu enter, maka LED pada port PB2 akan meyala dan hyperterminal menerima tulisan DATA SAMA seperti ditunjukkan pada gambar berikut:
Kamis, 07 Januari 2010
Latihan No.6 "ADC dengan Smart-AVR Basic"
Dalam ATMega8 sudah tersedia ADC sebanyak 6 chanel. Dengan rangkaian yang saya berikan akan ditunjukkan bagaimana menggunakan ADC dengan menggunakan Smart-AVR Basic. Rangkaian menggunakan LCD module sebagai tampilan pembacaan ADC chanel 5.
Dalam contoh program yang saya berikan akan dibuat sesuai dengan rangkaiannya untuk menampilkan nilai ADC yang dibaca pada chanel 5.
Setelah didownload dan dijalankan maka tampilan line1 LCD akan tertulis "ANALOG INPUT" dan "ADC CH5 =" diikuti nilai ADC pada line2. Programnya adalah sebagai berikut:
START:
DELAY = 2
CLRLCD
TEXT: ANALOG INPUT
MAIN:
READ AIN5
LOCATE = 64
TEXT: ADC CH5 =
GOSUB TAMPIL
GOTO MAIN
TAMPIL:
'MENAMPILKAN BILANGAN VAR10 KE LCD
HHI = ADCH
HLO = ADCL
FN:HEX2BCD
VAR0 = BCD43 AND 240
SWAP = VAR0
FN:SWAP
D2ASC = SWAP
FN:DASC
LCDDATA = D2ASC
WRITE LCD
VAR0 = BCD43 AND 15
D2ASC = VAR0
FN:DASC
LCDDATA = D2ASC
WRITE LCD
VAR0 = BCD21 AND 240
SWAP = VAR0
FN:SWAP
D2ASC = SWAP
FN:DASC
LCDDATA = D2ASC
WRITE LCD
VAR0 = BCD21 AND 15
D2ASC = VAR0
FN:DASC
LCDDATA = D2ASC
WRITE LCD
RETURN
Program sangat mudah dan sederhana untuk disesuaikan dengan hardwarenya, selamat mencoba.
Latihan No.5 "Menggunakan Counter di Smart-AVR"
CLRLCD
TEXT: TEST COUNTER
COUNTH = 0
COUNTL = 0
MAIN:
DELAY = 25
READ COUNTER
GOSUB TAMPIL
GOTO MAIN
TAMPIL:
LOCATE = 64
TEXT: CNT READ =
'MENAMPILKAN BILANGAN VAR10 KE LCD
HHI = COUNTH
HLO = COUNTL
FN:HEX2BCD
VAR0 = BCD43 AND 240
SWAP = VAR0
FN:SWAP
D2ASC = SWAP
FN:DASC
LCDDATA = D2ASC
WRITE LCD
VAR0 = BCD43 AND 15
D2ASC = VAR0
FN:DASC
LCDDATA = D2ASC
WRITE LCD
VAR0 = BCD21 AND 240
SWAP = VAR0
FN:SWAP
D2ASC = SWAP
FN:DASC
LCDDATA = D2ASC
WRITE LCD
VAR0 = BCD21 AND 15
D2ASC = VAR0
FN:DASC
LCDDATA = D2ASC
WRITE LCD
RETURN
Senin, 04 Januari 2010
Latihan No.4 "Keypad 4x4 dengan Smart-AVR Basic"
Fasilitas yang dipunyai oleh system ini adalah masukan keypad 4x4, dimana keypad yang saya rancang menggunakan cara pembagi tegangan, berbeda dengan keypad pada umumnya yang menggunakan cara paralel (lajur dan baris). Keypad ini hanya menggunakan tiga kabel saja untuk dihubungkan ke system Smart-AVR Basic yaitu positive (Aref), negative (GND) dan Vout (ADC0), rangkaian lengkapnya telah saya bahas pada pembahasan Smart-AVR Basic yang telah lalu.
Untuk mencoba keypad 4x4 ini perlu dibuat rangkaian seperti saya gambarkan diatas.
Ada dua program yang akan saya berikan yaitu pembacaan nilai keypad tiap tombol dan perintah FN:KEY yaitu perintah untuk memasukkan 4 digit BCD. Untuk contoh program yang pertama adalah sebagai berikut:
'************************************
'MEMBACA KEYPAD DI TAMPILKAN DI LCD
'************************************
START:
GOSUB JUDUL
MAIN:
READ KEY
HHI = 0
HLO = KEY
FN:HEX2BCD
LOCATE = 64
TEXT: DATA KYPD =
VAR0 = BCD43 AND 15
D2ASC = VAR0
FN:DASC
LCDDATA = D2ASC
WRITE LCD
VAR0 = BCD21 AND 240
SWAP = VAR0
FN:SWAP
D2ASC = SWAP
FN:DASC
LCDDATA = D2ASC
WRITE LCD
VAR0 = BCD21 AND 15
D2ASC = VAR0
FN:DASC
LCDDATA = D2ASC
WRITE LCD
DELAY = 10
GOTO MAIN
JUDUL:
CLRLCD
LOCATE = 0
TEXT: press any key
RETURN
Dalam program diatas system akan menampilkan nilai keypad yang ditekan ke LCD Module sesuai dengan tabel keypad 4x4 yang ada (lihat dalam pembahasan yang lalu)
Untuk program berikutnya adalah penggunaan FN:KEY contoh programnya seperti berikut:
'******************************
'MEMBACA KEYPAD DENGAN FN:KEY
'******************************
START:
CLRLCD
TEXT: FN:KEY
LOOP1:
LOCATE = 64
'PRESS NUMBER HERE
TEXT: 4DIGIT -->
FN:KEY
DELAY = 50
GOTO LOOP1
Pada contoh program diatas, setelah di download maka system akan menampilkan tulisan "FN:KEY" ke LCD module line 1 dan 4DIGIT --> pada line 2. System akan menunggu sampai diberikan masukan 4 digit angka (0 s/d 9).
Selamat mencoba.
Latihan No.3 "Smart-AVR dengan character LCD Module"
Dalam latihan ini akan diberikan contoh bagaimana membuat program dengan Smart-AVR Basic yang dihubungkan dengan character LCD Module.
Dengan menggunakan rangkaian yang saya berikan maka dapat dibuat program untuk menampilkan tulisan di LCD module.
berikut adalah program untuk rangkaian di atas:
CLRLCD
LOCATE = 0
TEXT: ** DEMO LCD **
ULANG:
LOCATE = 64
TEXT: VAR0 chr =
VAR0 = VAR0 + 1
LCDDATA = VAR0
WRITE LCD
DELAY = 25
GOTO ULANG
Setelah program dicompile dan didownload maka setelah dijalankan akan menampilkan tulisan ** DEMO LCD ** pada baris pertama dan tulisan VAR0 chr = pada baris kedua, dimana akan dituliskan character dari 0 sampai 255 di sebelahnya tulisan VAR0 chr =
Selamat mencoba.
Sabtu, 02 Januari 2010
Latihan No.2 "Logic Input dan Output"
Dalam latihan ini bertujuan untuk mengetahui bagaimana membuat program input dan output.
Buat rangkaian seperti pada gambar.
Buat program seperti berikut:
SET PD5
START:
READ PD5
IF PD = 1 THEN LED_ON
CLR PB1
GOTO START
LED_ON:
SET PB1
DELAY = 10
GOTO START
Setelah program di-compile dan di-download ke Smart-AVR maka LED PB1 akan menyala, karena dalam kodisi tidak di tekan, input PD5 = 1 dan jika ditekan PD5 = 0. Jika push button ditekan, maka LED akan menyala.
Selamat mencoba.
Jumat, 01 Januari 2010
Latihan no.1 "Output LED dan PWM menggunakan SMART-AVR Basic"
Pertama buatlah rangkaian seperti pada gambar berikut:
Kedua buatlah program dengan notepad atau dos editor biasa seperti berikut tanpa ada penambahan karakter apapun:
START:
FOR VAR0 = 1 TO 10
SET PB1
CLR PB2
CLR PB3
DELAY = 15
SET PB2
CLR PB1
CLR PB3
DELAY = 15
SET PB3
CLR PB2
CLR PB1
DELAY = 15
CLR PB1
CLR PB2
CLR PB3
DELAY = 15
NEXT VAR0
FOR VAR2 = 1 TO 10
CLR PB1
CLR PB2
CLR PB3
DELAY = 15
SET PB1
SET PB2
SET PB3
DELAY = 15
NEXT VAR2
GOTO START
Setelah di compile dan dijalankan maka LED akan berkedip dengan dua variasi yang berbeda sedangkan untuk output PWM menggunakan program sebagai berikut.
VAR11 = 0
LOOP:
VAR11 = VAR11 + 1
GOSUB MASUK
IF VAR11 = 75 THEN LOOP1
GOTO LOOP
LOOP1:
VAR11 = VAR11 - 1
GOSUB MASUK
IF VAR11 = 0 THEN LOOP
GOTO LOOP1
MASUK:
PWM1 = VAR11
PWM2 = VAR11
PWM3 = VAR11
DELAY = 1
RETURN
Setelah di compile dan di download maka LED akan menyala meredup dan menyala dari kecil ke terang.
Selamat mencoba
Kamis, 03 Desember 2009
tutorial Smart-AVR basic
Semua variable di Smart-AVR adalah 8bit (00H s/d FFH) Software sangat sensitive !. Jangan menambah "space" atau apapun di setiap akhir perintah. Semua program ditulis dengan text editor biasa dengan capslock aktif (huruf besar).
Input variable adalah variable atau register yang harus di isi dengan data. Output variable adalah variable atau register dengan data yang ada di dalamnya biasa diambil / dibaca.
Penting !!!
Di setiap akhir program harus diberi perintah percabangan, supaya program bisa berjalan continue.
Berikut adalah perintah - perintah yang digunakan SMART-AVR:
Tanda '
Adalah perintah untuk untuk memberi keterangan, tidak ada pengaruh jika perintah ini dijalankan.
VARn
Adalah variable yang nilainya bisa berubah-ubah, dalam SMART-AVR dibatasi hanya meliputi VAR0 s/d VAR45.
FOR VARn = a TO b dan NEXT VARn
Adalah perintah looping. Dengan n = 0 sampai dengan 45, a dan b antara 0 sampai dengan 255 untuk lebih jelasnya dapat dilihat di contoh program dibawah. Syarat untuk perintah ini adalah jika nama variable sudah digunakan dalam perintah ini tidak dapat digunakan lagi dalam perintah yang sama, maksudnya jika VAR0 digunakan dalam perintah FOR NEXT dalam program selanjutnya tidak bisa menggunakan VAR0 dalam perintah FOR NEXT lagi.
Perintah - perintah percabangan:
GOTO XXX
Adalah perintah percabangan ke label XXX
GOSUB XXX dan RETURN
Adalah perintah percabangan subrutin ke label XXX. Sedangkan RETURN digunakan untuk kembali ke bawah posisi perintah GOSUB dijalankan. Perlu diperhatikan untuk menggunakan perintah GOSUB harus di akhiri dengan perintah RETURN.
IF a = b THEN XXX
IF a <> THEN XXX
IF a > b THEN XXX
Adalah perintah - perintah percabangan bersyarat, a dan b adalah variable data XXX adalah label.
Lihat contoh untuk lebih jelasnya.
Perlu diingat penulisannya adalah persis seperti di atas.
Perintah - perintah matematika:
Didalam SMART-AVR perintah aritmatika yang bisa digunakan adalah +, -, /, *, AND, OR, dan XOR. Perintah matematika diatas boleh langsung digunakan dengan syarat variable yang digunakan selebar 8bit, untuk variable yang lebih lebar digunakan fungsi metematika yang akan dibahas dibawah.
Perintah - perintah READ
READ COUNTER
Adalah perintah untuk membaca external counter. Counter adalah fasilitas untuk menghitung pulsa yang masuk melalui port counter yang telah di sediakan Smart-AVR, dengan pulsa high =5v low=0v. Counter menghitung dari 0000H s/d FFFFH.
Output variable:
COUNTH sebagai counter high
COUNTL sebagai counter low
Adalah perintah untuk membaca keypad. Dalam hal ini adalah pembacaan sekali penekanan keypad. Output variable: KEY hardware keypad: keypad untuk Smart-AVR menggunakan system pembagi tegangan yang dibaca oleh ADC ch.0, untuk jelasnya dapat dilihat dalam rangkaian keypad pada sesi pembahasan hardware. Berikut adalah tabel pembacaan keypad dan isi variable key:
Adalah perintah untuk membaca chip dengan standart bus I2C system.Bus dengan system I2C ini sangat menghemat tempat karena akses ke perangkat hanya menggunakan 2 jalur yaitu SDA dan SCL. Sebagai contoh adalah perangkat memory (eeprom kapasitas 8K byte), kalau menggunakan system bus paralel dibutuhkan IC dengan jumlah pin sekitar 28 pin (28C64), tetapi kalau menggunakan system bus I2C cukup menggunakan chip dengan jumlah pin = 8 (AT24C64). Adapun contoh perangkat yang menggunakan system bus ini adalah EEPROM (AT24Cxx), RTC (DS1307), ADC/DAC (PCF8591) dan lain-lain. Dalam perintah ini hanya membaca 1 data byte saja, maksudnya setiap membaca data selalu menuliskan variable input. Format pembacaan I2C:
DEVICE ADDRESS = I2CDEV, 1st ADDRESS = I2CAH,2nd ADDRESS= I2CAL, jika I2CCA=1 maka hanya 2nd ADDRESS saja yang dikirim ke chip jika I2CCA=2 maka 1st dan 2nd ADDRESS dikirim ke chip DATA adalah variable yang telah dibaca dari perangkat I2C
Input variable:
I2CDEV (I2C Device Address), lihat data sheet chip
I2CCA (I2C Control Address), 1 atau 2
I2CAH (I2C Address High)
I2CAL (I2C Address Low)
I2CEF (I2C Error Flag),
I2CEF = 1 jika pembacaan error dan 0 jika pembacaan benar
Output variable: I2CDAT adalah data yang telah dibaca dari perangkat I2C. untuk lebih jelasnya dapat dilihat dalam contoh - contoh program menggunakan chip - chip I2C (eeprom ,RTC, ADC/DAC) dibawah.
READ EEPROM
Adalah perintah untuk membaca data dari internal EEPROM Smart-AVR input / output variable:
EEPADHI (eeprom address high --> fix 0)
EEPADLO (eeprom address low 0 s/d 255)
EEPDATA (eeprom data 0 s/d 255)
adalah perintah membaca analog input dengan resolusi 10bit output variable: ADCH (msb data) ADCL (lsb data)
Adalah perintah untuk menulis 1 character ke LCD module.dengan LOCATE untuk menentukan pada posisi mana character akan ditulis. Input variable: LCDDATA
Adalah perintah untuk menulis data external counter. Counter adalah fasilitas untuk menghitung pulsa yang masuk melalui port counter yang telah di sediakan Smart-AVR, dengan pulsa high =5v low=0v. Counter menghitung dari 0000H s/d FFFFH.
Input variable:
COUNTH sebagai counter high
COUNTL sebagai counter low
WRITE I2C
Adalah perintah untuk menulis ke chip dengan standart bus I2C system. Dalam perintah ini hanya menulis 1 data byte saja, maksudnya setiap menulis data selalu menuliskan variable input. Format pembacaan I2C:
DEVICE ADDRESS = I2CDEV, 1st ADDRESS = I2CAH,2nd ADDRESS= I2CAL, jika I2CCA=1 maka hanya 2nd ADDRESS saja yang dikirim ke chip jika I2CCA=2 maka 1st dan 2nd ADDRESS dikirim ke chip. DATA adalah nilai yang yang diinginkan untuk dikirim ke chip.
Input variable:
I2CDEV (I2C Device Address), lihat data sheet chip
I2CCA (I2C Control Address), 1 atau 2
I2CAH (I2C Address High)
I2CAL (I2C Address Low)
I2CEF (I2C Error Flag), I2CEF = 1 jika pembacaan error dan 0 jika pembacaan benar
I2CDAT adalah data yang akan ditulis ke chip
untuk lebih jelasnya dapat dilihat dalam contoh program
Adalah perintah untuk menulis data dari internal EEPROM Smart-AVR input / output variable:
EEPADHI (eeprom address high --> fix 0)
EEPADLO (eeprom address low 0 s/d 255)
EEPDATA (eeprom data 0 s/d 255)
Adalah fungsi untuk merubah hexa (16bit) ke BCD format.
Input variable: HHI dan HLO
Output variable: BCD65, BCD43, dan BCD21
Contoh:
Jika diinginkan merubah bilangan B49C hexa ke BCD format,
programnya adalah
HHI = B4H (180dec.)
HLO = 9CH (156dec.),
programnya:
HHI = 180
HLO = 156
Setelah program diatas dijalankan maka variable outputnya adalah:
BCD21 = 36
BCD43 = 62
BCD65 = 04
FN:BCD2HEX
Adalah perintah untuk merubah 4 digit BCD ke hexa (16bit).
Input variable: BCDH dan BCDL
Output variable: HEXH dan HEXL
Contoh: Jika diinginkan merubah bilangan 6853 decimal ke hexa, programnya adalah
BCDH = 68 (BCD) = 104 dec
BCDL = 53 (BCD) = 53 dec
Setelah program diatas dijalankan maka variable outputnya adalah:
HEXH = 1A
HEXL = C5
Adalah perintah untuk menukar data pada posisi 4bit bawah ke 4bit atas. maksudnya, jika data biner xxxxyyyy setelah perintah FN:SWAP akan menjadi yyyyxxxx.
Input variable: SWAP
Adalah fungsi membaca 4 digit angka dari keypad
Output variable: KEYH dan KEYL dalam BCD
Untuk fungsi ini perlu diperhatikan adalah penekanan tombol akan disipan dalam bentuk BCD format, jadi perlu FN:BCD2HEX untuk merubah ke format hexa. Dalam menjalankan perintah ini program akan menunggu sampai selesai memasukkan 4 digit angka dari keypad.
Adalah fungsi untuk merubah 1 digit BCD ke dalam format ASCII
Input variable: D2ASC
Output variable: D2ASC
LOCATE
CLRLCD
Adalah fungsi untuk menghapus seluruh tampilan yang tampil di LCD module dan lokasi kembali pada posisi 00 (line1)
Adalah perintah delay dengan factor delay di variable DELAY
Adalah perintah delay pendek dengan factor delay di variable SDELAY
Matematika 16 BIT
Adalah suatu fungsi matematika penjumlahan dengan lebar data 16bit dengan format:
AH AL + BH BL = CH CL
Dari format di atas perlu diperhatikan bahwa semua variable AH & AL, BH & BL, dan CH & CL adalah variable (hexadecimal) berpasangan yang membentuk 16bit data. Pada operasi fungsi ini hasilnya mempunyai lebar 16bit untuk selebihnya terjadi nilai yang salah. contoh:
jika Z = X + Y X = 1234 Y = 3456 maka Z = 4690
dalam SMART-AVR penulisannya adalah sebagai berikut:
X = 1234 atau 04D2 Hex. 04 Hex ditulis AH = 04 D2 Hex ditulis AL = 210
Y = 1234 atau 0D80 Hex. 0D Hex ditulis BH = 13 80 Hex ditulis BL = 128
hasilnya adalah di variable pasangan CH CL = 12 52 hex.
untuk jelasnya dapat dilihat contoh program
Input variable: AH AL dan BH BL Output variable: CH CL
Adalah suatu fungsi matematika pengurangan dengan lebar data 16bit dengan format:
AH AL - BH BL = CH CL
syarat: AH AL > BH BL Dari format di atas perlu diperhatikan bahwa semua variable AH & AL, BH & BL, dan CH & CL adalah variable (hexadecimal) berpasangan yang membentuk 16bit data. Pada operasi fungsi ini hasilnya mempunyai lebar 16bit untuk selebihnya terjadi nilai yang salah. contoh:
jika Z = X - Y Y = 7281 X = 8596 maka Z = 1315
dalam SMART-AVR penulisannya adalah sebagai berikut:
Y = 7281 atau 1C71 Hex. 1C Hex ditulis BH = 28 71 Hex ditulis BL = 113
X = 8596 atau 2194 Hex. 21 Hex ditulis AH = 33 94 Hex ditulis AL = 148
hasilnya adalah di variable pasangan CH CL = 05 23 hex.
untuk jelasnya dapat dilihat contoh program
Input variable: AH AL dan BH BL Output variable: CH CL
FN:MUL16
Adalah suatu fungsi matematika perkalian dengan lebar data 16bit dengan format:
AH AL * BH BL = DH DL CH CL
Dari format di atas perlu diperhatikan bahwa semua variable AH & AL, BH & BL, adalah variable (hexadecimal) berpasangan yang membentuk 16bit data dan CH CL DH DL adalah variable berpasangan 32bit. Pada operasi fungsi ini hasilnya mempunyai lebar 32bit untuk selebihnya terjadi nilai yang salah. contoh:
jika Z = X * Y Y = 7281 X = 8596 maka C = 62587476
dalam SMART-AVR penulisannya adalah sebagai berikut:
Y = 7281 atau 1C71 Hex. 1C Hex ditulis BH = 28 71 Hex ditulis BL = 113
X = 8596 atau 2194 Hex. 21 Hex ditulis AH = 33 94 Hex ditulis AL = 148
hasilnya adalah di variable pasangan CH CL DH DL = 03 BB 02 54 hex.
untuk jelasnya dapat dilihat contoh program
Input variable: AH AL dan BH BL Output variable: CH CL DH DL
FN:DIV16
Adalah suatu fungsi matematika pembagian dengan lebar data 16bit dengan format:
AH AL / BH BL = CH CL sisa DH DL
syarat: AH AL > BH BL Dari format di atas perlu diperhatikan bahwa semua variable AH & AL, BH & BL, CH & CL, DH & DL adalah variable (hexadecimal) berpasangan yang membentuk 16bit data. Hasil operasi ini adalah CH CL dan sisanya DH DL.
jika Z = X / Y Y = 7281 X = 8596 maka C = 1 sisa 1315
dalam SMART-AVR penulisannya adalah sebagai berikut:
Y = 7281 atau 1C71 Hex. 1C Hex ditulis BH = 28 71 Hex ditulis BL = 113
X = 8596 atau 2194 Hex. 21 Hex ditulis AH = 33 94 Hex ditulis AL = 148
hasilnya adalah di variable pasangan CH CL DH DL = 00 01 05 23 hex.
untuk jelasnya dapat dilihat contoh program
Input variable: AH AL dan BH BL Output variable: CH CL DH DL
FN:CMP16
Adalah suatu fungsi perbandingan 16bit, formatnya: AH AL dibandingkan dengan BH BL dengan hasil CL, dimana kalau
AH AL > BH BL maka CL = 1
AH AL < cl=" 0" al =" BH" cl =" 0
SET / CLR PORT
Perintah SET dan CLR dapat dilihat dalam table berikut:
Adalah perintah untuk menulis text ke LCD module, dengan data text max. 25 character.
Untuk menjalankan perintah ini yang perlu diperhatikan adalah setting lokasi penulisan (LOCATE)
input variable: DATA TEXT
Adalah suatu perintah untuk mengakses internal timer, adapun perintah timer ini meliputi
TIMER RUN perintah menjalankan timer
TIMER STOP perintah untuk menghentikan timer
TIMER CLR perintah mereset variable timer sekaligus menghentikan timer input output
variable: TIMH dan TIML
Perintah komunikasi
Adalah perintah untuk membaca communication port. komunikasi data mempunyai format baudrate 4800 bps, 8bit data, 1stop bit. Jika perintah ini dijalankan, maka system akan menunggu sampai ada masukkan dari port serial, dengan format data dalam bilangan hexadecimal.
Output variable: RCOM
Adalah perintah untuk menulis ke communication port.
Input variable: TCOM
Adalah perintah untuk mengirim data string melalui serial komunikasi port, panjang data string maximum 25 character.
(bersambung jika ada update perintah baru)
Rabu, 02 Desember 2009
ATMega8 sebagai SmartAVR Basic
SMART-AVR adalah sarana untuk belajar microcontroller bagi pemula, dimana bahasa sebagai kendala utama untuk memulainya. Module atau chip SMART-AVR adalah keluarga microcontroller AVR keluaran ATMEL dengan type ATMega8 dimana pada versi sebelumnya saya menggunakan type AT90S4433 yang telah langka di pasaran.
Sayang sekali program SMART-AVR yang saya buat masih under DOS sehingga kurang menarik, tetapi di luar itu fungsi dari microcontroller adalah tujuan saya.
Dengan menggunakan chip SMART-AVR, pengguna tidak lagi menggunakan ISP programmer, tetapi hanya lewat download mode dari system SMART-AVR melaluai RS232 communication biasa.
SMART-AVR juga dilengkapi dengan fasilitas translate program semi basic ke assemler AVR yang memudahkan bagi pemula untuk menggunakan chip microntroller ATMega8, karena dengan bahasa semi basic ini system telah dilengkapi dengan kernel program yang dapat mengakses perangkat luar seperti fasilitas - fasilitas sebagai berikut :
- KEYPAD 4x4
Dengan fasilitas ini sangat memudahkan pengguna, kerena tidak perlu repot-repot membuat program pembacaan keypad. Cukup satu perintah READ KEY atau FN:KEY dalam bahasa Basic, SMART-AVR akan secara otomatis memberikan program pembacaan keypad. Keypad 4x4 schematic yang saya buat agak unik, karena hanya merupakan pembagi tegangan yang akan dibaca oleh ADC - LCD MODULE bus. (Hitachi HD44780 controller / compatible)
Suatu fasilitas untuk mengakses lcd module (write mode), sebagai contoh jika di inginkan menulis tulisan ke lcd module cukup dengan menulis program basic TEXT: Hallo..... maka dengan perintah diatas lcd module akan menampilkan tulisan Hallo..... - COUNTER Input
suatu fasilitas untuk membaca pulsa dan menghitungnya - SERIAL COMMUNICATION
Dengan fasilitas ini memungkinkan hubungan ke perangkat luar dengan menggunakan serial communication 4800 bps. - 5 Chanel Analog Input
Suatu fasilitas untuk mengolah sinyal analog dengan resolusi 10bit. Jika keypad tidak digunakan port analog input bisa digunakan sebanyak 6 chanel. Pengoperasian sangat mudah, dengan menggunakan printah READ ADCx, maka ADC chanel x dapat di baca dalam register ADCH dan ADCL. - 3 Chanel PWM Output
Fasilitas tegangan output / DAC berupa PWM dengan lebar data 8bit - I²C BUS
suatu fasilitas untuk mengakses perangkat luar dengan menggunakan I²C bus, sebagai contoh untuk akses ke EEPROM, RTC, ADC, DAC yang menggunakan system bus I²C. - General purpose I/O.
Meskipun dalam prakteknya, perangkat luar yang telah disediakan tidak digunakan bisa digunakan sebagai I/O serbaguna, jadi jumlah I/O tergantung design rangkaian yang digunakan. Jika di inginkan jumlah I/O yang lebih banyak dapat menggunakan perangkat I²C yang mempunyai fungsi sebagai parallel digital I/O - 512 byte General purpose EEPROM
- 3072 byte program memory
Schematic dasar dari SMART-AVR meliputi fasilitas - fasilitas I/O seperti di jelaskan di atas.
Schematic dasar Smart-AVR basic
Saya juga menuliskan programming tutorial untuk mempermudah pemahaman pemprograman SMART-AVR ini.
Program kompilasi SMART-AVR yang telah saya buat masih kurang stabil, tetapi dapat digunakan.




