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;
}