Showing posts with label microcontroller. Show all posts
Showing posts with label microcontroller. Show all posts

Cara Membuat Program Microcontroller PART IV


Tiap orang logika berfikirnya pasti berbeda - beda, sesuai kreatifitas masing-masing, jadi kalo programnya tidak sama dengan yang lain, ya.. itu bukan masalah. Yang penting masalah terselesaikan..
Lanjut.. Mari kita belajar penggunaan prosedur.
Contoh:

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


int i;  // ini variable i dgn type data integer.
unsigned char nyala[9]= {0b00000000,0b00000001,
                         0b00000010,0b00000100,
                         0b00001000,0b00010000,
                         0b00100000,0b01000000,0b10000000};

void led_jalan(){

      for(i=0;i<9;i++){   // ulangi i=0 sd i-8  
            PORTC=nyala[i];    
            // PORTC = data "nyala" ke "i"
            delay_ms(500);   
        };
    };
                       
void main(void)
{
    // komentar lama sudah di hapus,tidak usah tanya lagi.
    DDRC=0xff;   
                                                         
    while (1){   
              
        led_jalan();

        }                 
     
}


Hayo.. apanya yang berubah???.. silahkan di pahami.

Terakhir kita modifikasi supaya bisa berubah arah nyala lednya jika tombol di pencet. Kita gunakan tombol yang ada di PINB.0 dan PINB.1 . Tombol terhubung dengan ground, artinya jika tombol PINB.0 di tekan makan PINB.0 berlogika 0. Jika tidak di tekan PINB.0 tidak berlogika apa-apa (mengambang). Supaya ketika tidak di tekan berlogika 1. Maka kita perlu mengaktifkan resistor pull-up internal.
Contoh:


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

int i,jalan;  // variable i dan jalan dgn type data integer.

unsigned char nyala[9]= {0b00000000,0b00000001,
                         0b00000010,0b00000100,
                         0b00001000,0b00010000,
                         0b00100000,0b01000000,0b10000000};

void led_jalan(unsigned char arah){
      for(i=0;i<9;i++){   // ulangi i=0 sd i-8  
            if (arah == 0){       // jika nilai arah =0;
                PORTC=nyala[i];    
                // PORTC = data "nyala" ke "i" 
            }else{                // jika nilai bukan =0;
                PORTC=nyala[8-i];    
                // PORTC = data "nyala" ke "8 dikurangi i" 
            }
            delay_ms(500);

            if (PINB.0==0 || PINB.1==0){ 
                // jika tombol di PINB.0 atau PINB.1 ditekan
                break;   // keluar dari for.   
            }  
        }
    };
                
      
void main(void)
{
    DDRC=0xff;       
   
    DDRB=0b11111000; // PORTB.0 - PORTB.3 sbg input
    PORTB=0b00000111; // aktifkan resistor pull-up internal 
   
    jalan=0;     // variable jalan awalnya bernilai 0
                                                              
    while (1){  
        if (PINB.0==0){ // jika tombol di PINB.0 ditekan
            jalan=0; // variable jalan diberi nilai 0 
            }  
        if (PINB.1==0){ // jika tombol PINB.1 ditekan
            jalan=1; // variable jalan diberi nilai 1 
            }
        if (jalan==0){  // jika variable jalan = 0
            led_jalan(0);   
            // panggil prosedur  led_jalan(nilai arah = 0);
        }else if(jalan==1){
            led_jalan(1); 
            // panggil prosedur  led_jalan(nilai arah = 1);

              };                  
       
        };                 
     
};




Cara Membuat Program Microcontroller PART III

Program disini tertulis lebih dari 10 baris ( tanpa komentar ), semakin panjang dan banyak program yang ditulis maka memori yang digunakan juga semakin besar. Memori mikrokontroller terbatas misal di Atmega16 hanya  16Kilobyte saja. Atmega 8535 hanya 8kilobyte. Sehingga optimasi code sangat diperlukan agar memori yang digunakan bisa digunakan semaksimal mungkin.
Misal kita ubah menjadi:

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

int i;  // ini variable i dgn type data integer.

