Rabu, 23 Maret 2011

DASAR MICROCONTROL

apa itu microcontroller ?
Setiap orang dewasa ini tentu sudah sangat familiar dengan komputer , tapi tidak semua orang tahu bagaimana sebuah komputer itu bekerja. begitu juga dengan mesin cuci,AC,oven dan peralatan lain yang serba otomatis kita semua sudah terbiasa menggunakannya tapi tapi tidak semua orang tahu bagaimana peralatan otomatis itu bekerja. Tentu tidak semua orang ingin mengetahuinya karena dianggap sulit .Tapi tahukah anda bahwa semua itu anda dapat pelajari dengan mudah.
Bagian utama sebuah komputer atau peralatan otomatis adalah apa yang disebut prosessor. lebih khusus untuk sebuah komputer biasa disebut microprosesor dan                                                                          untuk peralatan otomatis spt  ac,mesin cuci, remote control,  dll  disebut microcontroller tapi tugas keduanya adalah sama yaitu menjadi pemroses/ "pemikir" utama .
Untuk komputer anda mungkin sudah sering mendengar pentium I, Pentium II , Atlon dsb.  itu adalah jenis microprossesor sebuah pc. Pentium adalah microprosesor buatan perusahaan Intel dan Atlon buatan AMD .Tapi pada tutorial ini kita hanya akan mempelajari Microcontroller diantaranya PIC16F84 buatan microchip , AT89c51 buatan ATMEL  dan  MC68HC11 buatan motorola .bagi pemula pilih salah satu saja untuk memulai mempelajarinya, saya sarankan  pilih AT89C51 (sejenis dg  8051 buatan intel) atau  PIC16f84. jika anda sudah menguasai satu jenis microcontroller maka akan mudah mempelajari microcontroller jenis lainnya karena pada prinsipnya sama. 
Bagaimana microcontroller bekerja pada sebuah mesin cuci ?                                                     Gambar dibawah ini menggambarkan contoh rangkaian microcontroller dlm sebuah mesin cuci  yg disederhanakan  . Agar rangkaian bekerja kita harus memberi perintah (program ) kepada microcontroller , programnya adalah sbb:     " jika tombol start ditekan nyalakan led hijau dan berikan sinyal 5volt dan jika tombol stop ditekan nyalakan led merah dan stop sinyal 5volt"                                     
Instruksi/program yg telah kita buat  kita masukan kedalam microcontroller dengan menggunakan sebuah alat yg dinamakan programmer (yg dapat kita buat sendiri)   .
Bagian  yang terdapat dalam sebuah microcontroller :  MEMORI  untuk menyimpan program , CPU yang melaksanakan program yg ada dimemori, PORT untuk mengambil sinyal dari luar  (pd contoh diatas : tombol start dan stop dihubungkan ke port sbg input ) dan untuk mengeluarkan sinyal (pada contoh sinyal 5V , dan led merah /hijau)  , sinyal yg diambil dan dikeluarkan adalah sinyal digital 5 volt (logika 1) atau 0 volt (logika 0) .
    
1969,  BUSICOM membuat calculator . microprocessor pertama dibuat.  
1971,  Microprocessor  4004   microprocessor  4 bit pertama ,6 000 operasi perdetik. 
1972,  Microprocessor  8008.microprosesor 8 bit pertama , memori 16Kb,  45 instruksi dan  300 000  
         operasi per detik. 
1974,  Microprocessor   8 bit dng nama  8080 ,memori 64Kb  75 instruksi, harga saat itu  $360.
 
          Motorola mengeluarkan , microprocessor 8 bit , 6800,  6820 dan 6850. 
1975,  Microprosesor Technologi MOS  6501 , 6502,  8080 dan 6800  .
1976,  Z80.  8080,  Z80  64 Kb 176 instruksi  buatan ZILOG,
1976,  Microprocessor 8-bit 8085 buatan Intel . 
Microcontroller digunakan khusus untuk mengontrol peralatan tertentu, tidak bisa digunakan untuk tugas2 lain, microcontroller otak dari sebuah peralatan otomatis spt AC, mesin cuci, TV,remote control  dll.
microprocessor digunakan untuk memproses berbagai macam tugas, contoh penggunaan microprosesor antara lain pada komputer/pc ia bisa digunakan untuk berbagai macam tugas spt pengolah kata, games, disign grafik,multimedia dll, microprosessor membutuhkan memori luar  memori, atau components untuk  mengirim dan menerima  data . bisa dibilang microprocessor otak dari sebuah computer.  

