Rabu, 05 Juni 2013

SIMULATOR RANGKAIAN MIKROKONTROLLER

Beberapa kali mendapat pertanyaan bagaimana cara melihat jalannya program mikrokontroler yang kita buat dengan Simulator Proteus. Saya sendiri jarang ya pakai gituan, simulator maksudnya. Lebih seneng & mantab kalo langsung berurusan dengan hardwarenya. Dulu memang terkadang saya memakainya. Lengkap memang, banyak komponen dan tipe mikrokontroler tersedia di Proteus.
Baiklah, kita mulai dari yang yang paling sederhana. Simulasi membuat led berkedip.
Hanya perlu dua komponen saja : mikrokontroler dan led, tapi kalau untuk hardware yang sebenarnya saran saya ditambahi resistor sebagai pembatas arus.
  1. Pertama jalankan Proteus (ISIS), saya pakai versi 7. Trus pada object selectortempatkan satu mikrokontroler ATmega8535 dan satu led merah.
  2. Klik toolbar ‘Pick from Libraries’ seperti tanda nomor 1.
  3. Akan muncul form ‘Pick Devices’.
  4. Pada kolom Keywords ketik ‘atmega8535’ (tanda no 2) maka pada sisi sebelah kanan (Results) muncul ATMEGA8535.
  5. Klik ATMEGA8535 (tanda nomor 3), maka muncul preview dari ATmega8535 (tanda nomor 4).
  6. Terakhir klik tombol ‘OK’ seperti pada tanda nomor 5. Klik kiri pada mouse akan muncul ATmega8535 dengan gambar yang belum jelas.
  7. Posisinya akan mengikuti gerakan kursor pada mouse. Posisikan pada tengah – tengahEditing Window kemudian klik kiri.
  8. Selanjutnya pada Editing Window muncul ATmega8535.
  9. Selanjutnya kita pasang led. Ulangi mulai langkah 2 sampai 7. Pada keywords ketik ‘led’.
  10. Maka komponen led akan muncul.
  11. Kita masih perlu satu lagi yaitu ground. Pada Object Selector Bar pilih Terminals Mode.
  12. Pilih terminal ‘GROUND’ (klik kiri). Kemudian klik kiri di Editing Window, posisikan di bawah led, terus klik kiri.
  13. Nah tugas berikutnya membuat jalur, alias menghubungkan led ke mikrokontroler. Letakkan kursor pada ujung kaki anode led kemudian klik kiri. Tarik kursor keatas (buat garis) kemudian kekanan sampai ujung kaki PB0 (PORTB.0) kemudian klik kiri.
  14. Hal yang sama juga untuk menyambung kaki catode led ke ground.
  15. Sudah selesai. Lha mikrokontroler kok tidak dapat catu daya (tegangan) ?. untuk mikrokontroler sudah otomatis kaki Vcc dan Gnd akan dapat catu daya. Trus kristalnya gimana ? Kita pakai saja osilator internal 1 Mhz. Ok ?
    Nah terus simpan ya, gampang kok, dari menu File ? Save Design. Bisa juga toolbar Save Design gambar disket (ssst…ngomong – ngomong tahu disket gak ? karena itu piranti jadul banget kan..hehe…).
    Tahap selnjutnya siapkan programnya. Kita pakai saja yang paling gampang, BASCOM-AVR. Bikin program begini saja :
    $regfile = “m8535.dat”
    $crystal = 1000000
    Config Portb = Output
    Do
     Portb.0 = 1
     Wait 1
     Portb.0 = 0
     Wait 1
    Loop
    End
    Simpan, misalnya dengan nama Led blink.bas, trus compile. Nah selanjutnya kita akan ‘mendownload’ program ke ATmega8535 yang ada di Proteus.
    Caranya :
    1.    Klik kiri 2 kali pada ATmega8535, sehingga muncul dialog ‘Edit Component’.
    2.    Pada kolom Program File klik tombol ‘Open’.
    3.    Pilih file program, yaitu Led blink.hex.
    4.    Klik ‘OK’, nah program dah masuk ke memorinya si mikro.
    Proses download selesai. Lanjut untuk menjalankan simulator. Cukup 1 langkah : klik tombol Play yang ada di pojok kiri bawah.
    Hasilnya akan terlihat led berkedip denga delay 1 detik.
    Gampang bukan ? Ya kalo masih sedikit bingung tidak mengapa. Segala sesuatu itu kadang sulit pada awalnya, selanjutnya rumit..,hehe.. bukanlah, maksud saya asal tekun dan sabar Insya Allah juga mahir…


    SUMBER

