BUKU DIKTAT MIKROKONTROLLER

(1)

1

BUKU DIKTAT

MIKROKONTROLLER

Dibuat Oleh:

Iswanto, S.T, M.Eng

TEKNIK ELEKTRO MEDIK

PROGRAM VOKASI

UNIVERSITAS MUHAMMADIYAH YOGYAKARTA

2015


(2)

2

DAFTAR ISI

BUKU DIKTAT ... 1

MIKROKONTROLLER ... 1

DAFTAR ISI ... 2

DAFTAR GAMBAR ... 4

BAB I PENGENALAN MIKROKONTROLER (OK) ... 1

1.1. PENDAHULUAN ... 1

1.2. MIKROKONTROLER AVR ATMEGA 16 ... 1

1.3. KONFIGURASI PIN AVR ATMEGA 16... 3

1.4. STRUKTUR MEMORI ... 4

1.4.1. FLASH MEMORI... 4

1.4.2. MEMORI SRAM ... 4

1.4.3. MEMORI EEPROM ... 4

BAB II PENGENALAN BAHASA C ... 5

2.1. PENDAHULUAN ... 5

2.2. Preprosesor ... 5

2.3. Tipe Data ... 5

2.4. Deklarasi Variabel , Konstanta dan Alamat I/O ... 5

2.5. Struktur Percabangan ... 7

2.6. Struktur Perulangan ... 7

2.7. Fungsi dan Subrutin ... 8

2.8. Operasi relasional (perbandingan) ... 8

2.9. Operasi aritmatika ... 9

2.10. Operasi logika dan biner ... 9

BAB III PORT SEBAGAI INPUT/OUTPUT DIGITAL(OK) ... 10

3.1. PENDAHULUAN ... 10

3.2. PORT ... 10

3.2.1. RANGKAIAN LAMPU LED ... 10

3.2.2. PEMROGRAMAN MENYALAKAN LED ... 11

3.2.3. RANGKAIAN PEMBACAAN KEYPAD DENGAN LCD ... 11

3.2.4. PEMROGRAMAN PEMBACAAN KEYPAD ... 12


(3)

3

3.2.5. PEMROGRAMAN SEVENT SEGMENT ... 15

3.3. PIN ... 16

3.3.1. RANGKAIAN PEMBACAAN 8 TOMBOL ... 17

3.3.2. PEMROGRAMAN PEMBACAAN 8 BUAH TOMBOL ... 17

3.3.3. RANGKAIAN PEMBACAAN KEYPAD DENGAN LCD ... 18

3.3.4. PEMROGRAMAN PEMBACAAN KEYPAD ... 19

BAB IV ANALOG TO DIGITAL CONVERTER (OK) ... 22

4.1. PENDAHULUAN ... 22

4.2. RANGKAIAN ADC ATMEGA DENGAN LED ... 23

4.3. PEMROGRAMAN ADC ATMEGA16 ... 23

BAB V TIMER / COUNTER (OK) ... 25

5.1. PENDAHULUAN ... 25

5.2. TIMING DIAGRAM TIMER/COUNTER ... 25

5.3. RANGKAIAN MENCACAH COUNTER TIMER T0 ... 27

5.4. PEMROGRAMAN MENCACAH COUNTER T0 ... 28

5.5. PEMROGRAMAN MENCACAH COUNTER T0 ... 29

BAB VI INTERUPSI (OK) ... 31

6.1. PENDAHULUAN ... 31

6.2. RANGKAIAN INTERUPSI EKTERNAL ... 32

6.3. PEMROGRAMAN INTERUPSI EKTERNAL INT0 ... 32

6.4. PEMROGRAMAN INTERUPSI EKTERNAL INT1 ... 34

6.5. RANGKAIAN INTERUPSI TIMER MIKROKONTROLLER ... 35

6.6. PEMROGRAMAN INTERUPSI TIMER 0 ... 36

6.7. PEMROGRAMAN INTERUPSI TIMER 1 ... 37

6.8. PEMROGRAMAN INTERUPSI TIMER 2 ... 38

BAB VII SERIAL PORT(OK) ... 40

7.1. PENDAHULUAN ... 40

7.2. INISIALISASI USART ... 40

7.3. RANGKAIAN SERIAL MIKROKONTROLLER ... 41

7.4. PEMROGRAMAN PORT SERIAL MIKROKONTROLLER ... 42

BAB VIII PWM(OK) ... 44

8.1. PENDAHULUAN ... 44

8.2. RANGKAIAN PWM MIKROKONTROLLER ... 45


(4)

4


(5)

1

BAB I PENGENALAN MIKROKONTROLER (OK)

1.1. PENDAHULUAN

Mikrokontroler, jika diterjemahkan secara harfiah, berarti pengendali yang berukuran mikro. Sekilas mikrokontroler hampir sama dengan mikroprosesor. Namun mikrokontroler memiliki banyak komponen yang terintegrasi didalamnya, misalnya timer/counter.Sedangkan pada mikroprosesor, komponen tersebut tidak terintegrasi. Mikroprosesor umumnya terdapat pada komputer dimana tugas dari mikroprosesor adalah untuk memproses berbagai macam data input maupun output dari berbagai sumber. Mikrokontroler lebih sesuai untuk tugas-tugas yang lebih spesifik.

Gambar 1.1 Perbedaan mikrokontroler dengan mikroprosesor

1.2. MIKROKONTROLER AVR ATMEGA 16

AVR merupakan seri mikrokontroler CMOS 8-bit buatan Atmel, berbasis arsitektur RISC (Reduced Instruction Set Computer) yang ditingkatkan. Hampir semua instruksi dieksekusi dalam satu siklus clock. AVR mempunyai 32 register generalpurpose, timer/counter fleksibel dengan mode compare, interrupt internal dan eksternal, serial UART, programmable Watchdog Timer, dan mode power saving. Mempunyai ADC dan PWM internal. AVR juga mempunyai In-System Programmable Flash on-chip yang mengijinkan memori program untuk diprogram ulang dalam sistem menggunakan hubungan serial SPI. ATmega16 adalah mikrokontroler CMOS 8-bit daya-rendah berbasis arsitektur RISC yang ditingkatkan. Untuk lebih jelas tentang arsitektur dari ATmega16 ditunjukan pada gambar 1.1 ATmega16 mempunyai throughput mendekati 1 MIPS per MHz membuat disainer sistem untuk mengoptimasi komsumsi daya versus kecepatan proses.


(6)

2 Keuntungan arsitektur RISC

� 130 Instruksi yang hebat – Kebanyakan satu detak untuk satu instruksi

� 32 x 8 General Purpose Fully Static Operation

� Up to 16 MIPS Throughput at 16 MHz

� On-chip 2-cycle Multiplier Nonvolatile Program and Data Memories

� 8K Bytes of In-System Self-Programmable Flash

� Optional Boot Code Section with Independent Lock Bits

� 512 Bytes EEPROM

� 512 Bytes Internal SRAM

� Programming Lock for Software Security Peripheral Features

� Two 8-bit Timer/Counters with Separate Prescalers and Compare Mode

� Two 8-bit Timer/Counters with Separate Prescalers and Compare Modes

� One 16-bit Timer/Counter with Separate Prescaler, Compare Mode, and Capture Mode

� Real Time Counter with Separate Oscillator

� Four PWM Channels

� 8-channel, 10-bit ADC

� Byte-oriented Two-wire Serial Interface

� Programmable Serial USART Special Microcontroller Features

� Power-on Reset and Programmable Brown-out Detection

� Internal Calibrated RC Oscillator

� External and Internal Interrupt Sources

� Six Sleep Modes: Idle, ADC Noise Reduction, Power-save, Power-down, Standby and Extended Standby

� 5. I/O and Package

� 32 Programmable I/O Lines

� 40-pin PDIP, 44-lead TQFP, 44-lead PLCC, and 44-pad MLF Operating Voltages

� 2.7 - 5.5V for ATmega16L


(7)

3

Gambar 1.2 Arsitektur ATMEGA16

1.3. KONFIGURASI PIN AVR ATMEGA 16

Pin-pin pada ATmega16 dengan kemasan 40-pin DIP (dual inline package) ditunjukkan oleh gambar 1.2 Kemasan pin tersebut terdiri dari 4 Port yaitu Port A, Port B, Port C,Port D yang masing masing Port terdiri dari 8 buah pin. Selain itu juga terdapat RESET, VCC, GND 2 buah, VCC, AVCC, XTAL1, XTAL2 dan AREF.


(8)

4

1.4. STRUKTUR MEMORI

Untuk memaksimalkan performa dan paralelisme, AVR menggunakan arsitektur Harvard (dengan memori dan bus terpisah untuk program dan data). Instruksi pada memori program dieksekusi dengan pipelining single level. Selagi sebuah instruksi sedang dikerjakan, instruksi berikutnya diambil dari memori program.

1.4.1. FLASH MEMORI

ATmega16 memiliki 16K byte flash memori dengan lebar 16 atau 32 bit. Kapasitas memori itu sendiri terbagi manjadi dua bagian yaitu bagian boot program dan bagian aplikasi program. Flash memori memiliki kemampuan mencapai 10.000 write dan erase.

1.4.2. MEMORI SRAM

Penempatan memori data yang lebih rendah dari 1120 menunjukkan register, I/O memori, dan data internal SRAM. 96 alamatmemori pertama untuk file register dan memori I/O, dan 1024 alamat memori berikutnya untuk data internal SRAM. Lima mode pengalamatan yang berbeda pada data memori yaitu direct, indirect, indirect dis-placement, indirect pre-decreament dan indirect post-increament .Pada file register, mode indirect mulai dari register R26-R31.

Pengalamatan mode direct mencapai keseuruhan kapasitas data. Pengalamatan mode indirect displacement mencapai 63 alamat memori dari register X atau Y. Ketika meggunakan mode pengalamatan indirect dengan predecrement dan post increment register X, Y, dan Z akan di-dicrement-kan atau di-increment-kan. Pada ATmega16 memiliki 32 register, 64 register I/O dan 1024 data internal SRAM yang dapat mengakses semua mode-mode pengalamatan.

1.4.3. MEMORI EEPROM

Pada EEPROM ATmega16 memiliki memori. Memori yang dimiliki sebesar 512 byte. Memori tersebut memiliki daya tahan 100.000 siklus write/read.


(9)

5

BAB II PENGENALAN BAHASA C

2.1. PENDAHULUAN

Bahasa pemrograman C adalah sebuah bahasa 'mid-level', namun memiliki fitur 'highlevel' (seperti support pada fungsi dan modul) dan juga memiliki fitur 'lowlevel' (seperti mengakses hardware melalui pointer). Dengan menggunakan bahasa C, kita dapat dengan mudah untuk pindah ke jenis mikrokontroler yang lain, lebih mudah dan cepat dalam menulis kode

program, dan lebih mudah dimengerti, dan lebih mudah dalam melakukan debugging. Berikut penjelasan kode kode dasar bahasa C untuk pemrograman mikrokontroler keluarga MCS51 yang sering digunakan:

2.2. PREPROSESOR

Merupakan bagian program yang digunakan untuk mendefenisikan library berupa file header (*.h) yang ikutkan (include) ke dalam program. Beberapa contoh penggunaannya: #include //mengikutsertakan file at89x51.h #include #include

2.3. TIPE DATA

char : 1 byte ( -128 s/d 127 ) unsigned char : 1 byte ( 0 s/d 255 ) int : 2 byte ( -32768 s/d 32767 ) unsigned int : 2 byte ( 0 s/d 65535 )

long : 4 byte ( -2147483648 s/d 2147483647 ) unsigned long : 4 byte ( 0 s/d 4294967295 ) float : bilangan desimal

