Pemrograman LCD Karakter 2×16 Dengan Mikrokontroler AVR

November 27, 2009 edi nur rochman 1 comment

Kali ini, saya akan membahas sedikit mengenai pemrograman LCD Karakter 2×16 dengan mikrokontroler AVR. Mikrokontroler yang saya gunakan dalam pembahasan tulisan ini yaitu seri ATmega32.

Pada desain skematik LCD, Anda harus menghubungkan keseluruhan pin-pin data dan command LCD ke port mikrokontroler yang sama (misal Port A0-A7).  Pada contoh ini, saya menggunakan metode interfacing 4-bit data (LCD_4 – LCD_7). Sehingga pemilihan pin pada mikrokontroler disesuaikan dengan CVAVR di atas menjadi seperti berikut ini.

Perhatikan PA0-PA7 pada skema rangkaian! PA1 tidak digunakan, karena R/W pada LCD kita fungsikan sebagai “Write” saja sehingga cukup menghubungkan pin R/W pada LCD ke ground. Sedangkan PB3 kita gunakan sebagai pengontrol backlight pada LCD (LCD_BL).

CodeWizard akan meng-generate firmware dengan include “lcd.h”. Nah, file ini tidak saya gunakan karena saya membuat sendiri file include “lcdb.h” yang saya lampirkan pada akhir tulisan ini.

Berikut ini contoh firmware untuk pemrograman LCD Karakter 2×16.

latihan_lcd.c

#include <mega32.h>
#include <stdio.h>

// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0×1B ;PORTA
#endasm
#include <lcdb.h>

char sz[40];

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0×00;
DDRA=0×00;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0×00;
DDRB=0×00;

// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0×00;
DDRC=0×00;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0×00;
DDRD=0×00;

// LCD module initialization
LCD_Init();

// Global enable interrupts
#asm(“sei”)
//=============================================
while(1)
{

sprintf(sz, ” Ini Baris ke-1 \n Ini Baris ke-2 “);
LCD_printf(sz);
}
}

Berikut ini file library yang dibutuhkan oleh firmware di atas.

lcdb.c

#include <mega32.h>
#include <delay.h>
#include <stdio.h>
#include <string.h>

#define Clear_Display 0×01
#define Home 0×02
#define Entry_Mode 0×04
#define Set_Display 0×08
#define Set_Cursor 0×10
#define Function 0×20
#define Decrement 0×00
#define Increment 0×02
#define Shift_Off 0×00
#define Shift_On 0×01
#define Display_Off 0×00
#define Display_On 0×04
#define Cursor_Off 0×00
#define DCursor_On 0×02
#define Blink_Off 0×00
#define Blink_On 0×01
#define Four_Bits 0×00
#define Eight_Bits 0×10
#define One_Line 0×00
#define Two_Line 0×08
#define Font5×7 0×00
#define Font5×10 0×04

// Pins
#define LCD_pinRS            0×80                                // PA0
#define PORT_LCD_pinRS            PORTA
#define    LCD_pinRD            0×40                                // PA1
#define PORT_LCD_pinRD            PORTA
#define    LCD_pinEN            0×20                                // PA2
#define PORT_LCD_pinEN            PORTA
#define    LCD_BL_CTRL            0×10                                // PA3
#define PORT_LCD_BL_CTRL        PORTA

// Macros
#define    SET_LCD_pinRS            PORT_LCD_pinRS |= LCD_pinRS
#define RES_LCD_pinRS            PORT_LCD_pinRS &= ~LCD_pinRS

#define SET_LCD_pinRD            PORT_LCD_pinRD |= LCD_pinRD
#define RES_LCD_pinRD            PORT_LCD_pinRD &= ~LCD_pinRD

#define SET_LCD_pinEN            PORT_LCD_pinEN |= LCD_pinEN
#define RES_LCD_pinEN            PORT_LCD_pinEN &= ~LCD_pinEN

