Você está na página 1de 19

/***************************************************** This program was produced by the CodeWizardAVR V2.03.

9 Standard Automatic Program Generator Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l. http://www.hpinfotech.com Project : Version : Date : 02/10/2011 Author : Toni_ST Company : Sufi_ST Comments: Chip type : ATmega16 Program type : Application AVR Core Clock frequency: 12,000000 MHz Memory model : Small External RAM size : 0 Data Stack size : 256 *****************************************************/ #include <mega16.h> #include <delay.h> #include <stdio.h> //Tombol Push Button pada robot #define ok PINC.0 #define cancel PINC.1 #define atas PINC.2 #define bawah PINC.3 #define kanan PINC.4 #define kiri PINC.5 #define buzz PORTC.6 //outputan #define senka PIND.0 #define senki PIND.1 #asm .equ __lcd_port=0x18 ;PORTB #endasm #include <lcd.h> #define ADC_VREF_TYPE 0x60 //inisialisasi ADC untuk sensor garis pastinya pada PORTA // 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 & 0xff); // Start the AD conversion ADCSRA =0x40; // Wait for the AD conversion to complete while ((ADCSRA & 0x10)==0); ADCSRA =0x10; return ADCH; }

unsigned char sensor1,x,xx; unsigned char xpwm,pwmL,pwmR; // Timer 0 overflow interrupt service routine interrupt [TIM0_OVF] void timer0_ovf_isr(void) { // Place your code here TCNT0=0xCC; // belum jadi portnya g tw xpwm++; if(xpwm>=pwmL) PORTD.3=0; else PORTD.3=1; if(xpwm>=pwmR) PORTD.5=0; else PORTD.5=1; } // Declare your global variables here unsigned char buff[33],buff1[33],buff2[33],buff3[33],buff4[33],buff5[33],buff6[3 3],buff7[33]; unsigned char ADC[10],ADC1[10],ADC2[10],ADC3[10],ADC4[10],ADC5[10],ADC6[10],ADC7 [10]; unsigned char s1[10],s2[10],s3[10],s4[10],s5[10],s6[10],s7[10],s8[10]; //eeprom maksudnya untuk menampung data yang disimpan sebagai perbandingan eeprom unsigned char tengah[10],sen[10],line[10],back[10],simpan,baca; unsigned char i,y,n,sendat; unsigned char buff[33],buff1[33],buff2[33]; static int e=0; int sensor[10],s[10],data; char buffpwmki[33],buffpwmka[33],bufftampil[33]; int get_sensor,set_point=0; int error=0,d_error=0; static int old_error=0; volatile int Vref; volatile int u1,u2,u1x,u2x; void adc1() { ADC[0]=read_adc(0); lcd_gotoxy(0,0); sprintf(buff,"%d",ADC[0]); lcd_puts(buff); ADC[1]=read_adc(1); lcd_gotoxy(4,0); sprintf(buff1,"%d",ADC[1]); lcd_puts(buff1); ADC[2]=read_adc(2); lcd_gotoxy(8,0); sprintf(buff2,"%d",ADC[2]); lcd_puts(buff2); ADC[3]=read_adc(3); lcd_gotoxy(12,0); sprintf(buff3,"%d",ADC[3]); lcd_puts(buff3); ADC[4]=read_adc(4);

lcd_gotoxy(0,1); sprintf(buff4,"%d",ADC[4]); lcd_puts(buff4); ADC[5]=read_adc(5); lcd_gotoxy(4,1); sprintf(buff5,"%d",ADC[5]); lcd_puts(buff5); ADC[6]=read_adc(6); lcd_gotoxy(8,1); sprintf(buff6,"%d",ADC[6]); lcd_puts(buff6); ADC[7]=read_adc(7); lcd_gotoxy(12,1); sprintf(buff7,"%d",ADC[7]); lcd_puts(buff7); delay_ms(100); lcd_clear(); } void Go(unsigned char motka,unsigned char motki){ PORTD.4=1; PORTD.6=0; pwmL=motki; pwmR=motka; } void Maju(){ PORTD.4=1; PORTD.6=0; } void Mundur(){ PORTD.4=0; PORTD.6=1; } void turnL(){ PORTD.4=0; PORTD.6=0; } void turnR(){ PORTD.4=1; PORTD.6=1; } void stop(){ PORTD.4=0; PORTD.6=0; } pwmL=0; pwmR=0;

