Atmel Studio PID kodlarını derlemiyor

Başlatan berkay_91, 09 Ağustos 2014, 12:28:04

berkay_91

mrb, aşağıdaki PID kodlarını atmel studio 6.0 da derlettiğimde şöyle bi hata veriyo;

 
------ Build started: Project: pid, Configuration: Debug AVR ------
Build started.
Project "pid.cproj" (default targets):
Target "PreBuildEvent" skipped, due to false condition; ('$(PreBuildEvent)'!='') was evaluated as (''!='').
Target "CoreBuild" in file "C:\Program Files (x86)\Atmel\Atmel Studio 6.0\Vs\Compiler.targets" from project "C:\Users\BERKAY\Documents\Atmel Studio\pid\pid\pid.cproj" (target "Build" depends on it):
   Using "RunCompilerTask" task from assembly "C:\Program Files (x86)\Atmel\Atmel Studio 6.0\Vs\Compiler.Task.dll".
   Task "RunCompilerTask"
      C:\Program Files (x86)\Atmel\Atmel Studio 6.0\make\make.exe all
   Done executing task "RunCompilerTask" -- FAILED.
Done building target "CoreBuild" in project "pid.cproj" -- FAILED.
Done building project "pid.cproj" -- FAILED.

Build FAILED.
========== Build: 0 succeeded or up-to-date, 1 failed, 0 skipped ==========


hatanın hangi satırda olduğunu söylemediği için bi türlü anlayamadım.

/*
 * pid.c
 *
 * Created: 04.04.2014 16:08:59
 *  Author: BERKAY
 */ 


#ifndef F_CPU
#define F_CPU 1000000UL
#endif

#include <avr/io.h>

#include <util/delay.h >
#include <avr/interrupt.h >
#include "lcd16.h"

#define P_GAIN 0.8
#define I_GAIN 0.005
#define D_GAIN 0.01

volatile int set_rpm = 0,previous_error = 0;
volatile int error, feedback_rpm, output;
volatile int D_error = 0, I_error = 0;

volatile int sayac,pulses=0;

void timer2_init(){
	
	TCCR2=0X07;
	TCNT2=0;
	TIMSK=(1<<TOIE2);
	sei();
	sayac=0;
	
}

void init_pwm(){
	
	// Fast PWM mode - 16bit , Fixed frequency , Non- Inverting mode , TOP = ICR1 = 259
	// Frequency = F_CPU/(N*(1+TOP) = 60Hz , N = 64
	// Duty cycle set by OCR1A and OCR1B
	
	TCCR1A|=(1<<WGM10)|(1<<WGM11)|(1<<COM1A1);
	TCCR1B|=(1<<CS10)|(1<<CS11);

	ICR1 = 259;
	TCNT1 = 0;
	OCR1A = 0;
	
}

ISR(TIMER2_OVF_vect){
	
	sayac++;
	
	TCNT2=0;
	
}

ISR(INT1_vect){
	
	pulses++;
	
}

void kesme(){
	
	MCUCR|=(1<<ISC10)|(1<<ISC11);
	GICR|=(1<<INT1);
	sei();

}


void cont(){
	
	feedback_rpm = pulses;
	
	gotoXy(4,1);
	integerToLcd(feedback_rpm);
	
	pulses=0;
	TCNT2=0;
	sayac=0;
	
}



int main(){
	
	DDRB = 0xff;
	DDRD&=~(1<<4)|(1<<5)|(1<<6)|(1<<7);
	
	
	timer2_init();
	init_pwm();
	kesme();
	lcdInit();
	
	lcdcmd(1);
	
	// kütüphanede(lcd16.h) RW =0X04 EN=0X08 OLUCAK OC1A BACAĞINI KULLANMAK İÇİN
	
	previous_error = set_rpm - feedback_rpm;
	
	gotoXy(0,0);
	prints("SET RPM:");
	gotoXy(0,1);
	prints("RPM:");
	gotoXy(8,1);
	prints("OUT:");
	
	while(1){
		
		if(bit_is_set(PIND,4)){ // set_rpm ayarlama
		
		while(bit_is_set(PIND,4)){
			
			if(bit_is_set(PIND,6)){ // rpm arttırma
			
			while(bit_is_set(PIND,6)){
				
				set_rpm++;
				gotoXy(9,0);
				integerToLcd(set_rpm);
				_delay_ms(80);
				
			}
		}
		
		else if(bit_is_set(PIND,7)){  // rpm azaltma
		
		while(bit_is_set(PIND,7)){
			
			set_rpm--;
			gotoXy(9,0);
			integerToLcd(set_rpm);
			_delay_ms(80);
			
			if(set_rpm<=0)
			set_rpm=0;
			
		}
	}
	
	
	
}
			}		
			
			else if(bit_is_set(PIND,5)){  // PID KONTROL
				
				while(1){		
			
			if (sayac>=3){
				
				if(TCNT2>=211){
					
					cont();
					
				}
				
			}

			
			error = set_rpm - feedback_rpm;
			I_error += (error);
			D_error = (error - previous_error);
			
			output = (P_GAIN * error) + (I_GAIN * I_error) + (D_GAIN * D_error);
			
			previous_error = error;
			
			if(OCR1A + output > 259){
				OCR1A= 259;
				gotoXy(12,1);
				integerToLcd(output);
			}
			else if(OCR1A + output < 0){
				OCR1A= 0;
				gotoXy(12,1);
				integerToLcd(output);
			}
			else{
				OCR1A += output;
				gotoXy(12,1);
				integerToLcd(output);
			}
			
			
				}
			}							
			
			
			
		} //End of while
		return 0;
	}