STK500 USB AVR In-System Programmer

Programmer is one of the first things to think of when starting to deal with microcontrollers. Luckily it is not hard to build fully working programmer almost for any microcontroller as there are tons of open source projects around. So I decided to build stk500 compatible programmer which is actually taken from tuxgraphics.com. I decided not to search for same parts as in original schematics but use what’s on desk. As result I got mix of through hole and SMD soldered board that works great.

Short info about STK500 V2 programmer

This programmer is a clone of original AVR STK500 programmer. It works on all main platforms including Windows, Linux, BSD and MacOS X. This is mainly because as USB to serial converter there is a FT232RL chip used with full driver support. Probably main reason to build it is that programmer works in AVRstudio where microcontrollers can be programmed fluently from same IDE. Also it works fine with AVRDude – which would be main application for Linux users. This clone gained quite big popularity so you can find lots of variations – mostly different PCB versions. So mine is yet another one PCB.

STK500 programmer hardware

As I mentioned this is quick build from parts found on shelf, this isn’t best PCB. Because it uses a mix of SMD and through hole parts. Anyway it works as supposed so no problem with that at all. Let’s get in to some details. I found a FT232BL chip that wasn’t used in some earlier project, so I decided to use it instead newer FT232RL. It is pretty same chip but older generation. Additionally you need to use external 6 MHz crystal and couple more components. Drivers are still supported up to Win 7 so it can be still used actively.

Atmega8 is in DIP package which is easier to remove and program with other programmer – which can be a bit problem if building first programmer at all. Ask friends to program chip or use dirty parallel port programmer to flash it.

In this programmer I used an USB miniB SMD Connector that came to my hands. There is also a solder holes left in case you want to solder an USB cable directly. Programmer has 10 pin and 6 pin programmer headers. I usually use 6 pin ISP header, so I made cable only for this one.

Flashing Atmega8

Is I mentioned – you need to program ATmega8 first before use. Latest firmware for it can be found here.  And don’t forget to set fuse bits correctly. FYI fuse bits in PopnyProg should be as follows:

Or simply pass them to AVRdude as follows:

Low byte: 0xEE;

High byte: 0xE9.

Running programmer on AVRStudio

When running programmer in AVRStudio, select STK500 platform and COM port which was to USB – serial converter assigned. In my case it is COM5. After clicking Connect…  it suggests to upgrade programmer firmware – just skip by pressing Cancel as upgrade function won’t work for it. Next screen you’ll see is a STk500 programming dialog where you can select device and program it.

Just a little note about ISP mode settings! If you are trying to flash new AVR where default 1MHz clock is running, you should select proper ISP frequency as it has to be less than ¼ the target.

To flash 1MHz Atmega you should go with 115.2 kHz while 8MHz will do fine with 1.845 MHz.

Attachment:

Get AVR USB In-System Programmer Now. Click Here!

Scanning 7-Segment and Push Button Part 2

Since the output buffer of P1 can sink 20mA (each output pin, but maximum IOL for all outputs was limited at 80mA), thus we can use P1 to drive LED display directly. As shown in the circuit, Two common-anode 7-segment LEDs are connected to P1 with 180 Ohms current limiting resistor. Each segment of two LED are tied in parallel to P1. Q1 and Q2 are activated by logic low of P3.0 and P3.1, sourcing +5V to common anode pins. P3.4 read logic low if either S1 or S2 was pressed while scanning period have made.

The program demonstrates simple counting down clock.
S1 is used for setting time to 99, S2 for start count down.
/*
           * 7-seg.c
           * Driving 2-digit 7-segment Common Anode LED & keypad
           * Copyright (C) 1999 Wichit Sirichote
           * compiled with Dunfield Micro-C for 8051 Release 3.2
           * c:\mc\cc51 7-seg -i h=c:\mc m=t
*/
#include c:\mc\8051io.h /* include i/o header file */
#include c:\mc\8051reg.h
extern register char cputick; // cputick was incremented every 10ms
register unsigned char flag1;
unsigned register char sec,digit,buffer[2];
register char key;
char convert[10] = {0x3F,0x0c,0x76,0x5e,0x4d,0x5b,0x7b,0x0e,0x7f,0x5f};
/* my LED's segment pin designation (differs from standard)
           b
           __
           a|__| c
           f| | d
           --
           e
*/
#define setValue 99
main()
{
 flag1 = 0;
 sec = setValue;
 timeToBuffer();
 serinit(9600); // set timer0 to be 16 bit counter
 while(1){
 while(cputick < 10)
 scanLED();
 // execute the following functions every 100ms
 cputick = 0;
 timeToBuffer();
 keyexe();
 countdown();
 }
} 

