Menggunakan LCD

Penampil LCD cukup mudah ditemukan di pasaran, terutama ukuran 16×2. Harganya pun relatif terjangkau.

Di dalam penggunaannya, hubungan antara mikrokontroler dan LCD dapat menggunakan hubungan 8-bit atau 4-bit. Pilihan kedua lebih banyak digunakan karena akan menghemat pin I/O 🙂 Selain pin data, juga perlu dihubungkan pin RS dan pin E.

Menggunakan penampil LCD 16*2, khususnya dengan mikrokontroler MCS51 dan BASCOM-8051, relatif mudah. Berikut adalah contoh program untuk menampilkan kata HELLO WORLD! pada dua baris LCD:

Config LCD = 16*2
Config lcdpin=pin, db4=p0.4, db5=p0.5, db6=p0.6, db7=p0.7,e=p0.3, rs=p0.2

Cursof Off
Cls
Lcd “Hello”
LowerLine
Lcd “World!”
End

Memprogram EEPROM I2C dengan Bahasa C

Berikut adalah contoh bagaimana meng-akses I2C EEPROM Atmel 24C02 menggunakan CodeVision-AVR:

/* bus I2C dihubungkan dengan PORTB */
/* sinyal SDA pada bit 3 */
/* sinyal SCL pada bit 4 */

#asm
.equ __i2c_port=0x18
.equ __sda_bit=3
.equ __scl_bit=4
#endasm

#include <i2c.h>
#include <delay.h>
#define EEPROM_BUS_ADDRESS 0xa0

/* membaca satu byte dari EEPROM */
unsigned char eeprom_read(unsigned char address) {
unsigned char data;
i2c_start();
i2c_write(EEPROM_BUS_ADDRESS);
i2c_write(address);
i2c_start();
i2c_write(EEPROM_BUS_ADDRESS | 1);
data=i2c_read(0);
i2c_stop();
return data;
}

/* menulis satu byte ke EEPROM */
void eeprom_write(unsigned char address, unsigned char data) {

i2c_start();
i2c_write(EEPROM_BUS_ADDRESS);
i2c_write(address);
i2c_write(data);
i2c_stop();

/* jeda 10ms untuk menyelesaikan penulisan */
delay_ms(10);
}

void main(void) {
unsigned char i;

/* inisialisasi bus I2C */
i2c_init();

/* menulis byte 55h pada alamat AAh */
eeprom_write(0xaa,0x55);

/* membaca byte dari alamat AAh */
i=eeprom_read(0xaa);

while (1); /* loop selamanya */
}

Memprogram EEPROM I2C dengan BASCOM-AVR

I2C

I2C singkatan dari Inter Integrated Circuit, adalah sebuah protokol untuk komunikasi serial antar IC, dan sering disebut juga Two Wire Interface (TWI). Bus yang digunakan untuk komunikasi antara mikrokontroler dan divais periferal seperti memori, sensor temperatur dan I/O expander.

Komunikasi dilakukan melalui dua jalur: SDA (serial data) dan SCL (serial clock). Setiap divais I2C memiliki 7-bit alamat yang unik. MSB adalah fix dan ditujukan untuk kategori divais. Sebagai contoh, 1010 biner ditujukan untuk serial EEPROM. Tiga bit berikutnya memungkinkan 8 kombinasi alamat I2C, yang berarti, dimungkinkan 8 divais dengan tipe yang sama, beroperasi pada bus I2C yang sama. Pengalamatan 7-bit memungkinkan 128 divasi pada bus yang sama. Alamat I2C dikirim dalam byte pertama. LSB dari byte ini digunakan untuk menunjukkan bila master akan melakukan penulisan (0) atau pembacaan (0) terhadap slave.

Divais yang mengirim data sepanjang bus disebut master, divais yang menerima data disebut slave. Master memulai transmisi dengan sebuah sinyal start, dan menghentikan transmisi dengan sebuah sinyal stop pada jalur SDA. Selama sinyal start dan stop, jalur SCL harus dalam keadaan high. Setelah master memulai pengiriman data dengan sebuah sinyal start, master menulis satu byte alamat divais kepada slave. Setiap byte data harus memiliki panjang 8-bit. Slave harus memberikan konfirmasi dari byte data yang diterimanya dengan sebuah bit acknowledge (ACK).

