Category Archives: Menengah-2

Pengetahuan Dasar penggunaan Timer Counter Microcontroller AVR

timer

Pin Timer /Counter pada AVR

Pin Timer / Counter Pada Atmega8535

Tujuan Pembahasan timer dan counter AVR :

1. Melaksanakan tugas tertentu secara ber ulang  (mode normal).

2. Menghitung panjang pulsa (input capture)

3. Menghitung banyaknya event ( sebagai counter).

4. Mengendalikan kecepatan motor DC (pulsa wide modulation /PWM).

5. Membuat penundaan waktu (delay).

6. Sinyal generator .

Komponen utama Timer/Counter adalah sebuah register  yg tugasnya hanya berhitung dari 0 sampai batas maximumnya, register ini pada AVR disebut  register TCNT .  Misalnya  sebuah register TCNT    pada AVR adalah 8 bit,  maka nilai maksimunya adalah 255.

Register yang digunakan untuk mendukung operasi Timer Counter pada AVR :

  • Register TCNT = register pencacah dari 0 sampai nilai maximum yg kita tentukan.
  • Register TCCR =Untuk pengaturan mode  operasi  Timer/Counter
  • Register TIMSK =Untuk  memilih Timer Counter  mana yg aktif.
  • Register TIFR = Untuk mengetahui adanya interupsi akibat operasi Counter Timer .
  • Register OC (output compare) = untuk menyimpan nilai pembanding dgn nilai pd register  TCNT.
Jadi kalau kita ingin melakukan pengaturan (men set up )   Timer/Counter kita fokuskan ke register TCCRn .  n adalah nomer timer ,  misal  jika kita ingin menggunakan Timer 0 maka yg kita atur adalah TCCR0,timer 1 TCCR1A dan TCCR1B.

Kapan  dia  berfungsi sbg timer dan kapan dia berfungsi sbg counter?

konseptimer

Ketika sumber clock  dari   system clock  (kristal) maka ia  berfungsi sbg timer.

Ketika sumber clock dari external / pin T maka ia berlaku sebagai counter.

pemilihan sumber clock ada pada bit  CS pada register TCCR.

MODE TIMER O 

Untuk menentukan mode timer O di lakukan pd bit WGM-OO dan WGM-OI pada register control (TCCRO) seperti pada tabel dibawah ini.

modetimer0

1.  Mode Normal  

Memilih mode ini dgn cara menset semua bit  WGM OI =O dan WGMOO=O  , pada register TCCR

Digunakan  untuk melaksanakan pekerjaan yang berulang dgn interval tertentu juga bisa digunakan utuk membuat delay.  Nilai TCNT akan terus menerus mengalami kenaikan tiap di clock oleh simber clok yg sudah dipilih. Jika sudah mencapai maksimumnya nilai TCNT akan kembali 0  dan mengeset bit Flag TOV0 di register TIFR.  Waktu interval  dapat dirubah rubah dengan merubah nilai maximum TCNT.  Makin kecil nilai maximum TCNT makin kecil pula waktu intervalnya.  Contoh sebagai gambaran saja , jika periode clock yg di berikan ke timer 1 detik,  maka dgn nilai max TCNT diset 255 , interval timer  1 x255 = 255 detik. untuk nilai max  TCNT  di set 10 . Maka periode interval 1×10 = 10 detik.

Untuk mode normal penggunaanya cukup mudah, contohnya anda bisa baca disini.

pada mode normal selain bisa diset sebagai timer    juga sebagai counter, dgn cara merubah sumber clocknya menggunakan triger di pin TO .  Pengantian sumber clock melalui set bit CSO2:CSOl:CSOO pada register TCCRO seprti tampak pd gambar dibawah ini(  untuk lebih jelasnya lihat  penjelasan no 3.  mode normal sbg  counter   )

modenormal

Cara seting pilihan sebagai Timer atau counter pada codewizard di codevision

setwizardtimer

pilihan scala clock CS02:CSo1:CSoo untuk xtal 11.059.200hz  pd codevision sudah berupa pilihan  frekwensi clock timer:

timer_systemclock_cavr

2.  Mode Input Capture pada Timer 1 .

Input capture digunakan untuk meng hitung periode pulsa yang mentriger pin ICP1.  Setiap kali Pin ICP1 di triger  oleh perubahan sinyal (faaling atau rising )akan mengcopy nilai register 16 bit TCNT ke register 16 bit ICR1 (ICR1H dan ICR1L). perbedaan dengan  timer 0 adalah nilai TCNT continyu bergulir  tanpa ada start dan stop timer sedangkan pa timer0 ada start dan stop timer.