scanLED() /* scan 2-digit LED and 2-key switch, if key pressed key= 0-1
           else key = -1 */
{
 int i;
 digit = 0x02; // scan code 00000010
 key = -1;
 for( i = 0; i < 2; i++) /* 2-DIGIT scanning */
 {
  P3 = ~digit; /* send complement[digit] */
  P1 = ~buffer[i]; /* send complement[segment] */
  delay(1); /* delay 1ms */
  P1 = 0xff; /* off LED */
  if ((P3 & 0x10) == 0) /* if key pressed P3.4 became low */
  key = i; /* save key position to key variable */
  digit>>=1; /* next digit */
 }
}
timeToBuffer() // converts binary data in sec to 7-segment pattern
{
 buffer[0] = convert[sec%10];
 buffer[1] = convert[sec/10];
}
countdown()
{
 if ((flag1 & 0x02) != 0)
 sec--;
 if (sec == 0 )
 flag1 &= ~0x02; // clear run bit
}
keyexe()
{
 if (key != -1)
 {
  switch(key){
  case (0): /* key position 0 */
  reset(); /* service key 0 */
  break;
  case (1): /* key position 1 */
  run(); /* service key 1 */
 }
 }
}
reset()
{
 sec = setValue; // reload set value
 timeToBuffer();
 flag1 &= ~0x02; // stop counting down
}
run()
 {
  if (sec != 0)
  flag1 |= 0x02; // start counting down
 }

Sumber : MyTutorialCafe

Scanning 7-Segment and Push Button Part 1 8051 C Programming


/* Display Two 7 Segmen */
/* Compiler : MIDE-51 */

#include < at89C2051.h > /* Include 89C2051 header file */

char num[ ] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

void wait (void) /* wait function */

{ ; }

void main( void ){

unsigned char cnt, right;

unsigned int i;

P1 = 0; /* ZERO port P1 & port P3 */

P3 = 0;

for( ;; ){

          for (right=0;right<3;right++)

         {

           P3 = right;

           for (cnt=0;cnt<10;cnt++)

           {

           P1 = num[cnt];

           for (i = 0; i < 10000; i++)

           {

           wait(); /* delay for half second */

           }

           }

           }

           }

           }

Sumber : MyTutorialCafe

Pemrograman LCD Karakter 2×16 Dengan Mikrokontroler AVR

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=0x1B ;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 Font5x7 0×00
#define Font5x10 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+Font5x7);
delay_ms(3);
LCD_CmdWrite(Function+Four_Bits+Two_Line+Font5x7);
delay_ms(3);
LCD_CmdWrite(Function+Four_Bits+Two_Line+Font5x7);
delay_ms(3);
LCD_CmdWrite(Clear_Display);
delay_ms(3);
LCD_CmdWrite(Entry_Mode+Increment+Shift_Off);
delay_ms(3);
LCD_CmdWrite(0x0c);                                                // 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:

Bel Sekolah Otomatis + Berbicara

Bel Otomatis Edtronics ESB Talk
Bel otomatis ESB TALK ini dapat membunyikan alarm/bel secara otomatis sesuai dengan waktu yang disimpan pada memori. Bel ini dapat digunakan di sekolah, kampus, perusahaan, pabrik, mess militer, dan sebagainya. Jika diinginkan, fitur-fitur bel dapat dipesan sesuai permintaan. Selain itu, bel ini dapat mengucapkan informasi jam pada saat alarm bel berbunyi.

Fitur ESB Talk Bel Otomatis Berbicara:

  • Bel otomatis sesuai jadwal yang dapat diatur
  • Password locking system: melindungi akses setting bel tanpa wewenang
  • Pengucap Jam / kalender
  • 6 buah nada dering polyphonic (lagu klasik) durasi @20 – 30 detik (lagu bisa dipesan sesuai permintaan)
  • 20 jadwal alarm perhari x 7 hari, total 140 jadwal alarm
  • LCD 2×16 karakter
  • Dapat dihubungkan dengan amplifier eksternal
  • Automatic Amplifier Switcher (menyalakan amplifier eksternal secara otomatis pada saat bel berbunyi)
  • Keypad 3×4
  • Tombol bel secara manual
  • Casing plastic
  • Ukuran p x l x t = 23 cm x 14 cm x 6 cm
  • Berat 2 kg
  • Sudah termasuk kabel audio RCA, tidak termasuk speaker dan amplifier eksternal
  • Garansi 1 tahun

Video Demo Bel Otomatis Berbicara ESB Talk

Sample Nada Dering Bel Otomatis Berbicara ESB Talk

Punya Nada Dering Favorit Anda sendiri? Silahkan kirim file nya via email untuk kami rekamkan pada Bel Otomatis pesanan Anda!

Download Brosur Bel Otomatis Edtronics

Mikrokontroler AVR ATmega128/64

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

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

“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

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.