#define SET_LCD_BL_CTRL            PORT_LCD_BL_CTRL |= LCD_BL_CTRL
#define RES_LCD_BL_CTRL            PORT_LCD_BL_CTRL &= ~LCD_BL_CTRL

void LCD_Init(void)
{
DDRA = 0xff;
delay_ms(3);
LCD_CmdWrite(Function+Four_Bits+Two_Line+Font5×7);
delay_ms(3);
LCD_CmdWrite(Function+Four_Bits+Two_Line+Font5×7);
delay_ms(3);
LCD_CmdWrite(Function+Four_Bits+Two_Line+Font5×7);
delay_ms(3);
LCD_CmdWrite(Clear_Display);
delay_ms(3);
LCD_CmdWrite(Entry_Mode+Increment+Shift_Off);
delay_ms(3);
LCD_CmdWrite(0×0c);                                                // display on, cursor off, non-blink
delay_ms(3);
LCD_CmdWrite(0×02);                                                // cursor home

}

void LCD_CmdWrite(unsigned char uc)
{
char DL, DH;
DH=(((uc&0×80)>>7)+((uc&0×40)>>5)+((uc&0×20)>>3)+((uc&0×10)>>1));
DL=(((uc&0×08)>>3)+((uc&0×04)>>1)+((uc&0×02)<<1)+((uc&0×01)<<3));

RES_LCD_pinRS;
RES_LCD_pinRD;

SET_LCD_pinEN;         // Enable LCD
PORTA &= 0xf0;
PORTA |= DH;        // kirim High Nibble
RES_LCD_pinEN;         // beri pulsa LCD EN
LCD_delay_5us();

SET_LCD_pinEN;
PORTA &= 0xf0;
PORTA |= DL;        // kirim Low Nibble
RES_LCD_pinEN;                    // beri pulsa LCD EN
LCD_delay_3ms();

}

void LCD_DataWrite(unsigned char uc)
{
char DL, DH;
DH=(((uc&0×80)>>7)+((uc&0×40)>>5)+((uc&0×20)>>3)+((uc&0×10)>>1));
DL=(((uc&0×08)>>3)+((uc&0×04)>>1)+((uc&0×02)<<1)+((uc&0×01)<<3));

SET_LCD_pinRS;
RES_LCD_pinRD;

SET_LCD_pinEN;                     // Enable LCD
PORTA &= 0xf0;
PORTA |= DH;        // kirim High Nibble
RES_LCD_pinEN;                    // beri pulsa LCD EN
LCD_delay_5us();

SET_LCD_pinEN;
PORTA &= 0xf0;
PORTA |= DL;        // kirim Low Nibble
RES_LCD_pinEN;                     // beri pulsa LCD EN
LCD_delay_3ms();
}

void LCD_DataRead(unsigned char uc)
{
char DL, DH;
DH=(((uc&0×80)>>7)+((uc&0×40)>>5)+((uc&0×20)>>3)+((uc&0×10)>>1));
DL=(((uc&0×08)>>3)+((uc&0×04)>>1)+((uc&0×02)<<1)+((uc&0×01)<<3));

SET_LCD_pinRS;
SET_LCD_pinRD;

SET_LCD_pinEN;                     // Enable LCD
PORTA &= 0xf0;
PORTA |= DH;        // kirim High Nibble
RES_LCD_pinEN;                    // beri pulsa LCD EN
LCD_delay_5us();

SET_LCD_pinEN;
PORTA &= 0xf0;
PORTA |= DL;        // kirim Low Nibble
RES_LCD_pinEN;                     // beri pulsa LCD EN
LCD_delay_3ms();
}

void LCD_delay_5us(void)
{
unsigned char j;

for(j = 0; j < 5; j++);

}

void LCD_delay_3ms(void)
{
unsigned char i, j;

for(j = 0; j < 100; j++)
for(i = 0; i < 30; i++);
}

void LCD_delay_5ms(void)
{
unsigned char i, j;

for(j = 0; j < 100; j++)
for(i = 0; i < 50; i++);
}

void LCD_delay_10ms(void)
{
unsigned char i, j;

for(j = 0; j < 100; j++)
for(i = 0; i < 100; i++);
}

void LCD_printf(unsigned char *pc)
{

LCD_CmdWrite(0×80);                                                // 1st line, 1st position

while(*pc != NULL){

if (*pc == ‘\n’){                                            // next line?
LCD_CmdWrite(0xc0);                                        // 2nd line, 1st position
}
else{
LCD_DataWrite(*pc);                                        // put character
}

pc++;
}
}

void LCD_Blink(void)
{     unsigned char aaa;
SET_LCD_BL_CTRL;
for(aaa = 0; aaa < 100; aaa++)                                    // delay 1s
LCD_delay_10ms();
RES_LCD_BL_CTRL;
for(aaa = 0; aaa < 50; aaa++)                                    // delay 1s
LCD_delay_10ms();
}

void LCD_Light_On(void)
{      unsigned char aaa;
SET_LCD_BL_CTRL;
for(aaa = 0; aaa < 50; aaa++)                                    // delay 1s
LCD_delay_10ms();
}

void LCD_Light_Off(void)
{      unsigned char aaa;
RES_LCD_BL_CTRL;
for(aaa = 0; aaa < 50; aaa++)                                    // delay 1s
LCD_delay_10ms();
}

Tulisan terkait:

Selamat Hari Raya Idul Fitri 1430 H

September 21, 2009 edi nur rochman Leave a comment
Selamat Idul Fitri 1430 H

Selamat Idul Fitri 1430 H

Categories: Kartu Lebaran Tags:

My First Online Experience

July 23, 2009 edi nur rochman 2 comments

Siang malam ku selalu
Menatap layar terpaku
Untuk online online
Online online…

(kutipan lirik “Online”-nya Saykoji)

my first online experienceKata “online” dalam lagu ini seringkali membuat saya ikut bersenandung sambil menggoyang-goyang kepala. Hahaha.., kenapa begitu ya? Alam bawah sadar saya mungkin terpancing oleh kata itu, sehingga tanpa disadari, saya ikut menyenandungkan kata tersebut. Barangkali “Online” memang sudah menjadi bagian dari aktivitas sehari-hari saya yang rasanya sulit untuk ditinggalkan. Aktivitas online sudah menjadi candu dengan dosis tinggi bagi saya. Walaupun terkesan berlebihan, tapi begitulah adanya.

Saya jadi teringat ketika pertama kalinya saya mencoba teknologi yang sedang populer di kalangan remaja seusia saya waktu itu, “internet”. Sebuah teknologi berbasis komputer yang mampu menghubungkan seluruh bagian dunia. Hampir separuh lebih teman sekelas saya semasa SMA sudah mengenal internet. Saya termasuk separuh kurangnya yang tidak tahu sama sekali tentang internet alias orang yang gaptek (gagap teknologi). Jangankan internet, komputer saja saya tidak punya. Parahnya, saya juga baru belajar komputer gara-gara waktu itu ada tugas membuat makalah yang harus diketik menggunakan komputer. Selayaknya remaja, rasa ingin tahu saya pun sangat tinggi, hingga akhirnya sepulang sekolah saya pergi mengunjungi warnet (warung internet) di dekat sekolah saya.

Begitu saya membuka komputer, saya bingung apa yang harus saya lakukan. Beberapa menit, saya coba amati layar komputer di hadapan saya. Tidak ada yang berbeda dengan komputer yang pernah saya gunakan. Merasa semakin bingung, saya tanya operator yang saat itu begitu ramah membantu saya. Ternyata, sangat mudah untuk membuka browser internet, hanya dengan sekali klik, lalu ketik alamat website, Waktu itu si mbak operator mengetikkan situs Google sebagai mesin pencari semua informasi yang saya perlukan. Selain itu, ia juga mengetikkan situs Detik.Com, katanya, “Kalau perlu berita terkini buka ini aja!”. Wah, hebat sekali, informasi apapun bisa saya dapatkan. Akhirnya setiap mendapat tugas makalah, saya selalu berkunjung ke warnet dan menjelajah dunia maya untuk mendapatkan artikel-artikel yang saya perlukan untuk melengkapi makalah saya.