oleh karena itu nilai register ICR1 harus segera dibaca sebelum di overwrite oleh data TCNT yg baru ketika terjadi perubahan sinyal berikutnya.

modeICP

cara menghitung periode pulsa

misalkan triger oleh rising edge (perubahan sinyal rendah ke tinggi) pada pin ICP1

1.   set timer1 ke mode input capture

2.   enable interupsi timer1 overflow dan interupsi input capture

3.   baca nilai ICR1 pada interupsi triger pertama dan baca ICR1 pada interupsi triger kedua

4. selisih hasil bacaan tsb adalah periode pulsa.

contoh kode

#include <mega16.h>
/*define Port C as output for pulse width*/

unsigned char ov_counter;
unsigned int counterSekarang,counterSebelumnya;
unsigned int jumlahStep;
/*Timer 1 overflow ISR*/
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
++ov_counter;
}
/*Timer 1 input capture ISR*/
interrupt [TIM1_CAPT] void timer1_capt_isr(void)
{
counterSekarang = 256*ICR1H + ICR1L;
jumlahStep=(unsigned long)counterSekarang+ ((unsigned long)ov_counter * 65536)- (unsigned long)counterSebelumnya;
PORTC = ~(clocks / 750); /*output milliseconds to Port C*/

ov_counter = 0;
counterSebelumnya = counterSekarang;             //simpan hasil bacaan ICR1  pertama
}
void main(void)
{
DDRC=0xFF; /*set Port C for output*/
TCCR1A = 0; /*disable all waveform functions*/
TCCR1B = 0xC2;/*Timer 1 input to clock/8, enable input capture*/
TIMSK = 0x24; /*unmask timer 1 overflow and capture interrupts*/
#asm(“sei”) /*enable global interrupt bit*/
while (1)
{
; /*do nothing here*/
}
}

3.  Mode Normal sebagai Counter


Digunakan untuk menghitung jumlah event yang mentriger pin T0 (portB.0) jika kita menggunakan  timer0  atau T1 (portB.1) pada timer1.

/*===================================================
Chip type           : ATmega8535
Author              : Pccontrol.wordpress.com
Clock frequency     : 4.000000 MHz
Memory model        : Small
External SRAM size  : 0
Data Stack size     : 128
*****************************************************/

#include <mega8535.h>
#include <stdio.h>
// Alphanumeric LCD Module functions
#asm
   .equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>

unsigned int hitunganMSB;
unsigned int hitunganLSB;
 unsigned char bufferCounter[15];
 unsigned long int hitungan;
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
//hitungan lebih dari 255

hitunganMSB = hitunganMSB + 1;

}

// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Timer/Counter 0 initialization
// Clock source: T0 pin Falling Edge
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x06;
TCNT0=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x01;

// LCD module initialization
lcd_init(16);
lcd_gotoxy(0,0);
lcd_putsf("counter :");
// Global enable interrupts
#asm("sei")

while (1)
      {
      // Place your code here
      hitunganLSB = TCNT0;
      hitungan = hitunganMSB + hitunganLSB; 

      sprintf(bufferCounter,"%i ", hitungan );
   lcd_gotoxy(0,1);
   lcd_puts(bufferCounter);
      };
}

4. Mode PWM , Pulsa Wide Modulation.

Mode PWM ada dua yaitu PWM phase correct dan Fast PWM.  perbedananya yaitu pada PWM phase corect counter  (TCNT) bergulir/mencacah naik dan turun . sedangkan pada Fast PWM counter  (TCNT) hanya bergulir naik saja .

Untuk menjadikan Timer counter  mode PWM phase corect yaitu  dgn Cara men set bit WGM01=1 dan bit WGM0 =0  ,  pada register TCCR.

MODETIMER
Salah satu kegunaan sinyal PWM  antara lain untuk  mengendalikan Kecepatan putaran  Motor DC.   Gambar berikut ini menunjukan berbagai bentuk PWM dan efek terhadap kecepatan Motor DC yang berbeda sesuai bentuk pulsa PWM.

Pulsa Wide Modulation

 

Cara pembentukan sinyal Fast  PWM 

