Memprogram Mikrokontroler dengan CodevisionAVR - ISOKEI

Latest

Whatever the content, it's OK!

Sunday 31 July 2011

Memprogram Mikrokontroler dengan CodevisionAVR

Pengertian Mikrokontroler

Sebelum kita memprogram mikrokontroler, ada baiknya kita tahu dulu apa itu mikrokontroler. Secara sederhana mikrokontroler adalah sebuah mikroprosesor lengkap yang disematkan di dalam sebuah chip. bedanya dengan mikroprosesor adalah mikroprosesor dilengkapi dengan memori dan port input output atau I/O sedangkan mikroprosesor tidak. untuk menjalankan mikrokontroler ini, kita perlu memprogramnya. Program dapat kita buat menggunakan software aplikasi lalu mengkompilenya dan kemudian menguploadnya ke perangkat mikrokontroler.
Dalam memprogram mikrokontroler biasa menggunakan 3 bahasa
1.      Asambly (susah karena rada jadul)
2.      Bahasa C (lebih mudah)
3.      Bahasa basic (yang paling mudah)
Namun pada kali ini kita akan mencoba memprogram mikrokontroler dengan bahasa C pada software CodevisionAVR. Kenapa CodevisionAVR? Karena CodevisionAVR. Sangat cocok untuk pemula (padahal emang baru belajar ini). Silakan menginstal Codevision terlebih dahulu, atau unduh disini bagi yang belum punya. Setelah instalasi selesai, jalankan program CodevisionAVR. 
Menjalankan CodevisionAVR    

·  Pilih file – new, kemudian muncul box dialog, pilih project  

·  Kita diberi pilihan, apakah menggunakan wizard atau tidak. Jika iya, pilih yes.

·  Akan mucul box dialog lagi, silakan pilih chip yang akan digunakan. Misalnya ATmega8535  



·  Buka tab Ports. Pada bagian ini, kita diberi kesempatan untuk mengatur ports-ports yang akan digunakan. Pilih PortC sebagai output.  

·  Jika sudah, klik file-generate,save and Exit

·  Proses menyimpan file dilakukan sebanyak 3 kali, masing-masing  menghasilkan ekstensi *.C , *.prj, dan *.cwp.  Simpan dengan nama file ledblink.  

·  Setelah proses meyimpan file selesai, mucul seperti dibawah ini. Disinilah kita akan menuliskan program. 

·  berikut listing program yang kita buat, boleh dimodifikasi.
#include <mega16.h>
#include <delay.h>

#define roda_kaplus PORTD.3
#define roda_kamin PORTD.2
#define roda_kirmin PORTD.1
#define roda_kirplus PORTD.0
#define pwm_kanan OCR1BL
#define pwm_kiri OCR1AL
#define sensor PINA
 void jalan();

int e=0,e0=0,pk=0,ik=0,dk=0,pi=0,ii=0,di=0,ok=0,oi=0;
eeprom int Kp=85, Ki=0, Kd=510;
eeprom int speed=255;
void satu(){
                               
                e=14;
                jalan();
                }

 void jalan(){
 //motor kanan

         
            pk=Kp*e;
            dk=(e-e0)*Kd;
            ok=speed-(pk+ik+dk);          
           
            if(ok<=0){ roda_kaplus=0;
                        roda_kamin=1;
                       ok=-ok; }
            else{ roda_kaplus=1; roda_kamin=0; };
           
            if(ok>=speed){ ok=speed; }
            pwm_kanan=ok;
           
            //motor kiri
            pi=Kp*e;
            di=(e-e0)*Kd;
            oi=speed+(pi+ii+di);
            if(oi<=0){ roda_kirplus=0;
                        roda_kirmin=1;
                        oi=-oi; }                      
            else{ roda_kirplus=1; roda_kirmin=0; };
            if(oi>=speed){ oi=speed; }
            pwm_kiri=oi;
           
            e0=e;
            
           
            }
                                   
// Declare your global variables here

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

// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;

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

// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func7=In Func6=In Func5=Out Func4=Out Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=0 State4=0 State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x30;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 46.875 kHz
// Mode: Fast PWM top=03FFh
// OC1A output: Non-Inv.
// OC1B output: Non-Inv.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0xA1;
TCCR1B=0x0D;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;

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

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

while (1)
      {switch(sensor){
                      
            case 0b10000000 : e=-7;  jalan();break;
            case 0b11000000 : e=-6;  jalan();break;
            case 0b01000000 : e=-5;  jalan();break;
            case 0b01100000 : e=-4;  jalan();break;
            case 0b00100000 : e=-2;  jalan();break;
            case 0b00110000 : e=-1;  jalan();break;
            case 0b00010000 : e=0;   jalan();break;
            case 0b00011000 : e=1;   jalan();break;
            case 0b00001000 : e=2;   jalan();break;
            case 0b00001100 : e=4;   jalan();break;
            case 0b00000100 : e=5;   jalan();break;
            case 0b00000110 : e=6;   jalan();break;
            case 0b00000010 : e=7;   jalan();break;
          
      // Place your code here
    
      };
}
}

 

3 comments: