Dasar Pemrograman AT89C2051 (Bagian 1)

Konstruksi dasar AT89Cx051

Meskipun termasuk tua, keluarga Mikrokontroler MCS51 adalah Mikrokontroler yang paling populer saat ini. Keluarga ini diawali oleh Intel yang mengenalkan IC Mikrokontroler type 8051 pada awal tahun 1980-an, 8051 termasuk sederhana dan harganya murah sehingga banyak digemari, banyak pabrik IC besar lain yang ikut memproduksnya, tentu saja masing-masing pabrik menambahkan kemampuan pada mikrokontroler buatannya meskipun semuanya masih dibuat berdasarkan 8051. Sampai kini sudah ada lebih 100 macam mikrokontroler turunan 8051, sehingga terbentuklah sebuah ‘keluarga besar mikrokontroler’ dan biasa disebut sebagai MCS51.

     Belakangan ini, pabrik IC Atmel ikut menambah anggota keluarga MCS51. Atmel merupakan pabrik IC yang sangat menguasai teknologi pembuatan Flash PEROM, jadi sudah selayaknya kalau Atmel memasukkan Flash PEROM ke dalam mikrokontroler buatannya. Usaha Atmel ini ternyatakan bagaikan menambah ‘darah’ baru bagi keluarga MCS51, dengan adanya Flash PEROM yang harganya murah maka tercapailah angan-angan banyak orang untuk membuat alat berbasis mikrokontroler yang sesederhana mungkin dan semurah mungkin.
     Produksi mikrokontroler MCS51 Atmel dibagi dua macam, yang berkaki 40 setara dengan 8051 yang asli, bedanya mikrokontroler Atmel berisikan Flash PEROM dengan kapasitas berlainan. AT89C51 mempunyai Flash PEROM dengan kapasitas 2 Kilo Byte, AT89C52 4 Kilo Byte, AT89C53 12 Kilo Byte, AT89C55 20 Kilo Byte  dan AT89C8252 berisikan 8 Kilo Byte Flash PEROM dan 2 Kilo Byte EEPROM.
     Yang berkaki 20 adalah MCS51 yang disederhanakan, penyederhanaan  dilakukan dengan cara mengurangi jalur untuk input/output paralel, kemampuan yang lain sama sekali tidak mengalami pengurangan. Penederhanaan ini dimaksudkan untuk membentuk mikrokontroler yang bentuk fisiknya sekecil mungkin tapi mempunyai kemampuan sama. Atmel memproduksi 3 buah mikrokontroler ‘mini’ ini, masing-masing adalah AT89C1051 dengan kapasitas Flash PEROM 1 Kilo Byte, AT89C2051 2 Kilo Byte dan AT89C4051 4 Kilo Byte. Ketiga mikrokontroler ini secara umum disebut sebagai AT89Cx051.
klik pada gambar untuk ukuran sebenarnya
 Gambar 1
Susunan kaki AT89Cx051 dan kontruksi dalam chip