Saat memasuki masa kuliah, tugas makalah semakin bertambah. Seperti biasa, warnet menjadi tempat pertama pencarian bahan makalah saya. Kebetulan warnetnya tidak jauh dari perpustakaan kampus. Jadi, bisa sekalian baca-baca buku juga di perpustakaan. Kali ini, tugas makalah agak beda dari biasanya. Tugas tersebut harus dikirim ke e-mail dosen saya. Waduh, kebetulan saya belum punya alamat e-mail, jadi gara-gara itu saya pun akhirnya membuat sebuah account di Yahoo. Dengan alamat e-mail itu, saya mencoba chatting di Yahoo Messenger. Saya tambahkan beberapa teman sekelas saya di daftar “contact” sehingga sesekali saya dapat saling bertukar informasi atau hanya sekedar ngobrol ngelantur. Saat menjelajah “room”, saya mendapat teman-teman dari dalam dan luar negeri, beberapa di antaranya ternyata warga negera Indonesia yang kebetulan tinggal di luar negeri. Sambil melatih kemampuan berbahasa Inggris, saya cukup menikmati serunya menjalin pertemanan di dunia maya. Dengan alamat e-mail pula, saya mengikuti forum-forum dan komunitas pertemanan yang tersedia di internet semisal facebook, friendster, friendfinder, dan sebagainya. Oleh karena itu, semakin sulit rasanya meninggalkan aktivitas online. Saat menyusun skripsi, saya selalu mengunjungi berbagai alamat website yang menyediakan tutorial berhubungan dengan skripsi saya, hingga akhirnya saya berhasil meraih gelar sarjana.

Memasuki dunia kerja, aktivitas saya masih tidak dapat dipisahkan dari internet. Sebagai engineer R&D (Research & Development), saya harus mengumpulkan informasi yang saya perlukan untuk menyempurnakan proyek yang saya kerjakan. Oleh karena itu, aktivitas online telah menjadi bagian dari profesi yang saya tekuni. Di sela kesibukan kerja, saya juga menulis beberapa blog, salah satunya blog yang sedang Anda baca ini. Ya, sekedar melatih kemampuan menulis, salah satu hobby terpendam yang sudah saya lakukan sejak setahun silam.

Download Yahoo Messenger 9

May 30, 2009 edi nur rochman 1 comment

Sekedar ingin berbagi freeware Yahoo Mesenger versi 9. Buat yang doyan chatting di YM pasti bakalan suka, tampilannya lebih asyik pokoknya mah!

Categories: Uncategorized

Bel Sekolah Otomatis + Berbicara

December 19, 2008 edi nur rochman 3 comments

EDTRONICS SCHOOL BELL (BEL SEKOLAH BERBICARA)

09065736

Deskripsi:

Bel sekolah otomatis berbasis mikrokontroler dilengkapi dengan protokoler pengucapan jam dan kalender.

Fitur:

  • Mikrokontroller seri AVR yang mengendalikan kinerja bel otomatis.
  • Real Time Clock sebagai penyimpan jam dan kalender.
    Memori EEPROM 1 kByte sebagai penyimpan pengaturan jadual, jam, kalender, nada dering, dsb.
  • Sound Memori penyimpan kata dan nada dering sebanyak 2 nada dering.
  • Pilihan output suara yang dapat diatur, antara lain:
    • jam saja
    • kalender saja
    • alarm saja
    • kalender+jam
    • jam+alarm
  • Preamplifier Output Audio.
  • Automatic Amplifier Switcher sebagai pemutus-hubung eksternal amplifier sehingga amplifier hanya aktif jika diperlukan.
  • Layar LCD 16 karakter x 2 baris menampilkan nama sekolah, jam dan kalender.
  • Keypad matrix 4×3 tombol sebagai user interface dalam pengoperasian bel.
  • Password locking, berfungsi mengunci menu-menu pengaturan dengan 6 digit password yang dapat diubah.