Memori 
Memori adalah bagian microcontroller untuk menyimpan Program dan data.


ada 3 bagian utama sebuah memori yaitu alamat,data dan control baca atau tulis R/W   
jenis memory antara lain :
1. RAM (random access memory)  : CPU bisa  menulis/menyimpan  dan membaca  kedlm memori ini , memori akan hilang jika power supply dihilangkan.
2. ROM (read-only memory) : memori yg hanya bisa sekali ditulis dan selanjutnya hanya bisa dibaca .data tdk hilang jika power dihilangkan dihilangkan  
3. EPROM (erasable programmable read-only memory) : CPU bisa  menulis/menyimpan  dan membaca  kedlm memori, memori tdk  hilang jika power supply dihilangkan. (cara penulisan dgn cara tertentu/dgn alat programmer) cara menghapus data dengan disinari cahaya ultra violet atau bisa juga dgn sinar matahari beberapa menit
4. EEPROM (electrically erasable programmable read-only memory) : CPU bisa  menulis/menyimpan  dan membaca  kedlm memori, memori tdk  hilang jika power supply dihilangkan. (cara penulisan dgn cara tertentu/dgn alat programmer)  

RAM EEPROM EPROM ROM
PERMANEN TDK TDK TDK YA
volatile Nonvolatile Nonvolatile Nonvolatile
TEMPAT PENYIMPAN DATA PROGRAM/DATA PROGRAM PROGRAM

Register

Mcu dalam memproses data memori , ia akan mengambil data dimemori dan menyimpan kedalam register didlm CPU setelah diproses hasil akan dikirim kembali kememori. Register di cpu biasanya terdiri dari 2 jenis yaitu Akumulator dan index register
Accumulators digunakan dlm perhitungan arithmetic operations, like addition, subtraction, or performing logical and bit operations .Index registers digunakan menujuk alamat  data di memory. 
contoh register pada MCU  68HC11.
 
 68HC11 punya 2 register accumulators, labeled A and B. masing register 8-bit : menyimpan 1 byte  data.
index registers X dan Y , 16-bit  biasa digunakan menunjukan data di memory.
Stack Pointer, atau SP register, menyimpan program stack.  stack  menyimpan  temporary  data, dan menyimpan alamat return sebelum subroutine dipanggil.
Register Program Counter, or PC, menyimpan alamat yg sedang diexsekusi CPU. nilai  PC  automatis bertambah 1 tiap instruksi dieksekusi.


CPU adalah bagian utama sebuah microcontroller dialah yg melaksanakan(mengeksekusi) program yg ada di memori dalam melaksanakan tugasnya ia dibantu beberpa beberapa  memori internal di dlm cpu yg disebut register ,


dalam melakukan berbagai operasi perhitungan data yg ada dimemori  , cpu mengambil data dimemori dan menyimpan diregister agar lebih efisien.
misal  operasi penjumlahan  data di 2 lokasi memori lokasi data dilokasi memori1 disimpan diregister1 data kedua dari lokasi memori disimpan di register2 hasilnya dismpan diregister3    

Bus adalah nama untuk group koneksi2 ada 2 jenis bus : bus data dan bus alamat
jalur data terdiri dari 8 bit,16 bit,32 bit tapi untuk microcontroller yg kita pelajari terdiri dari 8 bit data (1byte) dan jalur alamat jumlahnya variatif tergantung jenis microcontroller, jumlah jalur alamat menunjukan banyaknya lokasi memori yg bisa diakses.

Misal bus alamat  ada 3 (A0,A1,A2)  maka  lokasi alamat di memori yg bisa diakses adalah  ada 8 lokasi alamat di memori  , 8 = 2

ALAMAT (A2-A1-A0) ISI MEMORI
000
001
010
011
100
101
110
111 

        Memori dng 3 jalur alamat
 Jadi jika bus alamat ada 16 bit (A0~A15) maka jumlah alamat yang bisa diakses sebanyak 216 = 65536 lokasi memori 