Konstruksi AT89Cx051

     Gambar 1 memperlihatkan susunan kaki AT89C2051, susunan kaki ini sama persis dengan AT89C1051 dan AT89C4051. Demikian pula ketiga IC mempunyai konstruksi di dalam chip yang sama persis, perbedaannya hanya terletak pada kapasitas Flash PEROM.
      IC AT89Cx051 hanya memerlukan tambahan 3 kapasitor, 1 resistor dan 1 Xtal serta catu daya 5 Volt. Kapasitor 10 mikro-Farad dan resistor 10 Kilo Ohm dipakai untuk membentuk rangkaian reset, dengan adanya rangkaian reset ini AT89Cx051 otomatis di-reset begitu rangkaian menerima catu daya. Xtal dengan frekuensi maksimum 24 MHz dan 2 kapasitor 30 pico-Farad dipakai untuk melengkapi rangkaian oscilator pembentuk clock yang menentukan kecepatan kerja mikrokontroler.
      Memori merupakan bagian yang sangat penting bagi mikrokontroler, diperlukan 2 macam memori yang sifatnya berbeda.
      Read Only Memory (ROM) yang isinya tidak berubah meskipun IC kehilangan catu daya, dipakai untuk menyimpan program, begitu di-reset mikrokontroler akan langsung bekerja dengan program dalam ROM tersebut. Sesuai dengan keperluannya, dalam susunan MCS51 memori penyimpan program ini dinamakan sebagai MEMORI PROGRAM.
      Random Access Memory (RAM) isinya akan sirna begitu IC kehilangan catu daya, dipakai untuk menyimpan data pada saat program bekerja. Di samping untuk data, RAM dipakai pula untuk Stack. RAM yang dipakai untuk menyimpan data ini disebut pula sebagai MEMORI DATA.
      Ada berbagai jenis ROM. Untuk mikrokontroler dengan program yang sudah baku dan diproduksi secara massal, program diisikan ke dalam ROM pada saat IC mikrokontroler dicetak di pabrik IC. Untuk keperluan yang jumlahnya tidak banyak biasanya tidak dipakai ROM, tapi dipakai ROM yang bisa di-isi-ulang atau Programable-Eraseable ROM (disingkat menjadi PEROM atau PROM). Dulu banyak dipakai UV-EPROM (Ultra Violet Eraseable Programable ROM) yang kemudian dinilai mahal harganya dan ditinggalkan setelah ada Flash PEROM yang harganya jauh lebih murah.
      Jenis memori yang dipakai untuk Memori Program AT89Cx051 adalah Flash PEROM, program untuk mengendalikan mikrokontroler diisikan ke memori itu lewat bantuan alat yang dinamakan sebagai AT89Cx051 Flash PEROM Programmer.
Memori Data yang disediakan dalam chip AT89Cx051 sebesar 128 byte, meskipun hanya kecil saja tapi untuk banyak keperluan memori kapasitas itusudah mencukupi.
      Sarana Input/Output yang disediakan cukup banyak dan bervariasi. AT89Cx051 mempunyai 17 jalur Input/Output paralel. Jalur Input/Output paralel ini dikenal sebagai Port 1 (P1.0..P1.7) dan Port 3 (P3.0..P3.5 dan P3.7).
      AT89Cx051 dilengkapi UART (Universal Asynchronous Receiver/Transmiter) yang biasa dipakai untuk komunikasi data secara seri. Jalur untuk komunikasi data seri (RXD dan TXD) diletakan berhimpitan dengan P1.0 dan P1.1 di kaki nomor 2 dan 3, sehingga kalau sarana UART ini dipakai maka P1.0 dan P1.1 tidak lagi bisa dipakai untuk jalur input/output paralel.
    Timer 0 dan Timer 1 masing-masing adalah untaian pencacah biner 16 bit (16 bit binary counter) di dalam chip yang dipakai sebagai sarana input/output yang bekerja menurut fungsi waktu. Clock penggerak untaian pencacah ini bisa berasal dari oscilator kristal atau clock yang diumpan dari luar lewat T0 dan T1. T0 dan T1 berhimpitan dengan P3.4 dan P3.5, sehingga P3.4 dan P3.5 tidak bisa dipakai untuk jalur input/output paralel kalau T0 dan T1 dipakai.
       AT89Cx051 mempunyai 5 sumber pembangkit interupsi, 2 diantaranya adalah sinyal interupsi yang diumpankan ke kaki INT0 dan INT1, kedua kaki ini berhimpitan dengan P3.2 dan P3.3 sehingga tidak bisa dipakai sebagai jalur input/output paralel kalau INT0 dan INT1 dipakai untuk menerima sinyal interupsi.
        3 sumber interupsi yang lain berasal dan sarana komunikasi data seri dan dari sistem Timer 0 dan Timer 1.
        Port 1, Port 2, UART, Timer 0, Timer 1 dan sarana lainnya merupakan register yang secara fisik merupakan RAM khusus, yang ditempatkan di Special Function Register (SFR).


Dasar kerja program

      Program untuk mengendalikan kerja dari mikrokontroler disimpan di dalam memori program. Program pengendali tersebut merupakan kumpulan dari instruksi kerja mikrokontroler, 1 instruksi MCS51 merupakan kode yang panjangnya bisa satu sampai empat byte.
       Sepanjang mikrokontroler bekerja, instruksi tersebut byte demi byte diambil ke CPU dan selanjutnya dipakai untuk mengatur kerja mikrokontroler. Proses pengambilan instruksi dari memori program dikatakan sebagai ‘fetch cycles’ dan saat-saat CPU melaksanakan instruksi disebuat sebagai ‘execute cycles’.
       Semua mikrokontroler maupun mikroprosesor dilengkapi sebuah register yang berfungsi khsus untuk mengatur ‘fetch cycles’, register tersebut dinamakan sebagai Program Counter. Nilai Program Counter secara otomatis bertambah satu setiap kali selesai mengambil 1 byte isi memori program, dengan demikian isi memori program bisa berurutan diumpankan ke CPU.
        Saat MCS51 di-reset, isi Program Counter di-reset menjadi 0000. Artinya sesaat setelah reset isi dari memori program nomor 0 dan seterusnya akan diambil ke CPU dan diperlakukan sebagai instruksi yang akan mengatur kerja mikrokontroler. Dengan demikian, awal dari program pengendali MCS51 harus ditempatkan di memori nomor 0, setelah reset MCS51 menjalankan program mulai dari memori-program nomor 0000, dengan melakukan proses ‘fetch cycles’ dan ‘execute cycles’ terus menerus tanpa henti.
        Jika sarana interupsi diaktipkan, dan tegangan di kaki INT0 (kaki nomor 6) merubah dari ‘1’ menjadi ‘0’, maka proses menjalankan program di atas akan dihentikan sebentar, mikrokontroler melayani dulu permintaan interupsi, selesai melayani permintaan interupsi CPU akan melanjutkan mengerjakan program utama lagi.
         Untuk melaksanakan hal tersebut, pertama-tama CPU menyimpan nilai Program Counter ke Stack (Stack merupakan satu bagian kecil dari data memori – RAM), kemudian mengganti isi Program Counter dengan 0003. Artinya MCS51 akan melaksanakan program yang ditempatkan di memori program mulai byte ke 3 untuk melayani interupsi yang diterima dari kaki INT0. Adalah tugas programer untuk mengatur agar program yang dipakai untuk melayani interupsi lewat INT0 diletakkan disitu.
        Selesai melayani interupsi, nilai Program Counter yang tadi disimpan ke dalam Stack akan dikembalikan ke Program Counter, dengan demikian CPU bisa melanjutkan pekerjaan di program Utama.
      Selain INT0, AT89Cx051 bisa menerima interupsi dari INT1, dari UART dan dari Timer. Agar permintaan interupsi itu bisa dilayani dengan program yang berlainan, maka masing-masing sumber interupsi itu mempunyai nomor awal program untuk layanan interupsi yang berlainan. Nomor-nomor awal tersebut digambarkan dalam Gambar 2.

 Gambar 2
Peta Memori Program

Tutorial Bascom AVR dan 8051 lengkap

  • Judul : Mudah memprogram mikrokontroler dengan bahasa basic
  • Bahasa :Inggris
  • Jenis File : PDF (Adobe reader)
  • Jumlah Halaman :236
  • Lain-lain :
  • Isi :
  1. Pemrograman mikrokontroler menggunakan bahasa basic dengan software bascom
  2. step by step menggunakan software bascom lengkap
  3. cara menggunakan virtual simulator bascom
  4. contoh aplikasi menggunakan bascom lengkap
Ebook tutorial bascom ini anda dapat download disini

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. 

 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.
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
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, 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.

Software programmer At89C2051 yang siap pakai dapat anda download disini
Gambar PCB yang telah jadi dan siap pakai anda bisa download disini

Jenis-Jenis Mikrokontroler AVR

Berikut ini ialah jeni-jenis mikrokontroler keluarga AVR beserta fiturnya, yang mungkin berguna sebagai referensi.

AVR
AT90VC8544
8-Kbyte In-System programmable Flash Program Memory,
256 byte SRAM, 512 Byte EEPROM, 8-channel 10-bit A/D.
Up to 4 MIPS throughput at 4 MHz. 3.6 and 5 volt operation.
AT90S1200
1-Kbyte In-System programmable Flash Program Memory,
64-Byte EEPROM, 32-Byte Register File. Up to 12 MIPS
throughput at 12 MHz.
AT90S2313
2-Kbyte In-System programmable Flash Program Memory,
128 Byte SRAM and EEPROM. Up to 10 MIPS throughput at
10 MHz.
AT90S2323
2-Kbyte In-System programmable Flash Program Memory,
128 Byte SRAM and EEPROM. Up to 10 MIPS throughput of
10 MHz. 5V operation.
3V version: AT90LS2323
AT90S2343
2-Kbyte In-System programmable Flash Program Memory,
128 Byte SRAM and EEPROM. Up to 10 MIPS throughput of
10 MHz. 5V operation.
3V version: AT90LS2343

MEGAAVR
ATmega8
8-Kbyte self-programming Flash Program Memory, 1-Kbyte SRAM,
512 Byte EEPROM, 6 or 8 channel 10-bit A/D. Up to 16 MIPS
throughput at 16 MHz. 5V operation.
3V version: ATmega8L
ATmega8515
8-Kbyte self-programming Flash Program Memory,
512 Byte SRAM and EEPROM. Up to 16 MIPS throughput at
16 MHz. 5V operation.
3V version: ATmega8515L
ATmega8535
8-Kbyte self-programming Flash Program Memory,
512 Byte SRAM and EEPROM, 8 channel 10-bit A/D. Up to
16 MIPS throughput at 16 MHz. 5V operation.
3V version: ATmega8535L
ATmega162
16-Kbyte self-programming flash Program Memory,
1-Kbyte SRAM, 512 Byte EEPROM, JTAG interface for on-chipdebug.
Up to 16 MIPS throughput at 16 MHz.
1.8V version: ATmega162V
ATmega16
16-Kbyte self-programming Flash Program Memory,
1-Kbyte SRAM, 512 Byte EEPROM, 8 channel 10-bit A/D,
JTAG interface for on-chip-debug. Up to 16 MIPS throughput at
16 MHz. 5V operation.
3V version: ATmega16L
ATmega32
32-Kbyte self-programming Flash Program Memory,
2-Kbyte SRAM, 1-Kbyte EEPROM, 8 channel 10-bit A/D, JTAG
interface for on-chip-debug. Up to 16 MIPS throughput at 16
MHz. 5V operation.
3V version: ATmega32L
ATmega64
64-Kbyte self-programming Flash Program Memory,
4-Kbyte SRAM, 2-Kbyte EEPROM, 8 channel 10-bit A/D,
JTAG interface for on-chip-debug. Up to 16 MIPS throughput at
16 MHz. 5V operation.
3V version: ATmega64L
ATmega128
128-Kbyte self-programming Flash Program Memory,
4-Kbyte SRAM, 4-Kbyte EEPROM, 8 channel 10-bit A/D, JTAG
interface for on-chip-debug. Up to 16 MIPS throughput at
16 MHz. 5V operation.
3V version: ATmega128L

LCD AVR

ATmega169
16-Kbyte self-programming Flash Program Memory,
1-Kbyte SRAM, 512 Byte EEPROM, 8 channel 10-bit A/D,
JTAG interface for on-chip-debug. 4 x 25 Segment LCD driver.
Up to 16 MIPS throughput at 16 MHz. 5V operation.
3V version: ATmega169L
1.8V version: ATmega169V

TINYAVR
ATtiny11
1-Kbyte In-System programmable Flash Program Memory,
32 byte SRAM. Up to 6 MIPS throughput at 6 MHz.
ATtiny12
1-Kbyte In-System programmable Flash Program Memory,
32 Byte SRAM, 64 Byte EEPROM. Up to 12 MIPS throughput
at 12 MHz.
ATtiny15L
1-Kbyte In-System programmable Flash Program Memory,
64 Byte EEPROM, 32 Byte Register File, 4 channel 10-bit A/D.
Up to 1.6 MIPS throughput at 1.6MHz. 3V operation.
ATtiny26
2-Kbyte In-System programmable Flash Program Memory,
128 Byte SRAM and EEPROM, 11 channel 10-bit A/D. Universal
Serial Interface. High Frequency PWM. Up to 16 MIPS throughput
at 16 MHz. 5V operation.
3V version: ATtiny26L
ATtiny28L
2-Kbyte In-System programmable flash Program Memory,
128 Byte SRAM, 32 Byte Register File, Keyboard interrupt.
Up to 4 MIPS throughput at 4 MHz. 3V operation.
1.8V version: ATtiny28V

USB AVR

AT43USB320A
512 Byte SRAM, Full Speed USB, 3 Function Endpoints, 4 Hub
Ports. Up to 12 MIPS throughput at 12 MHz. 5V operation.
AT43USB325E/M
16-Kbyte EEPROM or Mask ROM, 512 Byte SRAM, Full Speed
USB, 4 Function Endpoints, 4 Hub Ports, 5 LED Driver.
Up to 12 MIPS throughput at 12 MHz. 5V operation.
AT43USB325
16-Kbyte Mask ROM, 512 Byte SRAM, Full Speed USB,
3 Function Endpoints, 2 Hub Ports, 4 LED Driver.
Up to 12 MIPS throughput at 12 MHz. 5V operation.
AT43USB351M
24-Kbyte Mask ROM, 1-Kbyte SRAM, Low-Full Speed USB,
5 Function Endpoints. Up to 24 MIPS throughput at 24 MHz.
5V operation.
AT43USB353M
24-Kbyte Mask ROM, 1-Kbyte SRAM, Full Speed USB, 4 Function
Endpoints, 2 Hub Ports. Up to 24 MIPS throughput at 24 MHz.
5V operation.
AT43USB355E/M
24-Kbyte EEPROM or Mask ROM, 1-Kbyte SRAM, Full Speed
USB, 4 Function Endpoints, 2 Hub Ports. Up to 12 MIPS throughput
at 12 MHz. 5V operation.
AT76C711
Full Speed USB to Fast Serial Asynchronous Bridge.

Secure AVR
AT90SC19236R
192-Kbyte Mask ROM, 36-Kbyte EEPROM, 4-Kbyte RAM.
3-5V operation.
AT90SC19264RC
192-Kbyte Mask ROM, 64-Kbyte EEPROM, 6-Kbyte RAM,
Crypto Engine. 3-5V operation.
AT90SC25672R
256-Kbyte Mask ROM, 72-Kbyte EEPROM, 6-Kbyte RAM.
3-5V operation.
AT90SC320856
32-Kbyte Mask ROM, 8-Kbyte Flash, 56-Kbyte EEPROM,
1.5-Kbyte RAM. 3-5V operation.
AT90SC3232CS
32-Kbyte Flash, 32-Kbyte EEPROM, 3-Kbyte RAM, Crypto Engine.
3-5V operation.
AT90SC4816R/RS
48-Kbyte Mask ROM, 16-Kbyte EEPROM, 1.5-Kbyte RAM.
3-5V operation.
AT90SC6404R
64-Kbyte Mask ROM, 4-Kbyte EEPROM, 2-Kbyte RAM.
3-5V operation.
AT90SC6432R
64-Kbyte Mask ROM, 32-Kbyte EEPROM, 2-Kbyte RAM.
3-5V operation.
AT90SC6464C
64-Kbyte Flash, 64-Kbyte EEPROM, 3-Kbyte RAM, Crypto Engine.
3-5V operation.
USB version: AT90SC6464C-USB
AT90SC9608RC
96-Kbyte Mask ROM, 8-Kbyte EEPROM, 3-Kbyte RAM,
Crypto Engine. 3-5V operation.
AT90SC9616RC
96-Kbyte Mask ROM, 16-Kbyte EEPROM, 3-Kbyte RAM,
Crypto Engine. 3-5V operation.
AT90SC9636R
96-Kbyte Mask ROM, 36-Kbyte EEPROM, 3-Kbyte RAM.
3-5V operation.
AT97SC3201
Trusted Computing Platform Compliant Security Processor,
On-Chip Secure Key Storage, 33 MHz LPC Interface.
3.3V operation

