Filename | MCS 51 = Downloader mikrokontroler AT89C2051 |
Permission | rw-r--r-- |
Author | NMI |
Date and Time | 13.02 |
Label | Elektronika |
Action |
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.
0 komentar :
Posting Komentar