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