DVD AVR

AT78C1501
DVD/CD Interface Controller, ATAPI Compatible, Ultra DMA
Support at 66 MB/sec.
AT78C1502
DVD Servo Controller, On-Chip Debugger Monitor. Up to 120 MIPS
throughput at 40 MHz. 3V and 5V operation.

RF AVR
AT86RF401
11-19 MHz, 2-Kbyte In-System programmable Flash Program
Memory, 128 Byte SRAM and EEPROM. 2V operation.

FPGA AVR
AT94K05AL
4-16 Kbyte In-System programmable Flash Program Memory,
4-16 Kbyte SRAM, JTAG interface for on-chip-debug, 5K FPGA
Gates. 3V operation.
AT94K10AL
20-32 Kbyte In-System programmable Flash Program Memory,
4-16 Kbyte SRAM, JTAG interface for on-chip-debug, 10K FPGA
Gates. 3V operation.
AT94K40AL
20-32 Kbyte In-System programmable Flash Program Memory,
4-16 Kbyte SRAM, JTAG interface for on-chip-debug, 40K FPGA
Gates. 3V operation.
AT94S05AL
4-16 Kbyte In-System programmable Flash Program Memory,
4-16 Kbyte SRAM, 256 Byte EEPROM, JTAG interface for
on-chip-debug, 5K FPGA Gates. 3V operation.
AT94S10AL
20-32 Kbyte In-System programmable Flash Program Memory,
4-16 Kbyte SRAM, 512 Byte EEPROM, JTAG interface for
on-chip-debug, 10K FPGA Gates. 3V operation.
AT94S40AL
20-32 Kbyte In-System programmable Flash Program Memory,
4-16 Kbyte SRAM, 1-Kbyte EEPROM, JTAG interface for
on-chip-debug, 40K FPGA Gates. 3V operation

Konsep Dasar Motor Stepper (Bagian 2)

Rangkaian kontrol untuk setiap tipe motor stepper mempunyai kemiripan yaitu dalam hal aktivasinya. Namun yang paling membedakan adalah dalam hal urutan pemberian data aktivasi setiap lilitan pada motor stepper.

Motor stepper merupakan motor listrik yang tidak mempunyai komutator, di mana semua lilitannya merupakan bagian dari stator. Dan pada rotornya hanya merupakan magnet permanen. Semua komutasi setiap lilitan harus di kontrol secara eksternal sehingga motor stepper ini dapat dikontrol sehingga dapat berhenti pada posisi yang diinginkan atau bahkan berputar ke arah yang berlawanan.
Pada bagaian ini akan dibahas mengenai bagaian terakhir dari rangkaian penggerak motor stepper. Rangkaian ini pada dasarnya hanya merupakan rangkaian switching arus yang mengaliri lilitan pada motor stepper. Urutan pemberian data pada motor stepper ini dapat mengontrol arah putaran dari motor stepper ini. Penambahan kecepatan pada motor stepper dapat dilakukan dengan cara meningkatkan frekuensi pemberian data pada rangkaian switching arus.
Rangkaian kontrol ini nantinya terhubung langsung dengan lilitan pada motor, rangkaian power supplai, dan rangkaian yang dikontrol secara digital yang pada akhirnya menentukan kapan lilitan yang diinginkan dalam kondisi off atau on. Selain hanya menggunakan transistor switching ar, saat ini sudah tersedia driver motor yang memang diperuntukkan bagi motor stepper, yang lebih dikenal dengan H-Bridge. Komponen ini  biasanya digunakan pada motor stepper tipe bipolar, walaupun demikian tidak menutup kemungkinan digunakan pada motor stepper tipe yang lain.