void main(void)
{
    // komentar lama sudah di hapus,gak usah nanya lagi.
    DDRC=0xff;                                                            
    while (1){                       
        PORTC=0x00;         // matikan semua led
        delay_ms(500);      // tunda 0.5 s
        for(i=0;i<8;i++){   
            // program di dalam for ini akan di jalankan 8 kali,
            // dimuali dari i=0 sampai i=7.
  
            PORTC=0b00000001<<i;    
            // PORTC = 0b00000001 digeser kekiri sejauh i.

            delay_ms(500);          // tunda 0.5 s

              }      // kembali ke for lagi sampai i=7.
       
        } // kembali ke while                
     
};


Kok sedikit sekali ya.. beda sama sebelumnya.. ???.
Tapi hasilnya sama kan?. 
Program pertama (yang banyak itu) kita ubah pakai array. Dengan array ini kita bisa mengatur nyala led sesuka kita, hanya dengan mengubah nilai di dalam array itu, tanpa mengubah kode utamanya.
Contoh:

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

int i;  // ini variable i dengan type data integer.

unsigned char nyala[9]= {0b00000000,0b00000001,
                         0b00000010,0b00000100,
                         0b00001000,0b00010000,
                         0b00100000,0b01000000,0b10000000};

/* array diatas mempunyai nama " nyala" dengan jumlah indek 9 (dari 0-8)
   dengan type data unsigned char.
   nyala[0]= nyala ke 0 diberi nilai 0b00000000
   nyala[1]= nyala ke 1 diberi nilai 0b00000001
   .... dst
   nyala[8]= nyala ke 8 diberi nilai 0b10000000
*/
                       
void main(void)
{
    // komentar lama sudah di hapus,tidak usah tanya lagi.
    DDRC=0xff;                                                            
    while (1){
                          
        for(i=0;i<9;i++){   // ulangi i=0 sd i-8  
            PORTC=nyala[i];    // PORTC = data "nyala" ke "i"
            delay_ms(500);   
              };
       
        };                 
     
};

Sama juga kan hasilnya???..

Cara Membuat Program Microcontroller PART II

Buka software codevisionAVR. Buatlah new project. Setelah disimpan, hapus saja semua tetapi sisakan header dan void main() nya saja.
contoh programnya sesuai logika berfikir di postingan sebelumnya:

#include <mega16.h>  // ini library untuk chip ATmega 16.
#include <delay.h>  // ini untuk perintah tundaan.
                    // delay_ms(100); tunda selama 100 millisecond   
                    // delay_us(100); tunda selama 100 microsecond
void main(void)
{
    //pertama kita membuat inisialisasi port   
    DDRC=0xff;   // DDRC=0xff; = DDRC=0b11111111;
                 /*                     |   |   |_ _ _ PORTC.0 = output
                                        |   |_ _ _ _ PORTC.1 sampai PORTC.6 = output 
                                        |_ _ _ PORTC.7 = output 


                     DDR = data direction, untuk mengatur port sebagai input
                           atau dijadikan output */ 
                    
    // setelah inisialisasi selanjutnya kita realisasikan logika berfikirnya                                
    while (1){            // <-------- perulangan tiada henti.             
         
        PORTC=0b00000000;   // matikan semua led
        delay_ms(500);      // tunda 0.5 detik
        PORTC=0b00000001;   // nyalakan led di PORC.0
        delay_ms(500);      // tunda 0.5 detik
        PORTC=0b00000010;   // matikan led di PORC.0 nyalakan led di PORC.1
        delay_ms(500);      // tunda 0.5 detik
        PORTC=0b00000100;   // matikan led di PORC.1 nyalakan led di PORC.2
        delay_ms(500);      // tunda 0.5 detik
        PORTC=0b00001000;   // matikan led di PORC.2 nyalakan led di PORC.3
        delay_ms(500);      // tunda 0.5 detik
        PORTC=0b00010000;   // matikan led di PORC.3 nyalakan led di PORC.4
        delay_ms(500);      // tunda 0.5 detik
        PORTC=0b00100000;   // matikan led di PORC.4 nyalakan led di PORC.5
        delay_ms(500);      // tunda 0.5 detik
        PORTC=0b01000000;   // matikan led di PORC.5 nyalakan led di PORC.6
        delay_ms(500);      // tunda 0.5 detik
        PORTC=0b10000000;   // matikan led di PORC.6 nyalakan led di PORC.7
        delay_ms(500);      // tunda 0.5 detik
        };                 // <------sampai disini program diulangi lg dari while (1)      
};// <------end void main. 