Nilai pada register Counter TCNT akan terus menerus naik sampai nilai maximum, lalu kembali ke 0. begitu seterusnya selama sinyal clock diberikan kepada timer. Nilai OCR diset untuk mengatur pembentukan PWM.

saat nilai TCNT  >  nilai OCR maka pin OC mengeluarkan sinyal HIGH ,

saat nilai TCNT < nilai OCR maka pin OC mengeluarkan sinyal LOW.

Gambar berikut menunjukan tiga buah nilai OCR yang berbeda ,yg  menghasilkan  sinyal output  PWM   berbeda pula pada pin OC.

mode PWM

Cara Membuat PWM pada CodeWizard  di Codevision spt pada gambar berikut:

membuat pwm 25% pada output OC0 dgn Timer0

code program:

#include <mega8535.h>

// Declare your global variables here

void main(void)
{

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=Out Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=0 State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x08;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 62.500 kHz
// Mode: Phase correct PWM top=FFh
// OC0 output: Non-Inverted PWM
TCCR0=0x63;
TCNT0=0x00;
OCR0=0x40;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

while (1)
      {
      // Place your code here

      };
}

PWM phase corect
PWM PHASE CORRECT
5. Membuat Delay dengan Timer.
#include <mega8535.h>

interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
delay = delay + 1
}

void main(void)
{
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 3.906 kHz
// Mode: Normal top=FFh
TCCR0=0x05;
TCNT0=0xD9;
// Timer0 enable
TIMSK=0x01;
// Global enable interrupts
#asm("sei")

while (1)
      {
      //program utama disini
       delay(100);   //delay 1 detik   (100*10ms=1000ms)
      };
}

Void delay(int delay_ms)
{
   TCNT0=0xD9;  //interval  timer = 10 ms
   delay=0
   while(delay<=delay_ms)
   {
    //muter2 disini
    }
}

Timer Mode CTC (clear timer on compare match)

Pada mode ini counter TCNT akan bergulir/mencacah naikkemudian akan kembali 0 saat nilai  TCNT = OCR0. Untuk menghasilkan gelombang kotak pd pin OC kita set OC0 toggle yaitu dgn memberi nilai  COM1 =0 dan COM0 =1 di register TCCR.   

modectc
====================================================================
Kesimpulan cara Pengesetan register TCCR0 untuk timer 0
timer_seting

referensi :

http://www.atmel.com/dyn/resources/prod_documents/doc2505.pdf

Mengenal IDE AVR Studio 5 : C/C++ Compiler , Editor & Tool AVR microcontroller

Awal Ramadhan yang penuh berkah ini saya  mendapatkan  installer AVR Studio 5  berukuran 602 MB . Saya install di window 7  .  Bukanya saya tak cinta lagi sama Codevision yang udah memanjakan dlm pembuatan program C untuk  AVR tapi karena AVR studio bersifat free alias gratis dan dibuat oleh pembuat AVR  itu sendiri yaitu Atmel.

Dari Ebook-Ebook  ttg  AVR terbitan luar negri yang pernah  saya baca  kebanyakan mereka menggunakan AVR Studio. Tapi bagi pemula ga usah khawatir sebab baik Codevision maupun AVR studio  sama sama menggunakan bahasa pemrograman C .  silahkan Anda pilih yang mana saja yang menurut anda cocok. Buat para pemula yang penting anda lebih dahulu mengerti ttg konsep konsep dasar pemrograman microcontroller AVR.

Cara penginstallan AVR Studio 5  dgn cara  klik file tunggal hasil download :  as5installer-5.0.1163-full.exe  selanjutnya kita tinggal klik ok, yes, oke ,yes, next  dan finish :-).

Persyaratan Yang dibutuhkan:

AVR Studio berbasis  Microsoft .NET 4.0 technology .

  • Windows XP (x86)  Service Pack 3 – semua  edisi kecuali Starter Edition
  • Windows Vista (x86 & x64)  Service Pack 2 – semua edisi kecuali Starter Edition
  • Windows 7 (x86 & x64)
  • Windows Server 2003 (x86 & x64)  Service Pack 2
  • Windows Server 2003 R2 (x86 & x64)
  • Windows Server 2008 (x86 & x64)  Service Pack 2
  • Windows Server 2008 R2 (x64)

