53
Downloader mikrokontroler AT89C2051 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.
Universitas Sumatera Utara
54
Gambar 1 Mengisi Flash PEROM AT89Cx051
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.
Universitas Sumatera Utara
55
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
Universitas Sumatera Utara
56
Gambar 3 Skema Rangkaian AT89Cx051 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, programprogram 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: 04:
{ Control Register 00001001
05:
| | ||_ NEXT
06:
| | |__ PROG*
07:
| |____ Latch
: normally LOW positive pulse : normally HIGH negative pulse : normally LOW positive pulse
Universitas Sumatera Utara
57
08:
|______ Direction : 0 as ouput Port
09:
}
10:
ControlByte := 9;
11:
Port[Control] := ControlByte;
{00001001}
12: END; 13: 14: PROCEDURE SetupInput; 15: BEGIN 16: 17:
{ Control Register 00101001
18:
| | ||_ NEXT
: normally LOW positive pulse
19:
| | |__ PROG*
20:
| |____ Latch
21:
|______ Direction : 1 as input port
: normally HIGH negative pulse : normally LOW positive pulse
22:
}
23:
ControlByte := $29;
24:
Port[Control] := ControlByte;
{00101001}
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)
Universitas Sumatera Utara
58
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}
Universitas Sumatera Utara
59
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
Universitas Sumatera Utara
60
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: 04:
{ Pemakaian 74HC574 x1x1MMMM
Universitas Sumatera Utara
61
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;
16:
5 : if ModeSelect=$0B
17:
THEN V:=$70
18:
ELSE V:=$30; {00110000}
19:
12 : V:=$10;
20:
ELSE EXIT;
{10110000}
{01110000}
{00010000}
21:
END;
22:
SetupOutput;
23:
Port[Data]
24:
Port[Control] := ControlByte and $F7; { bit 3 }
25:
Port[Control] := ControlByte;
26:
SetupInput;
:= V + ModeSelect;
27: END; 28: 29: PROCEDURE ResetAddressCounter(Mode:BYTE); 30: BEGIN
Universitas Sumatera Utara
62
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).
Universitas Sumatera Utara
63
PROCEDURE MatikanTegangan untuk mematikan tegangan VPP dengan mode kerja yang tidak dikenal di Tabel 1 (baris 41).
Universitas Sumatera Utara
64
Universitas Sumatera Utara
65
Universitas Sumatera Utara
66
Universitas Sumatera Utara