AT89C2051 Flash PEROM Programmer ini sangat sederhana, hanya      memakai sebuah IC 74HC574 ditambah dengan sistem catu daya dan  dihubungkan      ke komputer PC lewat Parallel Port, dikendalikan lewat program yang  ditulis      dengan Pascal.
Program untuk AT89C2051 disimpan di dalam ROM yang  terdapat      dalam chip IC tersebut, ROM yang dipakai AT89C2051 termasuk jenis  Flash PEROM      (Programmable Eraseable Read Only Memory). Diperlukan cara dan  rangkaian khusus      untuk mengisi Flash PEROM tersebut, berikut ini akan dibahas cara  pengisian      Flash PEROM AT89C2051 dan pembuatan alat pengisi Flash PEROM  AT89C2051. 
Selain diisi, Flash PEROM tersebut bisa pula  dibaca isinya,      dihapus bahkan bisa diproteksi sehingga isinya tidak bisa dibaca  lagi untuk      mencegah pembajakan program. Selain itu semua microcontroller  produksi Atmel      masing-masing punya kode produksi sendiri, sehingga program Pascal  di komputer      bisa dengan mudah mengenali chip microcontroller jenis apa yang  dipasangkan      pada alat ini.
Tabel 1 memperlihatkan kombinasi sinyal yang  harus diberikan      pada kaki-kaki P3.7..P3.3, tegangan VPP       yang harus diberikan ke kaki RESET dan sinyal PROG       pada kaki P3.2 untuk berbagai keperluan  dengan Flash      PEROM di dalam chip AT89C2051. 
 Tabel 1 Mode Pemrograman Flash PEROM AT89Cx051