Compiler BASCOM-AVR dapat digunakan untuk membuat program yang dapat melakukan penulisan dan pembacaan ke dan dari EEPROM. BASCOM-AVR memiliki beberapa perintah terkait dengan pengendalian bus I2C.

  • Config SDA : meng-konfigurasi jalur SDA, misalnya PORTB.0
  • Config SCL : meng-konfigurasi jaluar SCL, misalnya PORTB.1
  • I2cstart : menghasilkan sebuah kondisi start
  • I2cstop : menghasilkan sebuah kondisi stop
  • I2cwbyte : menulis satu byte pada divais target
  • I2crbyte : membaca satu byte dari divais target

Dalam BASCOM-AVR, pertama kita harus meng-konfigurasi port yang digunakan untuk jalur SDA dan SCL dari bus I2C. Selanjutnya, kita kirimkan alamat divasi untuk memilih EEPROM yang terhubung dengan bus I2C. Setelah itu kita kirimkan dua byte ke EEPROM untuk memilih alamat dalam EEPROM dimana kita akan menuliskan data. Byte terakhir yang dikirim dalam rangkaian penulisan adalah byte data.

[sourcecode language=”c”]
Dim D_w As Byte , D_r As Byte

Config Lcdpin = Pin , Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portb.1 ,
Db7 = Portb.0 , E = Portb.6 , Rs = Portb.7

Config Lcd = 16 * 2
Cls
Cursor Off

Config Scl = Portd.0
Config Sda = Portd.1

D_w = 100

'********** menulis satu byte ke EEPROM ***********************************************
I2cstart 'memulai
I2cwbyte &amp;B1010_0000 'kirim alamat divais
I2cwbyte 0 'H adress dari EEPROM
I2cwbyte 0 'L adress dari EEPROM
I2cwbyte D_w 'data ke EEPROM
I2cstop 'berhenti
Waitms 10

'********** membaca dari EEPROM **********************************************
I2cstart 'mulai
I2cwbyte &amp;B1010_0000 'kirim alamat divais
I2cwbyte 0 'H address dari EEPROM
I2cwbyte 0 'L address dari EEPROM
I2cstart 'ulangi start
I2cwbyte &amp;B1010_0001 'alamat slave untuk pembacaan
I2crbyte D_r , Nack 'baca byte dari EEPROM
I2cstop ' stop

Lcd "D_w= "
Lcd D_w 'show byte on LCD
Lowerline
Lcd "D_r= "
Lcd D_r
End
[/sourcecode]


Workshop: Pemrograman Praktis Mikrokontroler PIC untuk Aplikasi Robot

Pada hari Selasa dan Rabu, 19-20 Agustus 2008, saya dan DR. Riza Muhida, asisten profesor bidang Mekatronika di International University Malaysia, memberikan workshop setengah hari kepada 34 orang guru dan siswa dari SMPK/SMAK TRIMULIA dan SMP BIntang Mulia Bandung. Ini merupakan kegiatan workshop mikrokontroler dan robotika pertama untuk kalangan sekolah menengah, khususnya di kota Bandung.

Dengan menggunakan mikrokontroler PIC dan Bahasa C, serta pemrograman mikrokontroler melalui port serial komputer; para guru dan siswa diajak untuk menyelami aplikasi praktis, bagaimana memprogram mikrokontroler, membuat aplikasi sistem lalu lintas, sistem keamanan, membaca data dari sensor, dan lain-lain; serta bagaimana mengendalikan motor, yang nantinya akan digunakan dalam aplikasi robot.

Saat ini, mikrokontroler dan Bahasa C bukan lagi konsumsi para mahasiswa di perguruan tinggi. Dengan pola pembelajaran yang mengedepankan kepraktisan dan kemudahan, serta dukungan dari teknologi terkini, para siswa sekolah menengah pun dapat menikmatinya. Riding the wave dan Don’t Reinventing the Wheel.

Tahapan Pemrograman Mikrokontroler

Berikut adalah tahapan pemrograman mikrokontroler PIC dengan bahasa BASIC:

Memrogram Mikrokontroler PIC dengan BASIC

Pada saat kemunculan komputer pribadi di era 1980an, bahasa BASIC cukup populer. Saat ini, BASIC masih diperhitungkan sebagai bahasa pemrograman yang paling mudah digunakan, tidak terkecuali di dalam dunia mikrokontroler. BASIC memungkinkan pengembangan aplikasi lebih cepat dibanding bahasa assembly. Ketika menulis kode untuk mikrokontroler, programmer sering kali berhadapan dengan isu yang sama, seperti komunikasi serial, menampilkan informasi pada tampilan LCD, membangkitkan sinyal PWM, dan yang lainnya. Untuk maksud mem-fasilitasi pemrograman, BASIC menyediakan sejumlah rutin dan pustaka untuk memecahkan masalah ini.