Spesifikasi:

  • Casing : plastik dilapisi cat.
  • Catu daya : 220 Volt AC
  • Arus : ~150 mA
  • Dimensi : 23 x 14 x 6 cm
  • Bobot : 0,8 kg
  • Harga : Rp 950.000,-
    Catatan:
  • Garansi 1 tahun.

Informasi/Pemesanan:

Untuk pemesanan hubungi:
Edi Nur Rochman, S.Pd
Telp. 022-70060960
E-mail/YM: ed_nr82 @ yahoo.com

Catatan: Harga belum termasuk ongkos kirim Rp 20.000


Mikrokontroler AVR ATmega128/64

December 5, 2008 edi nur rochman 9 comments

Kali ini saya ingin berbagi sedikit ilmu tentang mikrokontroler seri AVR, tepatnya ATmega128. Semoga bisa jadi bahan referensi buat ‘micro lovers’ yg lagi laver ilmu (translate: laver = lapar, red). Sebenarnya, saya juga belum lama pake mikrokontroler AVR, pas di kantor diminta merancang KWH meter prabayar pake ATmega128 yang sebelumnya saya rancang pake uPSD3354 (buatan ST micro), nah mulai deh buka-buka buku pemrograman dan googling di internet, sampai akhirnya terciptalah versi AVR dari proyek KWH meter tersebut.

Ok, langsung aja kita kenalan sama micro-nya dimulai dari fitur2 ATmega128.

Fitur ATmega128:

  • Flash 128 kByte, lumayan gede buat nyimpan file objek
  • EEPROM 4 kByte
  • 53 I/O port
  • PWM
  • ADC
  • ISP/JTAG interface programming

Minimum sistem ATmega128:

minimum_atmega128

Download skema rangkaian minimum ATmega128.sch

Minimum sistem di atas dirancang untuk pemrograman ISP (In-System Programming). Selain untuk ATmega128, rangkaian ini bisa juga digunakan untuk ATmega64 karena konfigurasi pin-nya sama.  Khusus untuk MISO dan MOSI ISP tidak menggunakan pin MISO/MOSI yg sudah disediakan pada chip.  Sebagai gantinya, kita gunakan pin PDI sebagai MOSI dan PDO sebagai MISO. Kalau rajin baca datasheet, skema pemrograman ISP persis seperti ini. Nah, coba deh dibikin tuch rangkaiannya, tinggal download aja, gampang kan?

Kabel ISP:

kabel_isp_avr

Software Compiler/Downloader:

Banyak sekali software yg bisa digunakan untuk memprogram mikrokontroler AVR. Skema kabel ISP di atas cocok digunakan jika menggunakan Code Vision AVR atau PonyProg.

code_vision_avr

ponyprog

Software Programmer AT89C2051

September 24, 2008 edi nur rochman 3 comments

AT89C2051 termasuk keluarga MCS-51 yang kompatible dengan arsitektur chip intel 8051 baik hardware pin input/output maupun struktur mnemonic-nya. IC ini memiliki 20 pin dengan jumlah port I/O sebanyak 15. kapasitas Flash Memory sebesar 2 kByte yang dapat ditulis/baca sebanyak +- 1000 kali. Internal RAM sebesar 128 byte. Datasheet AT89C2051 dapat Anda download di sini.

Pemrograman IC ini dapat dilakukan secara in-system programming (ISP) melalui port 3. Salah satu software programmer yang dapat digunakan untuk tipe ic ini yaitu IC-Prog yang dapat Anda download di sini. Sebaiknya Anda juga mempersiapkan kabel data untuk keperluan tersebut. Untuk lebih sederhana, Anda dapat mempergunakan port paralel pada PC Anda. Skema kabel data programmer dapat Anda download di sini.

Download Link:

- Datasheet AT89C2051 (pdf)
- Software IC-Prog
- Skema kabel data (pdf)
- Panduan IC-Prog (zip)

back to home

Cara Mudah Menguasai Mikrokontroler