Pengisian data ke PEROM
Gambar 1 merupakan susunan rangkaian untuk  mengisi Flash      PEROM AT89C2051, dalam susunan ini Port 1 (P1.0..P1.7)  dipakai      sebagai saluran penerima data yang akan diisikan ke PEROM, P3.7..P3.3       dipakai untuk memilih mode kerja, kaki RESET dipakai      untuk catu daya tambahan (VPP) sebesar 12 Volt. 
AT89C2051 dilengkapi ‘address counter’ di  dalam chip,      yang berfungsi sebagai ganti address bus pada saat pengisian  atau pembacaan      Flash PEROM. Kedudukan ‘address counter’ ini akan reset  menjadi 000(hex)      saat tegangan VPP pada kaki RESET       berubah dari 0 Volt menjadi 5, dan nilai ‘address counter’  ini      naik satu setiap kali ada pulsa positip NEXT diumpankan      pada kaki XTAL1.
Proses pengisian Flash PEROM, dilakukan dengan  urutan sebagai      berikut : 
1.   AT89C2051 diberi catu daya 5 Volt lewat kaki Vcc,  kaki RESET      dan XTAL1 diberi tegangan 0. 
2.   Menjelang proses pengisian akan dimulai, tegangan VPP  dinaikkan      menjadi 5 Volt agar ‘address counter’ reset menjadi 000(hex),  dan sinyal      PROG      pada kaki P3.2 dijadikan H. 
3.  AT89C2051 disiapkan kerja pada mode pengisian dengan memberi sinyal  HHHL pada      kaki P3.7..P3.3.    
4.   Setelah urutan persiapan ini selesai, VPP dinaikkan  menjadi 12 Volt sebagai      catu daya yang diperlukan untuk pengisian PEROM.
5.   Selanjutnya data yang akan diisikan disiapkan di Port 1 (P1.0..P1.7)
6.   Pulsa negatip PROG pada P3.2  dipakai sebagai      perintah agar data pada Port 1 diisikan ke dalam PEROM, proses  pengisian ini      memerlukan waktu relatip lama lebih kurang selama 1,2 mili-detik,  selama proses      pengisian ini kaki P3.1 menjadi ‘0’       menandakan AT89C2051 sedang sibuk (BUSY). Saat kaki P3.1       menjadi ‘1’ kembali berarti selesai sudah proses pengisian data 1  byte ke      dalam PEROM, dan AT89C2051 siap menerima data lagi.
7.  Setelah proses pengisian 1 byte ini, dikirim sinyal NEXT  yang berupa      pulsa positip ke kaki XTAL1, dengan maksud menaikkan  nilai      ‘address counter’, agar pengisian data berikutnya diisikan ke  lokasi      PEROM berikutnya. 
8.  Urutan 5 sampai 7 di atas diulang untuk mengisikan data 1 byte demi 1  byte,      sampai semua PEROM dalam AT89C2051 sebanyak 2048 byte selesai  diisikan.
Rancangan Rangkaian
Gambar 3 merupakan skema rangkaian AT89C2051  Flash PEROM      Programmer yang dibuat, rangkaian ini dikendalikan oleh Komputer  PC lewat      Parallel  Port. 
Dari Gambar 1 dan 2 bisa diperhitungkan banyaknya  jalur yang      diperlukan untuk mengendalikan chip AT89C2051, antara lain  diperlukan 8 jalur      data yang dua arah, diperlukan 4 jalur pengatur mode, jalur PROG,       jalur NEXT dan 2 jalur pengatur VPP,  dan      1 jalur BUSY untuk memantau apakah AT89C2051 sudah siap  menerima      data.
Parallel Port  komputer      PC mempunyai 8 jalur data yang dua arah, 4 jalur kontrol (sebagai  output dari      PC) dan 5 jalur status (sebagai input ke PC), dengan demikian  memakai Parallel      Port untuk mengendalikan chip AT89C2051, masih kekurangan jalur  output. 
Untuk mengatasi kekurangan ini pada rangkaian  dipakai IC      74HC574, IC ini menampung 4 jalur pengatur mode dan 2 jalur pengatur  tegangan      VPP. Data pengatur ini disiapkan di jalur data Parallel Port D0..D7,       kemudian dikirim sinyal LATCH yang  dibangkitkan di kaki nomor      17 konektor DB25 (dikendalikan dengan bit 3 dari Control        Register  Parallel        Port  ), sehingga  data di D0..D7 tersimpan      output 74HC574.
Sinyal PROG dibangkitkan  dikaki nomor 14      konektor DB25 (dikendalikan dengan bit 1 dari Control        Register  Parallel        Port  ), dan sinyal NEXT       dibangkitkan dikaki nomor 1 (dikendalikan dengan bit 0 dari Control        Register  Parallel        Port  ). Sinyal BUSY       yang dibangkitkan AT89C2051, dipantau lewat kaki nomor 11 konektor  DB25  (bit 7 dari Status        Register  Parallel        Port  )
Pengatur tegangan VPP terdiri dari       sinyal VPP_5VOLT dan sinyal VPP_OFF.    
·              Jika sinyal VPP_5VOLT=1 tegangan      output LM317 menjadi 5 Volt, sebaliknya jika sinyal VPP_5VOLT=0       tegangan output LM317 menjadi 12 Volt. 
·              Jika sinyal VPP_OFF=1 transistor      Q1 menjadi off, VPP menjadi 0 Volt lewat tahanan      R7, sebaliknya jika sinyal VPP_OFF=1 transistor  Q1 menjadi on      dan menyalurkan tegangan dari LM317, sehingga tegangan VPP menjadi 5  Volt      atau 12 Volt, sesuai dengan kondisi sinyal VPP_5VOLT.
Nilai tahanan R1 dan R3 termasuk ‘aneh’, dipilih  nilai ini      untuk menyesuaikan agar tegangan output LM317 tepat 5 Volt atau 12  Volt, tahanan      ini dibentuk dengan menghubungkan seri 2 tahanan, R1 dibentuk dengan  tahanan       250 + 4,7 = 254.7 Ohm dan R3 dibentuk dengan tahanan 1000 +  120 = 1120      Ohm.
 Klik pada gambar untuk ukuran sebenarnya