Dalam konteks ukuran program dan kecepatan eksekusi, assembly memiliki sedikit keunggulan dibanding BASIC. Namun, kita bisa menyisipkan kode assembly di dalam BASIC, untuk menangani bagian dimana waktu eksekusi merupakan hal yang kritis.

Mikrokontroler modern seperti PIC, meng-eksekusi instruksi dalam satu siklus. Jika clock mikrokontroler adalah 4MHz, maka satu instruksi assembly memerlukan 250ns x 4 = 1us. Secara teknis, satu perintah BASIC terdiri dari sejumlah instruksi assembly. Waktu eksekusi untuk setiap perintah merupakan jumlah dari waktu eksekusi dari sejumlah instruksi assembly yang mewakilinya.

Saat ini, pilihan terbaik untuk pengembangan aplikasi dengan BASIC adalah PIC16F84, PIC16F87x, PIC16F62x, PIC18Fxxx. Kontroler ini memiliki program memory dengan teknologi flash, yang dapat dihapus dan diprogram ulang secara cepat, sehingga memungkinkan debugging secara cepat pula. Dengan satu kali klik mouse di dalam programming software, program mikrokontroler dapat secara instan dihapus kemudian di-reload tanpa harus mencabut chip dari alat. Program yang telah di-load ke dalam memori flash dapat tersimpan walaupun catu daya dimatikan. Disamping memori flash, mikrokontroler seri PIC16F87x dan PIC16F84 memiliki 64-256 byte memori EEPROM internal, yang dapat digunakan untuk menyimpan data program dan parameter lain ketika catu daya dimatikan. Instruksi BASIC, EEPROM_Read dan EEPROM_Write, dapat digunakan untuk keperluan ini.

Berikut adalah program LED berkedip yang dibuat dengan mikroBASIC untuk mikrokontroler PIC.

program LED_Blink
main:
 TRISB = 0         ' Configure pins of PORTB as output
eloop:
 PORTB = $FF       ' Turn on diodes on PORTB
 Delay_ms(1000)    ' Wait 1 second
 PORTB = 0         ' Turn off diodes on PORTB
 Delay_ms(1000)    ' Wait 1 second
 goto eloop            ' Stay in loop
end.

 

Menggunakan ADC pada ATmega8535

Dalam mikrokontroler keluarga AVR, khususnya kelas ATmega, umumnya sudah dilengkapi dgn ADC – Analog to Digital Conver, yang tertanam di dalamnya. Sebagai contoh, ATmega8535 yang cukup populer di negeri ini.

Menggunakan fasilitas ADC yang terdapat dalam ATmega8535 dengan Bahasa BASIC, cukup mudah. Cukup melakukan inisialisasi untuk modus operasi, prescaler dan tegangan referensi yang digunakan. Selanjutnya, data analog siap diubah menjadi digital.

Berikut adalah contoh penerapannya dengan menggunakan BASCOM-AVR:

$regfile = "m8535.dat"
$baud = 9600
Config Adc = single, Prescaler = auto, Reference = avcc
Start Adc
Dim W as Word
Do
  W = Getadc(0)
  Print W
  Waitms 1000
Loop
End

Selamat mencoba.

NEXT SYSTEM
Robotics Learning Center
ITC Kosambi F2
Jl. Baranang Siang 6-8
Bandung 40112
Tel. (022) 4222062, 70775874

Email: info@nextsys.web.id

Official Website: http://edukasi.nextsys.web.id

Menggunakan ADC

Dalam dunia elektronika, istilah ADC atau Analog to Digital Converter,
sudah sangat umum. Banyak chip untuk fungsi tersebut yang dapat kita
jumpai di pasaran. Satu yang cukup populer adalah ADC 0809, yang
menyediakan input analog 8 kanal dan output 8 bit. Untuk yang ingin
lebih ringkas, dapat menggunakan ADC 0831. Chip ini menyediakan input
analog 1 kanal dan output serial. Ukuran fisiknya cuma 8 pin. Namun,
kita harus membayar ekstra untuk ukurannya yang kompak 🙂

Namun, dalam beberapa kasus konversi, kita tidak perlu menggunakan
chip ADC, namun cukup menggunakan konsep RCTime – Resistor, Capacitor,
Time; memanfaatkan waktu pengisian kapasitor.