void belokL(unsigned char motka,unsigned char motki){ PORTD.4=0; pwmL=motka; PORTD.6=0; pwmR=motki; } void belokR(unsigned char motka,unsigned char motki){ PORTD.4=1; pwmL=motka; PORTD.6=1; pwmR=motki;

} void cekline() { lcd_clear(); for (i=0;i<=7;i++) //ngulang sampai 7 kali karena sensor s aya ada 7 { //kalo mau pakai delapan ganti aja dengan angk a 7 karena hitungnya dari nol lcd_gotoxy(0,0); //posisi letak kursor LCD bila pakai lcd b aris atas kolom nol sprintf(buff,"%d cek line",i); //nampilin data tiap sensor lcd_puts(buff); //tamplilan juga line[i]=read_adc(i); //data dari sensor disimpan dalam variab el line array urutan ke i karena looping lcd_gotoxy(5,1); //posisi letak kursor LCD bila pakai lcd baris bawah kolom nol sprintf(buff1,"%d",line[i]); //nampilin data tiap sensor lcd_puts(buff1); //tamplilan juga delay_ms(500); lcd_clear(); } for(i=0;i<=7;i++) { tengah[i]=(line[i]+back[i])/2; } delay_ms(10); lcd_clear(); i=0; delay_ms(100); lcd_clear(); i=0; //setelah selesai maka i di nolkan lagi karena a kan digunakan unutk sub program lain } //sub proagram untuk mendeteksi garis hitam //atau back grown //letakkan di bagian hitam //jalankan rutin ini //sistim kerja sama dengan pengecekan garis putih //akan tetapi penyimpanan variabel beda void cekback() { lcd_clear(); for (i=0;i<=7;i++) { lcd_gotoxy(0,0); sprintf(buff,"cek latar %d",i); lcd_puts(buff); back[i]=read_adc(i); //simpan di variabel array bernama back dengan urutan ke i //ke i maksudnya setiap pengulangan berarti beda angka d i akhir varibelnya lcd_gotoxy(5,1);

sprintf(buff1,"%d",back[i]); lcd_puts(buff1); delay_ms(50); buzz=0;delay_ms(50); buzz=1;delay_ms(50); lcd_clear(); } //tambahan.... //disini karena saya menggunakan robot pada garis putih dan background hitam //maka saya langsung tambahkan program berikut ini yaitu //menghitung tengah untuk perbandingan //program ini bisa juga di buatkan pada sub program lainnya //yang pasti program ini di jalankan setelah pengecekan garis backgraund dan gar is putih //agar mempermudah kalkulasi nantinya for(i=0;i<=7;i++) { tengah[i]=(line[i]+back[i])/2; } delay_ms(10); lcd_clear(); i=0; } //cuma menu doang pengen tau? komen ja ntar di posting void cekdat() { if (kanan==0){i++;} if (kiri==0){i--;} if (i>=7){i=7;} lcd_gotoxy(0,0); sprintf(buff,"%d",i); lcd_puts(buff); lcd_gotoxy(10,1); sprintf(buff1,"%d",tengah[i]); lcd_puts(buff1); delay_ms(100); lcd_clear(); } //ini sub program penting dimana juga merupakan perhitungan untuk mendapatkan ko mparator. //artinya jika sensor yang terbaca lebih besar dari data garis maka dianggap nol "0" //sedangkan jika lebih kecil maka dianggap satu "1" //sehingga ini menjadi komparator tersendiri untuk mempermudah mengolah data void hitam() { for(i=0;i<=7;i++) // hitam 175-250 { // putih 10-60 s[i]=read_adc(i); if (s[i]>(back[i]-50)){sensor[i]=1;} \ else {sensor[i]=0;} }