July 22, 2008 edi nur rochman 2 comments

“Mikrokontroler”, sebuah kata yang sangat menakutkan bagi saya sewaktu mengajukan judul tugas akhir setahun yang lalu. Soalnya, waktu kuliah Sistem Mikrokontroler dulu, saya cuma dapat nilai C (oon ya.. :-) ), itu pun setelah remedial. Hingga pada semester akhir, tiba saatnya untuk mengajukan judul TA (Tugas Akhir). Tentu saja karena alasan tersebut, pada proposal judul TA  saya, tidak ada kata “mikrokontroler” di dalamnya. Namun, kemudian dosen pembimbing menyarankan untuk menambahkan komponen mikrokontroler pada judul terakhir yang saya ajukan (setelah 3 kali ganti judul). Akhirnya, dengan sangat terpaksa judul TA itu saya bubuhi kata “mikrokontroler”, sebuah kata yang sangat saya hindari. Untuk itu, saya gali semua informasi yang berhubungan dengan “mikrokontroler” di internet. Tidak tanggung-tanggung, saya minta seorang pakar dari LIPI Bandung untuk menjadi pembimbing.

Dengan serius, saya mulai mempelajari dasar-dasar pemrograman assembly melalui situs tutorial di internet. Selain itu, beberapa buku mikrokontroler pun saya lahap. Namun, ternyata saya malah makin bingung dengan segudang teori yang harus saya kuasai. Saya teringat dengan perkataan seorang pakar pendidikan “Dewey” yang saya dengar dari dosen Psikologi Pendidikan saya, beliau mengatakan “Learning by Doing” (belajar sambil melakukan), jadi tidak hanya teori saja yang dipelajari, tapi lebih baik jika disertai praktek. Itulah yang selanjutnya saya lakukan. Berbekal buku panduan, software compiler dan programer, kabel ISP buatan sendiri, dan source code assembly (copy paste di internet), saya mulai praktek, praktek, dan praktek. Saya ingat waktu itu, saya mulai dengan memprogram LCD karakter. Tentu saja, percobaan pertama tidak berhasil sebagaimana mestinya. LCD-nya tetap blank, tidak ada satu pun karakter yang muncul, yang ada hanyalah test screen berupa kotak hitam yang muncul di layar LCD.

test screen LCD

test screen LCD

Setelah ratusan kali trial and error, akhirnya BERHASIL!! Sebuah karakter muncul di layar.

Alhamdulillah.. sejak saat itu, semuanya terasa semakin mudah. Rutin-rutin program yang lain pun makin mudah ditelusuri kesalahannya hingga dapat berjalan sebagaimana mestinya. Sebuah nasihat yang baik dari pembimbing saya di LIPI, “Buat program sesederhana mungkin! Mulailah secara bertahap, berikan catatan-catatan kecil untuk mempermudah menelusuri kesalahan program!”. Oh iya, saya lupa menyebutkan, source code assembly banyak tersedia di internet, jadi untuk pemula, lebih baik menerapkan teori “ATM”-nya Ustad Abu Yahya, A = Amati, T = Teliti, dan M = Modifikasi. Jangan sekali-kali menelan mentah-mentah souce code orang lain karena dijamin BELUM TENTU BEKERJA di sistem yang kita buat, apalagi jika hardwarenya berbeda, selain itu juga melanggar HAK CIPTA.

Lanjut cerita, selama beberapa bulan “ta’aruf” dengan mikrokontroler, hingga hampir tiap malam begadang akhirnya saya berhasil menyelesaikan TA tersebut. Tidak hanya itu, semua dosen penguji memberikan kesan positif terhadap TA saya dan membubuhkan nilai “A” di ijazah sarjana saya, sebuah nilai yang terlalu sempurna bagi pembenci “mikrokontroler” seperti saya. Hingga akhirnya, bulan april 2008 lalu saya diwisuda, sebulan kemudian saya diterima bekerja sebagai RND di sebuah perusahaan telekomunikasi di Bandung. Alhamdulillah, saat ini setiap hari saya dapat bereksperimen dengan mikrokontroler. :)