Dalam mikrokontroler BASIC Stamp, sudah ada command untuk maksud
tersebut. Jadi, kalau kita perlu meng-capture data analog dari
rangkaian Photocell, Potensiometer atau Thermistor; cukup merangkainya
dengan sebuah Capacitor; kemudian memanfaatkan command RCTIME. Command
ini akan menghitung berapa lama waktu pengisian capacitor, yang
nilainya akan berubah sesuai dgn perubahan nilai resistansi yang akan
di-capture.

LOW 0
RCTIME 0, 1, x

Kita akan mendapatkan nilai hasi konversi: x 🙂

Jadi, utk aplikasi pengendali lampu berdasarkan intensitas cahaya
matahari yang dapat diatur derajat intensitasnya secara digital, cukup
gunakan RCTIME 😉

LOW 0
RCTIME 0, 1, x
IF ( x = 13000 ) THEN nyalakan_lampu ELSE matikan_lampu

Selamat ber-eksplorasi!

Mengapa Memilih PICAXE?

Mikrokontroler merupakan single chip computer yang saat ini relatif
populer, baik di kalangan industri maupun pendidikan. Dari sekian banyak
pilihan, terdapat sejumlah mikrokontroler yang sejak semula memang
dirancang untuk sebuah kemudahan dalam penggunaannya (teknologi
seyogyanya membawa kemudahan, bukan). Sebut saja produk turunan dari
mikrokontroler PIC yang populer dengan nama PICAXE
(http://www.rev-ed.co.uk).

Sistem PICAXE menawarkan harga yang ekonomis untuk sebuah solusi yang
powerful dan simple. Program dapat di-download langsung melalui kabel,
tidak memerlukan programmer atau eraser. Software untuk memprogramnya
disediakan secara cuma-cuma.

Program dapat dibuat secara grafis menggunakan flowchart, serta dapat
juga diprogram dengan Bahasa BASIC. Keduanya tersedia dalam software
yang bebas digunakan.

Jadi, PICAXE bisa disebut sebagai sistem, karena ke dalamnya sudah
dimasukkan sejumlah fasilitas. Ini semua untuk memudahkan penggunanya.

Agak disayangkan, saya belum menemukan produk ini di Indonesia (kalau
ada rekan yang mengetahuinya, silahkan share). Distributor terdekat ada
di Singapura. Mungkin Pak Riza bisa menambahkan, apakah di Malaysia ada
distributor-nya? atau harus impor dari Singapura? 🙂

Mengapa Memilih Mikrokontroler AVR?

Kebanyakan pengguna MCS51 beralih ke AVR saat membutuhkan kecepatan yang lebih tinggi. Bisa dipahami karena kebanyakan instruksi di-eksekusi dalam satu siklus clock saja (bandingkan dgn MCS51 yang memerlukan 1-12 siklus clock). Kedua, di kebanyakan chip AVR buatan Atmel – www.atmel.com – sudah memiliki built-in ADC (biasanya 10 bit), sehingga untuk meng-capture masukan analog, tidak perlu menambahkan rangkaian eksternal, kecuali resolusi 10-bit tidak memadai.

Dari sisi bahasa pemrograman, khususnya bahasa tingkat tinggi, hampir tidak ada perbedaan. Hanya perlu perhatian pada fitur spesifik yg hanya dimiliki oleh AVR.

Harga? Untuk yang non-industrial standard, kelihatannya cukup murah. Misalnya saja ATTINY2313 (2k Flash, 20 pin, 18 pin I/O, dapat dipacu hingga 20MHz) sekitar 15 ribu. Yang lebih besar seperti ATMEGA8 (8k Flash) sekitar 15 ribu juga. Yang memiliki built-in ADC seperti ATTINY26 (2k Flash, 11 channel ADC 10 bit) sekitar 16 ribu. Yang lebih besar seperti ATMEGA8535 sekitar 50 ribu. Untuk yg membutuhkan flash yang besar hingga 128k, bisa memilih ATMEGA128, yang harganya sekitar 80 ribu.

Jadi, dari sisi harga, relatif terjangkau.

Berikut adalah contoh pemrograman dalam bahasa BASIC (dgn BASCOM-AVR – www.mcselec.com) untuk membuat sebuah LED yang terhubung dgn port B.0 berkedip:

Config Portb = Output 'set port B as output

Do
 Portb.0 = 1 ' set port B high
 Waitms 500 ' wait 500 ms
 Portb.0 = 0 ' set port B low
 Waitms 500 ' wait 500 ms
Loop

Cukup sederhana, bukan? 🙂