Rabu, 13 Februari 2013

Menampilkan data dari mikrokontroler ke LCD 2x16


Ingin menampilkan data dari mikrokontroler ke LCD ...? anda bingung caranya..? Pada postingan kali ini, saya ajak anda untuk belajar bagaimana menampilkan data dari mikrokontroler ke LCD. Untuk mikrokontroler kita menggunakan Atmega 8535 dan LCD 2x16.
Adapun keterangan kaki LCD 2x16 yaitu sebagai berikut:




Untuk hubungan ke mikrokontroler, dalam hal ini kita menggunakan mikrokontroler Atmega8535, kita bisa menggunakan semua PORT baik PORT A, PORTB, PORTC maupun PORTD. Sekarang kita akan menghubungkan LCD ini ke PORTC dari mikrokontroler, berikut ini gambar koneksi antara mikro ke LCD 2x16

Disini kita menggunakan koneksi data 4 bit antara LCD dan mikro. Setelah selesai, membuat rangkaian diatas selanjutnya code program. kita terlebih dahulu membuat file header-nya. berikut file headernya. simpan dengan nama file lcd.h

/* ================================================================

 nama file = lcd.h
 pembuat  = Bayu Sasongko, teknik elektro 2008
 deskripsi = file header LCD 4 bit

 file header ini digunakan untuk menampilkan karakter
 ke dalam lcd. copykan file lcd.c dan lcd.h ke dalam
 folder tempat proyek anda berada. untuk konektor LCD
 ke mikrokontroler ikuti aturan berikut ini:

  
  PIN LCD    PIN MIKRO

R/W  (5)   - Ground
VEE   (3)   -  Vcc
   
  RS   (4)     0
  EN  (6)  1  
  D4  (11) 4  
  D5  (12) 5  
  D6  (13) - 6 
  D7 (14) 7  



  pin R/W hubungkan saja ke ground, karena hanya menggunakan mode
  write saja.
================================================================
*/

#define LCD_PORT PORTC // PORT yang digunakan untuk data
#define LCD_DDR DDRC

// bit used (low(D3-D0) or high nibble(D7-D4)
#define HIGH_NIBBLE // uncomment this if low nibble pin used

#define LCD_RS_PORT PORTC // control RS PORT pin

#define LCD_RS_DDR DDRC // control RS DDR pin

#define RS 0 // RS Pin


#define LCD_E_PORT PORTC // control E PORT pin

#define LCD_E_DDR DDRC // control E DDR pin

#define E 1 // E Pin



void lcd_init (void); // inisialisasi LCD

void goto_xy (uint8_t row,uint8_t column); // koordinat tempat karakter

void clrscr (void); // membersihkan display



Setelah itu kita juga perlu membuat file lcd.c, berikut ini codenya: 

#include <avr/io.h>
#include <stdio.h>
#include "lcd.h"

// used for printf operation
static int lcd_putchar(char c, FILE *stream);
static FILE mystdout = FDEV_SETUP_STREAM(lcd_putchar, NULL,
                                             _FDEV_SETUP_WRITE);
// delay
void delay_us(uint8_t us);

void clock_e (void)
{
LCD_E_PORT |= (1<<E);
delay_us(5);
LCD_E_PORT &= ~(1<<E);
delay_us(3);
}

void write_command(uint8_t command)
{
// clear RS pin
LCD_RS_PORT &= ~(1<<RS);
#ifdef HIGH_NIBBLE
LCD_PORT = (LCD_PORT&0x0f)|(command&0xf0);
clock_e();
LCD_PORT = (LCD_PORT&0x0f)|((command&0x0f)<<4);
clock_e();
#else
LCD_PORT = (LCD_PORT&0xf0)|((command&0xf0)>>4);
clock_e();
LCD_PORT = (LCD_PORT&0xf0)|(command&0x0f);
clock_e();
#endif
uint8_t i;
for(i=0;i<20;i++)
delay_us(100);
}

