inti modul

Embed Size (px)

Citation preview

  • 8/6/2019 inti modul

    1/70

    1

    KEGIATAN BELAJAR 1

    MIKROKONTROLER ATmega 8535

    Lembar informasi

    Mikrokontroller adalah rangkaian terintregrasi (Integrated Circuit-IC) yang telah

    mengandung secara lengkap berbagai komponen pembentuk sebuah

    komputer.Artinya bahwa didalam sebuah IC Mikrokontroler sebetulnya sudah

    terdapat kebutuhan minimal agar Mikrokontroler dapat berkerja, yaitu berupa

    mikroprosesor,ROM,RAM,I/O, dan clock seperti halnya yang dimiliki oleh sebuah

    komputer.Mikrokontroler AVR memiliki arsitektur RISC 8 bit, dimana semua instruksi

    dikemas dalam kode 16-bit (16-bits word) dan sebagian besar instruksi

    dieksekusi dalam 1 (satu) siklus clock , berbeda dengan instruksi MCS51 yang

    membutuhkan 12 Siklus clock.tentu saja itu terjadi karena kedua jenis

    mikrokontroler tersebut memiliki arsitektur yang berbeda.AVR Menggunakan

    RISC(reduced instruction set computing), sedangkan MCS51 berteknologi

    CISC(complex instruction set computing).

    1.1 Macam-macam Mikrokontroler

    Ada banyak jenis mikrokontroler yang masing-masing memiliki seri sendirisendiri, diantaranya:

    1) Keluarga MCS-51 (Intel)

    2) Keluarga AT89 (Atmel, arsitektur Intel 8051)

    3) Keluarga AT90, ATtiny, ATMega ( Atmel, arsitektur AVR )

    4) Keluarga MC68HC11 ( Motorola )

    5) Keluarga PIC 8 ( Microchip )

    6) Keluarga Z80 ( Zilog )

    Yang membedakan kemungkinan hanya dalam hal kemasana fisik misalnya

    jumlah pin dan fitur-fiturnya seperti ukuran kapasitas memori program dan

    memori data, jumlah timer, jumlah interupsi, dan lain-lain.

  • 8/6/2019 inti modul

    2/70

    2

    1.2 Mikrokontroler Keluarga AVR

    Secara histories mikrokontroller seri AVR pertama kali diperkenalkan ke pasaran

    sekitar tahun 1997 oleh perusahaan Atmel, yaitu sebuah perusahaan yang

    sangat terkenal dengan produk microcontroller seri AT89S51/52-nya yang

    sampai sekarang masih banyak digunakan di lapangan. Tidak seperti

    mikrokontroller seri AT89S51/52 yang masih mempertahankan arsitektur dan set

    instruksi dasar mikrokontroller 8031 dari perusahaan INTEL.

    Berdasarkan arsitekturnya, AVR merupakan mikrokontroller RISC (Reduce

    Instruction Set Computer) dengan lebar bus data 8 bit. Berbeda dengan sistem

    AT89S51/52 yang memiliki frekuensi kerja seperduabelas kali frekuensi oscilator,frekuensi kerja mikrokontroller AVR ini pada dasarnya sama dengan frekuensi

    oscilator, sehingga hal tersebut menyebabkan kecepatan kerja AVR untuk

    frekuensi oscilator yang sama, akan dua belas kali lebih cepat dibandingkan

    dengan mikrokontroller keluarga AT89S51/52. Pada modul ini akan di bahas

    tentang Mikrokontroler ATMega 8535.

    1.3 Karakteristik ATMega 8535

    Prosesor yang digunakan sebagai pengendali utama robot adalah 8 bit

    mikrokontroler dari keluarga AVR, yaitu ATmega8535. Alasan penggunaan

    mikrokontroler ini adalah karena harga yang relatif murah, mudah diperoleh,

    kemudahan dalam pemrograman, dan fitur-fitur menarik yang dimilikinya.

    Beberapa karakteristik dan fitur yang dimiliki mikrokontroler ATMega8535 antara

    lain:

    1) Resolusi data 8 bit.

    2) RISC arsitektur.

    3) 8 K byte In System Programmable Flash.

    4) 512 Bytes EEPROM.5) 512 Bytes SRAM internal.

    6) 8 channel, 10 bit resolusi ADC.

    7) 4 channel PWM.

    8) 2 timer/counter 8 bit.

    9) 1 timer/counter 16 bit.

  • 8/6/2019 inti modul

    3/70

    3

    10) Osilator internal yang dikalibrasi.

    11) Internal dan eksternal sumber interrupt.

    12) 6 mode sleep.

    ATMega8535 memiliki bagian struktur bagian sebagai berikut :

    1) Saluran I/O 32 buah, yaitu Port A, Port B, Port C, dan Port D.

    2) Tiga buah Timer/Counter dengan kemampuan perbandingan.

    3) CPU yang terdiri atas 32 buah register.

    4) Memori Flash sebesar 8 kb dengan kemampuan Read While Write.

    5) Unit interupsi internal dan eksternal.

    6) Port antarmuka SPI

    7) EEPROM sebesar 512 byte yang dapat diprogram saat operasi.

    8) Antarmuka komparator analog.

    9) Port Usart untuk komunikasi serial

    1.4 Organisasi Memori

    Mikrokontroler ATMega8535 memiliki 3 jenis memori yaitu Memori Program,

    Memori Data dan Memori EEPROM.

    1.4.1 Memori Program

    ATMega8535 memiliki kapasitas memori program sebesar 8 Kbyte kapasitas

    memori flash yang dimiliki bervariasi dari 1K sampai 128 KB. Secara teknis,

    memori jenis ini dapat diprogram melalui saluran antarmuka yang dikenal dengan

    nama Serial Peripheral Interface (SPI) yang terdapat pada setiap seri AVR

    tersebut. Dengan menggunakan perangkat lunak programmer(downloader) yang

    tepat, pengisian memori Flash dengan menggunakan saluran SPI ini dapat

    dilakukan bahkan ketika chip AVR telah terpasang pada sistem akhir (end

    system), sehingga dengan demikian pemrogramannya sangat fleksibel dan tidak

    merepotkan pengguna (Secara praktis metoda ini dikenal dengan istilah ISP-In

    System Programming sedangkan perangkat lunaknya dinamakan In System

    Programmer).

  • 8/6/2019 inti modul

    4/70

    4

    Boot Flash Section

    Aplication Flash Section

    $FFF

    $000

    Gambar 1.1

    1.4.2 Memori Data

    32 Registers

    64 I/O Registers

    Inte rna l SRAM512 x 8

    $000 - $001F

    $020 - $005F

    $0060

    $025F

    Gambar 1.2 SRAM (Static Random Access memory).

    AVR ATmega 8535 memiliki memori data yang terbagi menjadi 3 bagian, yaitu 3

    register umum, 64 buah register I/O, dan 512 SRAM internal.re

    1.4.3 RAM

    RAM dalam hal ini berperan untuk menyimpan data yang sifatnya sementara,

    yang biasanya diperlukan pada saat proses manimpulasi data ( penjumlahan,

    pengurangan, perkalian, pembagian, dan transfer data ).

  • 8/6/2019 inti modul

    5/70

    5

    1.4.4 SRAM

    SRAM digunakan untuk menyimpan data variabel yang dimungkinkan berubah

    setiap saatnya.

    1.4.5 ATMega8535 memiliki kapasitas memori data sebesar 608 Byte yang

    terbagi menjadi 3 bagian yaitu :

    Serba guna (32 byte), untuk register serba guna R0 R31

    Register I/O (64 byte), untuk mengatur fasilitas seperti timer/counter,

    interupsi, ADC, USART,SPI,EEPROM dan port I/O seperti Port A, Port B,

    Port C dan Port D

    SRAM (512 ), untuk memori SRAM

    1.4.6 Memori EEPROM

    EEPROM umumnya digunakan untuk menyimpan data-data program yang

    bersifat permanen.

    ATMega8535 memiliki EEPROM sebesar 512 Byte. Memori EEPROM ini

    hanya dapat di akses dengan menggunakan register-register I/O yaituregister EEPROM address (EEARH-EEARL), register EEPROM Data

    (EEDR) dan register EEPROM Control (EECR).

    $ 0 2 0 0

    $ 0 0 0 0

    E EP R O M

    Gambar 1.3 EEPROM (Electrically Erasable Programmable Read Only Memory)

  • 8/6/2019 inti modul

    6/70

    6

    1.4.7 Perbandingan Jumlah Memori

    Microcontroller AVR Memori (byte)

    Jenis ICFlash( Kb )

    EPROM(Kb )

    SRAM(Byte )

    pin 1 2K 128 128

    C (AVR) pin 1 8K 512 1 K

    pin 1 128 K 4 K 4 K

    1.4.8 Sistem Minimum ATMega8535

    Gambar 1.4 Sistem Minimum ATMega8535

  • 8/6/2019 inti modul

    7/70

    7

    1.4.9 Deskripsi Pin

    Gambar 1.5 Deskripsi Pin ATMega8535

    PIN KETERANGAN

    1 - 8

    Port B, merupakan Port I/O 8-bit dua arah (bi-directional)

    dengan resistor pull-up internal, selain sebagai Port I/O 8-bit

    Port B juga dapat difungsikan secara individu sebagai berikut

    :

    PB7 : SCK ( SPI Bus Serial Clock )

    PB6 : MISO (SPI Bus Master Input/Slave Output)

    PB5 : MOSI ( SPI Bus Master Output/Slave Input )

    PB4 : SS ( SPI slave Select Input )

    PB3 : AIN 1 ( Analog Comparator Negatif Input )

    OC0 ( Output Compare Timer/Counter 0 )

    PB2 : AIN 0 ( Analog Comparator Positif Input )

    INT2 ( External Interupt 2 Input )

    PB1 : T1 ( timer / Counter 1 External Counter Input )

    PB0 : To ( Timer/Counter 0 External Counter Input )

    XCK ( USART External Clock Input/Output )

    9

    RESET, merupakan pin reset yang akan bekerja bila pulsa

    rendah (aktif low ) selama minimal 1,5 us

    10 VCC, Catu daya digital

    11 GND, Ground untuk catu daya digital

    12 XTAL2, merupakan output dari penguat osilator pembalik

    13 XTAL1, merupakan input ke penguat osilator pembalik dan

  • 8/6/2019 inti modul

    8/70

    8

    input ke internal clock

    14-21

    Port D, merupakan port I/O 8-bit dua arah ( bi-directional )

    dengan resistor pull-up internal, selain sebagai Port I/O 8-bit

    Port D juga dapat difungsikan secara individu sebagai berikut

    :

    PD7 : OC2 ( Output Compare Timer/Counter 2 )

    PD6 : ICP ( Timer/Counter 1 Input Capture )

    PD5 : OC1A ( Output Compare A Timer/Compare A

    Timer/Counter 1 )

    PD4 : OC1B ( Output Compare B Timer/Compare A

    Timer/Counter 1 )

    PD3 : INT1 ( External Interupt 1 Input )

    PD2 : INT0 ( External Interupt 0 Input )

    PD1 : TXD( USART transmit )

    PD0 : RXD ( USART receive )

    22-29

    Port C, merupakan port I/O 8-bit dua arah ( bi-directional

    )dengan resistor pull-up internal, selain sebagai Port I/O 8-bit

    Port C juga dapat difungsikan secara individu sebagai berikut

    :

    PC7 : TOSC2 ( Timer Oscilator 2 )

    PC6 : TOSC1 ( Timer Oscialtor 1 )

    PC1 : SDA ( Serial Data Input/Output, PC )

    PC0 : SCL ( Serial Clock, PC )

    30AVCC, merupakan catu daya yang digunakan untuk

    memasukan analog ADC yang terhubung ke Port A

    31 GND, Ground untuk catu daya analog

    32 AREF, merupakan tegangan referensi analog untuk ADC

    33 40

    Port A, merupakan port I/O 8-bit dua arah dengan resistor

    pull-up internal, selain sebagai Port I/O 8-bit Port B juga

    dapat berfungsi sebagai masukan 8 channel ADC

  • 8/6/2019 inti modul

    9/70

    9

    KEGIATAN BELAJAR 2

    DASAR PEMROGRAMAN BAHASA C

    2.1 Sejarah Bahasa C

    B ah as a C m e ru p a ka n p e rk e m b an g a n d ari b a h a s a B C P L y a n g

    d ik e m b a n g k a n o l e h M a r ti n R ic h a r d s p a d a ta h u n 1 9 6 7 . S e l a n ju t n y a b a h a s a

    in i m e m b e r ik a n id e ke pa d a K en T ho m p s on y a n g k e m u d ia n

    m e ng e m b a ng k an b ah a sa y an g d is eb u t b ah as a B p a da ta h un 1 9 70 .P e r k e m b a n g a n s e la n ju t ny a d a r i b a h a s a B a d a la h b a h a s a C o le h D e n n i s

    R ic th ie s ek ita r ta h un 1 9 7 0-a n d i B e ll T e le ph on e L ab o ra to rie s In c.

    (s ek ara n g a da la h A T & T B e ll L a bo ra to rie s) . B a ha sa C p er ta m a k ali

    d ig u n ak a n d i c o m p u te r D i git al E q u ip m e n t C o r po ra tio n P D P - 1 1 y a n g

    m e ng gu na ka n s ys te m op era si U N IX . H in gg a s aa t in i p en gg un aa n

    b ah as a C te la h m e ra ta d i s elu ru h d un ia . H a m p ir s em u a p e rg u ru a n

    tin gg i d i d un ia m e nja dik an b ah as a C s eb ag ai s ala h s atu m a ta

    k u li ah w a j ib . S e l a in it u, b a n y a k b a h a s a p e m r o g ra m a n p o p u le r s e p e r ti

    P H P d a n J a v a m e n g g u n a ka n s in ta k s d a s a r y a n g m i rip b a h a s a C . O le h

    karen a i tu , k i ta juga s ang at per lu m em pe la ja r iny a .

    2.2 Kekurangan dan Kelebihan Bahasa C

    Kelebihan Bahasa C

    1) Ba has a C te rsed ia ham p i r d i sem ua jen is com puter .

    2) K od e baha sa C s i fa tnya po r tab le dan f leks ibe l un tuk sem ua jen is P C .

    3) B ah asa C ha nya m enye d iakan 32 ka ta kunc i .

    4) P roses exec u tab le p rog ram bahas a C leb ih cepa t .

    5) D u k u n g a n p u s t a k a y a n g b a n y a k .

    6) C ada lah baha sa yan g te rs t ruk tu r.

    7) B ah asa C te rm asuk baha sa t ingka t m eneng ah

  • 8/6/2019 inti modul

    10/70

    10

    Kekurangan Bahasa C

    1) B any aknya O pe ra to r se r t a f leks ib i li tas pen u l isan p rog ram kadang -kadan g

    m em b ing ung kan pem aka i .

    2) B ag i pem u la pa da um um nya akan kesu l i tan m engg unaka n p o in te r .

    2.3 P e n g e n a l

    P en gena l ( iden t if ie r ) m e rupaka n nam a y ang d ide f in i s i kan o leh p rog ram un tuk

    m enun jukan iden t i t as da r i sebu ah k o ns tan ta , va r iabe l ,f ungs i dan labe l a tau t ipe

    da ta khusu s .pem be r ian nam a sebu ah pe ngen a l dapa t d i ten tukan be bas se sua i

    yang d i ing inkan p rog ram te tap i ha rus m em enuh i a tu ran be r iku t :

    Karakter pertama tidak boleh menggunakan angka.

    Karakter kedua dapat berupa huruf,angka,atau garis bawah.

    Tidak boleh menggunakan spasi.

    Bersifat case sensitif yaitu huruf kecil dan huruf besar dianggap berbeda.

    Contoh penamaan yang diperbolehkan :

    - Irfan2

    - irfan_dadi

    - _dadi_herlino

    Contoh penamaan yang tidak diperbolehkan :

    - 2dadi (tidak boleh diawali dengan angka)

    - Dadi+2 (tidak boleh menggunakan operator +)

    - Irfan dadi (tidak boleh menggunakan spasi)

    2.4 Tipe Data

    Tipe data merupakan bagian program yang paling penting karena tipe data

    mempengaruhi setiap instruksi yang akan dilaksanakan oleh computer. Misalnyasaja 5 dibagi 2 bisa saja menghasilkan hasil yang berbeda tergantung tipe

    datanya. Jika 5 dan 2 bertipe integer maka akan menghasilkan nilai 2, namun

    jika keduanya bertipe float maka akan menghasilkan nilai 2.5000000. Pemilihan

    tipe data yang tepat akan membuat proses operasi data menjadi lebih efisien dan

    efektif.

  • 8/6/2019 inti modul

    11/70

    11

    Dalam bahasa C terdapat lima tipe data dasar, yaitu :

    2.5 Konstanta Dan Variabel

    a. Konstanta

    Konstanta merupakan suatu nilai yang tidak dapat diubah selama proses

    program berlangsung. Konstanta nilainya selalu tetap. Konstanta harus

    didefinisikan terlebih dahulu di awal program. Konstanta dapat bernilai integer,

    pecahan, karakter dan string.

    b. Variable

    Variabel adalah suatu pengenal (identifier) yang digunakan untuk mewakili suatu

    nilai tertentu di dalam proses program. Berbeda dengan konstanta yang nilainya

    selalu tetap, nilai dari suatu variable bisa diubah-ubah sesuai kebutuhan. Nama

    dari suatu variable dapat ditentukan sendiri

    b.1 Variabel Global Dan Variabel Local

    Variabel global adalah variable yang dapat dikenali oleh semua fungsi yang ada

    dalam program sadangkan variable local adalah variable yang hanya dikenali

    oleh fungsi tertentu saja. Variable local hanya akan dibentuk/dialokasikan dalam

    memori untuk variable tersebut akan dibebaskan sehingga penggunaan variable

    tersebut akan dibebaskan sehingga penggunaan variable local lebih

    mengguntungkan dari sisi pemakaian memori.

    Contoh deklarasi variable global (dideklarasikan diluar fungsi)

    char data_a;

    int data_b;

    long data_c=13;

  • 8/6/2019 inti modul

    12/70

    12

    Contoh deklarasi variable local (dideklarasikan didalam fungsi)

    void main (void)

    {

    char data_a;int data_b;

    long data_c=13;

    }

    2.6 Komentar Program

    Komentar program hanya diperlukan untuk memudahkan pembacaan dan

    pemahaman suatu program (untuk keperluan dokumentasi program). Dengan

    kata lain, komentar program hanya merupakan keterangan atau penjelasan

    program. Untuk memberikan komentar atau penjelasan dalam bahasa C

    digunakan pembatas /* dan */ atau menggunakan tanda // untuk komentaryang hanya terdiri dari satu baris. Komentar program tidak akan ikut diproses

    dalam program (akan diabaikan).

    Contoh :

    // program PWM untuk mengatur kecepatan motor

    /*sedangkan yang ini adalah komentar yang digunakan lebih dari satu baris*/

    2.7 Pengarah Prosesor

    Pengarah prosesor digunakan untuk mendefinisikan prosesor yang digunakan,

    dalam hal ini adalah untuk mendefinisikan jenis mikrokontroler yang

    digunakan.dengan pengarahan prosesor ini maka pendeklarasian register-

    register dan penamaannya dilakukan pada file lain yang disisipkan dalam

    program utama dengan sintaks sebagai berikut.

    # include

    Contoh :

    # include

    2.8 Pernyataan

    Pernyataan adalah satu buah intruksi lengkap yang berdiri sendiri. Berikut adalah

    contoh sebuah pernyataan :

    PORTC = 0x0F:

    Pernyataan diatas merupakan sebuah interuksi untuk mengeluarkan data 0x0F

    ke Port C.

  • 8/6/2019 inti modul

    13/70

    13

    2.9 Operator Aritmatika

    Bahasa C menyediakan lima operator aritmatika, yaitu :

    Operator keterangan* Operator untuk operasi penjumlahan

    / Operator untuk operasi pembagian

    + Operator untuk operasi penambahan

    - Operator untuk operasi pengurangan

    % Operator untuk operasi sisa pembagian

    Catatan : operator % digunakan untuk mencari sisa pembagian antara duabilangan.Misalnya :

    9 % 2 = 1

    9 % 3 = 0

    2.10 Operator Pembanding

    Operator Hubungan digunakan untuk membandingkan hubungan antara dua

    buah operand (sebuah nilai atau variable. Operator hubungan dalam bahasa C

    2.11 Operator Logika

    Jika operator hubungan membandingkan hubungan antara dua buah operand,

    maka operator logika digunakan untuk membandingkan logika hasil dari

    operator-operator hubungan. Operator logika ada tiga macam, yaitu :

    Operator keterangan&& Operator untuk logika AND

    || Operator untuk logika OR

    ! Operator untuk logika NOT

    Contoh.

    If (( a == b ) && (c ! = d )) PORTC = 0XFF;

  • 8/6/2019 inti modul

    14/70

    14

    Pernyataan diatas terdiri dari dua kondisi yaitu a==b dan c!=d yang keduanya

    dihubungkan dengan logika &&(AND). Jika logika yang dihasilkan benar maka

    perintah PORTC = 0xFF akan dikerjakan dan jika salah maka tidak dikerjakan.

    2.12 Operator Bitwise

    Operator bitwise adalah operasi logiika yang berkerja pada level bit.hal iniberbeda dengan operator logika diatas dimana pada operator logikamenghasilkan benar atau salah (Boolean) sedangkan operator bit menghasilkandata biner.

    Operator keterangan

    >> Pergeseran bit kekanan

    & Bitwise AND

    ^ Bitwise XOR (exclusive OR)

    | Bitwise OR

    ~ Bitwise NOT

    2.13 Operator Penugasan

    Operator Penugasan (Assignment operator) dalam bahasa C berupa tanda sama

    dengan

    (=). Contoh :

    nilai = 80;

    A = x * y;

    Artinya : variable nilai diisi dengan 80 dan variable A diisi dengan hasil

    perkalian antara x dan y.

    2.14 Operator Aritmatika

    Bahasa C menyediakan lima operator aritmatika, yaitu :

    Operator keterangan

    * Untuk perkalian

    / Untuk Pembagian

    % Untuk sisa pembagian (modulus)

    + Untuk pertambahan- Untuk pengurangan

    Catatan : operator % digunakan untuk mencari sisa pembagian antara dua

    bilangan. Misalnya :

    9 % 2 = 1

    9 % 3 = 0

  • 8/6/2019 inti modul

    15/70

    15

    2.15 Operator Unary

    Operator Unary merupakan operator yang hanya membutuhkan satu operand

    saja. Dalam bahasa C terdapat beberapa operator unary, yaitu :

    Catatan Penting ! :

    Operator peningkatan ++ dan penurunan -- jika diletakkan sebelum atau sesudah

    operand terdapat perbedaan

    2.16 Fungsi pustaka

    Bahasa C mempunyai fungsi pustaka yang berada pada file-file tertentu dan

    sengaja disediakan untuk menangani berbagai hal dengan cara memanggil

    fungsi-fungsi yang telah dideklarasikan didalam file tersebut. Dalam banyak hal,

    pustaka,pustaka yang tersedia tidak berbentuk kode sumber melainkan dalam

    bentuk yang telah dikompilasi. Pada saat proses lingking,ditulis oleh pemrogram.

    Sintaks untuk menggunakan fungsi pustaka ini adalah sebagai berikut :

    #include

    Contoh :

    #include

    Beberapa fungsi yang telah disediakan oleh codevisian AVR antara lain adalah :

    Fungsi tipe karakter (ctype.h) Fungsi standar I/O (stdio.h)

    Fungsi matematika (math.h)

    Fungsi string (string.h)

    Fungsi konversi BCD (bcd.h)

    Fungsi konversi akses memori (mem.h)

  • 8/6/2019 inti modul

    16/70

    16

    Fungsi tunda (delay.h)

    Fungsi LCD (lcd.h)

    Fungsi I2C (I2C.H)

    Fungsi SPI (spi.h)

    Fungsi real time clock (RTC) (ds1302.h,ds1307.h)

    Fungsi sensor suhu LM75,DS1621 dll. (lm75.h, ds1621.h)

    2.17 Struktur kondisi if.

    Struktur if dibentuk dari pernyataan if dan sering digunakan untuk menyeleksi

    suatu kondisi tunggal. Bila proses yang diseleksi terpenuhi atau bernilai benar,

    maka pernyataan yang ada di dalam blok if akan diproses dan dikerjakan. Bentukumum struktur kondisi if adalah :

    If (kondisi)

    {

    // blok pernyataan yang akan dikerjakan

    // jika kondisi if terpenuhi

    }

    Contoh :

    If (PINA>0x80)

    {

    dataku = PINA;

    PORTC=0xFF;

    }Pernyataan if diatas akan mengecek apakah data yang terbaca pada port A

    (PINA) nilainya lebih besar dari 0x80 atau tidak, jika ya maka variable dataku diisi

    dengan nilai PINA dan data 0xFF dikeluarkan ke port C.

    Apabila dalam blok pernyataan hanya terdapat satu pernyataan saja maka tanda

    { dan } dapat dihilangkan seperti contoh berikut :

    If (PINA>0x80) PORTC=0xFF;

    2.18 struktur kondisi if......else.

    Dalam struktur kondisi if....else minimal terdapat dua pernyataan. Jika kondisi

    yang diperiksa bernilai benar atau terpenuhi maka pernyataan pertama yang

    dilaksanakan dan jika kondisi yang diperiksa bernilai salah maka pernyataan

    yang kedua yang dilaksanakan. Bentuk umumnya adalah sebagai berikut :

    if(kondisi)

  • 8/6/2019 inti modul

    17/70

    17

    pernyataan-1

    else

    pernyataan-2Contoh Program :

    If (kondisi)

    {

    // blok pernyataan yang akan dikerjakan

    // jika kondisi if terpenuhi

    }

    Else

    }

    // blok pernyataan lain yang akan dikerjakan

    // jika kondisi if terpenuhi

    }

    Contoh :

    If (PINA>0x80)

    {

    Dataku = PINA;

    PORTC = 0xFF;

    }

    else

    {

    Dataku = ~PINA;

    PORTC=0x00;}

    Pernyataan if ..else akan mengecek apakah data yang terbaca pada Port A

    (PINA) nilainya lebih dari 0x80 atau tidak, jika ya maka variabel dataku diisi

    dengan nilai PINA dan data 0xFF dikeluarkan ke port C tetapi jika tidak variabel

    dataku diisi dengan nilai komplemen dari PINA (~PINA) dan data 0x00

    dikeluarkan ke port C.

    2.19 Pernyataan If Bersarang

    Pernyataan if bersarang (nested if) adalah pernyataan if maupun if...else dimana

    didalam blok pernyataan yang akan dikerjakan terdapat pernyataan if atau if else

    lagi.contoh bentuk pernyataan if bersarang 2 tingkat adalah sebagai berikut :

    If (kondisi_1){If (kondisi_2){// blok pernyataan_1 yang akan dikerjakan// jika kondisi_1 dan kondisi_2 terpenuhi}

  • 8/6/2019 inti modul

    18/70

    18

    }Else{

    If (kondisi_3){// blok pernyataan_2 yang akan dikerjakan// jika kondisi_1 dan kondisi_3 terpenuhi}}

    2.20 Pernyataan Switch

    Pernyatan switch digunakan untuk melakukan pengambilan keputusan terhadap

    banyak kemungkinan. Bentuk pernyataan switch adalah sebagai berikut :

    switch (ekspresi)

    {

    case nilai_1 : pernyataan_1;break;

    case nilai_2 : pernyataan_2;break;

    case nilai_3 : pernyataan_3;break;

    .................

    default : pernyataan_default;break;

    }

    Pada pernyataan switch, masing-masing pernyataan (pernyataan_1 sampai

    dengan pernyataan_default)dapat berupa satu atau beberapa perintah dan tidak

    perlu berupa blok pernyataan.pernyataan_1 akan dikerjakan jika eksperesi

    bernilai sama dengan nilai_1. pernyataan_2 akan dikerjakan jika eksperesi

    bernilai sama dengan nilai_2. pernyataan_3 akan dikerjakan jika eksperesi

    bernilai sama dengan nilai_3 dan seterusnya. Default bersifat opsional artinya

    boleh ada boleh tidak.

    Contoh :

    switch (ekspresi)

    {

    case 0xFE : PORTD=0x00;break;

    case 0xFD : PORTC=0xFF;break;

    }

    Pernyataan diatas berarti membaca port A,kemudian datanya (PINA) akan

    dicocokan dengan nilai case. Jika PINA bernilai 0xFE Maka data 0x00 akan

    dikeluarkan ke PORTC kemudian program keluar dari blok pernyataan switch

    tetapi jika PINA bernilai 0xFD Maka data 0xFF Akan dikeluarkan ke port C

    kemudian program keluar dari pernyataan switch.

  • 8/6/2019 inti modul

    19/70

    19

    2.21 Pernyataan While

    Pernyataan while digunakan untuk pengulangan sebuah pernyataan atau blok

    pernyataan secara terus menerus selama kondisi tertentu masih terpenuhi.Bentuk pernyataan while adalah sebagai berikut :

    while (kondisi)

    {

    //sebuah pernyataan atau blok pernyataan

    }

    Jika pernyataan yang akan diulang hanya berupa sebuah pernyataan saja maka

    tanda { dan } bisa dihilangkan.

    Contoh :

    Unsigned char a=0;

    ................

    While (a

  • 8/6/2019 inti modul

    20/70

    20

    Perubahanadalah pernyataan yang digunakan untuk melekukan perubahan nilai

    variable baik naik maupun turun setiap kali pengulangan dilakukan.

    Contoh :

    unsigned int a;

    for (a=1,a

  • 8/6/2019 inti modul

    21/70

    21

    DDRB=B

    DDRC=C

    DDRD=D

    }//fungsi utama

    Void main (void)

    {

    inisialisasi_port (0xFF, 0xF0, 0x0F, 0x00);

    }

  • 8/6/2019 inti modul

    22/70

    22

    KEGIATAN BELAJAR 3

    TOOL PENDUKUNG

    Lembar informasi

    Bab ini akan membahas tentang tool_tool yang diperlukan /digunakan dalam

    proses merancang sistem mikrokontroler,khususnya yang berupa software yaitu

    software kompiler dan software downloader/programer. Sebenarnya penggunaan

    software kompiler dan downloader ini terdapat banyak macam dan variasinya

    sehingga tidak mutlak harus sama dengan yang ada dalam modul ini,namun

    untuk memudahkan anda dalam belajar dan memahami pembahasan-

    pembahasan dalam buku ini maka penulis mnyarankan agar anda menggunakan

    tool yang sama seperti yang penulis gunakan.

    3.1 Code Vision AVR

    C o d e V i s io n A V R m e r u pa k a n s a la h s a tu s o ft w a re k o m p ile r y a n g k h u s u s

    d ig u n a a n u n tu k m i kr o ko n tr o le r k e lu a r g a A V R . S a l a h s a tu k e le b ih a n d a r i

    s oftw are C od e V is io n A V R a da la h te rs ed ia ny a fa silita s u ntu k

    m e n d o w n l o a d p r o g r a m k e m i k ro k o n t ro l e r y a n g t e la h t e ri n te g r a s i s e h i n g g a

    d e ng a n d e m ik ia n C o d e V i s io n A V R in i s e la in d a p at b e rf un g si s e b ag a i

    s o ftw are ko m p ile r ju g a d a p a t b e rfu n g s i s e b a g a i s o ftw are

    p rog ram e r/down load e r .

    Adapun menu-menu dalam Code Vision AVR adalah sebagai berikut:

    3.11 Menu File

    Gambar 3.1 Menu File

  • 8/6/2019 inti modul

    23/70

    23

    a. N e w, un tuk m em u la i p rog ram baru

    b. O p e n , un tu k m eng am b i l a tau m em bu ka prog ram

    c. S a v e , un tu k m eny im pan f i le /p rog ramd. S a v e a s , un tuk m eny im pan f i le /p rog ram

    e. S a v e a l l , u n t u k m e n y i m p a n s e l u ru h f il e /p r o g ra m y a n g b e r a d a d a l a m

    pro jec t seka l igus

    f. C lo s e, un tuk m enu tup p rog ram

    g. C l o s e P r o j e c t , un tuk m enu tup p r jec t bese r ta se lu ruh f il e - f il r e p rog ram

    di da lam nya

    h. C o n v e r t t o l ib r a r y , m eng kon vers i f ile p rog ram (* .c) m en jad i sebu ah f i le

    pus taka/ l ib rary ( * . lib )

    i. P r i n t , un tuk m ence tak p rog ram

    j. P a g e S e t u p , un tuk m enga tu r se t t inga ha lam an dan p r in te r

    k. E x i t , un tuk ke lua r da r i Code V is ion A V R

    3.2 Menu Edit

    Gambar 3.2 Menu Edit

    1. U n d o , un tuk m em bata lka n pe nge d i tan te rak h i r

    2. R e d o , un tuk k em ba l i ke pen ged i t an t e rakh i r yang t e lah d i und o

    3. C u t, un tuk m em o tong bag ian t e r ten tu d a r i p rog ram

  • 8/6/2019 inti modul

    24/70

    24

    4. C o p y , un tuk m endup l ikas i ba g ian p rog ram

    5. P a s t e , m ena m p i lkan f i le ya ng te lah d i cop y

    6. D e l e t e , un tuk m engh apus bag ian t e r t en tu da r i p rog ram7. S e le ct A l l , d ig un a ka n un tuk m e m i l i h se m ua t ek s

    8. P rin t S e le c t io n, d i g u n a k a n u n t u k m e n g a t u r p r i n t e r

    9. In d e n t B lo c k, d i g u n a k a n u n t u k m e m b u a t s a t u b l o k t e k s g e s e r k e

    ka na n (m as uk ke da la m )

    10. U n i n d e n t B l o c k , d i g u n a k a n u n t u k m e m b u a t s a t u b l o k t e k s g e s e r

    k e k i r i

    11. F in d , F in d N e x t d a n F in d In F i le s , m e r u p a k a n f a s i l i t a s u n t u k

    m e nc a r i ka ta a ta u f i l e

    12. R e p la c e, d i g u n a k a n u n t u k m e n u k a r s e b u a h k a t a d e n g a n k a t a l a i n

    3.3 Menu Project

    Gambar 3.3 Menu Project

    1. C h e c k S y n t a x , d i g u n a k a n u n t u k m e l a k u k a n p e n g e c e k a n a d a t id a k n y a

    kesa lahan p rog ram

    2. C o m pile, d ig u n a a n u n tu k m e n g k o m p il e p r og r a m . P r o s e s k o m p il e

    in i hanya m engha s i l kan f il e asem b le r sa ja ( * .asm )

    3. M a k e , d i g u n a k a n u n t u k m e n g k o m p i le s e k a l ig u s m e n g h a s i lk a n k o d e

    m e s i n p r o g r a m . P r o s e s m a k e i n i m e n g h a s i lk a n b e b e r a p a f il e a n t a ra

    la in f i le * .as m , * . lis t , * .ob j , * .hex , * . rom dan * .eep.

    4. S t o p C o m p i la t i o n , d igunaka n un tuk m enghe n t i kan p rose s ko m p i le

    5. N o t e s , d igunaka n un tuk m em be r i kan ca ta tan pada p ro jec t

    6. C o n f i g u r e s , d igunaka n un tuk m enga tu r p ro jec t

    F i l e s , u n tu k m e n a m b a h k a n f il e- fil e p r o gr a m k e d a la m p r o je c t a ta u

    m engha pus f il e - fi le p rog ram da r i p ro jec t

  • 8/6/2019 inti modul

    25/70

    25

    C C o m p i l e r , d igunakan un tuk m enga tu r kom p i le r

    7. C o d e G e n e ra t io n , d ig u na ka n u ntu k m e n en tu ka n s pe sif ik as i

    d a n fit ur y a n g d im i lik i o le h m ik r o ko n tr o le r 8. M e s s a g e s , d igunaka n un tuk m enga tu r t am p i l t idakn ya bebe rap a pe san

    pe r inga tan

    9. G l o b a l l y # d e f i n e , d igunaka n un tuk m ende k la ras ikan penge na l g loba l

    10. P a t h s , d i g u n a k a n u n t u k m e n e n t u k a n d i re k t o ri -d ir e k t o ri f il e p r o g r a m

    ( *. c ), f il e h e a d e r ( *. h ) d a n f il e p u s t a k a ( *. li b ) y a n g d i b u tu k a n d a l a m

    pro jec t

    1 1 . A f t e r M a k e , d i g u n a k a n u n t u k m e n g a t u r p r o s e s y a n g a k a n d i la k u k a n

    sete lah m ake

    3.4 Menu Tools

    Gambar 3.4 Menu Tools

    1. C o d e W i z a r d A V R , d i g u n a k a n u n t u k m e m b a n g k i tk a n k o d e p r o g r a m

    sec ara o tom a t is

    2. D e b b u g e r , d ig u n ak a n u n tu k p e ng e c ek a n lis tin g p ro g ra m d a la m

    a ss e m b le r. P ro gr am in i h an ya b is a d ija la n ka n jik a k ita s ud a h

    m e n de fin is ik a n t er le b ih d a h ulu p ro g ra m d e b bu g er b e se rta le ta k

    d i rektor inya m e la lu i m enu se tt in g d e b b u g e r

    3. C h i p P r o g r a m e r , d ig u n a ka n u n tu k m e n d ow n lo a d p ro g ra m y a n g

    te la h d ik o m p ile k e d a la m m ik ro k on tr ole r d e n ga n m e n gg u n ak a n

    h a r d w a r e t e rt e n tu y a n g t e la h d i d e fi n is i k a n o l e h C d e V i s io n A V R

    4. T e r m i n a l , d ig u n a k a n u n tu k m e m b u k a t er m in a l k o m u n ik a s i s e ri al

    U S A R T

    5. C o n f i g u r e , d ig u na k an u ntu k m e n am b a hk an a ta u m e ng h ap u s

    p ro gra m a plik as i la in ke da la m m e nu to ols . C on to h A nd a

  • 8/6/2019 inti modul

    26/70

    26

    m e n a m b a h k a n m e n u n o tp a d d e n g a n c a ra : to o ls c on fig ur e

    a d d [d ir e kt o r i n o tp a d ]

    3.5 Menu Setting

    Gambar 3.5 Menu Setting

    1. G e n e r a l , d igunaka n un tuk peng a tu ran seca ra um um . M e la lu i m enu in i

    A n d a d ap a t m em il ih ta m pil a ta u ti d a k n y a to o lb a r, n a v ig a to r, p e s a n d a n

    in form as i

    2. E d i t o r , d ig u na k a n u n tu k p e n ga tu ra n e d it or p ro g ra m . K ita d a p at

    m e n en tu k an w a rn a -w a r na te x t y a n g b e rb e d a u n tu k m e m b a n tu

    m em pe rm udah da lam m enge cek kesa lahan penu l isan p rog ram

    3. A s s e m b le r , d ig u n a k a n u n tu k m e n e n tu k a n a p a k a h f il e * .a s m a ta u

    * .l s t y a n g a k a n t e rb u k a s e c a r a o t o m a t is p a d a s a a t te r ja d i e rr o r p a d a

    saa t k om p i le

    4. D e b b u g e r , u n tu k m e n g e c e k k e s a la h a n - ke s a la h a n p r o gr a m d a la m

    a s s e m b le r d e n g a n m e n g g u n a ka n s o ft w a re k o m p ile r la i n s e p e rt i

    m i sa lnya A V RS tud io

    5. P r o g r a m m e r , d ig un ak an u ntu k m e ne ntu ka n je nis h ard w are

    y a n g d i g u n a k a n a p a b i la p r o s e s d o w n l o a d p r o g r a m k e m i k ro k o n t r o le r

    d i la k u k a n o l e h C V A V R

    6. T e r m i n a l , d ig u n a k a n u n tu k m e n g s tu r m o d e fo r m a t d a ta t e rm i na l

    k om u nik as i s era il U A R T p ad a C V A V R a n ta ra l a in p ort y a ng

    d igunakan , leba r da ta , b i t s t op , pa r i tas dan la in - la in .

  • 8/6/2019 inti modul

    27/70

    27

    3.6 Codevision AVR Chip Programer

    Salah satu kelebihan dari codevision AVR adalah tersedianya fasilitas untuk

    mendownload program ke mikrokontroler yang telah terintegrasi sehinggadengan demikian codevision AVR ini selain dapat berfungsi sebagai software

    kompiler juga dapat berfungsi sebagai software programer / downloader. Jadi

    kita dapat melakukan proses download program yang telah di kompile dengan

    menggunakan software code vision AVR juga.

    Gambar 3.6 rangkaian kompatibel STK200

    Agar fasilitas CodeVision AVR chip programer dengan menggunakan modul

    hardware seperti gambar 4.6 diatas dapat berkerja maka pada setting

    programernya harus dipilih modul STK200. caranya adalah setting |programer

    kemudian pilih AVR chip programer type : kanda system STK200+/300.

    Gambar 3.7 programer setting

  • 8/6/2019 inti modul

    28/70

    28

    KEGIATAN BELAJAR 4

    KONVERSI BILANGAN

    Lembar informasi

    Dalam kehidupan sehari-hari kita telah terbiasa menggunakan sistem bilangan

    desimal,suatu bilangan berbasis 10 (terdiri dari 10 simbol),yaitu 0,1,2,3,4........9.

    akan tetapi dalam suatu aplikasi tidak selamanya kita menggunakan sistem

    desimal ini. Jadi kita dituntut untuk mengerti jenis bilangan yang lain.seperti

    biner,heksa, dan oktal. Ada baiknya anda mempelajari 3 jenis bilangan, yaitu

    desimal, biner dan heksa. Bilangan oktal mungkin tidak perlu kita pelajari dahulu

    karena bilangan ini jarang sekali digunakan dalam pemrograman ini.

    4.1 Bentuk bilangan

    Sebelum kita mengkonversi suatu bilangan. Kita harus mengenal terlebih dahulu

    masing-masing bilangan :

    Bilangan desimal

    Bilangan ini terdiri dari 10 bentuk, yaitu 0,1,2,3,4,5,6,7,8,9.

    Bilangan Biner

    Bilangan ini terdiri dari 2 bentuk, yaitu 0 dan 1 saja.Bilangan heksa

    Bilangan ini terdiri dari 16 bentuk, yaitu 0,1,2,3,4,5,6,7,8,9,A,B, C,D,E,F.

    Sistem Desimal Dan Biner

    Dalam sistem bilangan desimal, nilai yang terdapat pada kolom ketiga pada

    Tabel 1, yaitu A, disebut satuan, kolom kedua yaitu B disebut puluhan, C disebut

    ratusan, dan seterusnya. Kolom A, B, C menunjukkan kenaikan pada eksponen

    dengan basis 10 yaitu 100 = 1, 101 = 10, 102 = 100. Dengan cara yang sama,

    setiap kolom pada sistem bilangan biner, yaitu sistem bilangan dengan basis,

    menunjukkan eksponen dengan basis 2, yaitu 20 = 1, 21 = 2, 22 = 4, dan

    seterusnya.

  • 8/6/2019 inti modul

    29/70

    29

    Tabel 4.1. Nilai Bilangan Desimal dan Biner

    Kolom desimal Kolom biner

    C102 = 100

    (ratusan)

    B101 = 10

    (puluhan)

    A100 = 1

    (satuan)

    C22 = 4

    (empatan)

    B21 = 2

    (duaan)

    A20 = 1

    (satuan)

    Setiap digit biner disebut bit; bit paling kanan disebut least significant bit (LSB),

    dan bit paling kiri disebut most significant bit(MSB).

    Untuk membedakan bilangan pada sistem yang berbeda digunakan subskrip.

    Sebagai contoh 910 menyatakan bilangan sembilan pada sistem bilangan

    desimal, dan 011012 menunjukkan bilangan biner 01101. Subskrip tersebut

    sering diabaikan jika sistem bilangan yang dipakai sudah jelas.

    Tabel 4.2 . Contoh Pengubahan Bilangan Biner menjadi Desimal

    Kolom binerBiner

    32 16 8 4 2 1

    Desimal

    111010111100110111110010

    ----1

    --111

    11100

    10010

    11011

    01110

    8 + 4 + 2 = 148 + 2 + 1 = 1116 + 8 + 1 = 2516 + 4 + 2 + 1 = 2332 + 16 + 2 = 50

    Konversi Desimal ke Biner

    Cara untuk mengubah bilangan desimal ke biner adalah dengan pembagian.

    Bilangan desimal yang akan diubah secara berturut-turut dibagi 2, dengan

    memperhatikan sisa pembagiannya. Sisa pembagian akan bernilai 0 atau 1,

    yang akan membentuk bilangan biner dengan sisa yang terakhir menunjukkan

    MSBnya. Sebagai contoh, untuk mengubah 5210 menjadi bilangan biner,

    diperlukan langkah-langkah berikut :

    52/2 = 26 sisa 0, LSB

    26/2 = 13 sisa 0

    13/2 = 6 sisa 1

    6/2 = 3 sisa 0

    3/2 = 1 sisa 1

    = 0 sisa 1, MSB

  • 8/6/2019 inti modul

    30/70

    30

    Sehingga bilangan desimal 5210 akan diubah menjadi bilangan biner 110100.

    Cara di atas juga bisa digunakan untuk mengubah sistem bilangan yang lain,

    yaitu oktal atau heksadesimal.

    4.3 Bilangan Hexsadesimal

    Bilangan heksadesimal, sering disingkat dengan hex, adalah bilangan dengan

    basis 1610, dan mempunyai 16 simbol yang berbeda, yaitu 0 sampai dengan 15.

    Bilangan yang lebih besar dari 1510 memerlukan lebih dari satu digit hex. Kolom

    heksadesimal menunjukkan eksponen dengan basis 16, yaitu 160 = 1, 161 = 16,

    162 = 256, dan seterusnya. Sebagai contoh :

    152B16 = (1 x 163) + (5 x 162) + (2 x 161) + (11 x 160)

    = 1 x 4096 + 5 x 256 + 2 x 16 + 11 x 1

    = 4096 + 1280 + 32 + 11

    = 541910

    Sebaliknya, untuk mengubah bilangan desimal menjadi bilangan heksadesimal,

    dapat dilakukan dengan cara membagi bilangan desimal tersebut dengan 16.

    Sebagai contoh, untuk mengubah bilangan 340810 menjadi bilangan

    heksadesimal, dilakukan dengan langkah-langkah sebagai berikut :3409/16 = 213, sisa 110 = 116, LSB

    213/16 = 13, sisa 510 = 516

    13/16 = 0, sisa 1310 = D16, MSB

    Sehingga, 340910 = D5116.

    Bilangan Hexsadesimal dan Biner

    Setiap digit pada bilangan heksadesimal dapat disajikan dengan empat buah bit.

    Untuk mengubah bilangan heksadesimal menjadi bilangan biner, setiap digit dari

    bilangan heksadesimal diubah secara terpisah ke dalam empat bit bilangan

    biner. Sebagai contoh, 2A5C16 dapat diubah ke bilangan biner sebagai berikut.

    216 = 0010, MSB

    A16 = 1010

    516 = 0101

    C16 = 1100, LSB

  • 8/6/2019 inti modul

    31/70

    31

    Sehingga, bilangan heksadesimal 2A5C akan diubah menjaid bilngan biner 0010

    1010 0101 1100.

    Sebaliknya, bilangan biner dapat diubah menjadi bilangan heksadesimaldengan cara mengelompokkan setiap empat digit dari bilangan biner tersebut

    dimulai dari sigit paling kanan. Sebagai contoh, 01001111010111002 dapat

    dikelompokkan menjadi 0100 1111 0101 1110. Sehingga:

    01002 = 416, MSB

    11112 = F16

    01012 = 516

    11102 = E16, LSB

    Dengan demikian, bilangan 01001111010111002 = 4F5E16.

    Bilangan Biner Pecahan

    Dalam sistem bilangan desimal, bilangan pecahan disajikan dengan

    menggunakan titik desimal. Digit-digit yang berada di sebelah kiri titik desimal

    mempunyai nilai eksponen yang semakin besar, dan digit-digit yang berada di

    sebelah kanan titik desimal mempunyai nilai eksponen yang semakin kecil.

    Sehingga

    0.110 = 10-1 = 1/10

    0.1010 = 10

    -2-

    = 1/1000.2 = 2 x 0.1 = 2 x 10-1, dan seterusnya.

    Cara yang sama juga bisa digunakan untuk menyajikan bilangan biner pecahan.

    Sehingga,

    0.12 = 2-1 = , dan

    0.012 = 2-2- = 2 =

    Sebagai contoh,

    0.1112 = + + 1/8

    = 0.5 + 0.25 + 0.125

    = 0.87510

    101.1012 = 4 + 0 + 1+ + 0 + 1/8

    = 5 + 0.625

    = 5.62510

    Pengubahan bilangan pecahan dari desimal ke biner dapat dilakukan dengan

    cara mengalihkan bagian pecahan dari bilangan desimal tersebut dengan 2,

  • 8/6/2019 inti modul

    32/70

    32

    bagian bulat dari hasil perkalian merupakan pecahan dalam bit biner. Proses

    perkalian diteruskan pada sisa sebelumnya sampai hasil perkalian sama dengan

    1 atau sampai ketelitian yang diinginkan. Bit biner pertama yang diperolehmerupakan MSB dari bilangan biner pecahan. Sebagai contoh, untuk mengubah

    0.62510 menjadi bilangan biner dapat dilaksanakan dengan

    0.625 x 2 = 1.25, bagian bulat = 1 (MSB), sisa = 0.25

    0.25 x 2 = 0.5, bagian bulat = 0, sisa = 0.5

    0.5 x 2 = 1.0, bagian bulat = 1 (LSB), tanpa sisa

    Sehingga,

    0.62510 = 0.1012

  • 8/6/2019 inti modul

    33/70

    33

    KEGIATAN BELAJAR 5

    PROJEK PERTAMA

    Lembar informasi

    Pembahasan pada bab ini bertujuan untuk memberikan gambaran tentang

    bagaimana proses mendownload dengan menggunakan mikrokontroler ATmega

    8535 mulai dari menuliskan program aplikasi ,proses mendownload program

    aplikasi hingga sampai mengamati hasilnya.

    5.1 Dasar Input Dan Output

    Perintah dasar

    OUTPUT

    PORTX=data;

    Yaitu untuk mengirim data secara byte ke portX (X= A,B,C,D).perintah ini sama

    dengan out dalam bahasa assembly ATmega 8535.

    INPUT

    data_in=PINX;

    yaitu mengambil data Byte dari PINX(X= A,B,C,D).yang kemudian disimpan ke

    variabel data_in. Perintah ini sama dengan in dalam bahasa assembly ATmega

    8535.Sebelum memulai program dasar I/O dengan bahasa C perlu diketahui bahwa

    mikrokontroller ATmega 8535 perlu disetting DDR dan PORT agar bisa

    digunakan sebagai mana mestinya.

    DDR bit = 1 DDR = 0

    PORT bit = 1 Output ; High Input ; R pull-up

    PORT bit = 0 Output ; low Input ; Floating

    Tabel 5.1 setting DDR dan PORT

    Port I/O untuk output hanya memberikan arus sebesar 20mA. Jadi jika diperlukan

    untuk menggerakan piranti yang lebih besar (konsumsi arus/tegangan) harus

    ditambahkan rangkaian driver untuk piranti tersebut. Untuk lebih

    jelasnya.langsung saja kita coba input dan output.

  • 8/6/2019 inti modul

    34/70

    34

    OUTPUT

    Misalkan rangkaian LED kita hubungkan ke PORTB (rangkaian input nanti dulu,

    OK)Buatlah program dengan langkah seperti pada gambar dibawah ini dengan

    menggunakan Code Vision AVR.

    Gambar 5.1 setting chip dan clock

    Pilih ATmega 8535 untuk chipnyadan setting cloknya 11.059200 (sesuai denganX-tall yang digunakan)

    Gambar 5.2 PORTB sebagai output

  • 8/6/2019 inti modul

    35/70

  • 8/6/2019 inti modul

    36/70

    36

    PROSES MENDOWNLOAD

    Untuk proses mendownload bisa langsung kita lakukan dengan memilih menu

    project make atau dengan mengklik icon namun sebelum itu kita harusmenyettingnya terlebih dahulu dengan memilih menu project configure

    aftermake kemudian klik program the chip OK.

    Maka akan muncul tampilan seperti berikut:

    Gambar 5.4 proses mendownload

    INPUT OUTPUT

    Saat mempelajari input sudah seharusnya dilanjutkan dengan output sehingga

    bisa langsung mengetahui hasilnya. Hubungkan rangkaian output ke PORTB

    dan rangkaian input ke PORTA.

    Kembali kita buat proyek baru. Setting chip dan clock kemudian setting PORT

    seperti gambar dibawah ini :

    PORTA PORTB

    Gambar 5.5 setting port untuk PORTB Output dan PORTA input

  • 8/6/2019 inti modul

    37/70

    37

    Generate,Save and Exit. Simpan dengan nama file project_pertama. Buat

    deklarasi variabel data dibagian berikut ini:

    ............Void main (void)

    {//declare your local variabel here

    Unsigned char data; // lokal variabel

    ..........Tambahkan interuksi sehingga nampak seperti berikut :

    ............

    while (1)

    {// Place your code here

    data = PINA; //tambahkan interuksi ini

    PORTB = data;};

    }

    Kompilasi,download dan perhatikan hasilnya (sambil tekan tombol).

    Contoh program menggunakan LED :

    Setting PORTB sebagai output simpan dengan nama proyek_led.c,

    proyek_led.prj proyek_led.cwp.

    Tambahkan kode program sehingga listingnya seperti berikut :

    LED 1 (Megontrol nyala led dengan bilangan heksa)

    ............#include

    #include

    ..............

    while (1)

    {

    // Place your code here

    PORTB=0x00;delay_ms(500);

    PORTB=0xFF;delay_ms(500);

    PORTB=0x00;delay_ms(500);

    PORTB=0x0F;delay_ms(500);

    PORTB=0xF0;delay_ms(500); };}

    Kompilasi,downloaddan perhatikan hasilnya, apakah LED kelap-kelip...?

    LED 2 (Mengontrol nyala LED dengan bilangan Biner)

    #include

    #include

    ..........

  • 8/6/2019 inti modul

    38/70

    38

    ..........

    while (1)

    {

    // Place your code herePORTB=0b011111111;delay_ms(200);

    PORTB=0b101111111;delay_ms(200);

    PORTB=0b110111111;delay_ms(200);

    PORTB=0b111011111;delay_ms(200);

    PORTB=0b111101111;delay_ms(200);

    PORTB=0b111110111;delay_ms(200);

    PORTB=0b111111011;delay_ms(200);

    PORTB=0b111111101;delay_ms(200);

    PORTB=0b111111110;delay_ms(200);

    };

    }

    Kompilasi,downloaddan perhatikan hasilnya, apakah LED bergeser ke kanan.?

    LED 4 (Mengontrol nyala LED dengan operator BITWISE)

    ............

    #include

    #include

    unsigned int a; //a dengan nilai integer

    // Timer 0 overflow interrupt service routine //fungsi program pada timer 0

    interrupt [TIM0_OVF] void timer0_ovf_isr(void)

    {

    ............

    // Global enable interrupts#asm("sei")

    a=1=1;//geser ke kanan 1 kali

    PORTB=~a;//diinvert supaya hanya satu led yang nyala

    if(a==0)//jika variabel a==0

    {

    a=1

  • 8/6/2019 inti modul

    39/70

    39

    Sekarang coba gunakan logika anda untuk mengatur nyala LED.......serukan..!!

    5.2 KONTROL I/O per bit.

    Perintah input dan output pada AT mega 8535 juga bisa dilakukan per bit dengan

    cara :

    Output

    PORTX.bitn=data;

    Yaitu untuk mengirim data bit (0 atau 1) ke portX (X=A,B,C,D) Bit ke n. Perintah

    ini setara dengan sbi dalam bahasa assembly.

    Contoh

    ..........PORTB.3=1;

    .........Artinya adalah bit 3 PORTB diberi nilai 1.

    Input

    data_in=PINX.bitn;

    Yaitu mengambil data bit dari PINX(X=A,B,C,D) bit ke n yang kemudian disimpan

    ke variable data_in. Perintah ini setara dengan cbi dalam bahasa assembly.

    Contoh

    ............data_n=PORTB.3;

    ............Artinya adalah ATmega 8535 mengambil data bit ke 3. Nilai dari perintah ini

    hanya 0 atau 1.

    Contoh program LED menggunakan tombol :

    Tambahkan kode program sehingga listingnya seperti berikut :

    I/O LED 1 (Mengatur nyala led per bit)

    Setting PORTB sebagai output dan PORTA sebagai input.

    ...........

    #include #include

    #define pin0 PORTA.0

    #define pin1 PORTA.1

    #define pin2 PORTA.2

    .............

    while (1)

    {

  • 8/6/2019 inti modul

    40/70

    40

    // Place your code here

    pin0=0;delay_ms(200);pin0=1;delay_ms(200);

    pin1=0;delay_ms(200);pin1=1;delay_ms(200);

    pin2=1;delay_ms(200);pin2=0;delay_ms(200);};

    }

    Kompilasi,downloaddan perhatikan hasilnya, apakah LED 1,2 dan 3 berubah.?

    5.3 Tunda

    Tunda atau delay akan sering kita gunakan. contoh saat memutar motor

    stepper,pemberian bit ke motor stepper harus di tunda karena bila tidak diberi

    waktu tunda maka motor tidak akan dapat berputar. Ada dua cara memberikan

    penundaan, yaitu tunda yang kita buat sendiri dan penundaan yang disediakan

    oleh code vision AVR. namun untuk memudahkan dalam pembelajaran hanya

    pustaka tunda yang dipelajari dalam modul ini.

    Membuat tunda dengan pustaka tunda

    Untuk membuat tunda sangat mudah, Ok, sekarang buat fungsi tunda berikut ini :

    Pertama, buat proyek baru lagi. Set PORTB sebagai output kemudian simpan

    dengan nama delay.c, delay.prj, delay.cwp.

    Tambahkan pustaka tunda dibagian header:

    #include // blok header

    #include // tambahkan library delay disini

    ..................

    Tambahkan interuksi berikut :

    void main(void)

    {

    ..........

    // Place your code here

    #asm {cli)

    PORTB=0xFF;delay_ms(500); // memanggil delay dari librari delay.

    PORTB=0XF0;

    delay_ms(500);

    #asm(sei)

    };

    }Bagaimana blink-blinkkan....................!!

  • 8/6/2019 inti modul

    41/70

    41

    Instruksi-Instruksi Dipustaka delay.

    Instruksi tunda bisa dijelaskan sebagai berikut :

    delay_us (unsigned int n)menghasilkan tundaan selama n mikrodetik, n harus merupakan suatu konstanta.

    delay_ms (unsigned int n)

    menghasilkan tundaan selama milidetik.

    Fungsi ini secara otomatis akan mereset kondisi timer wachdog setiap 1 mili

    second dengan membangkitkan instruksi wdr.

    Catatan penting :

    Ada dua instruksi tambahan yang harus disertakan pada saat memanggil fungsi

    tunda, yaitu :

    #asm {cli)

    #asm(sei)

    Instruksi pertama berfungsi untuk menonaktifkan semua interupsi dan interuksi

    kedua untuk mengaktifkan semua interupsi. Jika hal ini tidak dilakukan maka

    penundaan akan menjadi lebih lama dari yang diharapkan.

    5.4 Penampilan LCD

    LCD adalah suatu display dari bahan cairan kristal yang pengoprasiannya

    menggunakan dot matriks.LCD banyak digunakan sebagai display dari alat-alatelektronika seperti kalkulator,multitester digital,jam digital dan sebagainya.

    Gambar 5.6 LCD 2x16 karakter

    Dengan menggunakan codewizard AVR kita dapat dengan mudah

    mendefinisikan port yang terhubung dengan LCD, langkah-langkahnya yaitu:

    Buka program codevision AVR melalui menu Star|All Program|| Codevision||

    Code Vision Avr C Compileratau melalui deskop klik lambang Codevision.

    Kemudian pillih File|New|pilih File Type project.

  • 8/6/2019 inti modul

    42/70

    42

    Kemudian muncul tampilan konfirmasi, dan menanyakan apakah akan

    menggunakan codewizard, pilih Yes.

    Untuk setting IC(Chip yang digunakan) pilih Chip, isi informasi sebagai berikut :

    a b

    Gambar 5.7 a setting chip ATmega 8535 clock 11.059200

    Gambar 5.7 b setting PORTC sebagai output LCD

    Jika sudah menkonfigurasi project,pilih File|Generate Save and Exit, sehingga

    akan tampil source codedalam bahasa C. setelah itu, kita tinggal menambahkan

    instruksi-instruksi tambahan kedalam program yang sudah ada.

    Perhatikan blok-blok program berikut :

    // Alphanumeric LCD Module functions

    #asm

    .equ __lcd_port=0x15 ;PORTC

    #endasm

    #include

    ..

    Blok ini harus disertakan (jika dengan cara generate fileakan otomatis

    dibuatkan).arti dari blok diatas adalah setting LCD di PORTC kemudian akan

    me_link ke pustaka lcd.h yang didalamnya terdapat instruksi-instruksi untuk

    akses LCD secara langsung.

    .

    .equ __lcd_port=0x15 ;PORTC

  • 8/6/2019 inti modul

    43/70

    43

    Menggunakan PORTC(0x15) untuk LCD (lihat tentang register I/O di datasheet

    ATmega 8535). Untuk inisialisasi cukup dengan instruksi berikut:

    // LCD module initialization

    lcd_init(16); //inisialisasi LCD 16x2

    Contoh program LCD :

    Tambahkan kode program sehingga listingnya seperti berikut :

    .

    #include

    #include

    .while (1)

    {

    // Place your code here

    lcd_clear();

    lcd_gotoxy(0,0);

    lcd_putsf("*SELAMAT DATANG*");

    lcd_gotoxy(0,1);

    lcd_putsf("PSERTA PELATIHAN");

    delay_ms(5000);

    lcd_clear();

    lcd_gotoxy(0,0);

    lcd_putsf("*MIKROKONTROLER*");

    lcd_gotoxy(0,1);

    lcd_putsf(" -ATmega 8535- ");

    delay_ms(5000);

    };

    }

    Kemudian kompilasi, downloaddan perhatikan hasilnya. Coba dengan stringdan

    posisi baris yang berbeda.

    5.5 Aplikasi Antar Muka Dengan Push Button

    Push button atau tombol tekan adalah penghubung antara pemakai dengan alat

    pengendali yang dibuat.tombol tekan yang dipakai mempunyai 8 buah tombol

    yang masing masing dihubungkan dengan port A, tombol-tombol ini dipakai

    untuk menjalankan berbagai fungsi pengendalian seperti misalnya untuk on/of

    dan pilihan menu.

    Push botton to LED

  • 8/6/2019 inti modul

    44/70

    44

    Pertama-tama kita akan membuat interfacing keypad ke mikro kontroler dimana

    hasil penekanan tombol dikeluarkan ke LED (modul dasar I/O).modul LED

    dihubungkan ke PORTB. Setelah itu buat proyek baru. Jangan lupa setting chip

    dan clockdan kemudian setting PORT seperti gambar berikut :

    A B

    Gambar 5.8 A untuk setting push botton di PORTAGambar 5.8 B untuk setting LED di PORTB

    Kemudian File | Generate Save and Exit, simpan dengan nama filepush_botton.c, push_botton.prj, push_botton.cwp.

    Kita akan membuat proyek push botton to led dengan perintah :

    jika push botton 1 ditekan maka LED brucak-brinong.

    jika push botton 2 ditekan maka LED plip-plop.

    jika push botton 4 ditekan maka LED blink-blink.

    jika push botton 7 ditekan maka LED 2blink.

    Tambahkan intruksi sehingga menjadi seperti listing berikut :............

    #include

    #include #define saklar1 PINA.0

    #define saklar2 PINA.1

    #define saklar7 PINA.7

    #define saklar4 PINA.3

    #define led PORTB

    ..............

    while (1)

  • 8/6/2019 inti modul

    45/70

    45

    {

    // Place your code here

    if (saklar1==0){ //jika saklar 1 ditekan

    PORTB=0x00;delay_ms(100); //maka led brucak-brinongPORTB=0xFF;delay_ms(100);

    }

    if (saklar2==0){ //jika saklar 2 ditekan

    PORTB=0x0F;delay_ms(100); //maka led plip-plop

    PORTB=0xF0;delay_ms(100);

    }

    if (saklar7==0){ //jika saklar 7 ditekan

    PORTB=0xAA;delay_ms(100); //maka LED blink-blink

    PORTB=0x55;delay_ms(100);

    }

    if (saklar4==0){

    PORTB=0b11001100;delay_ms(200); //maka LED 2blinkPORTB=0b00110011;delay_ms(100);

    }

    PORTB=0xFF; //jika tidak maka led mati

    };

    }

    Kompilasi,downloaddan perhatikan hasilnya, tekan tombol 1,2,4 dan 7......?

    Bagaimana tambah serukan.!!

    5.6 ADC ( Analog To Digital Converter)

    Penggunaan ADC sangat banyak,terutama dalam bidang pengukuran. Banyak

    keluaran sensor yang masih berupa analog yang harus dikonversi kedigital agar

    dapat diolah ke mikrokontroler.

    Fitur dari ADC ATmega 8535 adalah sebagai berikut :

    Resolusi 10 Bit,

    Waktu konversi 65-260 us,

    8 ch input,

    0-Vcc input ADC,

    3 mode pemilihan tegangan referensi.

    Untuk mempelajari ADC pada ATmega 8535, kita cukup membuat rangkaian

    sederhana dari potensio meter.

  • 8/6/2019 inti modul

    46/70

    46

    Gambar 5.9 rangkaian pembagi tegangan pada potensio meter.

    Dengan rangkaian pembagi tegangan kita dapat memberi tegangan yang

    bervariasi ke ADC.

    Vout = R2 x Vcc

    R1+R2

    Dari gambar rangkaian diatas, keluarannya dihubungkan ke input ADC, yaitu

    misal ke PORTA.0 (ADC ch.0). untuk melihat hasil ADC, kita dapat memasang

    rangkaian LED atau LCD, dalam contoh ini langsung kita tampilkan pada LCD.

    DASAR ADC

    Register-register yang kita bahas diatas dalam pengelementsialnya akan diset

    pada saat kita membuat proyek baru dengan wizard code vision. Untuk lebih

    jelasnya, perhatikan contoh berikut ini.Buat proyek baru. Jangan lupa setting chip dan clock.setelah itu setting bagian

    ADC seperti gambar berikut ini :

  • 8/6/2019 inti modul

    47/70

    47

    Gambar 5.10 setting ADC pada codewizard,PORTA output,PORTC LCD

    Hubungkan rangkaian pembagi tegangan kesalah satu pin pada PORTA, yang

    untuk contoh ini dihubungkan ke PINA.0 untuk setting LCD, samakan dengan

    keypad, yaitu LCD ke PORTC. Generate file, save and exit. Simpan dengan

    nama file adc.c,adc.prj,adc.cwp.

    Tambahkan interuksi sehingga menjadi listing program berikut ini :#include

    #include

    #include

    unsigned int adc;

    unsigned char nilai[16];

    // Alphanumeric LCD Module functions

    #asm

    .equ __lcd_port=0x18 ;PORTC

    #endasm

    #include

    #define ADC_VREF_TYPE 0x60

    // Read the 8 most significant bits// of the AD conversion result

    unsigned char read_adc(unsigned char adc_input)

    {

    ADMUX=adc_input|ADC_VREF_TYPE;

    // Start the AD conversion

    ADCSRA|=0x40;

    // Wait for the AD conversion to complete

  • 8/6/2019 inti modul

    48/70

    48

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

    ADCSRA|=0x10;

    return ADCH;

    }// Declare your global variables here

    void main(void)

    {

    ..// LCD module initialization

    lcd_init(16);

    lcd_clear();

    lcd_gotoxy(0,0);

    lcd_putsf("pelatihan mikro");

    delay_ms(50);

    while (1){

    // Place your code here

    adc=read_adc(0);

    lcd_clear();

    sprintf(nilai,"nilai adc=%d",adc);

    lcd_gotoxy(0,0);lcd_puts(nilai);

    delay_ms(100);

    };

    }

    Kompilasi downloaddan perhatikan hasilnya dengan memutar potensiometer.

    Perhatikan bagian program berikut ini :

    #define ADC_VREF_TYPE 0x60

    // Read the 8 most significant bits

    // of the AD conversion result

    unsigned char read_adc(unsigned char adc_input)

    {

    ADMUX=adc_input|ADC_VREF_TYPE;

    // Start the AD conversion

    ADCSRA|=0x40;// Wait for the AD conversion to complete

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

    ADCSRA|=0x10;

    return ADCH;

    }

  • 8/6/2019 inti modul

    49/70

    49

    Blok-blok diatas adalah inisialisasi dan prosedur baca ADC yang dibentuk oleh

    codevision. Untuk membaca ADC channel yang lain cukup dengan mengubah

    instruksi menjadi seperti berikut :data_adc=read_adc(3) ; //membaca ADC dichanel 3

    5.7 INTERUPSI

    Interupsi adalah suatu kondisi dimana mikrokontroler akan berhenti sementara

    dari program utama untuk melayani interuksi-intruksi pada interupsi kemudian

    kembali mengerjakan instruksi program utama setelah instruksi-instruksi pada

    interupsi selesai dikerjakan. Terdapat 21 interupsi pada ATmega 8535 (lihat data

    sheet).

    Atmega 8535 menyediakan 3 interupsi eksternal, yaitu INT0,INT1 dan INT2.

    interupsi eksternal bias dilakukan dengan memberikan logika 0 atau perubahan

    logika (rising edge dan falling edge) pada pin interupsi yang bersangkutan.

    Tabel 5.2 hubungan PIN interrupt

    Jenis interup PIN

    INT0 PORTD.2

    INT1 PORTD.3

    INT2 PORTB.2

    Kontrol LED dengan interupsi

    Sebelum mencoba membuat program untuk melayani interupsi,siapkan dulu

    rangkaian berikut (bisa anda gunakan rangkaian dasar input dengan beberapa

    modipikasi) :

    Gambar 5.11 rangkaian push button untuk pemberian interupsi

  • 8/6/2019 inti modul

    50/70

    50

    Pada rangkaian diatas,logika yang kita dapat adalah jika tombol ditekan maka

    keluaran akan menjadi sisi negative (falling edge) yang selanjutnya menjadi low.

    Misal program yang kita inginkan adalah sebagai berkut :

    Saat program dijalakan maka led akan menyala sehingga berjalan dan kemudian

    saat terjadi interupsi maka led akan berkedip 10 kali.setelah interuksi pada

    interupsi selesai dijalankan maka program akan kembali mengerjakan program

    utama ,yaitu led berjalan. Siapkan proyek baru jangan lupa setting chip dan clock

    dan kemudian setting PORTB sebagai output dan PORTD untuk tombol interrupt.

    Hubungkan rangkaian pada gambar ke PORTD.2, yaitu INT.0 :

    Gambar 5.12 interup pada codewizard

    Generate save and exit. Simpan dengan nama file int_1.c, int_1.prj, int_1.cwp,

    Sesuaikan listing program seperti berikut

    #include

    void tunda(unsigned char i);

    // External Interrupt 0 service routine

    interrupt [EXT_INT0] void ext_int0_isr(void)

    {// Place your code here

    unsigned char rr=0;

    while (rr

  • 8/6/2019 inti modul

    51/70

  • 8/6/2019 inti modul

    52/70

    52

    EEPROM addres register-EEARL dan EEARL

    EEPROM data register-EEDR

    EEPROM control register-EEDR

    Gambar 5.13 EEPROM addres Register

    Untuk menulis ke EEPROM tentu saja kita harus menyeting register yangbersangkutan, yaitu register EECR (baca data sheet ATmega 8535) namun

    demikian sekali lagi, dengan code vision AVR kita bisa langsung mengakss

    EEPROM dengan mudah.

    Buat proyek baru berikut ini :

    Setting chip dan clock ATmega 8535 ,11059200 Generate file,save and

    exit.simpan dengan nama file eeprom.c, eeprom.prj, eeeprom.cwp.

    Gunakan LCD di PORTC untuk melihat hasil penulisan dan pembacaan

    EEPROM.

    Tambahkan kode program sehingga listingnya seperti berikut :

    #include

    #include

    .

    //declarate your global variable here

    char buf [33];

  • 8/6/2019 inti modul

    53/70

    53

    eeprom int alfa;//pemesanan tempat untuk variable alfa di EEPROM

    void main (void)

    {

    //declarate your local variables hereInt i;

    //LCD module initialization

    // LCD module initialization

    lcd_init(16);

    lcd_gotoxy(0,0);

    lcd_putsf("Data EEPROM alfa");

    lcd_gotoxy(0,1);

    sprintf(buf,"%x ",alfa);

    lcd_puts(buf);

    alfa=0x55;

    lcd_gotoxy(6,1);sprintf(buf,"%x ",alfa);

    lcd_puts(buf);

    i=alfa;

    lcd_gotoxy(12,1);

    sprintf(buf,"%x ",i);

    lcd_puts(buf);

    while (1)

    {

    // Place your code here

    };

    }Kompilasi download dan perhatikan LCD.

    Sesaat setelah dikompilasi bagian bawah LCD menunjukan angka 0. hal

    ini menunjukan EEPROM (alfa) masih belum terisi nilainya.

    eeprom int alfa; //pemesanan tempat untuk variabel alfa

    Kemudian alfa diisi nilai 55h,ditampilkan ditengah bawah LCD.

    alfa=0x55;//menulis ke variable alfa di EEPROM

    Bagian kanan bawah LCD menampilkan hasil pembacaan EEPROM yang

    disimpan divariabel i.

    Matikan catu daya / direst kemudian nyalakan kembali tampilan LCD.

    Tampak dikiri bawah LCD sudah menunjukan angka 55h, yaitu hasilpenulisan yang dilakukan oleh program saat berjalan.

  • 8/6/2019 inti modul

    54/70

    54

    5.9 TIMER DAN COUNTER

    Sebelum menggunakan timer/counter. Harap diperhatikan konfigurasi bit

    ATmega 8535. kesalahan konfigurasi dapat menyebabkan timer atau countertidak berjalan sebagaimana mestinya.

    Timer/counter ATmega 8535 ada 3, yaitu :

    Timer counter 0

    Timer counter 1

    Timer counter 2

    Setting register tidak kita lakukan saat penulisan program.kita dapat langsungmenyesetnya saat melakukannya dengan wizard new project. Jadi untuk

    register-register yang berkenaan dengan timer/counter tidak kita bahas.agar

    lebih jelas tentang register pada timer/counter,anda dapat melihat data sheet

    ATmega 8535.

    Timer/counter 0

    Timer/counter 0 adalah 8 bit timer/counter dengan fitur sebagai berikut :

    a. 8 bit Timer/Counter 1 kanal.

    b. Auto reload, yaitu timer akan dinolkan saat match compare.

    c. Dapat menghasilkan pulsa PWM dengan glich free

    d. Frequence generator.

    e. Prescaler10 bit untuk timer

    f. Membangkitkan interupsi saat timer overflowdan atau match compare.

    Timer/counter 1

    Timer/counter 1 adalah 16 bit timer/counter dengan fitur sebagai berikut :

    a. 16 bit Timer atau counter

    b. Memiliki 2 compare unit

    c. Memiliki 2 register pembanding

    d. Memiliki 1 input capture unit

    e. Auto reload,timer akan dinolkan saat match compare

  • 8/6/2019 inti modul

    55/70

    55

    f. Dapat menghasilkan pulsa PWM dengan glich free dan periode yang

    bisa dirubah-ubah

    g. Frequence generatorh. Memiliki 4 buah sumber interupsi, yaitu TOV1,OCF1A,OCF1B dan ICF1.

    Timer/counter 2

    Timer/counter 0 adalah 8 bit timer/counter dengan fitur sebagai berikut :

    8 bit Timer/Counter 1 kanal.

    Auto reload, yaitu timer akan dinolkan saat match compare.

    Dapat menghasilkan pulsa PWM dengan glich free

    Frequence generator.

    Prescaler 10 bit untuk timer

    Membangkitkan interupsi saat timer overflow dan atau match compare.

    Cara menggunakan ketiga timer diatas adalah dengan menyetting register dari

    masing-masing timer/counter yang bersangkutan.namun karena kita

    menggunakan codevisian AVR. Setting timer atau counter dilakukan saat

    pembuatan proyek baru dimulai.

    TIMER

    Berikut ini adalah contoh penggunaan timer. Gunakan kembali rangkaian LED

    untuk mempermudah pemahaman akan timer.disini kita akan membuat LED

    blink dengan pewaktuan menggunakan timer.Gunakan kembali rangkaian I/O led

    dan hubungkan ke PORTB Selanjutnya kita buat proyek baru dengan setting

    mikro sebagai berikut :

    Setting clock pada 11.059200,chip ATmega 8535 dan PORTB sebagai output :

  • 8/6/2019 inti modul

    56/70

    56

    Gambar 5.13 setting timer pada codewizard

    Generate file,save and exit.simpan dengan nama file timer.c, timer.prj, timer.cwp.

    Kemudia tambahkan listing program seperti berikut ini:

    // Timer 1 overflow interrupt service routine

    interrupt [TIM1_OVF] void timer1_ovf_isr(void)

    {

    // Reinitialize Timer 1 value

    TCNT1H=0xD5;

    TCNT1L=0xD0;

    // Place your code hereif (PINB==0){

    PORTB=0xFF

    }

    else

    {

    PORTB=0x00;

    }}

    Kompilasi,downloaddan perhatikan LEDnya.

    Perhatikan blok interupsi timer 1 overflow :// Timer 1 overflow interrupt service routine

    interrupt [TIM1_OVF] void timer1_ovf_isr(void)

    {

    // Reinitialize Timer 1 value

    TCNT1H=0xD5;

    TCNT1L=0xD0;

    // Place your code here

  • 8/6/2019 inti modul

    57/70

    57

    if (PINB==0){PORTB=0xFF

    }else{ PORTB=0x00;}}

    Kita hanya memanfaatkan interupsi timer 1 overflow. Program ini akanmenambahkan nilai TCNT timer 1 yang semula kita set dengan nilai D5D0H

    sehingga mencapai FFFFh kemudian overflow dan menghasilkan interupsi. Pada

    saat interupsi dijalankan maka nilai TCNT diset kembali menjadi D5DOh. Diblok

    interupsi ini juga terlihat kondisi dari PORTB, yaitu jika sebelumnya PORTB

    berlogika 0 maka PORTB akan diset ke logika 1. begitu juga sebaliknya atau

    dengan kata lain PORTB dalam kondisi toogle.

    Ubah interuksi berikut :

    .

    TCCR1A=0x00;

    TCCR1B=0x03; // ubah menjadi 0x01 hingga 0x05

    Kompilasi,download dan perhatikan LEDnya.bagaimana hasilnya ?

    COUNTERUntuk memahami counter, gunakan kembali rangkaian pada gambar

    5.11..hubungkan rangkaian pada gambar ke PORTB0 ,yaitu sebagai input

    pulsa T0. hubungkan kembali rangkaian LED ke PORTB. kemudian kita buat

    proyek baru dengan setting mikro sebagai berikut :

    Setting clock pada 11.059200 dan chip ATmega 8535

    Gambar 5.13 setting TIMER 0 dan PORTB sebagai I/O

    Generate file,save and exit.simpan dengan nama file counter.c, counter.prj,

    counter.cwp.

  • 8/6/2019 inti modul

    58/70

    58

    Tambahkan interuksi hingga menjadi listing berikut :

    .// Timer 0 overflow interrupt service routine

    interrupt [TIM0_OVF] void timer0_ovf_isr(void){

    // Reinitialize Timer 0 value

    TCNT0=0xFA;

    // Place your code here

    If (PINA==0) {PORTB=0xFF;}

    else {PORTB=0x00;}

    }

    ..Blok interupsi tomer 0 akan dilaksanakan apabila nilai TCNT

    melimpah.penambahan/counter naik nilai TCNT dilakukan dengan menberikan

    trigger/pemicu falling edgeke kaki T0 (PORTB 0). saat nilai TCNT melimpah,nilai TCNT melimpah,nilai TCNT akan diset kembali menjadi FAh, dan kemudian

    jika PINC sebelumnya berlogika 0 maka PORTC akan diberi logika 1 (LED 0-3

    nyala dan LED 4-7 padam.ingat active high dan active low). Demikian juga saat

    PINC sebelumnya berlogika 1 maka akan diset ke logika 0.

    Kompilasi,downloaddan perhatikan nyala LEDnya dengan menekan pushbutton.

    Berapa kali penekanan agar LED bergantian atau padam ? ya 6 kali, karena

    counter naik dari Fah hingga FFh kemudian melimpah dan di-set kembali

    menjadi FAh. Kadang jika terdapat keybouncing pada saklar yang kita gunakan

    penekanan saklar tidak 6 kali.

    5.10 PWM (pulse witdh modulation)

    Pulse width modulation menggunakan gelombang kotak dengan duty circle

    tertentu menghasilkan berbagai nilai rata-rata dari suatu bentuk gelombang. Jika

    kita menganggap bentuk gelombang kotak f(t) dengan nilai batas bawah

    ymin,batas atas ymax dan duty circle D,seperti dapat dilihat pada gambar dibawah

    ini.

    TIME

    Gambar 5.14 gelombang kotak yang memiliki y max,ymin dan D

  • 8/6/2019 inti modul

    59/70

    59

    Nilai rata-rata dari bentuk gelombang diatas adalah :

    Jika f(t) adalah gelombang kotak, maka nilai ymax adalah dari 0 < t < D.T dan nilai

    ymin dari D.T < t < T.dari pernyataan diatas didapat :

    Persamaan diatas dapat disederhankan dalam berbagai kasus dimana ymin=0

    sehingga kita mendapatkan bentuk persamaan akhir y= D. ymax dari persamaan

    ini jelas bahwa nilai rata-rata dari sinyal (y) secara langsung bergantung pada

    duty circle D.

    Hubungan antara duty circle dengan nilai rata-rata tegangan

    Duty circle menyatakan presentase keadaan logika high (pulse) dalam satu

    periode sinyal.satu siklus diawali oleh transisi lowto highdari sinyal dan berakhir

    pada transisi berikutnya. Selama satu siklus, jika waktu sinyal pada keadaan high

    sama dengan low maka dikatakan sinyal mempunyai dutycircle 50%.

  • 8/6/2019 inti modul

    60/70

    60

    Gambar 5.15 duty circleVS Register OCR pada past PWM

    Semakin besar nilai data pada register OCR ,maka semakin tinggi juga nilai rata-

    rata tegangan DC, contoh semakin besardutycirclesemakin terang nyala LED.

    Contoh program pengaturan tegangan LED menggunakan PWM :

    PORTB sebagai output,PORTA sebagai input,gunakan Timer 0 sebagai

    pembangkit pulsa PWM.

    Gambar 5.16

    Lengkapi listing program sehingga seperti berikut :

    #include

    #include

    #define led1 PORTA.0

    #define led2 PORTA.1

    #define led3 PORTA.2#define led4 PORTA.3

    #define led5 PORTA.4

    #define led6 PORTA.5

    #define led7 PORTA.6

    #define led8 PORTA.7

    unsigned char

    x=0,pwm1=0,pwm2=0,pwm3=0,pwm4=0,pwm5=0,pwm6=0,pwm7=0,pwm8=0;

  • 8/6/2019 inti modul

    61/70

    61

    // Timer 0 overflow interrupt service routine

    interrupt [TIM0_OVF] void timer0_ovf_isr(void)

    {

    // Place your code herex++;

    if (x>pwm1){led1=0;} //proses untuk membandingkan sinyal PWM

    else {led1=1;};

    if (x>pwm2){led2=0;}

    else {led2=1;};

    if (x>pwm3){led3=0;}

    else {led3=1;};

    if (x>pwm4){led4=0;}

    else {led4=1;};

    if (x>pwm5){led5=0;}

    else {led5=1;};

    if (x>pwm6){led6=0;}else {led6=1;};

    if (x>pwm7){led7=0;}

    else {led7=1;};

    if (x>pwm8){led8=0;}

    else {led8=1;};

    }

    // Global enable interrupts

    #asm("sei")

    while (1)

    {// Place your code here

    pwm1=0;

    pwm2=255;pwm3=0; pwm4=255; pwm5=0;

    pwm6=255;pwm7=0;pwm8=255;

    delay_ms(1000);

    pwm1=100;pwm2=100;pwm3=100;pwm4=100;

    pwm5=100;pwm6=100;pwm7=100;pwm8=100;

    delay_ms(1000);

    pwm1=0;pwm2=0;pwm3=0;pwm4=0;

    pwm5=0;pwm6=0;pwm7=0;pwm8=0;

    delay_ms(1000);

    pwm1=255;pwm2=255;pwm3=255;pwm4=255;

    pwm5=255;pwm6=255;pwm7=255;pwm8=255;

    delay_ms(1000);

    };

    }

    Kompilasi,downloaddan perhatikan LEDnya.

  • 8/6/2019 inti modul

    62/70

    62

    5.11 Komunikasi serial USART

    Transmisi data seri dibedakan menjadi 2 macam, yaitu komunikasi data seri

    sinkron dan komunikasi data assinkron, perbedaan ini tergantung pada clock

    pendukung data.dalam komunikasi data seri sinkron,clockuntuk shift registerikut

    dikirimkan bersama dengan data seri.sebaliknya dalam komunikasi data seri

    assinkron, clock pendukung data register tidak ikut dikirim, rangkaian penerima

    data harus dilengkapi dengan rangkaian yang mampu membangkitkan clock

    yang diperlukan.bagian yang terpenting dari komunikasi seri asinkron adalah

    upaya agar penerima data bisa membangkitkan clock yang bisa dipakai untuk

    mendorong shift register penerima. Untuk keperluan tersebut terlebih dahulu

    ditentukan bahwa saat tidak ada pengiriman data, keadaan saluran adalah 1 saat

    akan mulai mengirim data 1 byte sluran dibuat menjadi 0 dulu selama 1 periode

    clock pendorong ,dalam 8 periode clock berikutnya dikirim data bit 0,bit 1 dan

    seterusnya sampai bit 8, dan pada periode clock yang ke 10 saluran

    dikembalikan menjadi 1.dengan demikian data 8 bit yang dikirim diawali dengan

    bit star yang bernilai 0 dan diakhiri dengan bit stop yang bernilai 1 seperti terlihat

    pada gambar. kemasan data ini dimaksudkan agar rangkaian penerima bisa

    membangkitkan clock yang frequensinya sama dengan clock pengirim dan

    fasanya disinkronkan pada awal penerimaan data 1 byte.

    Gambar 5.17 kemasan data seri assinkron

    Pada computer, biasanya terdapat sebuah port untuk komunikasi serial.bebarapa

    contoh penerapan komunikasi serial ialah mouse,scanner dan system akuisisi

    data yang terhubung ke port serial COM1/COM2. bagian yang terpenting dari

    komunikasi serial adalah konektor DB9 dan RS232. DB9 adalah konektor yang

    digunakan untuk menghubungkan hadware dengan computer.

  • 8/6/2019 inti modul

    63/70

    63

    Kegunaan RS232 adalah sebagai driver, yang akan mengkonversi tegangan dari

    hardware agar sesuai tegangan dengan computer sehingga data dapat dibaca.

    RS 232

    o logic high (1) 15V s/d -3V

    o logic low (0)--+3V s/d +15V

    TTL

    o logic high (1) +2 s/d +5V

    o logic low (0) 0V s/d +0.8V

    Rangkaian interface menerjemahkan level tegangan RS232 ke level tegangan

    TTL dan sebaliknya.rangkaian interface tersebut menggunakan IC MAX 232

    Gambar 5.19 rangkaian IC max 232

    Untuk menghubungkan antara 2 PC,atau antara rangkaian mikrokontroler

    dengan PC biasanya digunakan format null mode, dimana pin TXD dihubungkan

    dengan pinRXD pasangan,PIN sinyal ground (5) dihubungkan dengan sinyal

    ground dipasangan.

    Fungsi pin-pin DB9

    Pins Common Name Decription Signal direction on DCE

    1 CD Received line signal

    detector

    -

  • 8/6/2019 inti modul

    64/70

    64

    2 RXD Received data out

    3 TXD Transmitted data In

    4 DTR Data terminal ready In5 GND Signal ground -

    6 DSR Data set ready out

    7 RTS Request to send In

    8 CTS Clear to send out

    9 Ring indicator out

    USART (universal synchronous asynchronous receiver/transmitter)

    USART ATmega memiliki beberapa keuntungan dibandingkan system

    UART,yaitu :

    a. operasi full duplex(mempunyai register receive dan transmit yang

    terpisah)

    b. mengandung komunikasi multiprosesor

    c. mode kecepatan transmisi berorde mbps

    inisialisasi USART reister yang perlu ditentukan nilainya,yaitu :

    1. UBRR (USART baund rate register)UBRR merupakan register 16 bit, yang berfungsi untuk menentukan

    kecepatan transmisi data yang akan digunakan. UBRR dibagi menjadi dua

    bagian yaitu UBRRH dan UBBRL.UBRR [11..0] merupakan NIT penyimpan

    konstanta kecepatan komunikasi serial.UBRRH menyimpan 4 bit tertinggi,

    dan UBRRL menyimpan 8 bit sisanya.data yang dimasukan ke UBRRH dan

    UBRRL dihitung menggunakan rumus pada table dibawah ini :

  • 8/6/2019 inti modul

    65/70

    65

    Table rumus perhitngan UBRR

    Catatan :

    U2X adalah bit pada register UCSRA, yang berfungsi untuk mengandakan

    transfer rate menjadi dua kalinya. Hanya belaku untuk mode asinkron,untuk

    mode sinkron bit ini diset 0.

    UCSRA (USART control and status register A )

    UCSRA

    UCSRB (USART control and status register B )

    Penjelasa bit penyusun register UCSRB :

    a. RXCIE : bit pengatur aktivasi interupsi penerimaan data serial

    b. TXCIE : bit pengatur aktivasi interupsi pengiriman data serial

    c. UDRIE : bit pengaur aktivasi interupsi, yang berhubungan dengan

    kondisi udre dan UCSRA.

    d. RXEN : bit pengatur aktivasi penerima data serial ATmega 8535

    e. TXEN : bit pengatur aktivasi pengirim data serial ATmega 8535

    f. UCSZ2 : bersama-sama dengan bit UCSZ1 DAN UCSZ0 diregister

    Mode Operasi Rumus Nilai UBRR

    asinkron mode kecepatan normal

    (U2X=0)

    UBRR= fosc -1

    16x Baud rate

    asinkron mode kecepatan ganda

    (U2X=1)

    UBRR= fosc -1

    8x Baud rate

    sinkron UBRR= fosc -1

    2x Baud rate

  • 8/6/2019 inti modul

    66/70

    66

    g. UCSZ0 menentukan ukuran karakter serial yang dikirimkan

    Penentuan ukuran karakter

    UCSRC (USART control and status register C )

    UCSRC merupakan register 8 bityang digunakan untuk mengatur mode dan

    kecepatan komunikasi serial yang dilakukan.komposisinya seperti gambar

    dibawah ini.

    a. URSEL : Merupakan bitpemilih akses antara UCSRC DAN UBBR

    b. UMSEL : merupakan bit pemilih mode komunikasi serial antara

    sinkron dan asinkron.

    c. c. UPM [1..0] : merupakan bitpengatur paritas

    d. d. USBS : merupakan bit pemilih ukuran bit stop

    e. UCSZ1 dan UCSZ0 : merupakan bit pengatur jumlah karakter serial

    f. f. UCPOL : merupakan bit pengatur hubungan antara perubahan

    data keluaran dan data masukan serial dengan clock sinkronisasi. Hanya

    berlaku untuk mode sinkron,untuk mode asinkron bit ini diset 0.

    UCSZ[20] Ukuran karakter bit

    000 5

    001 6

    010 7

    011 8

    100-110 Tidak dipergunakan

    111 9

  • 8/6/2019 inti modul

    67/70

    67

    KIRIM DAN TERIMA DATA SERIAL

    Untuk memahami cara pengiriman dan terima data secara serial maka buatlah

    proyek baru. Jangan lupa setting chip dan clock dan kemudian setting portsebagai berikut :

    Contoh :

    Setting chip ATmega 8535,clock 11.059200 kemudian ikuti langkah berikut ini :

    Gambar 5.20 PORTA sebagai input dan PORTC sebagai output

    Gambar 5.20 PORTC sebagai LCD dan tampilan USART

  • 8/6/2019 inti modul

    68/70

    68

    Lengkapi listing program sehingga seperti berikut.

    .

    #include #include

    #include

    unsigned char tampil[16];

    .

    // Declare your global variables here

    void main(void)

    {

    // Declare your local variables here

    char buff[32];

    ..

    // LCD module initializationlcd_init(16);

    // Analog Comparator initialization

    // Analog Comparator: Off

    // Analog Comparator Input Capture by Timer/Counter 1: Off

    ACSR=0x80;

    SFIOR=0x00;

    //bagian program utama

    printf("\n PROGRAM TEST KOMUNIKASI SERIAL");

    printf("\n KIRIM DATA DARI KOMPUTER KE ATmega 8535");

    printf("\n TERIMA DATA DAN KEMBALIKAN DATA KE KOMPUTER");

    while (1)

    {

    // Place your code here

    int a,b=0;

    for(a=0;a

  • 8/6/2019 inti modul

    69/70

  • 8/6/2019 inti modul

    70/70

    DAFTAR PUSTAKA

    Wardhana lingga, belajar sendiri mikrokontroler AVR seri ATMega 8535simulasi,hardware,dan aplikasi,penerbit andi, yogyakarta,2006.

    Heryanto ary,adi wisnu,Ir, pemrograman bahasa C untuk mikrokontrolerATmega 8535,penerbit andi,yogyakarta,2008.

    Andrianto heri,pemrograman AVR ATmega 16 menggunakan bahasa Ccodevision AVR ,informatika,bandung,2008.

    Bejo agus,Rahasia kemudahan bahasa C dalam mikrokontroler ATmega8535.graha ilmu,yogyakarta,2007.

    Joni I made,raharjo budi ,pemrograman C dan implementasinya,informatika,bandung,2006.