Untuk berhubungan dengan dunia luar seperti dengan relay, LED, sensor, switch dan lain-lain microcontroller menggunalkan input/output port,  jenis port ada 3 yaitu port untuk mengambil sinyal dari luar(disebut input port) ,port untuk mengeluarkansinyal (output port) dan ada port yg bisa untuk input maupun output pd kaki yg sama 1 kaki / bidirectional . 


cara menulis/membaca persis seperti menulis/membaca memori, cuma alamatnya bisa nomor port/pin microcontroller

Untuk berkomunikasi dengan microcontroller / pc lain   salah satu  metoda yang populer adalah secara serial dan paralel  misal  microcontroller akan mengirim 1 byte/huruf  "A"  (dlm biner 1110 1111)  mengirim secara paralel berarti satu clock dikirim sekaligus tapi butuh minimal 8 kabel/pin dan secara serial ia dikirim satu persatu bit, jadi minimal 8 clock dibutuhkan untuk mengirim "A" tapi hanya membutuhkan minimal 2 kabel/  pin,    



Komunikasi serial antara Microcontroller dng Microcontroller atau dgn PC
untuk microcontroller biasanya menggunakan serial , jadi butuh hanya 2 pin untuk mengirim dan menerima pada waktu yang sama  dan ini disebut full duplex.




untuk mengetahuai waktu , panjang sinyal, frekwensi dll kita membutuhkan timer. dasarnya adalah  timer  free-run counter adalah sebuah register counter  yang nilainya bertambah satu mulai dari 0000 sampai ffff  kemudian kembali 0000 terus menerus berulang .

kadang kadang karena berbagai sebab microcontroller mengalamai program hang sama seperti sebuah pc , untuk pc biasanya kita mereset , tapi untuk microcontroller agak sulit jika kita harus yg mereset sendiri kenapa? karena biasanya microcontroller biasanya bekerja pada peralatan 24 jam seperti sistem alarm,ac dll  ngga mungkin kita tungguin seharian  ya ngga? .untuk mengatasi masalah ini dibuatlah sistem timer yang bisa mereset otomatis jika terjadi program hang ,namanya wacthdog timer ,ia akan mereset program microcontroller secara berkala, misal tiap 5 detik ia akan mereset program microcontroller. lalu bagai mana kalo program tdk hang ?  ia tetap akan mereset CPU pada detik ke 5 .
jadi biar wacthdog timer tidak mereset cpu ketika keadaan normal kita harus mereset watchdog timer maksimal tiap 4 detik jadi sebelum ia mereset CPU , artinya pada detik ke 4 kita reset wacth dog timer,jadi sebelum watchdog timer mereset cpu pd detik kelima sudah kita reset duluan watcdog timernya pd detik ke 4, perintah mereset wacthdog timer ada didlm program. jadi ketika program kita hang maka tdk ada lagi perintah yg mereset wachtdog timer sehingga WDT  akan mereset CPU..



perlu diingat bahwa microcontroller bekerja pada sinyal digital 1 atau 0 , lalu bagaimana ia membaca sinyal analog , beberapa microcontroller dilengkapi  analog digital converter misalnya pada microcontroller mc68hc11 buatan motorola.  Tugas adc merubah sinyal analog kedigital sehingga bisa diproses microcontroller. 


Kesimpulan
akhirnya lengkap sudah bagian-bagian sebuah  microcontroller,dan agar bisa bekerja bagian2 tsb harus disatukan dlm sebuah rangkaian dan kita mengaksesnya melalui kaki2/pin. Gambar dibawah ini menunjukan bagian dalam sebuah  microcontroller .



 configurasi phisik  bagian dalam sebuah microcontroller
kawat2 kecil yg menghubungkan bagian dalam microcontroller dan luar/pin2 microntroller disebut kawat bonding . gambar dibawah ini menggambarkan bagian tengah microcontroller gambar diatas.



Bagian bagian sebuah Microcontroller dan koneksi internal antar bagian
untuk bisa bekerja microcontroller perlu perintah/instruksi2 yang disimpan dalam memori dan kumpulan perintah/instruksi itu kita sebut program. tanpa program sebuah cpu hanyalah sebuah benda mati yg tak berguna. dibawah ini contoh microcontroller yang akan kita pelajari 



