Kamis, 03 Desember 2009

tutorial Smart-AVR basic

Bahasa Smart-AVR Basic adalah menggunakan bahasa basic pada umumnya, tetapi tidak semua command bisa diterapkan, setidaknya dengan bahasa yang sederhana ini dapat membantu pemula untuk belajar microcontroller.

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






READ KEY
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:



READ I2C
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)

READ AINx x = 1 s/d 5
adalah perintah membaca analog input dengan resolusi 10bit output variable: ADCH (msb data) ADCL (lsb data)

Perintah - perintah WRITE

WRITE LCD
Adalah perintah untuk menulis 1 character ke LCD module.dengan LOCATE untuk menentukan pada posisi mana character akan ditulis. Input variable: LCDDATA

WRITE COUNTER
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

WRITE EEPROM
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)

Perintah - perintah Function FN:

FN:HEX2BCD
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

FN:SWAP
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

FN:KEY
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.

FN:DASC
Adalah fungsi untuk merubah 1 digit BCD ke dalam format ASCII
Input variable: D2ASC
Output variable: D2ASC


LOCATE

Adalah fungsi untuk menentukan lokasi penulisan character pada LCD module. Input variable: LOCATE nilai yang diisikan di variable LOCATE untuk menentukan lokasi character yang akan ditulis. Berikut adalah data LOCATE pada LCD module dengan jumlah line dan character yang berbeda:

lcd 16x2:






lcd 20x2:




lcd 20x4









Untuk lokasi dari tiap LCD module yang lain dapat dilihat dalam datasheet-nya.

CLRLCD
Adalah fungsi untuk menghapus seluruh tampilan yang tampil di LCD module dan lokasi kembali pada posisi 00 (line1)

DELAY
Adalah perintah delay dengan factor delay di variable DELAY

SDELAY
Adalah perintah delay pendek dengan factor delay di variable SDELAY


Matematika 16 BIT

FN:SUM16
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

FN:SUB16
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:



Setiap port dapat di SET ke 1 atau di CLR ke 0 dengan perintah diatas.


TEXT: data text
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

TIMER
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

READ COM
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


WRITE COM
Adalah perintah untuk menulis ke communication port.
Input variable: TCOM


SEND: data string
Adalah perintah untuk mengirim data string melalui serial komunikasi port, panjang data string maximum 25 character.


CPTEXT: data string

Adalah perintah untuk membandingkan data string dengan line communication. Dengan panjang data string maximum adalah 16 character.

Output variable adalah CPFLAG.

CPFLAG = 1 jika data string sama dengan data masuk dari line input (communication)

CPFLAG = 0 jika data string tidak sama dengan data masuk dari line input (communication)


(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.



Selasa, 01 Desember 2009

Logic probe & pulse generator dengan ATTiny13

Project ini saya buat untuk membantu di setiap project digital yang saya buat.
Logic probe yang saya buat juga mempunyai pembangkit pulsa (pulse generator) dengan frequency output yang bervariasi.
Berikut gambar schematic logic probe dan pulse generator

Rangkaian Logic probe dan Pulse generator

Bagaimana rangkaian ini bekerja?
Dalam mode logic probe, JP1 harus posisi terbuka.
Jika rangkaian dihidupkan, Attiny13 membaca status dari probe.
Saya selalu memberi output PB0 untuk membaca status probe dalam kondisi terhubung ke rangkaian atau tidak.

Dapat dibayangkan bahwa jika probe terhubung dengan rangkaian logika, status logika di PB0 tidak berpengaruh terhadap pembacaan logika di PB1.
Jika probe tidak terhubung ke rangkaian logika, maka pembacaan PB1 harus dalam kondisi ambang dan lampu indikator hi dan low harus padam.
Dalam kasus ini logika PB0 sangat berpengaruh dalam pemprosesan logika yang dilakukan Attiny13. PB1 akan membaca status yang sama dengan status yang diberikan PB0.
Untuk mode pembangkit pulas (pulse generator), JP1 harus dalam posisi tertutup (terhubung).
Dengan menekan push button, rangkaian akan otomatis berpindah mode ke pulse generator, dengan menekan push button lagi akan didapat perubahan frequency output yang bebeda pula, sampai akhirnya kembali ke mode logic probe lagi.

Program Attiny13 untuk project ini dapat di download pada link berikut:
http://henel.automation.tripod.com/logic/logic.zip
Demikian project yang bisa saya sharing, semoga bias bermanfaat.

Special thank you to Kai Klaas in the http://www.8052.com forum than give me the circuit idea and also thank to everybody for help me.