Minggu, 13 Juni 2010

Smart-AVR sebagai Kontrol temperatur ON/OFF menggunakan LM35





Seperti telah dibahas dalam contoh sebelumnya tentang pembacaan temperature dengan LM35, dalam contoh kali ini saya akan memberikan rancangan sederhana bagaimana memfungsikan LM35 sebagai control on/off. Dengan acuan rangkaian di atas, set point dimasukkan melalui pemutaran variable resistor yang akan langsung ditampilkan di LCD modul (2 x 20 atau 4 x 20) untuk mengetahui seberapa besar set point yang diinginkan. Sebagai output saya menggunakan relay 12volt dan status relay ini juga akan di tampilkan di layar LCD.
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

RETURN

‘***********************************************************************
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



Dalam contoh kali ini saya akan memberikan cara membaca sensor temperature LM35. Selain murah LM35 cukup mudah untuk di olah 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

START:

HHI = 0

GOSUB ENTER

SEND: BACA SENSOR LM35

GOSUB ENTER
MAIN:

READ AIN4

VAR2 = ADCL / 2

SEND: TEMPERATUR =

GOSUB TAMPIL

SEND: CELCIUS

TCOM = 13

WRITE COM

DELAY = 10

GOTO MAIN
ENTER:

DELAY = 1

TCOM = 13

WRITE COM

TCOM = 10

WRITE COM

RETURN

TAMPIL:

'MENAMPILKAN BILANGAN VAR2 KE COM

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

RETURN
‘****************************************************************


Setelah program dicompile dan didownload kalau dijalankan dengan hyperterminal akan menjadi seperti berikut:


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





Dalam contoh sebelumnya telah saya berikan contoh bagaimana membaca single 1-wire temperature sensor dengan menggunakan SMART-AVR Basic. Sekarang akan saya berikan contoh bagaimana menggunakan fasilitas 1-wire SMART-AVR Basic digunakan untuk membaca multi sensor temperature DS18B20 (max16 pcs), dalam contoh ini saya menggunakan 3pcs DS18B20. Dalam menggunakan mengakses multi sensor ini ada beberapa perintah yang digunakan dalam SMART-AVR Basic yaitu:
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



Dalam SMART-AVR juga telah tersedia fasilitas untuk mengakses one-wire (1-wire) bus. Dalam contoh kali ini saya akan memberikan bagaimana mengakses single 1-wire device. Devicde yang saya gunakan dalam contoh ini adalah temperature sensor DS18B20. Dengan menggunakan rangkaian di atas, terlihat rangkaian sangat sederhana, hanya menggunakan 3 komponen pokok (controller, sensor dan rs232 chip), ini saya maksudkan untuk rangkaian uji coba, setelah mengerti cara menggunakannya bias dikembangkan sendiri dengan menggunakan lcd module atau yang lainnya. Ada baiknya untuk memulai project ini membaca terlebih dahulu datasheet DS18B20. Dalam menggunakan single 1-wire ini ada beberapa perintah yang digunakan dalam SMART-AVR Basic yaitu:
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







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:





Selamat mencoba....




CONTOH PROGRAM TIMER dalam SMART-AVR Basic



Dengan menggunakan rangkaian diatas saya berikan contoh bagaimana menggunakan fasilitas 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 contoh sederhana ini saya memberikan aplikasi SMART-AVR untuk menggerakan 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

Dalam contoh kali ini saya memberikan cara mengatur kecepatan motor DC sederhana yang nenggunakan fasilitas PWM dalam 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:










Berikut contoh program yang bisa saya berikan:

‘******************************************
'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 <>
GOTO LOOP1


HOLD_HI:

SET PB2

SET PB3

DELAY = 100

GOTO LOOP1


HOLD_LO:

SET PB2

SET PB3

DELAY = 100

GOTO LOOP


MASUK:

PWM1 = VAR11

DELAY = 10

RETURN

‘******************************************

Dalam program yang saya berikan terlihat ada dua bagian program dimana satu untuk menaikkan nilai PWM1 dan yang lainnya untuk menurunkan nilai PWM1. LED pada port PB2 akan menyala jika kecepatan motor meningkat, sebaliknya LED pada port PB3 akan menyala jika kecepatan motor menurun.


Rabu, 03 Maret 2010

Latihan No.7 "Communication"

Dalam topik ini saya akan membahas bagaimana Smart-AVR berinteraksi dengan perangkat luar menggunakan communication port.
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:


Demikian contoh yang dapat saya berikan semoga bermanfaat.
regard
08121713025

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"


Dalam Smart-AVR Basic, fasilitas counter digunakan untuk menghitung pulsa digital 0 - 5v yang secara otomatis masuk kedalam register COUNTH dan COUNTL.
Dengan menggunakan rangkaian yang saya berikan dapat dibuat program counter dengan membaca pulsa dari sumber pulsa.
Programnya sangat sederhana seperti diperlihatkan di bawah.
Setelah di-download dan dijalankan, maka LCD module akan menampilkan tulisan "TEST COUNTER" pada line pertama dan pada line kedua akan tampil tulisan "CNT READ = " dan nilai counter yang telah dibaca oleh system. Programnya sebagai berikut:

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"

Dalam latihan 1 ini akan di tunjukkan bagaimana membuat program output yang dihubungkan ke LED dan pemakaian perintah FOR dan NEXT.
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