>>Back to Home

Software AT89ISP

Untuk mengisi file objek (.hex) pada sistem mikrokontroler, diperlukan software downloader. Untuk mikrokontroler seri AT89Sxx dapat menggunakan software keluaran atmel. Software ini saya peroleh secara gratis di internet, dapat digunakan untuk kabel data mikrokontroler atmel AT89s. File sudah berisi rangkaian skematik, program, dan user manual. Selamat mencoba!

Download sekarang !

Kabel Data In-System Programming (ISP) Atmel

March 23, 2008 edi nur rochman 7 comments

Dalam pemrograman mikrokontroler MCS-51 dikenal dua macam teknik, yaitu parallel programming dan serial programming. Keterangan lebih rinci mengenai kedua teknik pemrograman tersebut dapat Anda lihat pada datasheet. Kali ini, penulis akan menyajikan teknik pemrograman serial In-System Programming (ISP). Dengan teknik ini, Anda tidak memerlukan modul downloader semisal DT-51 untuk memprogram, sehingga chip tidak perlu dibongkar pasang saat pemrograman berlangsung. Yang Anda perlukan hanya kabel ISP yang menghubungkan pin-pin pada chip mikrokontroler dengan port LPT1/LPT2 komputer Anda. Kabel ISP dapat dibuat dengan menghubungkan pin MOSI (P1.5), MISO (P1.6), SCK (P1.7), dan RST dengan pin 2, 10, 1, 17 pada LPT1/LPT2 komputer secara langsung (lihat datasheet chip untuk mengetahui konfigurasi pin). Namun, untuk menghindari rusaknya chip mikrokontroler akibat noise atau spoke tegangan tidak rata pada CPU komputer maka sebaiknya digunakan buffer 74LS244. Selama pemrograman, hubungkan pin VPP (pin 31) chip target dengan tegangan Vcc.

Hardware

Daftar Komponen

  • Konektor DB-25, ke port LPT komputer
  • Kabel paralel 10 jalur, kurang lebih 0,5 meter
  • Konektor header IDC 2×5, ke sistem mikrokontroler
  • IC buffer 74LS244
  • PCB titik, kurang lebih 5×5 cm

Software [Download]

Software yang dapat digunakan untuk pemrograman ISP dengan konfigurasi seperti di atas antara lain menggunakan Atmel MCU ISP Software. Software ini dapat Anda download secara gratis. Software ini berfungsi menyimpan file .hex ke dalam flash memory mikrokontroler seri AT89. Adapun langkah-langkah pemrogramannya antara lain:

  • Hubungkan konektor DB-25 kabel ISP pada port LPT1/LPT2 komputer dan hubungkan pula konektor IDC kabel ISP dengan konektor IDC pada sistem mikrokontroler.
  • Nyalakan komputer dan power supply yang men-catu sistem mikrokontroler.
  • Buka program Atmel MCU ISP Software.

  • Pilih port LPT yang Anda gunakan, dengan cara klik Option>Select Port.
  • Pilih tipe chip AT89 yang Anda gunakan, dengan cara klik Option>Select Device.
  • Inisialisasi target, dengan cara klik Option>Initialize Target.
  • Selanjutnya, jika inisialisasi berhasil, artinya chip telah online dan siap diprogram. Untuk awal pemrograman, sebaiknya pastikan chip dalam keadaan kosong, dengan cara klik Instructions>Erase Chip.
  • Selanjutnya, buka file .hex yang akan disimpan pada chip target, dengan cara klik File>Load Buffer.
  • Lakukan Auto programming, dengan cara klik Instructions>Auto Program. Tunggu hingga verifikasi program selesai.
  • Setelah pemrograman berhasil dilakukan, klik Instructions>Run Target untuk menjalankan program pada chip target. Pada kondisi ini, chip telah offline dengan software ISP meskipun masih terhubung dengan kabel ISP. Untuk memprogram kembali, lakukan inisialisasi seperti langkah di atas.