array : kumpulan data-data yang sama tipenya.

Terkadang untuk mendefenisikan tipe data dengan nama tersendiri dapat menggunakan keyword typedef.

Perhatikan contoh berikut : typedef unsigned char ubyte; ubyte merupakan nama lain dari tipe data unsigned char

2.4. DEKLARASI VARIABEL , KONSTANTA DAN ALAMAT I/O

Variabel merupakan lokasi memori tempat penyimpanan data yang nilai datanya dapat diubah pada saat program dijalankan. Sementara Konstanta merupakan lokasi memori penyimpan data yang nilai datanya tetap/konstan.


(10)

6

Ketika kita mendeklarasikan suatu variabel atau konstanta secara otomatis compiler bahasa C akan mengalokasikan sebuah lokasi memori pada RAM internal MCS51 yang akan

digunakan untuk menyimpan nilai data dari variabel/konstanta tersebut. Untuk

mendeklarasikan variabel data penulisan kode programnya sebagai berikut: [tipe data] [nama variabel] [= nilai awal (Optional)]

Contoh:

int counter = 0; unsigned char sum;

Untuk mendeklarasikan konstanta penulisannya adalah sebagai berikut: [#define] [nama konstanta] [nilai konstanta]

Contoh:

#define phi 3.14 #define data_led 0xFF

Selain variabel dan konstanta kita juga dapat mendeklarasikan sebuah variabel data dari sebuah PORT I/O atau Memori External dengan alamat tertentu. Yaitu dengan cara

mengalokasikan lokasi memori /alamat PORT I/O secara manual menggunakan kata kunci xdata at(alamat)

Contoh penggunaan xdata at(0x4002) #include

xdata at(0x4002)

unsigned char PORT_LED; unsigned char data_led void main()

{ PORT_LED = 0x40; }

Pada contoh program diatas, alamat 0x4002 dialokasikan sebagai alamat

PORT_LED.Alamat external ini merupakan alamat yang dikeluarkan melaui Bus Alamat dari MCS51. Tipe data yang harus digunakan untuk mendeklarasikan sebuah PORT adalah

unsigned char. Contoh

menuliskan/mengeluarkan data ke sebuah PORT Output [nama_port] = [data_port]

PORT_LED = 0x40;

membaca data dari sebuah PORT Input [variabel_data] = [nama_port]


(11)

7 data_led = PORT_LED;

2.5. STRUKTUR PERCABANGAN

Struktur percabangan digunakan untuk memilih atau menyeleksi kondisi yang dipersyaratkan dalam mengeksekusi perintah dalam pemrograman.

Bentuk penulisannya

If (kondisi1) {perintah1 } else{perintah2} if(a==0xff){ b=0x1f; }else{ b=0x00; }

Jika kondisi1 terpenehi maka barisan perintah1 dieksekusi, jika kondisi1 tidak terpenuhi maka barisan perintah2 yang dieksekusi.

If (kondisi1){perintah1} else if(kondisi2) {perintah2} if(a==0xff){ b=0x1f; }else if(a==0x00){ b=0x00; }

Jika kondisi1 terpenuhi maka barisan perintah1 dieksekusi, jika kondisi1 tidak terpenuhi tetapi kondisi2 terpenuhi maka barisan perintah2 yang dieksekusi.

if (kondisi1){perintah1}else if(kondisi2){pernitah2} else{perintah3} if(a==0xff){ b=0x1f; }else if(a==0x00){ b=0x00; }else{ b = 0xff; }

Jika kondisi1 terpenuhi maka barisan perintah1 dieksekusi, jika kondisi1 tidak terpenuhi tetapi kondisi2 terpenuhi maka barisan perintah2 yang dieksekusi, dan jika tidak ada kondisi yang terpenuhi maka barisan perintah3 yang dieksekusi.

2.6. STRUKTUR PERULANGAN

Struktur perulangan digunakan untuk mengeksekusi barisan perintah secara berulang sesuai dengan kondisi atau jumlah perulangan yang dipersyaratkan.

Perulangan dengan for

Pada Perulangan ini looping dilakukan sesuai dengan jumlah yang ditentukan. Contoh: for (n=0;n0;n--){ b= b+1; }

Baris perintah b=b+1 akan dieksekusi berulangkali .dimana perulangan eksekusi dilakukan sebanyak 10 kali dari n = 10 (kondisi awal) s/d n = 1 (kondisi akhir n > 0).nilai n akan berkurang setiap perulangan (n--).

Perulangan dengan while

Perulangan jenis ini kan melakukan looping selama kondisi yang dipersyaratkan terpenuhi. Contoh

PORT_LED2 = 0xFF;


(12)

8

Kondisi awal PORT_LED2 adalah 0xFF kemudian program akan melakukan perulangan while(). Pada perulangan ini program akan mengeksekusi perintah data_led = PORT_LED1 atau perintah membaca data pada PORT_LED1 berulangkali. Selama data_led tidak sama (!=) dengan 0xFF maka perulangan akan terus terjadi. ketikadata_led=0xFF maka perulangan akan berhenti. Dan program akan lanjut ke baris perintah dibawahnya yaitu perintah

PORT_LED2 = 0x00.

2.7. FUNGSI DAN SUBRUTIN

Fungsi adalah blok program yang digunakan untuk melakukan sekumpulan instruksi akan mengembalikan nilai tertentu setelah semua instruksi dilaksanakan. Subrutin adalah blok program yang digunakan untuk melakukan sekumpulan instruksi tertentu. Perbedaannya dengan fungsi adalah subrutin hanya menjalankan sekumpulan instruksi dan tidak mengembalikan nilai tertentu.

//contoh subrutin void counter_up(){ counter++; } //contoh fungsi int kalikan(int ct){ int temp; temp = 2 * ct; return temp; //pengembalian nilai }

Prototype fungsi dan subrutin

Jika sebuah penulisan kode fungsi atau subrutin berada dibawah program utama (subrutin main()), agar fungsi atau subrutin tersebut dapat dipanggil oleh program utama maka perlu dilakukan deklarasi fungsi/subrutin atau yang disebut dengan prototype. Perhatikan contoh berikut:

#include

int hasil = 0; int counter = 0; int kalikan(int); //prototype fungsi kalikan void counter_up(); //prototype subrutin counter_up void main(){ counter_up(); hasil = kalikan(counter); } void counter_up(){ counter++; } int kalikan(int ct){ int temp; temp = 2 * ct; return temp; }

2.8. OPERASI RELASIONAL (PERBANDINGAN)

Sama dengan : == Tidak sama dengan : != Lebih besar : >

Lebih besar sama dengan : >= Lebih kecil : <


(13)

9

2.9.

OPERASI ARITMATIKA

+ , – , * , / : tambah,kurang,kali,bagi += , -= , *= , /= : nilai di sebelah kiri operator di

tambah/kurang/kali/bagi dengan nilai di sebelah kanan operator % : sisa bagi ++ , — : tambah satu (increment) , kurang satu (decrement) Contoh : a = 5 * 6 + 2 / 2 -1 ; maka nilai a adalah 30 a *= 5 ; jika nilai awal a adalah 30, maka nilai a = 30×5 = 150. a += 3 ; jika nilai awal a adalah 30, maka nilai a = 30+5 = 33. a++ ; jika nilai awal a adalah 5 maka nilai a = a+1 = 6. a– ; jika nilai awal a adalah 5 maka nilai a = a-1 = 4.

2.10. OPERASI LOGIKA DAN BINER

Logika Logika AND :&& Logika NOT : ! Logika OR : || Biner AND : & Biner OR : | Biner XOR : ^ Shift right biner: >> Shift left biner : << Komplemen : ~ Beberapa struktur dan elemen bahasa C lainnya dapat dilihat pada literatur yang ada baik di-internet maupun di buku.


(14)

10

BAB III PORT SEBAGAI INPUT/OUTPUT DIGITAL(OK)

3.1. PENDAHULUAN

ATmega16 mempunyai empat buah port yang bernama PortA, PortB, PortC, dan PortD. Keempat port tersebut merupakan jalur bidirectional dengan pilihan internal pull-up. Tiap port mempunyai tiga buah register bit, yaitu DDxn, PORTxn, dan PINxn. Huruf

‘x’mewakili nama huruf dari port sedangkan huruf ‘n’ mewakili nomor bit. Bit DDxn

terdapat pada I/O address DDRx, bit PORTxn terdapat pada I/O address PORTx, dan bit PINxn terdapat pada I/O address PINx. Bit DDxn dalam regiter DDRx (Data Direction Register) menentukan arah pin.

3.2. PORT

Bila DDxn diset 1 maka Px berfungsi sebagai pin output. Bila PORTxn diset 1 pada saat pin terkonfigurasi sebagai pin output maka pin port akan berlogika 1. Dan bila PORTxn diset 0 pada saat pin terkonfigurasi sebagai pin output maka pin port akan berlogika 0. Saat mengubah kondisi port dari kondisi tri-state (DDxn=0, PORTxn=0) ke kondisi output high (DDxn=1, PORTxn=1) maka harus ada kondisi peralihan apakah itu kondisi pull-up enabled (DDxn=0, PORTxn=1)atau kondisi output low (DDxn=1, PORTxn=0).

Biasanya, kondisi pull-up enabled dapat diterima sepenuhnya, selama lingkungan impedansi tinggi tidak memperhatikan perbedaan antara sebuah strong high driver dengan sebuah pull-up. Jika ini bukan suatu masalah, maka bit PUD pada register SFIOR dapat diset 1 untuk mematikan semua pull-up dalam semua port. Peralihan dari kondisi input dengan pullup ke kondisi output low juga menimbulkan masalah yang sama. Kita harus menggunakan kondisi tri-state (DDxn=0, PORTxn=0) atau kondisi output high (DDxn=1, PORTxn=0) sebagai kondisi transisi.

3.2.1. RANGKAIAN LAMPU LED

Rangkaian minimum untuk menghidupkan 8 LED melalui Port B ditunjukan pada Gambar 3.1. yang perlu diperhatikan adalah konfigurasi rangkaian LED yaitu Common Anode (CA) artinya untuk menghidupkan LED pada Port B, port B harus dikirim atau diberi


(15)

11

Gambar 3.1 Hasil pemasangan komponen rangkaian lampu led

3.2.2. PEMROGRAMAN MENYALAKAN LED

Setelah rangkaian LED dibuat dan dihubungkan dengan port pararel mikrokontroller, maka sekarang saatnya Anda membuat program yang digunakan untuk menghidupkan LED tersebut.

Program sebagai berikut ini

//--- // Program LED Menyala

// DEKLARASI HEADER

//--- #include <mega16.h> #include <delay.h> //--- //RUTIN UTAMA //--- void main(void) {

char a; a=0x000; DDRB=0xFF;

while(1) {

PORTB = a; }

}

3.2.3. RANGKAIAN PEMBACAAN KEYPAD DENGAN LCD

Rangkaian tombol 4x4 adalah rangkaian untuk membaca tombol 4x4 dari port keluaran mikrokontroller. Pada saat penekanan tombol key pad, data dari key pad akan ditampilkan dengan port serial komputer.

SW1 1 2 C3 100nF VCC VCC R1 X1 C1 22pF VCC VCC U1 ATMEGA16 3 12 13 2 16 17 18 19 11 10 8 7 6 36 35 34 33 32 37 1 4 5 9 14 15 20 21 40 39 38 31 30 29 28 27 26 25 24 23 22 PB2(INT2/AIN0) XTAL2 XTAL1 PB1(T1) PD2(INT0) PD3(INT1) PD4(OC1B) PD5(OC1A) GND VCC PB7[SCK) PB6[MISO) PB5(MOSI) PA4(ADC4) PA5(ADC5) PA6(ADC6) PA7(ADC7) AREF PA3(ADC3) PB0(XCK/T0) PB3(OC0/AIN1) PB4(SS) RESET PD0(RXD) PD1(TXD) PD6(ICP) PD7(OC2) PA0(ADC0) PA1(ADC1) PA2(ADC2) AGND AVCC PC7(TOSC2) PC6(TOSC1) PC5 PC4 PC3 PC2 PC1(SDA) PC0(SCL) RST C2 22pF