void lcd_init (void)
{
uint8_t i;
// delay 15 ms for LCD to power up
for(i=0;i<150;i++)
delay_us(100);
// set all data and control port as output
#ifdef HIGH_NIBBLE
LCD_DDR |= 0xf0;
#else
LCD_DDR |= 0x0f;
#endif
LCD_RS_DDR |= (1<<RS);
LCD_E_DDR |= (1<<E);
// clear RS pin
LCD_RS_PORT &= ~(1<<RS);

// 4 bit mode write squence
#ifdef HIGH_NIBBLE
LCD_PORT = (LCD_PORT&0x0f)|0x30;
#else
LCD_PORT = (LCD_PORT&0xf0)|0x03;
#endif
clock_e();
// 4.1 ms delay
for(i=0;i<41;i++)
delay_us(100);
clock_e();
// 100 delay
delay_us(100);
clock_e();
// 40 us delay
delay_us(40);
// 4 bit mode setting
// 4 bit 2 line 5 X 7 dot matrix
write_command(0x28);
// increment cursor after write byte
write_command(0x06);
// display on cursor off
write_command(0x0C);
clrscr ();
// set function for printf
stdout = &mystdout;
}

void goto_xy(uint8_t row,uint8_t column)
{
if (row == 1)
write_command (0x80 + column - 1);
else
write_command (0xC0 + column - 1);
}

void clrscr (void)
{
write_command(0x01);
}

static int lcd_putchar(char c, FILE *stream)
{
// set RS pin
LCD_RS_PORT |= (1<<RS);
#ifdef HIGH_NIBBLE
LCD_PORT = (LCD_PORT&0x0f)|(c&0xf0);
clock_e();
LCD_PORT = (LCD_PORT&0x0f)|((c&0x0f)<<4);
clock_e();
#else
LCD_PORT = (LCD_PORT&0xf0)|((c&0xf0)>>4);
clock_e();
LCD_PORT = (LCD_PORT&0xf0)|(c&0x0f);
clock_e();
#endif
// 2 ms delay
uint8_t i;
for(i=0;i<20;i++)
delay_us(100);
return 0;
}

void delay_us(uint8_t us)
{
TCNT0 = 257-us;
TCCR0 |= (1<<CS01);
loop_until_bit_is_set(TIFR,TOV0);
TIFR |= (1<<TOV0);
TCCR0 &= ~(1<<CS01);
}


atau silahkan download file lcd.h dan file lcd.c disini . kalau anda ingin merubah PORT nya misalnya mau ke PORTA ganti saja file lcd.h menjadi PORTA. Setelah file lcd.h dan lcd.c sudah jadi maka selanjutnya kita perlu me-load file tadi ke program avr studio


Selanjutnya di program utama kita perlu meng-include kan file header lcd.h kita ladi. kurang lebih begini tampilan program penampil teks ke LCD

Membuat USB Downloader untuk Mikrokontroler AVR Atmega8/16/32/8535




Setelah pada  postingan sebelumnya yaitu membuat sendiri downloader AVR atmega8/16/32/8535, sekarang saatnya kita membuat downloader yang menggunakan USB. Downloader yang menggunakan port paralel ( yang pinnya 25 buah) memang hanya membutuhan sedikit biaya, namun sekarang kebanyakan orang sudah beralih ke laptop dimana port paralel sudah sudah jarang ditemui lagi kecuali untuk laptop versi lama , bahkan
ada beberapa komputer pc yang saya temui sudah tidak port paralelnya lagi. Alternatifnya yaitu menggunakan port serial (port yang jumlah pinnya 9, sering disebut db9) atau menggunakan port USB. Port serial pun saya rasa juga sudah mulai jarang ada pada laptop-laptop terbaru, maka langsung aja kita membuat downloader menggunakan port yang universal yaitu port USB. USB downloader dibuat dengan komponen utama yaitu atmega8,Sebelumnya membuatnya sediakan berikut ini:

Software:
  • Deeptrace ( untuk membuat pcb atau kalau malas buat pcb pake pcb bolong)
  • PonyProg ( untuk mendownload program)
  • Downloader yang menggunakan port paralel
  • Download Drivernya disini
    Komponen elektronik
    1. AVR atmega8
    2. kristal 12 MHz
    3. kapasitor 22pF
    4. konektor USB dan kabel USB
    5. soket IC 14pin 2 buah
    6. resistor 10k, 68ohm atau 100 ohm, 2k2, 1K
    7. elko 10 uF/16 V dan kapasitor 100nF
    8. LED 3 buah
    9. housing 5 pin dan 4 pin
    10. Dioda zener 3.6 volt 2 buah
    Rangkai komponen diatas sesuai rangkain berikut ini:
    rangkaian di pcbnya:


    C1, C2       =  22pF        
    C3              = 10µF          
    C4              = 100nF       
    D1, D2       =  Z-Diode 3V9           
    IC1             =  ATMEGA8                        
    LED1          =  LED               
    LED2          =  LED              
    Q1              = 12Mhz   
    R1, R2        = 68 Ohm       
    R3              = 2,2 kOhm        
    R4, R5        = 470 Ohm          
    R6              = 10 kOhm             
    R7              = 1 kOhm                     
    X1              = USB     

    Rangkai komponen elektronik sessuai rangkaian diatas, setelah selesai program terlebih dahulu Atmega8 dengan program yang  didownload disini,  menggunakan downloader paralell. Karena menggunakan kristal 12 Mhz ganti setinga fuse bit Atmega8nya seperti berikut:


    Jika men-downloadnya sudah, pasangkan ATMEGA 8 ke soket, kemudian masukan tancapkan kabel usb ke komputer. Jika benar akan muncul tampilan seperti ini.
    Sebentar lagi akan minta driver, next next next aja, kemudian pilih folder tempat win-driver berada.


    Kemudian tinggal menunggu finish.Jika sudah finish, lepas kembali kabel usbnya,sesudah itu, masukan kembali kabel usb. Ketika dimasukan akan ada suara, seperti suara ketika kita memasukkan flash disk. Lihat led, led ada yang hidup (led power) dan ada yang mati (led untuk tanda busy).Sekarang USB downloader sudah jadi langka selanjutnya kita memerlukan software untuk menggunakan downloader ini, salah satu yang bisa digunakan yaitu Khazama, khazama saya pilih karena software ini memiliki ukuran yang kecil, dan kecepatan ketika memprogram mikrokontroler lebih tinggi daripada software yang lain seperti extreme burner avr, ataupun avrdude. Anda pun bisa menggunakan semua software tersebut untuk downloader USB ini. Untuk mendownload Khazama klik disini. Berikut Tampilan khazama




    Menurut pengalaman saya mikrokontroler yang akan kita program menggunakan downloader USB ini harus menggunakan kristal external (misalnya kristal 12 Mhz) dan fuse bitnya diatur agar mikrokontroler mengunakan external clock (pengaturannya sama seperti diatas tadi). Ketika saya coba tanpa memkai kristal, USB downloader ini ternyata tidak bisa dipakai. Sedangkan untuk pengaturan fuse bit ini dilakukan dengan menggunakan downloader paralel menggunakan software ponyprog. 

    Cara menggunakannya:
    • Hubungkan USB downloader yang kita buat tadi kekomputer
    • Hubungkan downloader dengan mikrokontroler
    • Buka khazama, pilih file, klik load flash file to buffer, 
    • pilih file hex yang akan diisikan ke mikro, 
    • setelah itu klik command dan pilih write flash buffer to chip, jika berhasil akan muncul seperti ini:


    Jika mikrokontroler yang akan didownload menggunakan usb downloader ini tanpa memakai kristal, terlebih dahulu ubah setingan fuse bit pada mikrokontroler target dengan setingan fuse bit seperti dibawah ini



    Selamat Berkreasi .....