LAMPIRAN A
LAMPIRAN B
Program Keseluruhan Pada Mikrokontroler ATMega8535
/***************************************************** This program was produced by the
CodeWizardAVR V1.25.3 Standard Automatic Program Generator
© Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l. http://www.hpinfotech.com
Project : Version :
Date : 4/23/2009
Author : F4CG Company : F4CG Comments:
Chip type : ATmega8535 Program type : Application Clock frequency : 4.433619 MHz Memory model : Small
External SRAM size : 0 Data Stack size : 128
*****************************************************/
#include <mega8535.h>
// Alphanumeric LCD Module functions #asm
.equ __lcd_port=0x15 ;PORTC #endasm
#include <lcd.h> #include <stdio.h> #include <delay.h> #include <math.h>
#define FIRST_ADC_INPUT 0 #define LAST_ADC_INPUT 1
unsigned int adc_data[LAST_ADC_INPUT-FIRST_ADC_INPUT+1]; #define ADC_VREF_TYPE 0x40
// ADC interrupt service routine // with auto input scanning
interrupt [ADC_INT] void adc_isr(void) {
register static unsigned char input_index=0; // Read the AD conversion result
// Select next ADC input
if (++input_index > (LAST_ADC_INPUT-FIRST_ADC_INPUT)) input_index=0;
ADMUX=(FIRST_ADC_INPUT | (ADC_VREF_TYPE & 0xff))+input_index;
// Start the AD conversion ADCSRA|=0x40;
}
// Declare your global variables here
int ind1, ind2, ind3, ind4, ind5, i, in1, mode, sudut; float nilai, nilai1, cos_phi, arus, tegangan, temp8,
cos(float x); unsigned char data[16];
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=P State3=P State2=P State1=P State0=P
PORTB=0x1F; 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=Out Func2=Out Func1=In Func0=In
PORTD=0x00; DDRD=0x3C;
// 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;
// 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
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: 554.202 kHz // ADC Voltage Reference: AVCC pin // ADC High Speed Mode: Off
// ADC Auto Trigger Source: None
ADMUX=FIRST_ADC_INPUT | (ADC_VREF_TYPE & 0xff); ADCSRA=0xCB;
SFIOR&=0xEF;
// LCD module initialization lcd_init(16);
// Global enable interrupts #asm("sei")
lcd_putsf("Manonggor"); lcd_gotoxy(6,1);
lcd_putsf("USU"); delay_ms(500);
temp8=nilai/51; nilai=(nilai-511)/51;
nilai1=adc_data[1]; nilai1=nilai1*0.26667;
if (nilai1>=tegangan) {tegangan=nilai1;} if (nilai>=arus) {arus=nilai;}
delay_us(20); }
while (adc_data[1]==0.0){delay_us(2);} while (adc_data[1]!=0.0){delay_us(2);}
if (adc_data[1]==0.0 && adc_data[0]==0.0) {cos_phi=1;} else
{
while (adc_data[1]==0.0){delay_us(2);} while (adc_data[1]!=0.0){delay_us(2);} sudut=0;
for(i=1;i<=100;i++) {
sudut=sudut+1;
if (adc_data[0]==0.0){break;} delay_us(50);
}}
cos_phi=cos(sudut);
/* if (sudut<=10) {cos_phi=sudut/10.15;} else
{if (sudut<=20) {cos_phi=sudut/21.28;} else
{if (sudut<=30) {cos_phi=sudut/34.64;} else
{if (sudut<=40) {cos_phi=sudut/52.21;} else
{if (sudut<=50) {cos_phi=sudut/77.78;} else
{if (sudut<=60) {cos_phi=sudut/120;} else
{if (sudut<=70) {cos_phi=sudut/204.67;} else
if (sudut<=80) {cos_phi=sudut/460.7;} else
{if (sudut<=90) {cos_phi=0;}}}}}}}} */
if (mode==7 && cos_phi <=0.82) {mode=0; PORTD.2=0; PORTD.3=0; PORTD.4=0; PORTD.5=0;}
{if (mode==6 && cos_phi <=0.82) {mode=7; {mode=4; PORTD.4=0; PORTD.5=1;}
else
{if (mode==2 && cos_phi <=0.82) {mode=3; PORTD.3=0; PORTD.4=1;}
else
{if (mode==1 && cos_phi <=0.82) {mode=2; PORTD.2=0; PORTD.3=1;}
else
{if (ind1==1 && cos_phi <=0.82) {mode=1; PORTD.2=1;}}}}}}}}
lcd_clear();
sprintf(data,"Cos Phi=%0.2f",cos_phi); lcd_gotoxy(0,0);
lcd_puts(data);
sprintf(data,"A=%0.2f",arus); lcd_gotoxy(0,1);
lcd_puts(data);
tegangan=arus*5; tegangan=210-tegangan;
sprintf(data,"T=%0.0f",tegangan); lcd_gotoxy(8,1);
lcd_puts(data);
if(PINB.1==0) {
if(ind2==0) {ind2=1; PORTD.2=1;} else {ind2=0; PORTD.2=0;}
} if(PINB.2==0) {
if(ind3==0) {ind3=1; PORTD.3=1; } else {ind3=0; PORTD.3=0;}
}
if(ind4==0) {ind4=1; PORTD.4=1;} else {ind4=0; PORTD.4=0;}
} if(PINB.4==0)
{
if(ind5==0) {ind5=1; PORTD.5=1;} else {ind5=0; PORTD.5=0;}
}
if(PINB.0==0) {
if(ind1==0) {ind1=1;} else {ind1=0; PORTD.2=0; PORTD.3=0; PORTD.4=0; PORTD.5=0; mode=0;}
} if (ind1==1)
{sprintf(data,"OT",cos_phi); lcd_gotoxy(14,0);
lcd_puts(data);} else
{sprintf(data,"MA",cos_phi); lcd_gotoxy(14,0);
lcd_puts(data); }
sprintf(data,"%d",mode); lcd_gotoxy(15,1); lcd_puts(data);
delay_ms(1000); };