Main Page | Data Structures | File List | Data Fields | Globals | Related Pages

main.c

Go to the documentation of this file.
00001 // This file has been prepared for Doxygen automatic documentation generation.
00022 #include <inavr.h>
00023 #include <ioavr.h>
00024 #include "pid.h"
00025 
00029 struct GLOBAL_FLAGS {
00031   unsigned char pidTimer:1;
00032   unsigned char dummy:7;
00033 } gFlags = {0, 0};
00034 
00036 struct PID_DATA pidData;
00037 
00040 #pragma vector = TIMER0_OVF_vect
00041 __interrupt void TIMER0_OVF_ISR( void )
00042 {
00043   static unsigned int i = 0;
00044   if(i < TIME_INTERVAL)
00045     i++;
00046   else{
00047     gFlags.pidTimer = TRUE;
00048     i = 0;
00049   }
00050 }
00051 
00054 void Init(void)
00055 {
00056   Init_PID(K_P * SCALING_FACTOR, K_I * SCALING_FACTOR , K_D * SCALING_FACTOR , &pidData);
00057 
00058   // Set up timer, enable timer/counte 0 overflow interrupt
00059   TCCR0A = (1<<CS00);
00060   TIMSK0 = (1<<TOIE0);
00061   TCNT0 = 0;
00062 }
00063 
00069 int Get_Reference(void)
00070 {
00071   return 8;
00072 }
00073 
00078 int Get_Measurement(void)
00079 {
00080   return 4;
00081 }
00082 
00088 void Set_Input(int inputValue)
00089 {
00090   ;
00091 }
00092 
00093 
00096 void main(void)
00097 {
00098   int referenceValue, measurementValue, inputValue;
00099   Init();
00100   __enable_interrupt();
00101 
00102   while(1){
00103 
00104     // Run PID calculations once every PID timer timeout
00105     if(gFlags.pidTimer)
00106     {
00107       referenceValue = Get_Reference();
00108       measurementValue = Get_Measurement();
00109 
00110       inputValue = PID(referenceValue, measurementValue, &pidData);
00111 
00112       Set_Input(inputValue);
00113 
00114       gFlags.pidTimer = FALSE;
00115     }
00116   }
00117 }
00118 

Generated on Thu Nov 10 11:12:11 2005 for AVR221 - PID controller by  doxygen 1.4.4