(16)

12

Gambar 3. 2Rangkaian aplikasi tombol keypad dengan lcd

3.2.4. PEMROGRAMAN PEMBACAAN KEYPAD

Setelah rangkaian tombol 4x4 dibuat dan dihubungkan dengan port pararel mikrokontroller, maka sekarang saatnya Anda membuat program Program pembacaan tombol. 4x4.

Program sebagai berikut ini

//--- //Program KEYPAD LCD

//DEKLARASI HEADER //--- #include <lcd.h> #include <stdio.h> #include <mega16.h> #include <delay.h> S8 SW S11 SW PD2 U4 ATMEGA16 3 12 13 2 16 17 18 19 11 10 8 7 6 36 35 34 33 32 37 1 4 5 9 14 15 20 21 40 39 38 31 30 29 28 27 26 25 24 23 22 PB2(INT2/AIN0) XTAL2 XTAL1 PB1(T1) PD2(INT0) PD3(INT1) PD4(OC1B) PD5(OC1A) GND VCC PB7[SCK) PB6[MISO) PB5(MOSI) PA4(ADC4) PA5(ADC5) PA6(ADC6) PA7(ADC7) AREF PA3(ADC3) PB0(XCK/T0) PB3(OC0/AIN1) PB4(SS) RESET PD0(RXD) PD1(TXD) PD6(ICP) PD7(OC2) PA0(ADC0) PA1(ADC1) PA2(ADC2) AGND AVCC PC7(TOSC2) PC6(TOSC1) PC5 PC4 PC3 PC2 PC1(SDA) PC0(SCL) J5 HEADER 5 1 2 3 4 5 pinb.6 PD0 X1 PD5 S17 SW PD1 C3 100nF1 pinb.0 SW2 1 2 D3 1N4002 A C S5 SW pinb.6 VCC S9 SW PD7 pinb.7 pinb.0 J16. HEADER 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 PD1 pinb.6 PD6 C2 22pF PD4 S15 SW PD6 pinb.6 S12 SW pinb.5 S18 SW PD5 S16 SW RST PD2 pinb.1 PD7 S6 SW pinb.7 pinb.7 pinb.2 S13 SW C1 22pF PD3 pinb.7 PD0 S10 SW VCC pinb.6 pinb.7 S19 SW pinb.5 R1 PD3 VCC VCC pinb.1 R9 5k VCC VCC S4 SW S7 SW S14 SW pinb.2 pinb.4 PD4 pinb.5


(17)

13

//--- //DEKLARASI PIN LCD

//--- #asm

.equ __lcd_port=0x18;PORTB #endasm

//--- //DEKLARASI VARIABEL

//--- unsigned char dt, dtkey;

char buf[33];

//--- //DEKLARASI SUB RUTIN KEYPAD

//--- void inkey(void);

//--- //PROGRAM UTAMA

//--- void main()

{ PORTD = 0XFF; DDRD=0xF0; lcd_init(16); lcd_gotoxy(0,1);

lcd_putsf("Hello world"); while(1)

{

inkey();

lcd_gotoxy(0,1);

sprintf(buf,"hex %x ",dtkey); lcd_puts(buf);

}

}

//--- //SUB RUTIN KEYPAD

//--- void inkey(void)

{

PORTD.4 = 0;

dt = (~PIND & 0x0F); switch (dt)

{

case 1:dtkey = 0x01; break;

case 2:dtkey = 0x05; break;

case 4:dtkey = 0x09; break;

case 8:dtkey = 0x13; break;


(18)

14

PORTD.4 = 1;PORTD.5 = 0; dt = (~PIND & 0x0F); switch (dt)

{

case 1:dtkey = 0x02; break;

case 2:dtkey = 0x06; break;

case 4:dtkey = 0x10; break;

case 8:dtkey = 0x14; break;

}

PORTD.5 = 1;PORTD.6 = 0; dt = (~PIND & 0x0F); switch (dt)

{

case 1:dtkey = 0x03; break;

case 2:dtkey = 0x07; break;

case 4:dtkey = 0x11; break;

case 8:dtkey = 0x15; break;

}

PORTD.6 = 1;PORTD.7 = 0; dt = (~PIND & 0x0F); switch (dt)

{

case 1:dtkey = 0x04; break;

case 2:dtkey = 0x08; break;

case 4:dtkey = 0x12; break;

case 8:dtkey = 0x16; break;

} PORTD.7 = 1; }

3.2.4. RANGKAIAN SEVEN SEGMENT

Rangkaian seven segment tunggal adalah rangkaian untuk menggerakkan penampil 7 segment secara langsung dari port keluaran mikrokontroller. Penampil seven segment yang digunakan common anoda. Data yang digunakan untuk menghasilkan angka atau huruf tertentu didapatkan dengan cara seperti pada Tabel 4.1


(19)

15

Gambar 3. 3 Rangkaian aplikasi penggerak seven segmen tunggal

3.2.5. PEMROGRAMAN SEVENT SEGMENT

Setelah rangkaian seven segment dibuat dan dihubungkan dengan port pararel mikrokontroller, maka sekarang saatnya anda membuat program Program Seven Segment 1. Program ini digunakan untuk menampilkan data 3 dan 2 secara bergantian.

Program sebagai berikut ini

//--- // Program Sevent Segmen Tunggal

// DEKLARASI HEADER

//--- #include <mega16.h> #include <delay.h> //--- //SUB RUTIN //--- void bin7seg(unsigned char data1)

{

switch(data1) {

case 0 :

PORTD = 0xc0; break;

case 1 :

PORTD = 0xf9; break;

case 2 :

PORTD = 0xa4; break;

case 3 :

10 9 8 5 4 2 1 6 3 P2 PD5 P6 P7 PD2 P4 P1 PD3 PD4 PD0 PD1 VCC R1 U4 ATMEGA16 3 12 13 2 16 17 18 19 11 10 8 7 6 36 35 34 33 32 37 1 4 5 9 14 15 20 21 40 39 38 31 30 29 28 27 26 25 24 23 22 PB2(INT2/AIN0) XTAL2 XTAL1 PB1(T1) PD2(INT0) PD3(INT1) PD4(OC1B) PD5(OC1A) GND VCC PB7[SCK) PB6[MISO) PB5(MOSI) PA4(ADC4) PA5(ADC5) PA6(ADC6) PA7(ADC7) AREF PA3(ADC3) PB0(XCK/T0) PB3(OC0/AIN1) PB4(SS) RESET PD0(RXD) PD1(TXD) PD6(ICP) PD7(OC2) PA0(ADC0) PA1(ADC1) PA2(ADC2) AGND AVCC PC7(TOSC2) PC6(TOSC1) PC5 PC4 PC3 PC2 PC1(SDA) PC0(SCL) P6 PD5 PD4 C1 22pF VCC PD7 PD6 C3 100nF1 P5 P5 SW2 1 2 P3 PD0 VCC RST PD7 P0 PD3 JISP HEADER 5 1 2 3 4 5 C2 22pF PD6 RST P7 X1 VCC PD2 GND PD1


(20)

16

PORTD = 0xb0; break;

case 4 :

PORTD = 0x99; break;

case 5 :

PORTD = 0x92; break;

case 6 :

PORTD = 0x82; break;

case 7 :

PORTD = 0xf8; break;

case 8 :

PORTD = 0x80; break;

case 9 :

PORTD = 0x90;

break; }

}

//--- //RUTIN UTAMA

//--- void main(void)

{ DDRD=0xFF; while(1) {

bin7seg(0); delay_ms(100); bin7seg(2); delay_ms(100); }

}

3.3. PIN

Bila DDxn diset 0 maka Px berfungsi sebagai pin input. Bila PORTxn diset 1 pada saat pin terkonfigurasi sebagai pin input, maka resistor pull-up akan diaktifkan. Untuk mematikan resistor pull-up, PORTxn harus diset 0 atau pin dikonfigurasi sebagai pin output. Pin port adalah tri-state setelah kondisi reset. Bila PORTxn diset 1 pada saat pin terkonfigurasi sebagai pin output maka pin port akan berlogika 1. Dan bila PORTxn diset 0 pada saat pin terkonfigurasi sebagai pin output maka pin port akan berlogika 0. Saat mengubah kondisi port dari kondisi tri-state (DDxn=0, PORTxn=0) ke kondisi output high (DDxn=1, PORTxn=1) maka harus ada kondisi peralihan apakah itu kondisi pull-up enabled (DDxn=0, PORTxn=1)atau kondisi output low (DDxn=1, PORTxn=0).


(21)

17

Biasanya, kondisi pull-up enabled dapat diterima sepenuhnya, selama lingkungan impedansi tinggi tidak memperhatikan perbedaan antara sebuah strong high driver dengan sebuah pull-up. Jika ini bukan suatu masalah, maka bit PUD pada register SFIOR dapat diset 1 untuk mematikan semua pull-up dalam semua port. Peralihan dari kondisi input dengan pullup ke kondisi output low juga menimbulkan masalah yang sama. Kita harus menggunakan kondisi tri-state (DDxn=0, PORTxn=0) atau kondisi output high (DDxn=1, PORTxn=0) sebagai kondisi transisi.

Bit 2 – PUD : Pull-up Disable. Bila bit diset bernilai 1 maka pull-up pada port I/O akan dimatikan walaupun register DDxn dan PORTxn dikonfigurasikan untuk menyalakan pull-up (DDxn=0, PORTxn=1).

3.3.1. RANGKAIAN PEMBACAAN 8 TOMBOL

Rangkaian pembacaan 8 buah tombol adalah rangkaian untuk membaca penekanan tombol yang terhubung pada port keluaran mikrokontroller yang hasilnya tertampil pada led .

Gambar 3.4 Rangkaian aplikasi pembacaan 8 buah tombol

3.3.2. PEMROGRAMAN PEMBACAAN 8 BUAH TOMBOL

Setelah rangkaian tombol dibuat dan dihubungkan dengan port pararel mikrokontroller, maka sekarang saatnya Anda membuat program pembacaan tombol.

Program sebagai berikut ini

//--- //Program Program pembacaan 8 buah tombol

//DEKLARASI HEADER //--- #include <mega16.h> #include <delay.h> PORTC.6 U1 ATMEGA16 3 12 13 2 16 17 18 19 11 10 8 7 6 36 35 34 33 32 37 1 4 5 9 14 15 20 21 40 39 38 31 30 29 28 27 26 25 24 23 22 PB2(INT2/AIN0) XTAL2 XTAL1 PB1(T1) PD2(INT0) PD3(INT1) PD4(OC1B) PD5(OC1A) GND VCC PB7[SCK) PB6[MISO) PB5(MOSI) PA4(ADC4) PA5(ADC5) PA6(ADC6) PA7(ADC7) AREF PA3(ADC3) PB0(XCK/T0) PB3(OC0/AIN1) PB4(SS) RESET PD0(RXD) PD1(TXD) PD6(ICP) PD7(OC2) PA0(ADC0) PA1(ADC1) PA2(ADC2) AGND AVCC PC7(TOSC2) PC6(TOSC1) PC5 PC4 PC3 PC2 PC1(SDA) PC0(SCL) PORTC.1 PORTC.4 PORTC.5 VCC C2 22pF C1 22pF VCC VCC PORTC.0 RST PORTC.6 PORTC.1 VCC PORTC.4 PORTC.7 C3 100nF JP3 R-PACK 1 2 3 4 5 6 7 8 9 PORTC.2 R1 PORTC.7 PORTC.5 PORTC.3 VCC SW1 1 2 PORTC.0 PORTC.3 X1 PORTC.2


(22)

18 //--- //RUTIN UTAMA //--- void main(void) { DDRC=0x00; DDRB=0xFF; while(1) {

PORTB = PINC; }

}