//perintah berikut ini adalah program konversi beberapa variable biner menjadi d esimal //pada bit ke 7 (128) saya nol kan karena saya menggunakan 7 sensor saja. //jika menggunakan 8 maka ganti dengan nama variable penyimpanan data sensor ter sebut sendat=(sensor[0]*1)+(sensor[1]*2)+(sensor[2]*4)+(sensor[3]*8)+(sensor[4]*16 )+(sensor[5]*32)+(sensor[6]*64)+(sensor[7]*128); simpan=sendat; //disini data yang telah dihitung digabungkan men jadi 1 variabel saja agar mudah dilakukan scanning garis } void putih() { for(i=0;i<=7;i++) // hitam 175-250 { // putih 10-60 s[i]=read_adc(i); if (s[i]>(back[i]+30)){sensor[i]=0;} \ else {sensor[i]=1;} } //perintah berikut ini adalah program konversi beberapa variable biner menjadi d esimal //pada bit ke 7 (128) saya nol kan karena saya menggunakan 7 sensor saja. //jika menggunakan 8 maka ganti dengan nama variable penyimpanan data sensor ter sebut sendat=(sensor[0]*1)+(sensor[1]*2)+(sensor[2]*4)+(sensor[3]*8)+(sensor[4]*16 )+(sensor[5]*32)+(sensor[6]*64)+(sensor[7]*128); simpan=sendat; //disini data yang telah dihitung digabungkan men jadi 1 variabel saja agar mudah dilakukan scanning garis } void ceksensor() { putih(); lcd_gotoxy(0,0); sprintf(s6,"L= %d",pwmL); lcd_puts(s6); lcd_gotoxy(10,0); sprintf(s6,"R= %d",pwmR); lcd_puts(s6); lcd_gotoxy(11,1); sprintf(s1,"%d",sensor[0]); lcd_puts(s1); lcd_gotoxy(10,1); sprintf(s2,"%d",sensor[1]); lcd_puts(s2); lcd_gotoxy(9,1); sprintf(s3,"%d",sensor[2]); lcd_puts(s3); lcd_gotoxy(8,1); sprintf(s4,"%d",sensor[3]);

lcd_puts(s4); lcd_gotoxy(7,1); sprintf(s5,"%d",sensor[4]); lcd_puts(s5); lcd_gotoxy(6,1); sprintf(s6,"%d",sensor[5]); lcd_puts(s6); lcd_gotoxy(5,1); sprintf(s7,"%d",sensor[6]); lcd_puts(s7); lcd_gotoxy(4,1); sprintf(s8,"%d",sensor[7]); lcd_puts(s8); delay_ms(50); lcd_clear(); } eeprom eeprom eeprom eeprom int kpx=0; int kix=0; int kdx=0; unsigned char speedx=225;

int intervalPWM,PV,rate,last_error; int P,D,a,error; int MV; int Kp; unsigned char Ki; int Kd; unsigned char SP=0; unsigned char MAXPWM; unsigned char MINPWM; int intervalPWM; void scan_hitam() { putih();// hitam(); sendat&=0b11111111; switch(sendat) { case 0b11111110: Maju(); PV = 7; break; case 0b11111000: case 0b11111100: Maju(); PV = 6; break; case 0b11111101: Maju(); PV = 5; break; case 0b11110001: case 0b11111001: Maju(); // ujung kiri

PV = 4; break; case 0b11111011: Maju(); PV = 3; break; case 0b11100011: case 0b11110011: Maju(); PV = 2; break; case 0b11110111: Maju(); PV = 1; break; case 0b11100111: Maju(); PV = 0; break; case 0b11101111: Maju(); PV = -1; break; case 0b11000111: case 0b11001111: Maju(); PV = -2; break; case 0b11011111: Maju(); PV = -3; break; case 0b10001111: case 0b10011111: Maju(); PV = -4; break; case 0b10111111: Maju(); PV = -5; break; case 0b00011111: case 0b00111111: Maju(); PV = -6; break; case 0b01111111: Maju(); PV = -7; break; }