/*
Catatan:
dalam bahasa pemrograman C setiap menulis pernyataan harus diakhiri dengan tanda ” ; ”.
DDR adalah register untuk mengatur i/o sebagai input atau output.
Cara penulisan : DDR<NAMAPORT> atau DDR<NAMA PORT>.<NOMOR PORT>
CONTOH: DDRA=0x0f; ß- artinya (PORTD.0 s/d PORTD.3 = sebagai output.
                            dan PORTD.4 s/d PORTD.7 = sebagai input).
jika ada yang sebagai input, kita tambahkan perintah PORT di bawahnya yang nilainya kebalikan dari DDR, untuk mengaktifkan resistor pull-up internal.
CONTOH: DDRA=0x0f;   CONTOH LAGI:  DDRA.1=0;  lagi : DDRC=0b01001001;
       PORTA=0xf0;                PORTA.1=1;           PORTC=0b10110110;

Perintah PORTC digunakan untuk akses keseluruhan (8 bit PORTC). Jika satu port saja cara penulisan:  PORT<NAMA PORT>.<NOMOR PORT>
CONTOH : PORTA.1=0;  ß- Artinya keluarkan logika 0 di PORTA.1 saja.
        PORTD=0xf0; ß- artinya keluarkan Ob11110000 di PORTD.
                     (PORTD.0 s/d PORTD.3 = 0 dan PORTD.4 s/d PORTD.7 = 1).
Untuk input :
       PIN < NAMA PORT > atau PIN < NAMA PORT >.< NOMOR PORT >
CONTOH:       data=PIND; ß- Artinya variabel data bernilai dari semua PORTD.
              data=PIND.0; ß- artinya variable data bernilai PIND.0 saja.
*/       
  
Build program diatas, kemudian di coba / disimulasikan.
Bagai mana mengubah arah nyalanya led? Misal ini menyala kekanan bagaimana supaya menyala kekiri?.. nah lo.. bingung?.


Cara Membuat Program Microcontroller PART I

Jika sudah mempelajari tentang seluk-beluk pemrograman bahasa C langkah selanjutnya adalah “ mulailah mencoba” atau saatnya beraksi. Permasalahan klasiknya adalah “dari mana dulu??”. Nah lo.. dari mana?. “ apa dulu yang di kerjakan?.. “ nulis apa dulu?”. oke.. oke.. gak usah bingung. Mari kita bahas satu-persatu.
Membuat program / code pada dasarnya adalah untuk memecahkan masalah. Panjang pendeknya program dan bentuk program tidak dipermasalahkan yang terpenting adalah program tersebut dapat menyelesaikan masalah yang ada. Lalu masalahnya apa?.
Contoh :
Membuat led menyala berjalan:
masalahnya adalah bagaimana membuat beberapa buah lampu led agar seolah-olah menyala berjalan !!!.

setelah mengetahui masalahnya selanjutnya kita identifikasi masalah tersebut, kita harus membuat/ mengetahui/membayangkan skematik hardwarenya.
Misal:
               

Dari skema diatas dapat di identifikasi 8 buah led terhubung di PORTC.0 sampai PORTC.7 led akan menyala jika output PORT berlogika 1. ditambah ada 3 saklar di PORTB.0, PORTB.1 dan PORTB.2 (tambahan saja). PORT yang ke tombol akan berlogika 0 jika tombol ditekan.

Hardware dah tau.. terus?.