Rangkaian Driver Variabel Reluctance Motor
Gambar 1
Kontrol Pada Varibel Reluctance Motor Stepper

Di dalam gambar 1 tersebut terdapat sebuah 3 blok dimana masing-masing mengatur sebuah kumparan motor stepper. Blok tersebut terdiri dari saklar arus yang dikontrol secara digital. Blok ini berperan penting di dalam pengontrolan arus yang akan melewati kumparan motor tertentu. Pengontrollan blok ini dapat dilakukan oleh sebuah rangkaian digital sederhana atau bahkan sebuah komputer melalui printer port. Dengan menggunakan komputer maka diperlukan perangkat lunak yang nantinya akan mengatur pemberian data dengan suatu urut-urutan tertentu kepada komponen saklar di dalam blok.
Kumparan pada motor stepper mempunyai karakteristik yang sama dengan karakteristik beban induktif lainnya. Oleh sebab itu ketika terdapat arus yang melalui kumparan motor, tidak dapat dimatikan dengan seketika tanpa menghasilkan tegangan transien yang sangat tinggi. Kondisi ini biasanya nampak dengan timbulnya percikan bunga api (ketika menggunakan motor DC dengan daya yang besar). Hal ini sangat tidak diinginkan karena dapat merusak saklar sehingga perlu diberikan rangkaian tambahan untuk membatasi tegangan transien yang muncul. Sebaliknya ketika saklar tertutup maka terdapat arus yang mengalir ke kumparan motor dan akan menghasilkan kenaikan tegangan secara perlahan.
Untuk membatasi tegangan spike yang muncul maka ada dua alternatif penyelesaiannya yaitu dengan memparalel pada kumparan motor dengan dioda dan alternatif yang kedua adalah dengan menggunakan kapasitor yang dipasang paralel dengan kumparan motor stepper.

Gambar 2
Spike Voltage Reducer

Diode yang yang terpasang paralel tersebut harus mampu melewatkan arus balik yang terjadi ketika saklar terbuka. Dioda yang digunakan dapat berupa dioda yang umum dipakai seperti 1N4001 atau 1N4002. Jika digunakan dioda yang mempunyai karakteristik ‘fast switch’ maka perlu diberikan penambahan kapasitor yang dipasang secara paralel pada dioda.
Pemasangan kapasitor paralel dengan kumparan motor dapat menyebabkan spike yang ditimbulkan akan menyebabkan kapasitor tersebut charge sehingga tegangan spike yang terjadi tidak akan keluar tetapi diredam oleh kapasitor ini. Tetapi yang paling penting adalah kapasitor ini harus mampu menahan surge current pada saat terjadi spike. Surge current adalah arus tiba-tiba yang sangat besar yang muncul bersamaan dengan tegangan spike. Nilai kapasitor harus dipilih pada kondisi dimana nilai induktansi dari kumparan motor stepper paling besar. Inilah karakteristik motor stepper dengan tipe variabel reluctance dimana nilai induktansinya berubah-ubah tergantung dari sudut  putaran pada poros rotor. Penambahan kapasitor sehingga tepat akan membentuk sebuah rangkaian resonansi yang dapat menyebabkan peningkatan torsi pada motor dengan tipe ini.

Rangkaian Driver Unipolar Permanent Magnet and Hybrid Motor
Gambar 3
Kontrol Pada Unipolar Permanent Magnet Motor

Rangkaian kontrol untuk mengendalikan motor stepper dengan tipe unipolar ini hampira sama dengan rangkaian kontrol pada motor tipe variabel reluctance. Perbedaanya hanya pada struktur kumparan motornya saja.
Gambar 4
Spike Voltage Reducer untuk Unipolar Stepper Motor