// tengah

// ujung kanan

Kp = 10;//kpx; Ki = kix; Kd = 2;//kdx; MAXPWM = speedx; MINPWM = 30; intervalPWM = (MAXPWM - MINPWM) / 8; error = SP - PV;

P = (Kp * error) / 10; a = a + error; // integral a = (a * Ki) / 10; rate = error - last_error; D = (rate * Kd) / 10; last_error = error; MV = P + a + D ; if (MV == 0) { //lurus, maju cepat pwmL = MAXPWM; pwmR = MAXPWM; } else if (MV > 0) { // alihkan ke kiri pwmR = MAXPWM - ((intervalPWM - 20) * MV); pwmL = (MAXPWM - (intervalPWM * MV) - 15); if if if if } else (pwmL < MINPWM) pwmL = MINPWM; (pwmL > MAXPWM) pwmL = MAXPWM; (pwmR < MINPWM) pwmR = MINPWM; (pwmR > MAXPWM) pwmR = MAXPWM; if (MV < 0) { // alihkan ke kanan

pwmL = MAXPWM + ( ( intervalPWM - 20 ) * MV); pwmR = MAXPWM + ( ( intervalPWM * MV ) - 15 ); if if if if } } void scan_putih() { putih(); sendat&=0b11111111; switch(sendat) { case case case case case case case case case case case case case 0b11111110: 0b11111100: 0b11111101: 0b11111000: 0b11111001: 0b11111011: 0b11110001: 0b11110011: 0b11110111: 0b11100111: 0b11000111: 0b11001111: 0b11011111: PV PV PV PV PV PV PV PV PV PV PV PV PV = = = = = = = = = = = = = 7; 6; 6; 5; 5; 4; 3; 2; 1; 0; -1; -2; -3; Maju(); Maju(); Maju(); Maju(); Maju(); Maju(); Maju(); Maju(); Maju(); Maju(); Maju(); Maju(); Maju(); Maju(); Maju(); Maju(); break; break; break; break; break; break; break; break; break; break; //tengah break; break; break; break; break; break; (pwmL (pwmL (pwmR (pwmR < > < > MINPWM) MAXPWM) MINPWM) MAXPWM) pwmL pwmL pwmR pwmR = = = = MINPWM; MAXPWM; MINPWM; MAXPWM;

case 0b10001111: case 0b10011111: case 0b10111111:

PV = -4; PV = -5; PV = -5;

case 0b00011111: case 0b00111111: case 0b01111111:

PV = -6; PV = -7; PV = -7;

Maju(); Maju(); Maju();

break; break; break;

// case 0b11111111: // loss // if (PV < 0) { turnL();} // else if (PV > 0) { turnR();}

} /*if(x){pwmL=100; pwmR=100; turnR();} else {pwmL=100; pwmR=100; turnL(); } break; //else {PV = 0; pwmL = MAXPWM - 5; pwmR = MAXPWM; Maju(); } if (1){pwmL = 150; pwmR = 150; turnL();} else {pwmL = 150; pwmR = 150; turnR();} */ Kp = 10;//kpx; Ki = 2;//kix; Kd = 5;//kdx; MAXPWM = 225;//speedx; MINPWM = 50; intervalPWM = (MAXPWM - MINPWM) / 8; error = SP - PV; P = (Kp * error) / 10; a = a + error; // integral a = (a * Ki) / 10; rate = error - last_error; D = (rate * Kd) / 10; last_error = error; MV = P + a + D ; if (MV == 0) { //lurus, maju cepat pwmL = MAXPWM; pwmR = MAXPWM; } else if (MV > 0) { // alihkan ke kiri pwmR = MAXPWM - ((intervalPWM - 20) * MV); pwmL = (MAXPWM - (intervalPWM * MV) - 15); if if if if } else (pwmL < MINPWM) pwmL = MINPWM; (pwmL > MAXPWM) pwmL = MAXPWM; (pwmR < MINPWM) pwmR = MINPWM; (pwmR > MAXPWM) pwmR = MAXPWM; if (MV < 0) { // alihkan ke kanan

pwmL = MAXPWM + ( ( intervalPWM - 20 ) * MV); pwmR = MAXPWM + ( ( intervalPWM * MV ) - 15 );

if if if if } }