Langkah selanjutnya adalah membuat/membayangkan/memikirkan/melamunkan logika berfikir cara kerjanya. Kita harus berfikir sistematis bagaimana 8 led tersebut agar nampak menyala berjalan.
misal Logikanya adalah seperti ini:
pertama matikan semua led kemudian tunda beberapa saat. Selanjutnya nyalakan led di PORTC.0 kemudian tunda dulu beberapa saat. Setelah itu matikan led di PORTC.0 dan nyalakan Led di PORTC.1 kemudian tunda lagi beberapa saat.. lanjut matikan led di PORTC.1 dan nyalakan led di PORTC.2 tunda lagi beberapa saat.. dan seterusnya sampai led di PORTC.7 menyala kemudian tunda, selanjutnya ulangi lagi dari langkah pertama.. begitu seterusnya selamanya..

programnya gimana???.

Microcontroller AVR

            Atmel AVR adalah jenis mikrokontroler yang paling sering dipakai dalam bidang elektronika dan instrumentasi. Mikrokontroler AVR ini memiliki arsitektur RISC (Reduce Instruction Set Computing) delapan bit, di mana semua instruksi dikemas dalam kode 16-bit (16 bits word) dan sebagian besar instruksi dieksekusi dalam 1 (satu ) siklus clock.
            Nama AVR sendiri berasal dari "Alf (Egil Bogen) and Vegard (Wollan) 's Risc processor" dimana Alf Egil Bogen dan Vegard Wollan adalah dua penemu berkebangsaan Norwegia yang menemukan mikrokontroller AVR yang kemudian diproduksi oleh Atmel.
Secara umum, AVR dapat dikelompokkan dalam 10 kelas, yaitu:
  • Keluarga AVR Otomotif
  • Keluarga AVR Z-Link
  • Keluarga AVR Manajemen Batere
  • Keluarga AVR CAN
  • Keluarga AVR LCD
  • Keluarga AVR Pencahayaan
  • Keluarga TinyAVR
  • ATtiny 2313
  • ATtiny 10
  • ATtiny 13
  • ATtiny 22
  • Dll..
  • Keluarga MegaAVR
  • ATmega 16
  • ATmega 32
  • ATmega 8535
  • ATmega 8
  • ATmega 64
  • Dll..
  • Keluarga AVR USB
  • Keluarga XMEGA


Untuk menulis program dan pada AVR, telah disediakan sebuah software yang bernama AVR Studio. Selain itu, terdapat beberapa cross compiler dari pihak ketiga yang dapat digunakan seperti CodeVision AVR Compiler atau ICC AVR.

Mengenal Microcontroller


          Mikrokontroler adalah suatu alat elektronika digital yang mempunyai masukan dan keluaran serta kendali dengan program yang bisa ditulis dan dihapus dengan cara khusus, cara kerja mikrokontroler sebenarnya membaca dan menulis data. Mikrokontroler merupakan komputer didalam chip yang digunakan untuk mengontrol peralatan elektronik, yang menekankan efisiensi dan efektifitas biaya. Secara harfiahnya bisa disebut "pengendali kecil" dimana sebuah sistem elektronik yang sebelumnya banyak memerlukan komponen komponen pendukung seperti IC TTL dan CMOS dapat direduksi/diperkecil dan akhirnya terpusat serta dikendalikan oleh mikrokontroler ini. 
Dengan penggunaan mikrokontroler ini maka :
  • Sistem elektronik akan menjadi lebih ringkas
  •  Rancang bangun sistem elektronik akan lebih cepat karena sebagian besar dari sistem adalah perangkat lunak yang mudah dimodifikasi
  • Pencarian gangguan lebih mudah ditelusuri karena sistemnya yang kompak
Namun demikian tidak sepenuhnya mikrokontroler bisa mereduksi komponen IC TTL dan CMOS yang seringkali masih diperlukan untuk aplikasi kecepatan tinggi atau sekedar menambah jumlah saluran masukan dan keluaran (I/O). Dengan kata lain, mikrokontroler adalah versi mini atau mikro dari sebuah komputer karena mikrokontroler sudah mengandung beberapa periferal yang langsung bisa dimanfaatkan, misalnya port paralel, port serial,komparator, konversi digital ke analog (DAC), konversi analog ke digital dan sebagainya hanya menggunakan sistem minimum yang tidak rumit atau komples.