3.3.3. RANGKAIAN PEMBACAAN KEYPAD DENGAN LCD

Rangkaian tombol 4x4 adalah rangkaian untuk membaca tombol 4x4 dari port keluaran mikrokontroller. Pada saat penekanan tombol key pad, data dari key pad akan ditampilkan dengan port serial komputer.

Gambar 3.5 Rangkaian aplikasi tombol keypad dengan lcd S8 SW S11 SW PD2 U4 ATMEGA16 3 12 13 2 16 17 18 19 11 10 8 7 6 36 35 34 33 32 37 1 4 5 9 14 15 20 21 40 39 38 31 30 29 28 27 26 25 24 23 22 PB2(INT2/AIN0) XTAL2 XTAL1 PB1(T1) PD2(INT0) PD3(INT1) PD4(OC1B) PD5(OC1A) GND VCC PB7[SCK) PB6[MISO) PB5(MOSI) PA4(ADC4) PA5(ADC5) PA6(ADC6) PA7(ADC7) AREF PA3(ADC3) PB0(XCK/T0) PB3(OC0/AIN1) PB4(SS) RESET PD0(RXD) PD1(TXD) PD6(ICP) PD7(OC2) PA0(ADC0) PA1(ADC1) PA2(ADC2) AGND AVCC PC7(TOSC2) PC6(TOSC1) PC5 PC4 PC3 PC2 PC1(SDA) PC0(SCL) J5 HEADER 5 1 2 3 4 5 pinb.6 PD0 X1 PD5 S17 SW PD1 C3 100nF1 pinb.0 SW2 1 2 D3 1N4002 A C S5 SW pinb.6 VCC S9 SW PD7 pinb.7 pinb.0 J16. HEADER 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 PD1 pinb.6 PD6 C2 22pF PD4 S15 SW PD6 pinb.6 S12 SW pinb.5 S18 SW PD5 S16 SW RST PD2 pinb.1 PD7 S6 SW pinb.7 pinb.7 pinb.2 S13 SW C1 22pF PD3 pinb.7 PD0 S10 SW VCC pinb.6 pinb.7 S19 SW pinb.5 R1 PD3 VCC VCC pinb.1 R9 5k VCC VCC S4 SW S7 SW S14 SW pinb.2 pinb.4 PD4 pinb.5


(23)

19

3.3.4. PEMROGRAMAN PEMBACAAN KEYPAD

Setelah rangkaian tombol 4x4 dibuat dan dihubungkan dengan port pararel mikrokontroller, maka sekarang saatnya Anda membuat program Program pembacaan tombol. 4x4.

Program sebagai berikut ini

//--- //Program KEYPAD LCD

//DEKLARASI HEADER

//--- #include <lcd.h>

#include <stdio.h> #include <mega16.h> #include <delay.h>

//--- //DEKLARASI PIN LCD

//--- #asm

.equ __lcd_port=0x18;PORTB #endasm

//--- //DEKLARASI VARIABEL

//--- unsigned char dt, dtkey;

char buf[33];

//--- //DEKLARASI SUB RUTIN KEYPAD

//--- void inkey(void);

//--- //PROGRAM UTAMA

//--- void main()