Hardware yg direkomendasikan:

  • 1.6GHz processor atau yg lebih cepat.
  • DirectX 9 capable video card  dgn resulusi 1024×768  (min 800×600 )
  • 1 GB (32 Bit) atau 2 GB (64 Bit) RAM  (tambahkan  512 MB jika berjalan di virtual machine)
  • 5400 RPM hard disk drive
  • 2 GB free hard disk space

IDE AVR Studio 5

Beberapa  Fitur AVR Studio 5:

  •  AVR Studio 5 mensupport  semua AVR microcontrollers  8 bit dan 32 bit.
  • Compiler C yang terintegrasi .  Anda tidak perlu lagi menginstall  tool2 secara terpisah spt versi sebelumnya . AVR Studio 5 sudah termasuk  compiler, assembler , simulator, debugger dan programmers.
  • Editor yang lebih mudah digunakan.
  • Atmel AVR  software framework , kumpulan kode yang siap pakai.

Tampilan menu utama

kereeen

Membuat Project Baru

Step 1

Project Baru

Step 2

step 2

Step 3

step3

Step 4

step 4

 

Selanjutnya anda bisa teruskan di  katagory  Latihan Pemrograman AVR Studio 5 

 

sumber:

http://www.atmel.com/microsite/avr_studio_5/default.asp?source=redirect

Tutorial Membuat Program C untuk microcontroller AVR dengan AVR Studio

AVR Studio yang digunakan  pada artikel disini  masih versi 4,  pada saat tulisan ini dibuat  AVR studio versi 5  sudah dirilis.

Untuk membuat program AVR dengan AVR Studio 4 anda memerlukan 2 aplikasi:

AVR Studio 4 dan  WinAVR

  1. Download AVR Studio  di:  http://www.atmel.com/dyn/products/tools_card.asp?tool_id=2725 setelah didownload install aplikasi tsb.
  2. Download WinAVR di :  http://winavr.sourceforge.net/     setelah didownload install file tsb.

Setelah kedua File tsb anda install anda sudah bisa membuat program melalui AVR Studio baik asembler maupun bahasa C .

Memulai Membuat Program C  dgn AVR Studio 4:

tahapannya antara lain:

  • Membuat Project baru
  • Mengkompile code C ke file  *.HEX
  • Men Debug code program C  dgn simulator
  • Memasukan file HEX ke  Microcontroller.
  1. Membuat Project AVR Studio 4:

Jika anda sudah menginstall dari menu klik Atmel AVR tools  -> AVR Studio 4

akan muncul menu sbb:

avr studio 1

project baru avr studio

lalu klik -> New Project

akan muncul menu sbb:

memberi nama project baru

Memberi Nama Project Baru

klik AVR GCC dan beri nama untuk projeck baru  lalu klik next

maka akan muncul menu sbb:

memilih type AVR

memilih type microcontroller AVR

klik AVR Simulator  dan Atmega8535   , lalu klik Finish. akan muncul menu sbb:

copy code program C berikut ke kotak code program

#include "avr/io.h" // avr header file untuk IO ports 

int main()

{
unsigned char i; // temporary variable
DDRA = 0x00;     // set PORTA sebagai  input
DDRB = 0xFF;     // set PORTB sebagai output
PORTB = 0x00;    // Port B di beri nilai awal 0 

i = PINA;        // baca PORTA.,simpan nilainya di i  

PORTB = i;       // kirim nilai i ke  PORTB.          

}

2. Mengkompile kode C ke file HEX

klik menu Build->Build All

build program

Compiling code program C ke file HEX

sampai proses ini kita berhasil membuat file HEX .  File tsb yang akan kita masukan kedalam microcontroller.

3. Memeriksa Program ( Debugging) dengan Simulator

Klik Debug->Start Debugging,

lalu tekan  F11 .

debugging

Debugging

Untuk setiap penekanan  F11, tiap baris code  akan diperiksa dan perubahan nilai register pada code program akan ditampilkan pada visaualisasi sebelah kiri spt tampak pada gambar diatas.

4. Memasukan  file *.hex ke  chip  Microcontroller

sebelumnya anda hubungkan alat dowloader /programmer ke PC anda.

cek nomor port pada device manager

pada contoh ini saya menggunakan AVR USB ISP Downloader DT-HQ buatan inovative electronic surabaya.

buka menu tools->program AVR->connect

menu konek ke downloader/programmer

maka akan muncul:

pilih Com2 sesuaikan spt no port untuk ISP pada device manager

Menu dowloader