Walaupun demikian karena bebanya merupakan beban induktif maka selalu ada tegangan spike yang muncul ketika saklar terbuka. Oleh sebab itu perlu penambahan dioda yang terpasang paralel dengan kumparan motor stepper seperti terlihat pada gambar 4.
Dua  buah dioda tambahan diperlukan karena kumparan motor bukanlah kumparan yang independen tetapi sebuah kumparan yang mempunyai tap di tengah-tengah kumparan seperti struktur pada autotransformer. Ketika salah satu saklar dibuka maka tegangan spike muncul di kedua ujung kumparan motor tersebut dan di clamp oleh dua buah dioda ke supplay motor. Tetapi jika salah satu ujung kumparan motor tersebut tidak floating terhadap supplai motor maka tegangan spike ini akan lebih negatif daripada referensi ground. Jika saklar yang digunakan berupa relay, kondisi ini bukan menjadi masalah. Kondisi ini baru menjadi masalah ketika saklar yang digunakan adalah saklar semikonduktor seperti transistor atau FET.
Untuk membatasi level tegangan  spike dapat pula digunakan kapasitor yang terpasang seperti pada gambar 5.
Gambar 5
Pemberian Kapasitor Pembatas Tegangan Spike

Rangkaian Praktis Pengendali Motor Stepper
Jika rangkaian kontrol yang mengendalikan rangakaian motor driver ini berupa mikrokontroller atau komponen digital maka ada baiknya agar setiap port yang mengontrol rangkaian driver motor stepper ini diberi buffer terlebih dahulu agar tidak membebani port mikrokontroller yang digunakan. Seperti pada gambar 3, pin control_0, control_1, control_2 dan control_3 ini dapat dikontrol secara digital dengan menggunakan mikrokontroller dengan memberi komponen yang berfungsi sebagai buffer seperti pada gambar 6.
Gambar 6
Rangkaian Sederhana Penggerak Motor Stepper

Pada gambar 6 hanya ditampilkan satu bagian untuk mengontrol satu buah kumparan motor stepper. Ada dua alternatif yaitu dengan menggunakan buffer terlebuh dahulu atau menggunakan FET, yang mempunyai impedansi input yang sangat tinggi, sebagai komponen saklarnya. Tegangan Vmotor tidaklah harus selalu sama dengan tegangan VCC pada mikrokontroller. Oleh sebab itu digunakan sebuah komponen buffer yang mempunyai output open collector sehingga outputnya dapat di pull-up ke tegangan yang diinginkan.
Untuk dasar pemilihan transistornya adalah pada karakteristik IC (arus kolektor). Transistor ini harus merupakan transistor power yang mampu melewatkan arus sesuai dengan arus yang diperlukan oleh kumparan motor stepper ini. Jika arus yang ditarik oleh kumparan motor stepper ternyata lebih besar daripada kemampuan transistor maka transistor akan cepat panas dan dapat menyebabkan rusaknya transistor tersebut.
R pull-up  sebesar 470 akan memberikan arus sebesar 10 mA ke basis transistor Q1. Jika Q1 mempunyai gain sebesar 1000 maka  arus yang dapat diliewatkan adalah sekitar beberapa ampere, tergantung dari besar arus yang ditarik oleh kumparan motor stepper tersebut. Arus ini harus lebih kecil dari arus IC yang diperbolehkan.
Untuk komponen FET dapat digunakan komponen IRL540 yang dapat mengalirkan arus sampai 20 A dan mampu menahan tegangan balik sampai 100V. Hal ini disebabkan oleh karena FET ini mampu menyerap tegangan spike tanpa perlindungan dioda. Tetapi komponen ini memerlukan heat sink  yang besar dan harus cukup baik dalam hal penyerapan panasnya. Ada baiknya jika digunakan kapasitor untuk menekan level tegangan spike yang ditimbulkan dari transisi saklar dari on ke off.