beberapa contoh  jenis microcontroller 

Sebagian bagian dari microcontroller (memori,cpu,register dll)  kita tdk bisa melihat, karena berada didalam ic microcontroller ,yang bisa kita lihat hanya port input/output (P0,P1,P2,P3) saja serta pin2 pendukung clock(XTAL1 & XTAL2),untuk power suply VCC,GND ,



Sebuah microcontroller tanpa diprogram tdk ada artinya apa-apa sebelum bisa digunakan dia harus diberi perintah yang berupa program yang disimpan/diisikan (download) ke dalam memorinya ,contoh kita akan "menginstruksikan" microcontroller untuk mentransfer data dari Port0 (P0) ke register A, B dan lokasi memori 20H maka kita akan menuliskan urutan instruksi yg disebut program, menggunakan bahasa asembler sbb :

;transfer data menggunakan  MOV

   
       ORG 0                      ;awal program di alamat 0
       ;data di port 0 di copy ke reg A, B dan  memori 20h
  awal: MOV A,P0              ;pindahkan isi P0 ke reg A
           MOV B,P0              ;pindahkan isi P0 ke reg B
           MOV 20H,P0          ;pindahkan isi P0 ke lokasi alamat 20H
; isi P0 di copy ke RAM alamatnya ditunjukan oleh P1
           MOV R0,P1            ;pindahkan isi P1 ke reg R0
           MOV @R0,P0          ;pindahkan isi P0 ke alamat yg ditunjuk R0
          JMP awal               ;kembali ke alamat 0
           END


tiap baris disebut instruksi contoh ORG 0 , adalah instruksi untuk memulai program di alamat 0

dan  yg disebut program adalah keseluruhan instruksi mulai instruksi  ORG 0 sampai   instruksi END. 

format standar program adalah sbb:

label    mnemonic , operand  ;keterangan

contoh format

label mnemonic operand keterangan diawali  ; 
AWAL MOV A, P0 ; pindahkan isi p0 ke A


Program dapat dibuat dng beberapa bahasa pemrograman seperti Assembler, C and Basic ,tiap bahasa mempunyai kelebihan dan kekuranganya masing-masing tapi pada tutorial ini kita akan meggunakan bahasa asembler karena instruksi berhubungan langsung dengan  register-register pd microcontroller.
program bisa kita ketik menggunakan notepad pada windows atau edit.com pada dos dan disimpan  dengan extention  .asm   
setelah program selesai kita harus menterjemahkan program yg kita buat agar dimengerti oleh microcontroller   dng sebuah sofware compiler.
program contoh diatas yg kita buat misalnya kita simpan dengan nama  contoh1.asm  ( .asm menyatakan extensi program asembler)   
 Setelah program selesai diketik dan dismpan dengan nama contoh1.asm lalu kita terjemahkan kedalam bahasa mesin dengan program asm51.exe  dengan  mengetik pada dos promt :
C:> asm51.exe  contoh1.asm     ; lalu tekan enter
maka akan dihasilkan file " contoh1.hex"   pada direktori yang sama, file inilah (contoh1.hex) yang akan kita masukan kedalam memori microcontroller dengan menggunakan alat yg disebut programmer (berupa hardware dan software) lihat tutorial microcontroller programmer
isi dari file contoh1.hex adalah sbb
:0E000000E5808580F0858020A890A68080F2A3
:00000001FF

setelah program(contoh1.hex) dimasukan kedalam microcontroller barulah microcontroller dipasangkan pada rangkaian yang akan dicontrol dan menjalankanya.dengan cara mereset. tentu sebelumnya harus diberi power suply untuk tenaga dan clock sebagai "jantung", berdasarkan tiap clock microcontroller mengeksekusi perintah satu persatu dari instruksi  awal  sampai instruksi terakhir (biasanya instruksi "end") .