Kabel yang dipakai untuk menghubungkan alat ini  ke Parallel      Port  komputer PC bisa dibeli jadi,      di pasaran kabel ini dikenal dengan nama ‘Kabel LPT’, dikedua ujung  kabel      ini terdapat konektor DB25 (male), masing-masing kaki pada konektor  ini dihubungkan      secara langsung, yakni kaki 1 konektor pertama dihubungkan dengan  kaki 1 konektor      lainnya dan seterusnya.
Program Pascal pengatur Parallel        Port 
Berikut ini dibahas potongan-potongan program  pembentuk sinyal-sinyal      di atas, program-program ini merupakan program dasar yang  mengendalikan Parallel       Port    secara  langsung.
Perlu diperhatikan sinyal-sinyal pada Parallel        Port    bersifat  logika negatip, kalau bit pada Control      Register bernilai ‘1’ maka tegangan kaki bersangkutan pada  konektor DB25      adalah 0 Volt, sebaliknya jika bit pada Control Register  bernilai ‘0’      maka tegangan pada kaki konektor DB25 adalah 5 Volt.
Potongan Program 1 Mengatur arah data
01: PROCEDURE SetupOutput;
02: BEGIN
03:      { Control Register
04:        00001001
05:          | | ||_ NEXT      : normally LOW  positive  pulse
06:          | | |__ PROG*     : normally HIGH negative pulse
07:          | |____ Latch     : normally LOW  positive  pulse
08:          |______  Direction : 0 as ouput       Port 
09:      }
10:      ControlByte   := 9;                         {00001001}
11:           Port[Control] := ControlByte;
12: END;
13:   
14: PROCEDURE SetupInput;
15: BEGIN
16:      { Control Register
17:        00101001
18:          | | ||_ NEXT      : normally LOW  positive  pulse
19:          | | |__ PROG*     : normally HIGH negative pulse
20:          | |____ Latch     : normally LOW  positive  pulse
21:          |______  Direction : 1 as input port
22:      }
23:      ControlByte   := $29;                       {00101001}
24:      Port[Control] :=  ControlByte;
25: END;
PROCEDURE SetupInput dan PROCEDURE       SetupOutput dipakai untuk menentukan nilai awal :
·              sinyal NEXT (kaki nomor      1 konektor DB25 terhubung ke bit 0 dari Control        Register  Parallel        Port  )
·              sinyal PROG (kaki nomor      14 konektor DB25 terhubung ke bit 1 dari Control        Register  Parallel        Port  ) 
·              sinyal LATCH (kaki nomor      17 konektor DB25 terhubung ke bit 3 dari Control        Register  Parallel        Port  )
tapi mengingat  sinyal-sinyal       pada Parallel  Port    bersifat logika negatip, maka :
·              sinyal NEXT nilai awalnya      ‘0’, bit 0 Control Register malah diberi nilai ‘1’  (baris 5      dan 18)
·              sinyal PROG nilai awalnya      ‘1’, bit 1 Control Register malah diberi nilai ‘0’  (baris 6      dan 19)
·              sinyal LATCH nilai awalnya      ‘0’, bit 3 Control Register malah diberi nilai ‘1’  (baris 7      dan 20)
 Hal yang lebih penting      dari kedua procedure di Potongan Program 1 ini adalah mengatur arah 8  jalur      data dwi-arah Parallel Port, pada saat mengisi data ke Flash PEROM 8  jalur      data ini akan menjadi output untuk menyalurkan data dari PC ke  AT892051, dan      pada saat membaca data dari Flash PEROM 8 jalur data ini berfungsi  sebagai      input untuk menyalurkan data dari AT89C2051 ke PC.
