You are on page 1of 6

/***************************************************** This program was produced by the CodeWizardAVR V1.24.

7d Evaluation Automatic Program Generator Copyright 1998-2005 Pavel Haiduc, HP InfoTech s.r.l. http://www.hpinfotech.com e-mail:office@hpinfotech.com Project : Version : Date : 10/10/2012 Author : Freeware, for evaluation and non-commercial use only Company : Comments: Chip type : ATmega8535 Program type : Application Clock frequency : 1.000000 MHz Memory model : Small External SRAM size : 0 Data Stack size : 128 *****************************************************/ #include <mega8535.h> #include <delay.h> #define ADC_VREF_TYPE 0x40 // Read the AD conversion result unsigned int 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 ADCW; } // Declare your global variables here //fungsi min float min(float A, float B){ if (A>B) { return B;} else {return A;} } //fungsi max float max(float C, float D, float E){ if (C>D) { return C;} else if (D>E) {return D;} else {return E;} } void main(void) { unsigned char suhu, SP_suhu, esuhu, desuhu, esuhu_1; float eN1, eN2,eN3, eZ1, eZ2, eZ3, eP1, eP2, eP3;

//fungsi keanggotaan error suhu float deN1, deN2,deN3, deZ1, deZ2, deZ3, deP1, deP2, deP3; //fungsi keanggotaan delta error suhu float eN,eZ, eP, deN,deZ, deP; float R1, R2, R3, R4, R5, R6, R7, R8, R9; float outN, outZ, outP, N, Z, P; int out; // 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=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=O ut // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 PORTC=0x00; DDRC=0xFF; // Port D initialization // Func7=In Func6=In Func5=out Func4=out Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T 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: 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=0x00; // Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80; SFIOR=0x00; // ADC initialization // ADC Clock frequency: 125.000 kHz // ADC Voltage Reference: AVCC pin // ADC High Speed Mode: Off // ADC Auto Trigger Source: None ADMUX=ADC_VREF_TYPE; ADCSRA=0x83; SFIOR&=0xEF; esuhu_1=0; while (1) { // Place your code here SP_suhu=35; //kalau ingin menentukan setpoint suhu rubah disini suhu = read_adc (0); // pembacaan sensor suhu delay_us(10); PORTB=suhu; //test pembacaan sensor suhu esuhu= SP_suhu-suhu; //menentukan errorsuhu desuhu=esuhu-esuhu_1; //menentukam deltaerror eNB1=-15; eNB2=-10; eNB3=-5; //fungsi keanggotaan error NB eNS1=-10 ; eNS2=-5 ; eNS3=0 ;//fungsi keanggotaan error NS eZ1=-5; eZ2=0; eZ3=5; //fungsi keanggotaan error Z ePS1=0; ePS2=5; ePS3=10; //fungsi keanggotaan error PS ePB1=5; ePB2=10; ePB3=15; //fungsi keanggotaan error PB