beberapa saat setelah direset atau diberi power suply  PC bernilai  0000 dan terus bertambah 1 , microcontroller akan  menjalankan instruksi program pd alamat yg ditunjukan oleh PC tiap langkah dipicu/trigger oleh sinyal clock .jadi kecepatan eksekusi sebuah program ditentukan oleh clock xtal yg terpasang.



 misal xtal /clock yg kita pakai frekwensinya 4 Mhz  atau 1 perioda clock = 1/4000.000 detik = 0.00000025 detik   

 jadi untuk menyelesaikan  program diatas = 14 byte instruksi X 0.00000025 detik = 0.0000035 detik 


                                                                           
interupsi

Saat kaki RESET pada IC mikroprosesor/mikrokontroler menerima sinyal reset ( sinyal tersebut berupa sinyal ‘1’ sesaat, pada prosesor lain umumnya merupakan sinyal ‘0’ sesaat), Program Counter diisi dengan sebuah nilai. Nilai tersebut dinamakan sebagai vektor reset (reset vector), merupakan nomor awal memori-program yang menampung program yang harus dijalankan.

Pembahasan di atas memberi gambaran bahwa proses reset merupakan peristiwa perangkat keras (sinyal reset diumpankan ke kaki Reset) yang dipakai untuk mengatur kerja dari perangkat lunak, yakni menentukan aliran program prosesor (mengisi Program Counter dengan vektor reset).

Program yang dijalankan dengan cara reset, merupakan program utama bagi prosesor.

 Peristiwa perangkat keras yang dipakai untuk mengatur kerja dari perangkat lunak, tidak hanya terjadi pada proses reset, tapi terjadi pula dalam proses interupsi.

Dalam proses interupsi, terjadinya sesuatu pada perangkat keras tertentu dicatat dalam flip-flop khusus, flip-flop tersebut sering disebut sebagai ‘petanda’ (flag), catatan dalam petanda tersebut diatur sedemikian rupa sehingga bisa merupakan sinyal permintaan interupsi pada prosesor. Jika permintaan interupsi ini dilayani prosesor, Program Counter akan diisi dengan sebuah nilai. Nilai tersebut dinamakan sebagai vektor interupsi (interrupt vector), yang merupakan nomor awal memori-program yang menampung program yang dipakai untuk melayani permintaan interupsi tersebut.

Program yang dijalankan dengan cara interupsi, dinamakan sebagai program layanan interupsi (ISR - Interrupt Service Routine). Saat prosesor menjalankan ISR, pekerjaan yang sedang dikerjakan pada program utama sementara ditinggalkan, selesai menjalankan ISR prosesor kembali menjalankan program utama, seperti yang digambarkan dalam Gambar 1.

 



Gambar 1
Bagan kerja prosesor melayani interupsi

Sebuah prosesor bisa mempunyai beberapa perangkat keras yang merupakan sumber sinyal permintaan interupsi, masing-masing sumber interupsi dilayani dengan ISR berlainan, dengan demikian prosesor mempunyai beberapa vektor interupsi untuk memilih ISR mana yang dipakai melayani permintaan interupsi dari berbagai sumber. Kadang kala sebuah vektor interupsi dipakai oleh lebih dari satu sumber interupsi yang sejenis, dalam hal semacam ini ISR bersangkutan harus menentukan sendiri sumber interupsi mana yang harus dilayani saat itu.

contoh interpsi pada kaki XIRQ , yg mempunyai vektor interupsi = FFE4h



Jika pada saat yang sama terjadi lebih dari satu permintaan interupsi, prosesor akan melayani permintaan interupsi tersebut menurut perioritas yang sudah ditentukan, selesai melayani permintaan interupsi perioritas yang lebih tinggi, prosesor melayani permintaan interupsi berikutnya, baru setelah itu kembali mengerjakan program utama.

Saat prosesor sedang mengerjakan ISR, bisa jadi terjadi permintaan interupsi lain, jika permintaan interupsi yang datang belakangan ini mempunyai perioritas lebih tinggi, ISR yang sedang dikerjakan ditinggal dulu, prosesor melayani permintaan yang perioritas lebih tinggi, selesai melayani interupsi perioritas tinggi prosesor meneruskan ISR semula, baru setelah itu kembali mengerjakan program utama. Hal ini dikatakan sebagai interupsi bertingkat (nested interrupt), tapi tidak semua prosesor mempunyai kemampuan melayani interupsi secara ini.

Tidak ada komentar:

Posting Komentar