Pengaturan ini dilakukan lewat bit 5 Control  Register,      jika bit 5 Control Register bernilai 0 (baris 8) jalur data  dwi-arah      menjadi output dari Parallel Port, sebaliknya jika bit 5 Control  Register      bernilai 1 (baris 21) jalur data dwi-arah akan menjadi input ke  Parallel Port.
Kemampuan untuk mengubah jalur data Parallel        Port    menjadi  input, hanya dimiliki oleh Enhance Parallel      Port  (EPP). EPP umumnya dibuat menjadi      satu dengan mother board PC, sedangkan Parallel        Port    dalam  Super I/O Card tidak termasuk EPP. Agar      kemampuan ini bisa digunakan, Parallel        Port    ini  harus ditentukan sebagai Enhance Parallel      Port  (EPP) lewat setup BIOS komputer.
Komputer yang tidak dilengkapi dengan EPP tetap  bisa dipakai      untuk mengisi PEROM, tapi tidak bisa membaca isi PEROM, sehingga  program yang      diisikan tidak bisa di-verifikasi apakah sudah masuk dengan benar.
Program yang dibuat dilengkapi dengan PROCEDURE       MemeriksaPrinterPort      yang berfungsi menentukan apakah Parallel        Port    yang  dipakai termasuk EPP.
Potongan Program 2 Pembangkitan pulsa dasar
01: PROCEDURE NEXT;
02: BEGIN
03:    Port[Control]:=ControlByte  and $FE; {bit 0      Control Regiter}
04:    Port[Control]:=ControlByte;
05: END;
06:   
07: PROCEDURE PROG;
08: BEGIN
09:    Port[Control]:=ControlByte  or $02; {bit 1 Control      Regiter}
10:    Port[Control]:=ControlByte;
11: END;
12:   
13: PROCEDURE EraseStrobe;
14: BEGIN
15:    Port[Control]:=ControlByte  or $02;  {bit 1 Control Regiter}
16:    Delay(30);
17:    Port[Control] :=  ControlByte;
18: END;
PROCEDURE Next  membangkitkan      pulsa positip di kaki nomor 1 konektor DB25, kaki nomor 1 ini  dikendalikan      lewat bit 0 di Control Register Parallel Port, bit 0 Control  Register      ini diberi nilai awal =1 oleh PROCEDURE SetupInput       dan PROCEDURE SetupOutput,      dibaris 3 bit 0 di-‘nol’-kan dan dibaris 4dikembalikan ke  nilai      awalnya, dengan cara ini kaki 1 konektor DB25 bertegangan 5 Volt  sebentar      dan kemudian menjadinya 0 Volt kembali. 
PROCEDURE PROG  membangkitkan      pulsa negatip dikaki nomor 14 konektor DB25, kaki nomor 14 ini  dikendalikan      lewat bit 1 di Control Register Parallel Port, bit 1 Control  Register      ini diberi nilai awal =0 oleh PROCEDURE SetupInput       dan PROCEDURE SetupOutput,      dibaris 9 bit 1 di-‘satu’-kan dan dibaris 10 dikembalikan  ke nilai      awalnya, dengan cara ini kaki 14 konektor DB25 bertegangan 0 Volt  sebentar      dan kemudian menjadinya 5 Volt kembali.  
PROCEDURE EraseStrobe  sama      dengan PROCEDURE PROG, hanya saja      pulsa negatip yang dibangkitkan jauh lebih lebar, sekitar 30  mili-detik yang      ditentukan di baris 16. Pulsa ini dipakai untuk menghapus isi Flash  PEROM,      lebar pulsa yang diperlukan paling tidak selebar 10 mili-detik.
Potongan Program 3 Memantau kesiapan AT89C2051
01: FUNCTION Ready:BOOLEAN;
02: BEGIN    
03:      Ready :=  (Port[Status] and $80) = 0; 
04: END;
Potongan Program 3      dipakai untuk memeriksa apakah AT89C2051 siap menerima  data lagi.    
Di atas dikatakan:
Saat  kaki P3.1      menjadi ‘1’ kembali berarti selesai sudah proses pengisian data 1  byte ke      dalam PEROM, dan AT89C2051 siap menerima data lagi. 
Dalam rangkaian Gambar 3 kaki P3.1  terhubung      ke kaki 11 konektor DB25, dalam Parallel Port  kaki  11 itu terhubung ke bit 7 Status Register.      Tapi hubungan tersebut dalam kondisi berlawanan, artinya jika  tegangan pada      kaki 11 konektor DB25 = 0 Volt maka bit 7 Status Register  bernilai      ‘1’, sebaliknya jika tegangan pada kaki 11 konektor DB25 = 5 Volt  maka bit      7 Status Register bernilai ‘0’.
Dengan demikian dalam FUNCTION Ready       untuk memeriksa apakah AT89C2051 sudah siap menerima data, yang  diperiksa      adalah apakah bit 7 dari Status Register Parallel Port  bernilai ‘0’, jika bit 7 bernilai ‘0’ maka Ready       bernilai true, sebaliknya jika bit 7 bernilai ‘1’ maka Ready       bernilai false. 
Potongan Program 4 Pengaturan Tegangan VPP
01: PROCEDURE TeganganVPP(V:BYTE);
02: BEGIN
03:      { Pemakaian  74HC574
04:        x1x1MMMM
05:        ||||||||_ Atmel  Programming Mode bits
06:        |||||||__ Atmel  Programming Mode bits
07:        ||||||___ Atmel  Programming Mode bits
08:        |||||____ Atmel  Programming Mode bits
09:        ||||_____ always  1
10:        |||______  VPP_5VOLT : true-VPP=5 V, false-VPP=12      V
11:        ||_______ Reset  External Address Counter
12:        |________  VPP_OFF   : true-VPP=0 V, false-VPP=5 or 12 V
13:      }
14:      case V of
15:           0 : V:=$B0;           {10110000}
16:           5 : if  ModeSelect=$0B
17:                  THEN  V:=$70    {01110000}
18:                  ELSE  V:=$30;   {00110000}
19:          12 : V:=$10;           {00010000}
20:          ELSE EXIT;
21:      END;
22:      SetupOutput;
23:      Port[Data]    := V + ModeSelect;
24:      Port[Control] :=  ControlByte and $F7; { bit      3 }
25:      Port[Control] :=  ControlByte;
26:      SetupInput;
27: END;
28:   
29: PROCEDURE ResetAddressCounter(Mode:BYTE);
30: BEGIN
31:      ModeSelect := $0B;  { any illegal Mode }
32:      TeganganVPP(0);
33:      Delay(100);
34:      ModeSelect :=  Mode;
35:      TeganganVPP(5);
36:      Delay(100);
37: END;
38:   
39: PROCEDURE MatikanTegangan;
40: BEGIN
41:      ModeSelect := $0B;  { any illegal Mode }
42:      TeganganVPP(0);
43: END;
PROCEDURE TeganganVPP  untuk      menentukan tegangan VPP yang diumpankan ke kaki RESET       AT89C2051, sekali gus mengatur mode kerja AT89C2051. 
Sinyal kontrol untuk keperluan di atas disimpan  dalam IC      74HC574, data yang akan disimpan disiapkan di Port Data (baris 23),  setelah      itu bit 3 Control Register di-nol-kan (baris 24) dan  dikembalikan ke      nilai asalnya (baris 25), hali ini mengakibatkan terjadinya pulsa  positip      pada kaki nomor 17 konektor DB25, sebagai perintah bagi IC 74HC574  untuk mereka      data dari Parallel Port.
Kombinasi data yang disimpan tergantung pada  bit-bit pengatur      mode kerja AT89C2051 seperti terlihat pada Tabel 1, dan sesuai  dengan pengatur      tegangan VPP      terdiri dari sinyal VPP_5VOLT dan sinyal VPP_OFF      yang sudah dibahas di atas. 
PROCEDURE ResetAddressCounter       untuk menyiapkan tegangan kerja AT89C2051 sekaligus me-reset ‘address  counter’      dalam chip AT89C2051, mula-mula tegangan VPP dibuat menjadi 0 Volt  dan setelah      itu dijadikan 5 Volt, waktu tunda selama 100 mili-detik di baris 33  dimaksud      menunggu sebentar agar catu daya stabil baru menaikkan tegangan itu  menjadi      5 Volt (baris 35). Untuk kestabilan tegangan, mula-mula mode kerja  AT89C2051      diberi kombinasi yang tidak dikenal di Tabel 1 (baris 31), baru  kemudian diberikan      kombinasi yang sesunguhnya (baris 34).
PROCEDURE MatikanTegangan       untuk mematikan tegangan VPP dengan mode kerja yang tidak dikenal di  Tabel      1 (baris 41).
Program Pascal pengatur AT89C2051
Program dasar pengatur Parallel        Port    di  atas, dipakai untuk membangun program pengatur      AT89C2051 sebagai berikut:
Potongan Program 5 Pengisian PEROM
01: ResetAddressCounter($0E);
02: TeganganVPP(12);
03: SetupOutput;
04: Delay(100);
05: for I := 0 to PEROMsize do
06:      BEGIN
07:           Port[Data] :=  Buffer[I];
08:           PROG;
09:           REPEAT UNTIL  Ready;
10:           NEXT;
11:      END;
12: MatikanTegangan;
Potongan Program  5      sepenuhnya mengikuti tata cara pengisian PEROM yang sudah dibahas,  baris 1      mempersiapkan tegangan-tegangan yang diperlukan sambil menentukan  mode kerja      : Pengisian PEROM (=$0E, lihat Tabel 1). Setelah itu tegangan VPP       dinaikkan jadi 12 Volt (baris 2) dan Parallel        Port    dijadikan  output (baris 3). Sebelum proses pengisian      PEROM dimulai, ditunggu sebentar selama 100 mili-detik (baris 4),  diharapkan      setelah itu tegangan VPP stabil 12 Volt.
Pengisian 1 byte data ke PEROM dilaksanakan di  baris7 sampai      dengan 10, 
·              data yang diisikan diletakkan di jalur data  pada baris      7
·              kemudian baris 8 membangkitkan pulsa PROG       agar data tadi disimpan di PEROM, AT89C2051 memerlukan waktu sekitar  1.2 mili-detik      untuk menyimpan data ke PEROM,
·              baris 9 menunggu sampai AT89C2051 siap  menerima data      lagi 
·              setelah itu dikirimkan pulsa positip NEXT       untuk menaikkan nilai ‘address counter’
Proses di atas diulang sampai semua PEROM selesai  diisi,      proses pengulangan ini dibentuk dengan baris 5, 6 dan 11. Selesai  mengisi      PEROM, tegangan VPP dimatikan di baris 12.
Potongan Program 6 Membaca isi PEROM
01: ResetAddressCounter($0C);
02: for I := 0 to PEROMSize do
03:      BEGIN
04:           Buffer[I] :=  Port[Data];
05:           NEXT;
06:      END;
07: MatikanTegangan;
Membaca isi PEROM caranya jauh lebih sederhana  dari pada      mengisi PEROM, mula-mula baris 1 mempersiapkan tegangan-tegangan  yang diperlukan      sambil menentukan mode kerja : Pengisian PEROM (=$0C, lihat Tabel  1). Selesai      mengerjakan perintah baris 1, isi PEROM sudah siap diambil (baris  4), untuk      membaca isi PEROM dikirim pulsa NEXT pada baris 5, pulsa NEXT ini  akan mengakibatkan      ‘address counter’ nilainya bertambah 1.
Proses di atas diulang sampai semua PEROM selesai  dibaca,      proses pengulangan ini dibentuk dengan baris 2, 3 dan 6. Selesai  membaca isi      PEROM, tegangan VPP dimatikan di baris 7.
Penutup
Program yang dibuat mencakup fasilitas untuk  mengenali apakah      chip AT89C2051 sudah terpasang ditempatnya, juga dilengkapi  fasilitas untuk      menghapus program yang sudah tersimpan dalam PEROM, membaca isi  PEROM, memeriksa      apakah PEROM masih kosong, dan tentu saja fasiltas utama untuk  pengisian data      ke PEROM, program ini disajikan selengkapnya dalam situs.
Flash PEROM Programmer ini merupakan alat kunci  dalam bermain      AT89C2051, tanpa adanya alat ini tidak mungkin dibuat alat  berbasiskan AT89C2051.

8 komentar:
om... ada ga artikel ato tutorial lengkap tentang mikrokontrol jenis pic
pengen belajar ni om...
untuk jenis PIC saya belum sempat posting. ditunggu aja ya
haduh,,, saya juga butuh tutorial mikrokontrol PIC.. Please Om,diposting segera...
untuk Q1 dan Q2 type NPN tapi seri nya apa yah.??
Kalo yang pake USB gambar skema n programnya kayak apa pak? soalnya sekarang jamannya laptop n notebook yang gak pake paralel port.
kalo pake serial bisa nggak?
kaloa pake VB bisa nggak?
mau komentar ya...
saya dulu tahun sekitar thn 2002/3 pernah nyoba dan berhasil. waktu itu saya ambil kepunyaan stts.edu dgn bpk. budi. hal yang penting pada pengaturan bios komputer lpt di set pakai epp. ok artikel bagus karena alds stts edu sudah g ada. trimakasih banyak . semoga bisa menggugah minat penggemar mikrokontroler.
bagus bgt sgt bermanfaat .....
Posting Komentar