deNB1=-15; deNB2=-10; deNB3=-5; //fungsi keanggotaan derror NB deNS1=-10 ; deNS2=-5 ; deNS3=0 ;//fungsi keanggotaan derror NS deZ1=-5; deZ2=0; deZ3=5; //fungsi keanggotaan derror Z dePS1=0; dePS2=5; dePS3=10; //fungsi keanggotaan derror PS dePB1=5; dePB2=10; dePB3=15; //fungsi keanggotaan derror PB //fuzifikasi error if ((esuhu>=eNB1) && (esuhu<=eNB2)) { eNB=1;eNS=0;eZ=0;ePS=0;ePB=0; } else if ((esuhu>=eNB2) && (esuhu<=eNB3) && (esuhu>=eNS1) && (esuhu<= eNS2)) { eNB = (eNB3-esuhu)/(eNB3-eNB2); eNS = (esuhu-eNS1)/(eNS2-eNS1); eZ=0;ePS=0;ePB=0 } else if ((esuhu>=eNS2) && (esuhu<=eNS3) && (esuhu>=eZ1) && (esuhu<=eZ2)) { eNS = (eNS3-esuhu)/(eNS3-eNS2); eZ = (esuhu-eZ1)/(eZ2-eZ1); eNB=0;ePS=0;ePB=0 } else if ((esuhu>=eZ2) && (esuhu<=eZ3) && (esuhu>=ePS1) && (esuhu<=ePS2)) { eZ = (eZ3-esuhu)/(eZ3-eZ2); ePS = (esuhu-ePS1)/(ePS2-ePS1); eNB=0;eNS=0;ePB=0 } else if ((esuhu>=ePS2) && (esuhu<=ePS3) && (esuhu>=ePB1) && (esuhu<=ePB2)) { ePS = (ePS3-esuhu)/(ePS3-ePS2); ePB = (esuhu-ePB1)/(ePB2-ePB1); eNB=0;eNS=0;eZ=0 } else ((esuhu>=ePB2) && (esuhu<=ePB3)) { eNB=0;eNS=0;eZ=0;ePS=0;ePB=1; } //fuzifikasi derror if ((desuhu>=deNB1) && (desuhu<=deNB2)) { deNB=1;deNS=0;deZ=0;dePS=0;dePB=0; } else if ((desuhu>=deNB2) && (desuhu<=deNB3) && (desuhu>=deNS1) && (d esuhu<=deNS2)) { deNB = (deNB3-desuhu)/(deNB3-deNB2); deNS = (desuhu-deNS1)/(deNS2-deNS1); deZ=0;dePS=0;dePB=0 } else if ((desuhu>=deNS2) && (desuhu<=deNS3) && (desuhu>=deZ1) && (desuhu<=deZ2 )) { deNS = (deNS3-desuhu)/(deNS3-deNS2); deZ = (desuhu-deZ1)/(deZ2-deZ1); deNB=0;dePS=0;dePB=0 }

else if ((desuhu>=deZ2) && (desuhu<=deZ3) && (desuhu>=dePS1) && (desuhu<=dePS2 )) { deZ = (deZ3-desuhu)/(deZ3-deZ2); dePS = (desuhu-dePS1)/(dePS2-dePS1); deNB=0;deNS=0;dePB=0 } else if ((desuhu>=dePS2) && (desuhu<=dePS3) && (desuhu>=dePB1) && (desuhu<=deP B2)) { dePS = (dePS3-desuhu)/(dePS3-dePS2); dePB = (desuhu-dePB1)/(dePB2-dePB1); deNB=0;deNS=0;deZ=0 } else ((desuhu>=dePB2) && (desuhu<=dePB3)) { deNB=0;deNS=0;deZ=0;dePS=0;dePB=1; } //Aturan = min = min = min = min = min = = = = = = = = = = = = = = = = = = = = min min min min min min min min min min min min min min min min min min min min if then Fuzzy (eNB,deNB); (eNB,deNS); (eNB,deZ); (eNB,dePS); (eNB,dePB); (eNS,deNB); (eNS,deNS); (eNS,deZ); (eNS,dePS); (eNS,dePB); (eZ,deNB); (eZ,deNS); (eZ,deZ); (eZ,dePS); (eZ,dePB); (ePS,deNB); (ePS,deNS); (ePS,deZ); (ePS,dePS); (ePS,dePB); (ePB,deNB); (ePB,deNS); (ePB,deZ); (ePB,dePS); (ePB,dePB);

R1 R2 R3 R4 R5

R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 R25

//agregasi outNB = max(R1,R2,R3,R4,R5); outNS = max(R6,R7,R8,R9,R10); outZ = max(R11,R12,R13,R14,R15); outPS = max(R16,R17,R18,R19,R20); outPB = max(R21,R22,R23,R24,R25); //Defuzzyfikasi

N= -10; Z=0; P=10; //fungsi keanggotaan output out= ((N*outN) +(Z*outZ) + (P*outP))/(outN + outZ + outP); OCR1A=out; // ke PWM //PORTD = 00x00; esuhu_1=esuhu; //memory suhu } }

You might also like