menu memasukan *.hex ke Chip Microcontroller

Belajar Microcontroller 8051 dengan Simulator

Buat para pemula alangkah lebih baik selain mempelajari teori juga mempraktekan teori  dengan modul/rangkaian yang sebenarnya. Tapi jika anda belum memiliki modul ,  anda  bisa latihan dengan simulator . Pada kesempatan ini saya akan memperkenalkan simulator yang cocok untuk pemula yaitu UVI51 , simulator untuk micon jenis MCS-51 (8051, At89s51,At89c4051). software ini bisa di download di : ftp://ftp.dte.uvigo.es/uvi51/

simulator microcontroller

Tampilan Simulator microcontroller untuk 8051, 89s51 , 89c4051 dan sejenisnya

Simulator  ini   sangat membatu saya dalam memahami microcontroller untuk pertama kalinya , kususnya MCS-51 ( 8051 ,89s51 , 89c4051 dst) karena simulator ini selain mudah digunakan juga sangat jelas menggambarkan cara kerja sebuah microcontroller.  Sekarang saya sudah tidak lagi menggunakan MCS-51 , saya lebih suka  AVR  :-).  Simulator ini berjalan di windows XP, windows versi  yang lain saya belum pernah coba. Fungsi Microcontroller yang disimulasikan:

  • Input : switch
  • output : LED, seven sement, LCD 2×16
  • Timer
  • Serial komunikasi (Uvi51 bisa mensimulasikan 2 micon sekaligus)
  •  Interupsi
  • Bisa melihat isi Ram dan register

Langkah langkah  menggunakan Simulator Uvi51:

  1. Download  simulator dan contoh file di: ftp://ftp.dte.uvigo.es/uvi51/
  2. extract file hasil download
  3. klik file uvi51.exe.

    uvi51_exe

    uvi51_exe

  4. klik Open

    uvi51_1

    uvi51_1

  5. klik salah satu contoh  misal EX1A.CNX

    uvi51_2

    uvi51_2

  6. klik   menu “A”

    klik_A

    klik_A

  7. klik enter.

    klik enter

    setelah muncul tulisan "Assembly complete no error" lalu tekan enter

  8. klik Simulate.
    klik simulate2

    klik simulate judul

  9. klik run atau step
Membuat  simulasi  baru
Untuk  mejalankan simulator UVI51 kita membutuhkan 2 file :
  1.  file ber extension *.cnx ,   file ini berisi konfigurasi hardware misal switch ,LCD 2×6, PushButton , Led , rs232  dll.
  2. file berextension *.src  source code
Contoh :
buka notepad buat 2 buah file berikut.
file test1.src ber isi:
; Data transfers using MOV
;
org 0
; Port 0 contents are copied into several targets
mov a,p0
mov b,p0
mov 20h,p0
; P0 contents are copied into RAM address pointed by P1
mov r0,p1
mov @r0,p0
jmp 0
end
file test1.cnx berisi:
* clock 12 mega , ram 256 byte memory program 1024 byte
Utest1.src 12 256 1024       

P00=2        ; PORT0.0 diberi beri tanda sebagai node 2
P01=3        ; PORT0.1 diberi beri tanda sebagai node 3

* Switches dgn nama B0 di hubungkan ke node 2 (PORT0.0) ,lokasi switch dikotak no 4
SB0 2 0 1 4

* Pushbutton dgn nama P0 dihubungkan ke node 3 (PORT0.1) , lokasi pushbuton di kotak no 9
KP0 3 0 9

Beberapa ilustrasi penjelasan  isi file cnx ,(  konfigurasi hardware)  : 


lebih detainya bisa baca manualnya: ftp://ftp.dte.uvigo.es/uvi51/UVI51_50_MANUAL.ZIP

Mengenal Microcontroller


> Tujuan pada bab ini adalah: anda  mengetahui gambaran  umum ,cara kerja  dan bagian bagian penyusun sebuah  microcontroller

Pendahuluan

Sejarah

Perbedaan Microcontrollers  dengan Microprocessor

1. Memori dan register

2. Central processing unit / cpu

3. Bus / jalurs

4. Input-output unit

5. Komunikasi Serial

6  Timer

7. Watchdog timer

8. Analog to digital converter / adc

9. Program

10. Subrutin

11. Interupsi