{ PORTD = 0XFF; DDRD=0xF0; lcd_init(16); lcd_gotoxy(0,1);

lcd_putsf("Hello world"); while(1)

{

inkey();

lcd_gotoxy(0,1);

sprintf(buf,"hex %x ",dtkey); lcd_puts(buf);

}


(24)

20

//--- //SUB RUTIN KEYPAD

//--- void inkey(void)

{

PORTD.4 = 0;

dt = (~PIND & 0x0F); switch (dt)

{

case 1:dtkey = 0x01; break;

case 2:dtkey = 0x05; break;

case 4:dtkey = 0x09; break;

case 8:dtkey = 0x13; break;

}

PORTD.4 = 1;PORTD.5 = 0; dt = (~PIND & 0x0F); switch (dt)

{

case 1:dtkey = 0x02; break;

case 2:dtkey = 0x06; break;

case 4:dtkey = 0x10; break;

case 8:dtkey = 0x14; break;

}

PORTD.5 = 1;PORTD.6 = 0; dt = (~PIND & 0x0F); switch (dt)

{

case 1:dtkey = 0x03; break;

case 2:dtkey = 0x07; break;

case 4:dtkey = 0x11; break;

case 8:dtkey = 0x15; break;

}

PORTD.6 = 1;PORTD.7 = 0; dt = (~PIND & 0x0F); switch (dt)

{

case 1:dtkey = 0x04; break;


(25)

21

break;

case 4:dtkey = 0x12; break;

case 8:dtkey = 0x16; break;

} PORTD.7 = 1; }


(26)

22

BAB IV ANALOG TO DIGITAL CONVERTER (OK)

4.1. PENDAHULUAN

ATmega16 mempunyai ADC (Analog to Digital Converter) internal dengan fitur sebagai berikut (untuk lebih detil dapat mengacu pada datasheet) :

� 10-bit Resolution

� 65 - 260 μs Conversion Time

� Up to 15 kSPS at Maximum Resolution

� 8 Multiplexed Single Ended Input Channels

� Optional Left Adjustment for ADC Result Readout

� 0 - VCC ADC Input Voltage Range

� Selectable 2.56V ADC Reference Voltage

� Free Running or Single Conversion Mode ~ ADC Start Conversion by Auto Triggering on Interrupt 9Ibit ha l 49 Sources

� Interrupt on ADC Conversion Complete

� Sleep Mode Noise Canceler

Dibawah ini gambar timing diagram untuk mode single convertion maksudnya hanya satu input chanel saja yang dikonversi.


(27)

23

4.2. RANGKAIAN ADC ATMEGA DENGAN LED

Rangkaian minimum untuk membaca ADC dengan tempilan LED ditunjukan pada Gambar 9.7 yang perlu diperhatikan adalah konfigurasi rangkaian LED yaitu Common Anode

(CA) artinya untuk menghidupkan LED pada Port D, port D harus dikirim atau diberi logika

‘0’.

Gambar 4.2 Hasil pemasangan komponen ADC LED

4.3. PEMROGRAMAN ADC ATMEGA16

Setelah rangkaian adc mikrokontroller ATMEGA16 dibuat, maka sekarang saatnya Anda membuat program yang digunakan untuk membaca ADC ATMEGA16 dan menampilkan data ADC tersebut dengan menggunakan LED yang terhubung pada PORT D yang konfigurasi rangkaian LED yaitu Common Anode (CA).

Program sebagai berikut ini

//--- //Program ADC LED

//--- //--- //DEKLARASI HEADER //--- #include <mega16.h> #include <stdio.h> #include <delay.h> //--- //DEKLARASI VARIABEL //--- unsigned int data_adc;

P7 GND C1 22pF SW2 1 2 P7 C2 22pF P3 VCC RST VCC JISP HEADER 5 1 2 3 4 5 1 2 P6 U4 ATMEGA16 3 12 13 2 16 17 18 19 11 10 8 7 6 36 35 34 33 32 37 1 4 5 9 14 15 20 21 40 39 38 31 30 29 28 27 26 25 24 23 22 PB2(INT2/AIN0) XTAL2 XTAL1 PB1(T1) PD2(INT0) PD3(INT1) PD4(OC1B) PD5(OC1A) GND VCC PB7[SCK) PB6[MISO) PB5(MOSI) PA4(ADC4) PA5(ADC5) PA6(ADC6) PA7(ADC7) AREF PA3(ADC3) PB0(XCK/T0) PB3(OC0/AIN1) PB4(SS) RESET PD0(RXD) PD1(TXD) PD6(ICP) PD7(OC2) PA0(ADC0) PA1(ADC1) PA2(ADC2) AGND AVCC PC7(TOSC2) PC6(TOSC1) PC5 PC4 PC3 PC2 PC1(SDA) PC0(SCL) 1 2 1 2 R1 RST C3 100nF1 P1 P5 VCC P2 1 2 VCC L1 1 2 1 2 X1 P6 1 2 1 2 P4 R2 POT 1 3 2 P0 P5


(28)

24

int suhu;

//--- //DEFINISI VARIABEL

//--- #define ADC_VREF_TYPE 0x60

//--- //SUB RUTIN ADC

//--- unsigned char read_adc(unsigned char adc_input)

{

ADMUX=adc_input|ADC_VREF_TYPE; ADCSRA|=0x40;

while ((ADCSRA & 0x10)==0); ADCSRA|=0x10;

return ADCH; }

//--- //RUTIN UTAMA

//--- void main(void)

{

DDRD = 0xFF;

ADMUX=ADC_VREF_TYPE; ADCSRA=0x87;

SFIOR&=0xEF; while (1) {

data_adc=read_adc(0); suhu=~data_adc;

PORTD = suhu; }

}


(29)

25

BAB V TIMER / COUNTER (OK)

5.1. PENDAHULUAN

Timer/couter adalah tujuan umum single channel, module 8 bit timer/counter. Beberapa fasilitas chanel dari timer counter antara lain:

 Counter channel tunggal

 Pengosongan data timer sesuai dengan data pembanding

 Bebas -glitch, tahap yang tepat Pulse Width Modulator (PWM)

 Pembangkit frekuensi

 Event counter external

Gambar 5. 1 Blok diagram timer counter

Gambar diagram block timer/counter 8 bit ditunjukan pada gambar di bawah ini. Untuk penempatan pin I/O telah di jelaskan Ibit hal 67 pada bagian I/O di atas. CPU dapat diakses register I/O, termasuk dalam pinpin I/O dan bit I/O. Device khusus register I/O dan lokasi bit terdaftar pada deskripsi timer/counter 8 bit pada gambar 1.13

5.2. TIMING DIAGRAM TIMER/COUNTER

Timer/counter disain sinkron clock timer (clkT0) oleh karena itu ditunjukan sebagai sinyal enable clock pada gambar berikut. Gambar ini termasuk informasi ketika flag interrupt dalam kondisi set. Data timing digunakan sebagai dasar dari operasi timer/counter.

Sesuai dengan gambar dibawah timing diagram timer/counter dengan prescaling maksudnya adalah counter akan menambahkan data counter (TCNTn) ketika terjadi pulsa


(30)

26

clock telah mencapai 8 kali pulsa dan sinyal clock pembagi aktif clock dan ketika telah mencapai nilai maksimal maka nilai TCNTn akan kembali ke nol. Dan kondisi flag timer akan aktif ketika TCNTn maksimal.

Gambar 5. 2 Timing diagram timer/counter, tanpa prescaling

Gambar 5. 3 Timing diagram timer/counter, dengan prescaling


(31)

27

Sama halnya timing timer diatas, timing timer/counter dengan seting OCFO timer mode ini memasukan data ORCn sebagai data input timer. Ketika nilai ORCn sama dengan nilaiTCNTn maka pulsa flag timer akan aktif. TCNTn akan bertambah nilainya ketika pulsa clock telah mencapai 8 pulsa. Dan kondisi flag akan berbalik (komplemen) kondisi ketika nilai TCNTn kembali ke nilai 0 (overflow).

Ketika nilai ORCn sama dengan nilai TCNTn maka pulsa flag timer akan aktif. TCNTn akan bertambah nilainya ketika pulsa clock telah mencapai 8 pulsa. Dan kondisi flag akan berbalik (komplemen) kondisi ketika nilai TCNTn kembalimkenilai 0 (overflow).

Gambar 5. 5 Timing diagram timer/counter, ,dengan pescaler (fclk_I/O/8)

5.3. RANGKAIAN MENCACAH COUNTER TIMER T0

Rangkaian minimum untuk counter melalui Port B.0 ditunjukan pada Gambar 6.2. Rangkaian tersebut menggunakan penampil led. Konfigurasi rangkaian LED yaitu Common Anode (CA) artinya untuk menghidupkan LED pada Port D, port D harus dikirim atau diberi logika ‘0’.

Gambar 5.6 Hasil pemasangan komponen-komponen mencacah counter T0

VCC P6 P2 P7 P5 P3 P1 R1 L1 1 2 P0 C3 100nF1 VCC P5 P4 RST VCC 1 2 VCC P6 U4 ATMEGA16 3 12 13 2 16 17 18 19 11 10 8 7 6 36 35 34 33 32 37 1 4 5 9 14 15 20 21 40 39 38 31 30 29 28 27 26 25 24 23 22 PB2(INT2/AIN0) XTAL2 XTAL1 PB1(T1) PD2(INT0) PD3(INT1) PD4(OC1B) PD5(OC1A) GND VCC PB7[SCK) PB6[MISO) PB5(MOSI) PA4(ADC4) PA5(ADC5) PA6(ADC6) PA7(ADC7) AREF PA3(ADC3) PB0(XCK/T0) PB3(OC0/AIN1) PB4(SS) RESET PD0(RXD) PD1(TXD) PD6(ICP) PD7(OC2) PA0(ADC0) PA1(ADC1) PA2(ADC2) AGND AVCC PC7(TOSC2) PC6(TOSC1) PC5 PC4 PC3 PC2 PC1(SDA) PC0(SCL) C2 22pF SW2 1 2 P7 RST JISP HEADER 5 1 2 3 4 5 X1 1 2 1 2 1 2 GND 1 2 1 2 C1 22pF 1 2


(32)

28

5.4. PEMROGRAMAN MENCACAH COUNTER T0

Setelah rangkaian dibuat dan dihubungkan dengan port mikrokontroller, maka sekarang saatnya Anda membuat program yang digunakan untuk mencacah. Program cacah menggunakan port B.0 pada mikrokontroller.

Program sebagai berikut ini

//--- // Program MENCACAH COUNTER TIMER 0

//--- //--- //DEKLARASI HEADER

//--- #include <mega16.h>

#include <delay.h> #include <stdio.h>

//--- //DEKLARASI VARIABEL

//--- unsigned char led,a;

//--- //DEKLARASI SUB RUTIN

//--- void InisialisasiTIMER ();

//--- //RUTIN UTAMA

//--- void main (void)

{

DDRD = 0xff; led=0x00;

InisialisasiTIMER(); while(1)

{

a = TCNT0;

if (a == 0x06)

{

led = PIND; PORTD=~led;

TCNT0=0x00;

}

} }


(33)

29

//--- //SUB RUTIN INISIALISASI TIMER0

//--- void InisialisasiTIMER ()

{

TCNT0=0x00;

TCCR0=0x07;

}

5.5. PEMROGRAMAN MENCACAH COUNTER T0

Setelah rangkaian dibuat dan dihubungkan dengan port mikrokontroller, maka sekarang saatnya Anda membuat program yang digunakan untuk mencacah. Program cacah menggunakan port B.0 pada mikrokontroller.

Program sebagai berikut ini

//--- // Program MENCACAH COUNTER TIMER 0

//--- //--- //DEKLARASI HEADER

//--- #include <mega16.h>

#include <delay.h> #include <stdio.h>

//--- //DEKLARASI VARIABEL

//--- unsigned char led,a;

//--- //DEKLARASI SUB RUTIN

//--- void InisialisasiTIMER ();

//--- //RUTIN UTAMA

//--- void main (void)

{

DDRD = 0xff; led=0x00;

InisialisasiTIMER(); while(1)

{


(34)

30

if (a == 0x06)

{

led = PIND; PORTD=~led;

TCNT0=0x00;

}

} }

//--- //SUB RUTIN INISIALISASI TIMER0

//--- void InisialisasiTIMER ()

{

TCNT0=0x00;

TCCR0=0x07;


(35)

31

BAB VI INTERUPSI (OK)

6.1. PENDAHULUAN

Interupsi adalah suatu kejadian atau peristiwa yang menyebabkan mikrokontroler berhenti sejenak untuk melayani interupsi tersebut. Program yang dijalankan pada saat melayani interupsi disebut Interrupt Service Routine. Pada sistem mikrokontroler yang sedang menjalankan programnya, saat terjadi interupsi , program akan berhenti sesaat, melayani interupsi tersebut dengan menjalankan program yang berada pada alamat yang ditunjuk oleh vektor dari interupsi yang terjadi hingga selesai dan kembali meneruskan program yang terhenti oleh interupsi tadi.

Meskipun memerlukan pengertian yang lebih mendalam, pengetahuan mengenai interupsi sangat membantu mengatasi masalah pemrograman mikroprosesor / mikrokontroler dalam hal menangani banyak peralatan input/output. Pengetahuan mengenai interupsi tidak cukup hanya dibahas secara teori saja, diperlukan contoh program yang konkrit untuk memahami. ATMEGA16 memiliki 21 buah sumber interupsi. Interupsi tersebut bekerja jika bit I pada Register status atau Status Register (SREG) dan bit pada masing-masing register bernilai 1.


(36)

32

6.2. RANGKAIAN INTERUPSI EKTERNAL

Rangkaian berikut digunakan untuk interupsi ekternal mikrokontroller. Rangkaian tersebut menggunakan interupsi eksternal 0, 1, dan 2 yang menggunakan tampilan LED yang dihubungkan pada Port A.

Gambar 6.1 Rangkaian interupsi ekternal mikrokontroller

6.3. PEMROGRAMAN INTERUPSI EKTERNAL INT0

Setelah membuat rangkaian interupsi ekternal untuk menghidupkan LED, maka sekarang saatnya Anda membuat program yang digunakan untuk menghidupkan LED dengan menggunakan interupsi external 0.

Program sebagai berikut ini

//--- //Program interupsi eksternal 0

//--- //--- //EKLARASI HEADER //--- #include <mega16.h> #include <delay.h> #include <stdio.h> 1 2 P6 P3 1 2 INT2 U4 ATMEGA16 3 12 13 2 16 17 18 19 11 10 8 7 6 36 35 34 33 32 37 1 4 5 9 14 15 20 21 40 39 38 31 30 29 28 27 26 25 24 23 22 PB2(INT2/AIN0) XTAL2 XTAL1 PB1(T1) PD2(INT0) PD3(INT1) PD4(OC1B) PD5(OC1A) GND VCC PB7[SCK) PB6[MISO) PB5(MOSI) PA4(ADC4) PA5(ADC5) PA6(ADC6) PA7(ADC7) AREF PA3(ADC3) PB0(XCK/T0) PB3(OC0/AIN1) PB4(SS) RESET PD0(RXD) PD1(TXD) PD6(ICP) PD7(OC2) PA0(ADC0) PA1(ADC1) PA2(ADC2) AGND AVCC PC7(TOSC2) PC6(TOSC1) PC5 PC4 PC3 PC2 PC1(SDA) PC0(SCL) RST C2 22pF 1 2 VCC P7 RST SW2 1 2 L1 1 2 JISP HEADER 5 1 2 3 4 5 X1 VCC P5 VCC 1 2 R1 C3 100nF1 P5 P4 P2 VCC GND INT1 1 2 VCC P6 P7

C1 22pF VCC

P1 1 2 P0 INT0 1 2 VCC


(37)

33

//--- //EKLARASI VARIABEL

//--- unsigned char dt=0x01;

//--- //DEKLARASI SUB RUTIN

//--- void InisialisasiINT0();

//--- //PROGRAM UTAMA

//--- void main (void)

{

DDRA=0xff; InisialisasiINT0();

#asm ("sei");

while(1)

{

PORTA=dt;

delay_ms(100); dt=dt<<1;

if (dt==0) {dt=0x01;} }

}

//--- //SUB RUTIN INTERUPSI EXTERNAL0

//--- interrupt [EXT_INT0] void ext_int0_isr(void)

{

unsigned char rr=0; while (rr<5)

{

PORTA=0x0f; delay_ms(5); PORTA=0xf0; delay_ms(5); ++rr;

} }

//--- //SUB RUTIN INISIALISASI INTERUPSI EXTERNAL0

//--- void InisialisasiINT0 ()

{

GICR|=0x80; MCUCR=0x0C; MCUCSR=0x00;


(38)

34

GIFR=0x80; }

6.4. PEMROGRAMAN INTERUPSI EKTERNAL INT1

Setelah membuat rangkaian interupsi ekternal int 1, maka sekarang saatnya Anda membuat program yang digunakan untuk menghidupkan LED dengan menggunakan interupsi external int1

Program sebagai berikut ini

//--- //Program interupsi eksternal 1

//--- //--- //EKLARASI HEADER

//--- #include <mega16.h>

#include <delay.h>

#include <stdio.h>

//--- //EKLARASI VARIABEL

//--- unsigned char dt=0x01;

//--- //DEKLARASI SUB RUTIN

//--- void InisialisasiINT1();

//--- //PROGRAM UTAMA

//--- void main (void)

{

DDRA=0xff; InisialisasiINT1();

#asm ("sei");

while(1)

{

PORTA=dt; delay_ms(100);

dt=dt<<1;

if (dt==0) {dt=0x01;} };

}


(39)

35

//SUB RUTIN INTERUPSI EXTERNAL0

//--- interrupt [EXT_INT1] void ext_int1_isr(void)

{

unsigned char rr=0; while (rr<5) {

PORTA=0x0f; delay_ms(5); PORTA=0xf0; delay_ms(5); ++rr; } } //--- //SUB RUTIN INISIALISASI INTERUPSI EXTERNAL0

//--- void InisialisasiINT1() { GICR|=0x80; MCUCR=0x0C; MCUCSR=0x00; GIFR=0x80; }

6.5. RANGKAIAN INTERUPSI TIMER MIKROKONTROLLER

Rangkaian berikut digunakan untuk interupsi ekternal mikrokontroller. Rangkaian tersebut menggunakan interupsi timer 0 dan 1 yang menggunakan tampilan LED yang dihubungkan pada Port D.

Gambar 6.2 Rangkaian interupsi timer mikrokontroller

X1 C3 100nF1 C1 22pF P4 P3 RST P5 JISP HEADER 5 1 2 3 4 5 C2 22pF P6 P7 1 2 1 2 R1 1 2 VCC VCC P6 1 2 1 2 U4 ATMEGA16 3 12 13 2 16 17 18 19 11 10 8 7 6 36 35 34 33 32 37 1 4 5 9 14 15 20 21 40 39 38 31 30 29 28 27 26 25 24 23 22 PB2(INT2/AIN0) XTAL2 XTAL1 PB1(T1) PD2(INT0) PD3(INT1) PD4(OC1B) PD5(OC1A) GND VCC PB7[SCK) PB6[MISO) PB5(MOSI) PA4(ADC4) PA5(ADC5) PA6(ADC6) PA7(ADC7) AREF PA3(ADC3) PB0(XCK/T0) PB3(OC0/AIN1) PB4(SS) RESET PD0(RXD) PD1(TXD) PD6(ICP) PD7(OC2) PA0(ADC0) PA1(ADC1) PA2(ADC2) AGND AVCC PC7(TOSC2) PC6(TOSC1) PC5 PC4 PC3 PC2 PC1(SDA) PC0(SCL) VCC GND P0 P2 L1 1 2 P5 1 2 P1 P7 RST 1 2 SW2 1 2


(40)

36

6.6. PEMROGRAMAN INTERUPSI TIMER 0

Setelah membuat rangkaian interupsi timer untuk menghidupkan LED, maka sekarang saatnya Anda membuat program yang digunakan untuk menghidupkan LED dengan menggunakan interupsi timer 0.

Program sebagai berikut ini

//--- // Program INTERUPSI TIMER 0

//--- //--- //DEKLARASI HEADER

//--- #include <mega16.h>

#include <delay.h>

#include <stdio.h>

//--- //DEKLARASI VARIABEL

//--- unsigned char led=0xfe;

//--- //DEKLARASI SUB RUTIN Inisialisasi TIMER0

//--- void InisialisasiTIMER0();

//--- //PROGRAM UTAMA

//--- void main (void)

{

DDRD=0xff; InisialisasiTIMER0(); #asm ("sei"); while(1);

}

//--- //SUB RUTIN INTERUPSI TIMER0

//--- interrupt [TIM0_OVF] void timer0_overflow(void)

{

TCNT0=0x00; led<<=1; led|=1;

if (led==0xff) led=0xfe; PORTD=led;

}

//--- //SUB RUTIN INISIALISASI TIMER0


(41)

37

void InisialisasiTIMER0() {

TCNT0=0x00; TCCR0=0x05; TIMSK=0x01; TIFR=0x01; }

6.7. PEMROGRAMAN INTERUPSI TIMER 1

Setelah membuat rangkaian interupsi timer untuk menghidupkan LED, maka sekarang saatnya Anda membuat program yang digunakan untuk menghidupkan LED dengan menggunakan interupsi timer 1.

Program sebagai berikut ini

//--- // Program INTERUPSI TIMER 1

//--- //--- //DEKLARASI HEADER

//--- #include <mega16.h>

#include <delay.h>

#include <stdio.h>

//--- //DEKLARASI VARIABEL

//--- unsigned char led=0xfe;

//--- //DEKLARASI SUB RUTIN

//--- void InisialisasiTIMER1();

//--- //PROGRAM UTAMA

//--- void main (void)

{

DDRD=0xff; InisialisasiTIMER1(); #asm ("sei"); while(1);

}

//--- //SUB RUTIN INTERUPSI TIMER 1

//--- interrupt [TIM1_OVF] void timer1_ovf_isr(void)


(42)

38

{

TCNT1L=0x00; TCNT1H=0x00; led<<=1;

led|=1; delay_ms(100); if (led==0xff) led=0xfe; PORTD=led;

}

//--- //SUB RUTIN INISIALISASI TIMER 1

//--- void InisialisasiTIMER1()

{

TCNT1L=0x00; TCNT1H=0x00; TCCR1A=0x00;

TCCR1B=0x01; TIMSK=0x04; TIFR=0x04; }

6.8. PEMROGRAMAN INTERUPSI TIMER 2

Setelah membuat rangkaian interupsi timer untuk menghidupkan LED, maka sekarang saatnya Anda membuat program yang digunakan untuk menghidupkan LED dengan menggunakan interupsi timer 2.

Program sebagai berikut ini

//--- // Program INTERUPSI TIMER 2

//--- //--- //DEKLARASI HEADER

//--- #include <mega16.h>

#include <delay.h>

#include <stdio.h>

//--- //DEKLARASI VARIABEL

//--- unsigned char led=0xfe;

//--- //DEKLARASI SUB RUTIN

//--- void InisialisasiTIMER2();

//--- //PROGRAM UTAMA


(43)

39

//--- void main (void)

{

DDRD=0xff; InisialisasiTIMER2(); #asm ("sei"); while(1);

}

//--- //SUB RUTIN INTERUPSI TIMER2

//--- interrupt [TIM2_OVF] void timer2_ovf_isr(void)

{

TCNT2=0x00; led<<=1; led|=1; delay_ms(100);

if (led==0xff) led=0xfe; PORTD=led;

}

//--- //SUB RUTIN INISIALISASI TIMER2

//--- void InisialisasiTIMER2()

{

TCCR2=0x05; TCNT2=0x00; TIMSK=0x40; TIFR=0x40; }


(44)

40

BAB VII SERIAL PORT(OK)

7.1. PENDAHULUAN

Universal synchronous dan asynchronous pemancar dan penerima serial adalah suatu alat komunikasi serial sangat fleksibel. Jenis yang utama adalah :

�Operasi full duplex (register penerima dan pengirim dapat berdiri sendiri )

�Operasi Asychronous atau synchronous

�Master atau slave mendapat clock dengan operasi synchronous

�Pembangkit boud rate dengan resolusi tinggi

�Dukung frames serial dengan 5, 6, 7, 8 atau 9 Data bit dan 1 atau 2 Stop bit

�Tahap odd atau even parity dan parity check didukung oleh hardware

�Pendeteksian data overrun

�Pendeteksi framing error

�Pemfilteran gangguan ( noise ) meliputi pendeteksian bit false start dan pendeteksian low pass filter digital

�Tiga interrupt yaitu TX complete, TX data register empty dan RX complete.

�Mode komunikasi multi-processor

�Mode komunikasi double speed asynchronous

7.2. INISIALISASI USART

USART harus diinisialisasi sebelum komunikasi manapun dapat berlansung. Proses inisialisasi normalnyaterdiri daripengesetan boud rate, penyetingan frame format dan pengaktifan pengirim atau penerimatergantung pada pemakaian. Untuk interrupt menjalankan operasi USART , global interrupt flag ( penanda ) sebaiknya dibersihkan ( dan interrupt global disable ) ketika inisialisasi dilakukan. Sebelum melakukan inisialisasi ulang dengan mengubah boud rate atau frame format, untuk meyakinkan bahwa tidak ada transmisi berkelanjutan sepanjang peiode register yang diubah.

Flag TXC dapat digunakan untuk mengecek bahwa pemancar telah melengkapi semua pengiriman, dan flag RXC dapat digunakan untuk mengecek bahwa tidak ada data yang tidak terbaca pada buffer penerima. Tercatat bahwa flag TXC harus dibersihkan sebelum tiap transmisi ( sebelum UDR ditulisi ) jika itu semua digunakan untuk tujuan tersebut. USART sederhana inisialisasi kode contoh berikut menunjukan fungsi satu assembly dan satu C itu mempunyai kesamaan dalam kemampuan. Pada contoh tersebit


(45)

41

mengasumsikan bahwa operasi asinkron menggunakan metode poling ( tidak ada interrupt enable ) frame format yang tetap. Boud rate diberikan sebagai fungsi parameter.

Untuk kode assembly, parameter boud rate diasumsikan untuk di simpan pada register r16, r17. Ketika menulis fungsi pada register UCSRC, bit URSEL (MSB) harus diset dalam kaitan dengan pembagian penempatan I/O oleh UBRRH dan UCSRC. Lebih mengedepankan inisialisasi rutin dapat dibuat seperti itu meliputi frame format sebagai parameter, disable interrupt dan lain-lain. Bagai manapun juga banyak aplikasi menggunakan seting tetap boud dan register control, dan untuk aplikasi jenis ini dapat ditempatkan secara langsung pada keseluruhan routine, atau dikombinasikan dengan inisialisasi kode untuk modul I/O yang lain.

7.3. RANGKAIAN SERIAL MIKROKONTROLLER

Rangkaian berikut digunakan untuk interfacing Led dengan port serial. Rangkaian tersebut, sebagai konverter dari serial ke pararel. Berikut adalah rangkaian serial led driver yang akan kita hubungkan pada port serial. Rangkaian Led Driver Serial menggunakan Microcontroller ATMEGA16 yang dihubungkan ke port serial dengan menggunakan IC RS232 Rangkaian Serial LED Driver ini akan mendeteksi setiap pengiriman data karakter dari port serial computer.

Gambar 7. 1 Hasil pemasangan komponen rangkaian serial mikrokontroller

U4 ATMEGA16 3 12 13 2 16 17 18 19 11 10 8 7 6 36 35 34 33 32 37 1 4 5 9 14 15 20 21 40 39 38 31 30 29 28 27 26 25 24 23 22 PB2(INT2/AIN0) XTAL2 XTAL1 PB1(T1) PD2(INT0) PD3(INT1) PD4(OC1B) PD5(OC1A) GND VCC PB7[SCK) PB6[MISO) PB5(MOSI) PA4(ADC4) PA5(ADC5) PA6(ADC6) PA7(ADC7) AREF PA3(ADC3) PB0(XCK/T0) PB3(OC0/AIN1) PB4(SS) RESET PD0(RXD) PD1(TXD) PD6(ICP) PD7(OC2) PA0(ADC0) PA1(ADC1) PA2(ADC2) AGND AVCC PC7(TOSC2) PC6(TOSC1) PC5 PC4 PC3 PC2 PC1(SDA) PC0(SCL) ADD9 P3 GND ADD8 P7 1 2 PD5 VCC P5 DATA5 ADD12 L1 1 2 PD6 +C4 1uF 16V 1 2 DATA2 P6 TX1 RST RX1 P4 SW2 1 2 + C9 1uF 16V VCC 1 2 PD1 X1 DATA4 JISP HEADER 5 1 2 3 4 5 U6 MAX232 13 8 11 10 1 3 4 5 2 6 12 9 14 7 R1IN R2IN T1IN T2IN C+ C1-C2+ C2-V+ V-R1OUT R2OUT T1OUT T2OUT DATA7 DATA3 P7 +C8 1uF 16V 1 2 C1 22pF DATA0 P1 VCC P5 VCC P2 P6 PD7 ADD11 C2 22pF DATA1 PD3 +C5 1uF 16V DATA6 C3 100nF1 1 2 P0 PD0 RST ADD10 ADD15 1 2 PD2 JSerial1 HEADER 3 1 2 3 ADD13 PD4 ADD14 1 2 R1


(46)

42

7.4. PEMROGRAMAN PORT SERIAL MIKROKONTROLLER

Setelah membuat dan menjalankan program mengirim data serial, maka sekarang saatnya Anda membuat program kedua yang digunakan untuk program mengirim dan menerima data serial.

Program sebagai berikut ini

//--- //Program Bab 5.2. MENGIRIM DAN MENERIMA DATA

//--- //--- //DEKLARASI HEADER

//--- #include <mega16.h>

#include <delay.h> #include <stdio.h>

//--- //DEKLARASI VARIABEL

//--- unsigned char data_terima = 0x00;

const long int osilator = 12000000; unsigned long int UBRR;

//--- //DEKLARASI SUB RUTIN

//---void InisialisasiUSART (unsigned long int baud_rate); //--- //PROGRAM UTAMA

//---void main(//---void)

{

DDRC = 0xFF;

PORTC = 0x00;

InisialisasiUSART(9600);

putsf("Selamat Datang Mas Iswanto"); putchar(13); while(1)

{

putsf("Tekan sembarang tombol"); putchar(13); data_terima = getchar();

delay_ms(100);

putsf("Anda menekan tombol ");

putchar(data_terima);; putchar(13); }


(47)

43

//--- //SUB RUTIN BAUDRATE

//---void InisialisasiUSART (unsigned long int baud_rate) {

UBRR = (osilator/(16*baud_rate))-1; UBRRL = UBRR;

UBRRH = UBRR>>8; UCSRB = 0x18; UCSRC = 0x86; }


(48)

44

BAB VIII PWM(OK)

8.1. PENDAHULUAN

PWM (Pulse Width Modulation) dapat digunakan untuk mengatur kecepatan motor, yaitu dengan cara mengatur lebar pulsa (waktu ON) dari tegangan sumbernya (tegangan DC). Perbandingan antara waktu ON dan waktu OFF disebut duty cycle (siklus kerja). Semakin besar siklus kerjanya, akan semakin besar pula keluaran yang dihasilkan, sehingga kecepatan motor akan semakin besar. Pembangkitan sinyal PWM dengan mikrokontroler memiliki beberapa keuntungan, seperti teknik pemrograman yang sederhana, dan rangkaian listrik menjadi sederhana.

Mikrokontroler AVR ATMEGA16 dapat digunakan sebagai pembangkit gelombang PWM. Mikrokontroler AVR ATMEGA16 mempunyai PWM yang telah terintegrasi dalam

chip. Keluaran dari PWM tersebut terdapat pada pin 15 (OC1). Untuk menjalankan program PWM, diperlukan 3 unit register timer, yaitu:

a. Timer/Counter Control Register (TCCR), untuk menentukan mode PWM.

b. Timer/Counter Register (TCNT), digunakan untuk menentukan modulasi frekuensinya.

c. Output Compare Register (OCR), untuk menentukan nilai siklus kerjanya.

Dalam mikrokontroler ATMEGA16, terdapat beberapa mode PWM. Mode PWM yang akan dibahas adalah mode Fast P WM, karena dalam perancangan sistem robot ini menggunakan mode Fast P WM. Pada mode Fast P WM, semakin besar nilai OCR, maka akan semakin besar pula siklus kerja yang dihasilkan. Keluaran PWM akan berlogika tinggi setelah nilai TOP tercapai sampai nilai OCR tercapai dan kemudian akan berlogika rendah sampai nilai TOP tercapai kembali. Prinsip kerja dari Fast PWM dapat dilihat pada Gambar 10.1.

nilai counter nilai OCR TOP

Keluaran

Gambar 8.1 Prinsip Kerja Mode Fast PWM


(49)

45 100%

1 TOPx

OCR D

 ...10.1 Untuk menentukan frekuensi PWM dihitung dengan rumus:

) 1 ( TOP N f f clock PWM 

 ...10.2 Sedangkan untuk menentukan resolusi PWM digunakan rumus:

...10.3

keterangan:

N adalah faktor prescaler (1, 8, 64, 256, atau 1024), dan

TOP adalah nilai tertinggi dari pengaturan counter.

8.2. RANGKAIAN PWM MIKROKONTROLLER

Rangkaian minimum untuk pwm melalui Port D.4 dan Port D.5 ditunjukan pada Gambar 10.2. Rangkaian tersebut menggunakan diver motor dc yaitu transistor. Rangkaian driver tersebut akan di hubungkan dengan pin D.4 dan pin D.5.

Gambar 8.2 Hasil pemasangan komponen rangkaian minimum untuk pwm U1 ATMEGA16 3 12 13 2 16 17 18 19 11 10 8 7 6 36 35 34 33 32 37 1 4 5 9 14 15 20 21 40 39 38 31 30 29 28 27 26 25 24 23 22 PB2(INT2/AIN0) XTAL2 XTAL1 PB1(T1) PD2(INT0) PD3(INT1) PD4(OC1B) PD5(OC1A) GND VCC PB7[SCK) PB6[MISO) PB5(MOSI) PA4(ADC4) PA5(ADC5) PA6(ADC6) PA7(ADC7) AREF PA3(ADC3) PB0(XCK/T0) PB3(OC0/AIN1) PB4(SS) RESET PD0(RXD) PD1(TXD) PD6(ICP) PD7(OC2) PA0(ADC0) PA1(ADC1) PA2(ADC2) AGND AVCC PC7(TOSC2) PC6(TOSC1) PC5 PC4 PC3 PC2 PC1(SDA) PC0(SCL) pinb.7 12V2 MG2 MOTOR DC 1 2 RST 470 Q2 TI9013 C3 100nF1 pinb.6 C2 22pF 5V TI9013 EN2 470 EN2 EN2 5V MG2 MOTOR DC 1 2 pinb.5 SW2 1 2 EN2 TIP3055 D2 DIODE EN2 EN2 D1 DIODE C1 22pF RST EN2 12V2 X1 EN2 TIP3055 EN2 JISP 1 2 3 4 5 EN2 R1 5V pinb.6 pinb.7 pinb.5 2 log ) 1 log(   TOP RPWM


(50)

46

8.3. PEMROGRAMAN PWM MIKROKONTROLLER

Setelah rangkaian dibuat dan dihubungkan dengan port mikrokontroller, maka sekarang saatnya Anda membuat program yang digunakan untuk mengatur putaran motor dc.

Program sebagai berikut ini

//--- // Program PWM

// DEKLARASI HEADER

//--- #include <stdio.h>

#include <mega16.h> #include <delay.h>

//--- //DEKLARASI SUB RUTIN

//--- void InisialisasiPWM();

//--- //DEKLARASI VARIABEL

//--- int data1;

int data2;

//--- //RUTIN UTAMA

//--- void main (void)

{

InisialisasiPWM(); while(1)

{

data1 = 50; data2 = 1024; OCR1A=data1; OCR1B=data2;

TIFR=0;

} }

//--- //SUB RUTIN INISIALISASI PWM

//--- void InisialisasiPWM()

{

DDRD=0xff; TCCR1A=0xa3; TCCR1B=0x0b; TCNT1=0x0000; }


(51)

47

DAFTAR PUSTAKA

[1] Iswanto, Design dan Implementasi Sistem Embedded Mikrokontroler ATMEGA8535 dengan Bahasa Basic. Yogyakarta: Gava Media, 2008.

[2] I. Iswanto, N. M. Raharja, and A. Subardono, “Sistem Peringatan Dini Tanah Longsor

Berbasis Atmega8535,” in Seminar Nasional Informatika 2009 (semnasIF 2009), 2009, pp. 53–57.

[3] R. T. A. Sadad and Iswanto, “Implementasi Mikrokontroler Sebagai Pengendali

Kapasitor Untuk Perbaikan Faktor Daya Otomatis pada Jaringan Listrik,” SEMESTA Tek., vol. 13, no. 2, pp. 181–192, 2010.

[4] I. Iswanto and N. M. Raharja, “Sistem monitoring dan peringatan dini tanah longsor,” in Simposium Nasional RAPI IX 2010, 2010, pp. 54–62.

[5] A. N. N. Chamim and Iswanto, “Implementasi Mikrokontroler Untuk Pengendalian

Lampu Dengan Sms,” in Prosending Retii 6., 2011.

[6] I. Ambar Tri Utomo, Ramadani Syahputra, “Implementasi Mikrokontroller Sebagai

Pengukur Suhu Delapan Ruangan,” Pengukur Suhu, vol. 4, no. Pengukur Suhu Delapan Ruangan, pp. 153–159, 2011.

[7] R. T. A. Sadad and Iswanto, “Peranan Teknologi Solar Cell dalam Peningkatan Daya

Saing Usaha Kecil dan Menengah,” SEMESTA Tek., vol. 14, no. 1, pp. 58–63, 2011. [8] R. T. A. SADAD, ISWANTO, and J. A. SADAD, “Implementasi Mikrokontroler

Sebagai Pengendali Lift Empat Lantai,” J. Ilm. SEMESTA Tek., vol. 14, no. 2, pp. 160– 165, 2011.

[9] ISWANTO, A. JAMAL, and F. SETIADY, “Implementasi Telepon Seluler sebagai

Kendali Lampu Jarak Jauh,” J. Ilm. Semesta Tek., vol. 14, no. 1, pp. 81–85, 2011. [10] ISWANTO and H. MUHAMMAD, “WEATHER MONITORING STATION WITH

REMOTE RADIO FREQUENCY WIRELESS COMMUNICATIONS,” Int. J.

Embed. Syst. Appl., vol. 2, no. 3, pp. 99–106, 2012.

[11] S. Suripto and Iswanto, “DESAIN AND IMPLEMENTATION OF FM RADIO

WAVES AS DISTANCE MEASURING AC VOLTAGE,” Int. J. Mob. Netw.

Commun. Telemat., vol. 2, no. 5, pp. 13–24, 2012.

[12] I. Iswanto and R. D. Setiawan, “Power Saver with PIR Sensor,” J. Control Instrum., vol. 4, no. 3, pp. 26–34, 2013.

[13] A. Wahyudianto, Iswanto, and A. N. N. Chamim, “ALAT PENGONTROL LAMPU

MENGGUNAKAN REMOTE TV UNIVERSAL,” in SEMINAR NASIONAL ke 8

Tahun 2013, 2013, pp. 112–116.

[14] R. an T. A. Sadad, Iswanto, R. I. F. An, and T. A. S. Sadad, “Remote Measurement

System Ground Shift with GSM,” Int. J. Mob. Netw. Commun. Telemat. ( IJMNCT), vol. 3, no. 3, pp. 65–72, 2013.


(52)

48

Mob. Netw. Commun. Telemat. ( IJMNCT), vol. 3, no. 3, pp. 1–8, 2013.

[16] N. M. Raharja, Iswanto, M. Faris, and A. I. Cahyadi, “Hover position quadrotor

control with fuzzy logic,” in 2014 The 1st International Conference on Information Technology, Computer, and Electrical Engineering, 2014, pp. 89–92.

[17] N. M. Raharja, Iswanto, O. Wahyunggoro, and A. I. Cahyadi, “Altitude control for

quadrotor with mamdani fuzzy model,” in 2015 International Conference on Science in Information Technology (ICSITech), 2015, pp. 309–314.

[18] Iswanto and N. M. Raharja, Mikrokontroller: Teori dan Praktik Atmega 16 dengan Bahasa C. Penerbit Deepublish, 2015.

[19] L. Hidayat, Iswanto, and H. Muhammad, “Perancangan Robot Pemadam Api Divisi

Senior Berkaki,” J. Semesta Tek., vol. 14, no. 2, pp. 112–116, 2015.

[20] I. Iswanto, O. Wahyunggoro, and A. Imam Cahyadi, “Path Planning Based on Fuzzy

Decision Trees and Potential Field,” Int. J. Electr. Comput. Eng., vol. 6, no. 1, p. 212, 2016.

[21] I. Iswanto, O. Wahyunggoro, and A. I. Cahyadi, “Quadrotor Path Planning Based On Modified Fuzzy Cell Decomposition Algorithm,” TELKOMNIKA, vol. 14, no. 2, pp. 655–664, 2016.

[22] I. Iswanto, O. Wahyunggoro, and A. I. Cahyadi, “3D Object Modeling Using Data

Fusion from Laser Sensor on Quadrotor,” in ADVANCES OF SCIENCE AND

TECHNOLOGY FOR SOCIETY: Proceedings of the 1st International Conference on Science and Technology 2015 (ICST-2015), 2016, pp. 170001–1 – 170001–7.

[23] T. P. Tunggal, A. Latif, and Iswanto, “Low-cost portable heart rate monitoring based

on photoplethysmography and decision tree,” in ADVANCES OF SCIENCE AND TECHNOLOGY FOR SOCIETY: Proceedings of the 1st International Conference on Science and Technology 2015 (ICST-2015), 2016, p. 090004.

[24] A. N. N. Chamim, D. Ahmadi, and Iswanto, “Atmega16 Implementation As Indicators

Of Maximum Speed,” Int. J. Appl. Eng. Res. ISSN, vol. 11, no. 15, pp. 8432–8435, 2016.


(1)

43

//--- //SUB RUTIN BAUDRATE

//---void InisialisasiUSART (unsigned long int baud_rate) {

UBRR = (osilator/(16*baud_rate))-1; UBRRL = UBRR;

UBRRH = UBRR>>8; UCSRB = 0x18; UCSRC = 0x86; }


(2)

44 BAB VIII PWM(OK)

8.1. PENDAHULUAN

PWM (Pulse Width Modulation) dapat digunakan untuk mengatur kecepatan motor, yaitu dengan cara mengatur lebar pulsa (waktu ON) dari tegangan sumbernya (tegangan DC). Perbandingan antara waktu ON dan waktu OFF disebut duty cycle (siklus kerja). Semakin besar siklus kerjanya, akan semakin besar pula keluaran yang dihasilkan, sehingga kecepatan motor akan semakin besar. Pembangkitan sinyal PWM dengan mikrokontroler memiliki beberapa keuntungan, seperti teknik pemrograman yang sederhana, dan rangkaian listrik menjadi sederhana.

Mikrokontroler AVR ATMEGA16 dapat digunakan sebagai pembangkit gelombang PWM. Mikrokontroler AVR ATMEGA16 mempunyai PWM yang telah terintegrasi dalam chip. Keluaran dari PWM tersebut terdapat pada pin 15 (OC1). Untuk menjalankan program PWM, diperlukan 3 unit register timer, yaitu:

a. Timer/Counter Control Register (TCCR), untuk menentukan mode PWM.

b. Timer/Counter Register (TCNT), digunakan untuk menentukan modulasi frekuensinya.

c. Output Compare Register (OCR), untuk menentukan nilai siklus kerjanya.

Dalam mikrokontroler ATMEGA16, terdapat beberapa mode PWM. Mode PWM yang akan dibahas adalah mode Fast P WM, karena dalam perancangan sistem robot ini menggunakan mode Fast P WM. Pada mode Fast P WM, semakin besar nilai OCR, maka akan semakin besar pula siklus kerja yang dihasilkan. Keluaran PWM akan berlogika tinggi setelah nilai TOP tercapai sampai nilai OCR tercapai dan kemudian akan berlogika rendah sampai nilai TOP tercapai kembali. Prinsip kerja dari Fast PWM dapat dilihat pada Gambar 10.1.

nilai counter nilai OCR TOP

Keluaran

Gambar 8.1 Prinsip Kerja Mode Fast PWM


(3)

45 100%

1 TOPx OCR D

 ...10.1 Untuk menentukan frekuensi PWM dihitung dengan rumus:

) 1 ( TOP N f f clock PWM 

 ...10.2 Sedangkan untuk menentukan resolusi PWM digunakan rumus:

...10.3

keterangan:

N adalah faktor prescaler (1, 8, 64, 256, atau 1024), dan TOP adalah nilai tertinggi dari pengaturan counter.

8.2. RANGKAIAN PWM MIKROKONTROLLER

Rangkaian minimum untuk pwm melalui Port D.4 dan Port D.5 ditunjukan pada Gambar 10.2. Rangkaian tersebut menggunakan diver motor dc yaitu transistor. Rangkaian driver tersebut akan di hubungkan dengan pin D.4 dan pin D.5.

Gambar 8.2 Hasil pemasangan komponen rangkaian minimum untuk pwm

U1 ATMEGA16 3 12 13 2 16 17 18 19 11 10 8 7 6 36 35 34 33 32 37 1 4 5 9 14 15 20 21 40 39 38 31 30 29 28 27 26 25 24 23 22 PB2(INT2/AIN0) XTAL2 XTAL1 PB1(T1) PD2(INT0) PD3(INT1) PD4(OC1B) PD5(OC1A) GND VCC PB7[SCK) PB6[MISO) PB5(MOSI) PA4(ADC4) PA5(ADC5) PA6(ADC6) PA7(ADC7) AREF PA3(ADC3) PB0(XCK/T0) PB3(OC0/AIN1) PB4(SS) RESET PD0(RXD) PD1(TXD) PD6(ICP) PD7(OC2) PA0(ADC0) PA1(ADC1) PA2(ADC2) AGND AVCC PC7(TOSC2) PC6(TOSC1) PC5 PC4 PC3 PC2 PC1(SDA) PC0(SCL) pinb.7 12V2 MG2 MOTOR DC 1 2 RST 470 Q2 TI9013 C3 100nF1 pinb.6 C2 22pF 5V TI9013 EN2 470 EN2 EN2 5V MG2 MOTOR DC 1 2 pinb.5 SW2 1 2 EN2 TIP3055 D2 DIODE EN2 EN2 D1 DIODE C1 22pF RST EN2 12V2 X1 EN2 TIP3055 EN2 JISP 1 2 3 4 5 EN2 R1 5V pinb.6 pinb.7 pinb.5 2 log ) 1 log(   TOP RPWM


(4)

46

8.3. PEMROGRAMAN PWM MIKROKONTROLLER

Setelah rangkaian dibuat dan dihubungkan dengan port mikrokontroller, maka sekarang saatnya Anda membuat program yang digunakan untuk mengatur putaran motor dc.

Program sebagai berikut ini

//--- // Program PWM

// DEKLARASI HEADER

//--- #include <stdio.h>

#include <mega16.h> #include <delay.h>

//--- //DEKLARASI SUB RUTIN

//--- void InisialisasiPWM();

//--- //DEKLARASI VARIABEL

//--- int data1;

int data2;

//--- //RUTIN UTAMA

//--- void main (void)

{

InisialisasiPWM(); while(1)

{ data1 = 50; data2 = 1024; OCR1A=data1; OCR1B=data2; TIFR=0; }

}

//--- //SUB RUTIN INISIALISASI PWM

//--- void InisialisasiPWM()

{

DDRD=0xff; TCCR1A=0xa3; TCCR1B=0x0b; TCNT1=0x0000; }


(5)

47

DAFTAR PUSTAKA

[1] Iswanto, Design dan Implementasi Sistem Embedded Mikrokontroler ATMEGA8535 dengan Bahasa Basic. Yogyakarta: Gava Media, 2008.

[2] I. Iswanto, N. M. Raharja, and A. Subardono, “Sistem Peringatan Dini Tanah Longsor Berbasis Atmega8535,” in Seminar Nasional Informatika 2009 (semnasIF 2009), 2009, pp. 53–57.

[3] R. T. A. Sadad and Iswanto, “Implementasi Mikrokontroler Sebagai Pengendali Kapasitor Untuk Perbaikan Faktor Daya Otomatis pada Jaringan Listrik,” SEMESTA Tek., vol. 13, no. 2, pp. 181–192, 2010.

[4] I. Iswanto and N. M. Raharja, “Sistem monitoring dan peringatan dini tanah longsor,” in Simposium Nasional RAPI IX 2010, 2010, pp. 54–62.

[5] A. N. N. Chamim and Iswanto, “Implementasi Mikrokontroler Untuk Pengendalian Lampu Dengan Sms,” in Prosending Retii 6., 2011.

[6] I. Ambar Tri Utomo, Ramadani Syahputra, “Implementasi Mikrokontroller Sebagai Pengukur Suhu Delapan Ruangan,” Pengukur Suhu, vol. 4, no. Pengukur Suhu Delapan Ruangan, pp. 153–159, 2011.

[7] R. T. A. Sadad and Iswanto, “Peranan Teknologi Solar Cell dalam Peningkatan Daya Saing Usaha Kecil dan Menengah,” SEMESTA Tek., vol. 14, no. 1, pp. 58–63, 2011. [8] R. T. A. SADAD, ISWANTO, and J. A. SADAD, “Implementasi Mikrokontroler

Sebagai Pengendali Lift Empat Lantai,” J. Ilm. SEMESTA Tek., vol. 14, no. 2, pp. 160– 165, 2011.

[9] ISWANTO, A. JAMAL, and F. SETIADY, “Implementasi Telepon Seluler sebagai Kendali Lampu Jarak Jauh,” J. Ilm. Semesta Tek., vol. 14, no. 1, pp. 81–85, 2011. [10] ISWANTO and H. MUHAMMAD, “WEATHER MONITORING STATION WITH

REMOTE RADIO FREQUENCY WIRELESS COMMUNICATIONS,” Int. J. Embed. Syst. Appl., vol. 2, no. 3, pp. 99–106, 2012.

[11] S. Suripto and Iswanto, “DESAIN AND IMPLEMENTATION OF FM RADIO WAVES AS DISTANCE MEASURING AC VOLTAGE,” Int. J. Mob. Netw. Commun. Telemat., vol. 2, no. 5, pp. 13–24, 2012.

[12] I. Iswanto and R. D. Setiawan, “Power Saver with PIR Sensor,” J. Control Instrum., vol. 4, no. 3, pp. 26–34, 2013.

[13] A. Wahyudianto, Iswanto, and A. N. N. Chamim, “ALAT PENGONTROL LAMPU MENGGUNAKAN REMOTE TV UNIVERSAL,” in SEMINAR NASIONAL ke 8 Tahun 2013, 2013, pp. 112–116.

[14] R. an T. A. Sadad, Iswanto, R. I. F. An, and T. A. S. Sadad, “Remote Measurement System Ground Shift with GSM,” Int. J. Mob. Netw. Commun. Telemat. ( IJMNCT), vol. 3, no. 3, pp. 65–72, 2013.


(6)

48

Mob. Netw. Commun. Telemat. ( IJMNCT), vol. 3, no. 3, pp. 1–8, 2013.

[16] N. M. Raharja, Iswanto, M. Faris, and A. I. Cahyadi, “Hover position quadrotor control with fuzzy logic,” in 2014 The 1st International Conference on Information Technology, Computer, and Electrical Engineering, 2014, pp. 89–92.

[17] N. M. Raharja, Iswanto, O. Wahyunggoro, and A. I. Cahyadi, “Altitude control for quadrotor with mamdani fuzzy model,” in 2015 International Conference on Science in Information Technology (ICSITech), 2015, pp. 309–314.

[18] Iswanto and N. M. Raharja, Mikrokontroller: Teori dan Praktik Atmega 16 dengan Bahasa C. Penerbit Deepublish, 2015.

[19] L. Hidayat, Iswanto, and H. Muhammad, “Perancangan Robot Pemadam Api Divisi Senior Berkaki,” J. Semesta Tek., vol. 14, no. 2, pp. 112–116, 2015.

[20] I. Iswanto, O. Wahyunggoro, and A. Imam Cahyadi, “Path Planning Based on Fuzzy Decision Trees and Potential Field,” Int. J. Electr. Comput. Eng., vol. 6, no. 1, p. 212, 2016.

[21] I. Iswanto, O. Wahyunggoro, and A. I. Cahyadi, “Quadrotor Path Planning Based On Modified Fuzzy Cell Decomposition Algorithm,” TELKOMNIKA, vol. 14, no. 2, pp. 655–664, 2016.

[22] I. Iswanto, O. Wahyunggoro, and A. I. Cahyadi, “3D Object Modeling Using Data Fusion from Laser Sensor on Quadrotor,” in ADVANCES OF SCIENCE AND

TECHNOLOGY FOR SOCIETY: Proceedings of the 1st International Conference on Science and Technology 2015 (ICST-2015), 2016, pp. 170001–1 – 170001–7.

[23] T. P. Tunggal, A. Latif, and Iswanto, “Low-cost portable heart rate monitoring based on photoplethysmography and decision tree,” in ADVANCES OF SCIENCE AND TECHNOLOGY FOR SOCIETY: Proceedings of the 1st International Conference on Science and Technology 2015 (ICST-2015), 2016, p. 090004.

[24] A. N. N. Chamim, D. Ahmadi, and Iswanto, “Atmega16 Implementation As Indicators Of Maximum Speed,” Int. J. Appl. Eng. Res. ISSN, vol. 11, no. 15, pp. 8432–8435, 2016.