(pwmL (pwmL (pwmR (pwmR

< > < >

MINPWM) MAXPWM) MINPWM) MAXPWM)

pwmL pwmL pwmR pwmR

= = = =

MINPWM; MAXPWM; MINPWM; MAXPWM;

/* //Tombol Push Button pada robot ok PINC.0 cancel PINC.1 4. atas PINC.2 3. bawah PINC.3 2. kanan PINC.4 1. kiri PINC.5 */ void set_PID(){ lcd_gotoxy(0,0); lcd_putsf("BISMILLAH...."); delay_ms(1000); lcd_clear(); delay_ms(50); menu: lcd_clear(); while(1){ lcd_gotoxy(0,0); lcd_putsf("1.KP"); lcd_gotoxy(8,0); lcd_putsf("2.KD"); lcd_gotoxy(0,1); lcd_putsf("3.KI"); lcd_gotoxy(8,1); lcd_putsf("4.SPEED"); if (kiri==0){delay_ms(200); buzz=0;delay_ms(50); buzz=1;delay_ms(50); go to set_Kp; }; if (kanan==0){delay_ms(200);buzz=0;delay_ms(50); buzz=1;delay_ms(50); go to set_Kd; }; if (bawah==0){delay_ms(200);buzz=0;delay_ms(50); buzz=1;delay_ms(50); go to set_Ki; }; if (atas==0){delay_ms(200);buzz=0;delay_ms(50); buzz=1;delay_ms(50); got o set_speed; }; if (ok==0){delay_ms(200);buzz=0;delay_ms(50); buzz=1;delay_ms(50); goto GO; }; if (cancel==0){delay_ms(500);buzz=0;delay_ms(50); buzz=1;delay_ms(50); c ekback(); }; } set_Kp: lcd_clear(); while(1) { if(atas==0){delay_ms(100); kpx++; buzz=0;delay_ms(50); buzz=1;delay_ms

(50);} if(bawah==0){delay_ms(100); kpx--; s(50);} lcd_gotoxy(0,0); lcd_putsf("SET KP :"); sprintf(bufftampil,"%d ",kpx); lcd_gotoxy(6,1); lcd_puts(bufftampil); if (cancel==0){delay_ms(300);buzz=0;delay_ms(50); buzz=1;delay_ms(50); g oto menu; }; } set_Kd: lcd_clear(); while(1) { if(atas==0){delay_ms(100); kdx++; (50);} if(bawah==0){delay_ms(100); kdx--; buzz=0;delay_ms(50); buzz=1;delay_ms (50);} lcd_gotoxy(0,0); lcd_putsf("SET KD :"); sprintf(bufftampil,"%d ",kdx); lcd_gotoxy(6,1); lcd_puts(bufftampil); if (cancel==0){delay_ms(300); buzz=0;delay_ms(50); buzz=1;delay_ms(50); goto menu; }; } set_Ki: lcd_clear(); while(1) { if(atas==0){delay_ms(100); kix++; (50);} if(bawah==0){delay_ms(100); kix--; buzz=0;delay_ms(50); buzz=1;delay_ms (50);} lcd_gotoxy(0,0); lcd_putsf("SET KI :"); sprintf(bufftampil,"%d ",kix); lcd_gotoxy(6,1); lcd_puts(bufftampil); if (cancel==0){delay_ms(300);buzz=0;delay_ms(50); buzz=1;delay_ms(50); g oto menu;}; } set_speed: lcd_clear(); while(1) { if(atas==0){delay_ms(100); speedx++; y_ms(50);} if(bawah==0){delay_ms(100); speedx--; buzz=0;delay_ms(50); buzz=1;dela buzz=0;delay_ms(50); buzz=1;dela buzz=0;delay_ms(50); buzz=1;delay_ms buzz=0;delay_ms(50); buzz=1;delay_ms buzz=0;delay_ms(50); buzz=1;delay_m

y_ms(50);} lcd_gotoxy(0,0); lcd_putsf("SET SPEED MAX :"); sprintf(bufftampil,"%d ",speedx); lcd_gotoxy(6,1); lcd_puts(bufftampil); if (cancel==0){delay_ms(200);buzz=0;delay_ms(50); buzz=1;delay_ms(50); g oto menu; }; } GO: /* while (1){ ceksensor(); hitsen(); scan(); }*/ } void PID(){ menu: lcd_clear(); while(1){ lcd_gotoxy(0,0); lcd_putsf("SET_SPEED"); lcd_gotoxy(0,1); lcd_putsf("GO_BOT"); lcd_gotoxy(9,1); lcd_putsf("SENSOR"); if (atas==0){delay_ms(100);buzz=0;delay_ms(50); buzz=1;delay_ms(50); got o set_speed; }; if (kiri==0){delay_ms(100);buzz=0;delay_ms(50); buzz=1;delay_ms(50); got o sensor; }; if (ok==0){delay_ms(100);buzz=0;delay_ms(50); buzz=1;delay_ms(50); goto GO; }; if (cancel==0){delay_ms(200);buzz=0;delay_ms(50); buzz=1;delay_ms(50); g oto check; }; } set_speed: lcd_clear(); while(1) { if(atas==0){delay_ms(50); speedx+=5; y_ms(50);} if(bawah==0){delay_ms(50); speedx-=5; y_ms(50);} lcd_gotoxy(0,0); lcd_putsf("SET SPEED MAX :"); sprintf(bufftampil,"%d ",speedx); buzz=0;delay_ms(50); buzz=1;dela buzz=0;delay_ms(50); buzz=1;dela

lcd_gotoxy(6,1); lcd_puts(bufftampil); if (cancel==0){delay_ms(200);buzz=0;delay_ms(50); buzz=1;delay_ms(50); g oto menu; }; } sensor: lcd_clear(); while(1) { ceksensor(); if (cancel==0){delay_ms(200);buzz=0;delay_ms(50); buzz=1;delay_ms(50); g oto menu; }; } check: lcd_clear(); while(1) { cekback(); goto menu; } GO: } unsigned char ha[33],ha_2[33]; unsigned char jml,eks; void set_4(unsigned char eks){ while(jml<eks){ if(PINA==0b00000000){ while(PINA==0b00000000){ Go(200,200); } jml++; buzz=0;delay_ms(50); buzz=1;delay_ms(50); } else { scan_hitam(); } sprintf(ha,"%d ",jml); lcd_gotoxy(7,0); lcd_puts(ha); } jml=0; } unsigned char sen2; unsigned char x; void tikung_1(){ sen2=PIND; sen2&=0b11; switch(sen2){ case 0b01: belokR(200,200);x=1; break; case 0b10: belokL(200,200);x=0; break; case 0b11: if(x==1){belokR(200,200);break;} else {belokL(200,200);}

case 0b00: if(x==0){belokL(200,200);break;} else {belokR(200,200);} } } unsigned char z,metu[33]; void scan_siku(unsigned char x){ while(z<x){ if(senki==1 && PINA==0b11111111){ stop(); while(PINA==0b11111111){belokL(170,170);} stop(); z++; //tikung_1(); } else if(senka==1 && PINA==0b11111111){ stop(); while(PINA==0b11111111){belokR(170,170);} stop(); z++; //tikung_1(); } else { scan_hitam(); } sprintf(metu,"%d ",z); lcd_gotoxy(7,0); lcd_puts(metu); } z=0; } unsigned char q; void scan_maksa(unsigned char hadap,unsigned char jumlah){ if(hadap=='R'){ while(q<jumlah){ if(senki==0 && senka==0 && PINA==0b11111111){ stop(); while(senka==0){belokR(170,170);} while(PINA==0b11111111){belokR(170,170);} stop(); q++; } else if((senki==0 && PINA==0b11111111) (senki==0 && PINA!=0b111111 11)){ stop(); while(PINA==0b11111111){belokR(170,170);} stop(); q++; } else if((senka==0 && PINA==0b11111111) (senka==0 && PINA!=0b111111 11)){ stop(); while(PINA==0b11111111){belokR(170,170);} stop(); q++; //tikung_1(); } else { scan_hitam(); }

sprintf(metu,"%d ",q); lcd_gotoxy(7,0); lcd_puts(metu); } q=0; } else if(hadap=='L'){ while(q<jumlah){ if(senki==0 && senka==0 && PINA==0b11111111){ stop(); while(senki==0){belokL(170,170);} while(PINA==0b11111111){belokL(170,170);} stop(); q++; } else if((senki==0 && PINA==0b11111111) (senki==0 && PINA!=0b111111 11)){ stop(); while(PINA==0b11111111){belokL(170,170);} stop(); q++; //tikung_1(); } else if((senka==0 && PINA==0b11111111) (senka==0 && PINA!=0b111111 11)){ stop(); while(PINA==0b11111111){belokL(170,170);} stop(); q++; //tikung_1(); } else { scan_hitam(); } sprintf(metu,"%d ",q); lcd_gotoxy(7,0); lcd_puts(metu); } q=0; } } void main(void) { // Declare your local variables here unsigned char x,metu[33],y; // 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=Out Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=1 State5=P State4=P State3=P State2=P State1=P State0=P PORTC=0x7F; DDRC=0x40; // Port D initialization // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=In Func0=Ou t // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=T State0=1 PORTD=0x03; DDRD=0x78; // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped // Mode: Normal top=FFh // OC0 output: Disconnected TCCR0=0x02; TCNT0=0x00; OCR0=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: Timer 1 Stopped // Mode: Normal top=FFFFh // OC1A output: Discon. // OC1B output: Discon. // 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=0x00; TCCR1B=0x00; 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=0x01; // Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80; SFIOR=0x00; // Global enable interrupts #asm("sei") // ADC initialization // ADC Clock frequency: 750.000 kHz // ADC Voltage Reference: AVCC pin // ADC High Speed Mode: On // ADC Auto Trigger Source: None // Only the 8 most significant bits of // the AD conversion result are used ADMUX=ADC_VREF_TYPE & 0xff; ADCSRA=0x84; SFIOR&=0xEF; SFIOR =0x10; // LCD module initialization lcd_init(16); //while(ok!=0){} PID(); lcd_clear(); while (1) { // Place your code here scan_siku(3); z=0; lcd_clear(); scan_maksa('R',1); q=0; lcd_clear(); scan_maksa('L',1); q=0; lcd_clear(); stop(); while(y<2){ if(senka==0 && PINA!=0b11111111){ stop(); belokR(180,180); delay_ms(250); stop(); while(PINA==0b11111111){belokR(180,180);} stop(); y++; } else { scan_hitam(); } sprintf(metu,"%d ",y);

lcd_gotoxy(7,0); lcd_puts(metu); } y=0; lcd_clear(); stop();delay_ms(100); set_4(3); stop(); delay_ms(5000); }; }

Você também pode gostar