Pendahuluan

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  misalnya: PIC16F84 buatan microchip , Atmega8535, AT89c51 buatan ATMEL  dan  MC68HC11 buatan motorola . Bagi pemula pilih salah satu saja untuk memulai mempelajarinya, misal ATmega8535, At89s51  atau  PIC16f84. jika anda sudah menguasai satu jenis microcontroller maka akan mudah mempelajari microcontroller jenis lainnya karena pada prinsipnya sama.   

inout-device

Microcontroller

   

SEJARAH

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 .

 

Perbedaan Microcontroller dengan Microprocessor

perbedaan Microprosessor dengan microcontroller

Perbedaan Microprosessor dengan Microcontroller

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.  

Bagian-bagian sebuah Microcontroller :

1.1 Memori dan register  

Memori  Memori adalah bagian microcontroller untuk menyimpan Program dan data. 

memory

ada 3 bagian utama sebuah memori yaitu alamat,data dan control baca atau tulis R/W  

Jenis-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 

CPU dalam memproses data memori , ia akan mengambil data dimemori dan menyimpan kedalam register yg ada di dalam CPU setelah diproses hasil akan dikirim kembali ke memori . Register di CPU biasanya terdiri dari 2 jenis yaitu Akumulator dan index register Accumulators digunakan dlm perhitungan ,operasi aritmetika, spt penambahan,  pengurangan, or operasi logika dan operasi bit. Indek registers digunakan menujuk alamat  data di memory.  

1.2 Central Processing Unit /CPU 

cpu

cpu

CPU adalah bagian utama sebuah microcontroller dialah yg melaksanakan(mengeksekusi) program yg ada di memori dalam melaksanakan tugasnya ia dibantu beberapa 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    

1.3 Bus/jalur

bus

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 

1.4 Input-output unit

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 . 

input output

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

1.5  Komunikasi Serial

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,  

SERIAL

  

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.

1.6 Timer unit

timer

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 000 sampai 255  kemudian kembali 000 terus menerus berulang .

1.7 Watchdog Timer

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

1.8 Pengubah sinyal Analog ke Digital

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 AVR8535 buatan Atmel dan  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 dalam 1 IC / Chip dan kita mengaksesnya melalui kaki2/pin. Gambar dibawah ini menunjukan bagian dalam sebuah IC  microcontroller .

bagian2 sebuah Microcontroller

bagian2 sebuah Microcontroller

1.9 Program

Sebuah microcontroller tanpa diprogram tdk ada artinya apa-apa sebelum bisa digunakan dia harus diberi perintah yang berupa program yang disimpan/diisikan  ke dalam memorinya. Perintah tsb biasanya menggunakan bahasa asembler ,bahasa C atau bahasa Basic. Tiap bahasa mempunyai kelebihan dan kekuranganya masing-masing tapi pada contoh dibawah  ini kita akan meggunakan bahasa asembler karena instruksi berhubungan langsung dengan  register-register pd microcontroller

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 bisa kita ketik menggunakan notepad pada windows dan disimpan  dengan extention  .asm   

Compiler

Setelah program selesai kita buat  dlm bahasa asembler ataupun bahasa C kita harus menterjemahkan program yg kita buat kedalam bahasa mesin (berupa file berektensi *.HEX) agar dimengerti oleh microcontroller   dgn sebuah sofware yg disebut Compiler.

Beberapa Contoh Compiler:

  • AVR Studion & WinAVR ( AVR-GCC ) compiler  Bahasa C  untuk microcontroller AVR.
  • CodeVision compiler  Bahasa C  untuk microcontroller AVR.
  • ASM51 Compiler bahasa Asembler untuk microcontroller MCS51
  • dll

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 compiler : asm51.exe  dengan  mengetik pada console :

C:> asm51.exe  contoh1.asm     ; lalu tekan enter

maka akan dihasilkan file ” contoh1.hex”   pada direktori yang sama, file inilah (contoh1.hex)  yg dimengerti microcontroller dan akan kita masukan kedalam memori program microcontroller dengan menggunakan alat yg disebut programmer (berupa hardware dan software) .

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.

pc

pc

fetch

fetch

Interupsi

Saat kaki RESET pada IC 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 alamat awal memori-program yang menampung program yang harus dijalankan ketika terjadi interupsi.

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 alamat 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 ISRprosesor kembali menjalankan program utama, seperti yang digambarkan dalam Gambar 1.

interupsi

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 ISRmana 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

INTERUPSI_PROSES

INTERUPSI_PROSES

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