• Main Page
  • Modules
  • Data Structures
  • Files
  • File List
  • Globals

temp.c

Go to the documentation of this file.
00001 /*@{*//*@}*/
00014 
00015 /******************************************************************************/
00016 /* Includes (#include)                                                        */
00017 #include <avr/io.h>
00018 
00019 /* Own headers */
00020 #include "xtypes.h"
00021 #include "global.h"
00022 
00023 #include "adc.h"
00024 #include "safety.h"
00025 
00026 #define EXPORT
00027   #include "temp.h"
00028 #undef EXPORT
00029 
00030 /******************************************************************************/
00031 /* Constants (#define)                *//*@{*/
00032 
00034 #define AVG_COUNT       10U
00035 
00038 #define WARNING_COUNT   20U
00039 
00040 /* End: Constants (#define)                                             *//*@}*/
00041 /******************************************************************************/
00042 
00043 /******************************************************************************/
00044 /* Macro definitions (#define)           *//*@{*/
00045 /* End: Macro definitions (#define)                                     *//*@}*/
00046 /******************************************************************************/
00047 
00048 /******************************************************************************/
00049 /* Basic types (typedef)                 *//*@{*/
00050 /* End: Basic types (typedef)                                           *//*@}*/
00051 /******************************************************************************/
00052 
00053 /******************************************************************************/
00054 /* Local constants (const)      *//*@{*/
00055 /* End: Local constants (const)                                         *//*@}*/
00056 /******************************************************************************/
00057 
00058 /******************************************************************************/
00059 /* Local variables              *//*@{*/
00060 
00062 STATIC UINT16 mg_au16Data[AVG_COUNT];
00063 
00065 STATIC UINT16 mg_u16Value             = 0U;
00066 
00068 STATIC UINT8  mg_u8Idx                = 0U;
00069 
00071 STATIC UINT8  mg_u8WarningCnt         = 0U;
00072 
00073 /* End: Local variables                                                 *//*@}*/
00074 /******************************************************************************/
00075 
00076 /******************************************************************************/
00077 /* Global variables           *//*@{*/
00078 /* End: Global variables                                                *//*@}*/
00079 /******************************************************************************/
00080 
00081 /******************************************************************************/
00082 /* Prototype declarations                                                     */
00083 /* End: Prototype declarations                                                */
00084 /******************************************************************************/
00085 
00086 /******************************************************************************/
00087 /* Local functions             *//*@{*/
00088 /* End: Local functions                                                 *//*@}*/
00089 /******************************************************************************/
00090 
00091 /******************************************************************************/
00092 /* Global functions          *//*@{*/
00093 
00094 /* ****************************************************************************/
00104 /* ****************************************************************************/
00105 void temp_Init (void)
00106 {
00107   UINT16 u16Help = adc_Read(ADC_TEMPERATURE);
00108   
00109   for(UINT8 i=0U; i<AVG_COUNT; i++)
00110   {
00111     mg_au16Data[i] = u16Help;
00112   }
00113   mg_u16Value = u16Help;
00114   mg_u8Idx = 0U;
00115 }
00116 
00117 
00118 /* ****************************************************************************/
00127 /* ****************************************************************************/
00128 void temp_Update (void)
00129 {
00130   UINT16 u16Help = adc_Read(ADC_TEMPERATURE);
00131   
00132   mg_au16Data[mg_u8Idx] = u16Help;
00133   mg_u8Idx++;
00134   if(mg_u8Idx >= AVG_COUNT)
00135   {
00136     mg_u8Idx = 0U;
00137   }
00138   u16Help = 0U;
00139   for(UINT8 i=0U; i<AVG_COUNT; i++)
00140   {
00141     u16Help += mg_au16Data[i];
00142   }
00143   u16Help /= AVG_COUNT;
00144   mg_u16Value = u16Help;
00145 }
00146 
00147 
00148 /* ****************************************************************************/
00164 /* ****************************************************************************/
00165 void temp_Check (void)
00166 {
00167   if(temp_GetCelsius(mg_u16Value) < VALUE_TEMP_WARN)
00168   {
00169     if (mg_u8WarningCnt > 0U)
00170     {
00171       mg_u8WarningCnt--;
00172     }
00173   }
00174   else if(temp_GetCelsius(mg_u16Value) < VALUE_TEMP_ERROR)
00175   {
00176     mg_u8WarningCnt++;
00177   }
00178   else
00179   {
00180     mg_u8WarningCnt = WARNING_COUNT;
00181   }
00182   
00183   if(mg_u8WarningCnt >= WARNING_COUNT)
00184   {
00185     mg_u8WarningCnt = WARNING_COUNT;
00186     safety_ClearCondition(COND_TEMP_WARN);
00187     safety_SetCondition(COND_TEMP_ERR);
00188   }
00189   else if (mg_u8WarningCnt > 0U)
00190   {
00191     safety_SetCondition(COND_TEMP_WARN);
00192     safety_ClearCondition(COND_TEMP_ERR);
00193   }
00194   else
00195   {
00196     safety_ClearCondition(COND_TEMP_WARN);
00197     safety_ClearCondition(COND_TEMP_ERR);
00198   }
00199 }
00200 
00201 
00202 /* ****************************************************************************/
00211 /* ****************************************************************************/
00212 UINT16 temp_GetAvg (void)
00213 {
00214   return (mg_u16Value);
00215 }
00216 
00217 
00218 
00219 /* ****************************************************************************/
00229 /* ****************************************************************************/
00230 UINT16 temp_GetCelsius (UINT16 adc_val)
00231 {
00232   INT16   u16Ret = 85U;
00233   UINT16  u16NTC;
00234   
00235   if (0U != adc_val)
00236   {
00237     u16NTC = (UINT16) (((1024UL * 1100UL) / ((UINT32)adc_val)) - 1100UL);
00238     
00239     if (u16NTC >= 12500U)
00240     {
00241       u16Ret = 0U;
00242     }
00243     else if (u16NTC >= 9000U)
00244     {
00245       u16Ret = 5U;
00246     }
00247     else if (u16NTC >= 7500U)
00248     {
00249       u16Ret = 10U;
00250     }
00251     else if (u16NTC >= 6000U)
00252     {
00253       u16Ret = 15U;
00254     }
00255     else if (u16NTC >= 4700U)
00256     {
00257       u16Ret = 20U;
00258     }
00259     else if (u16NTC >= 3800U)
00260     {
00261       u16Ret = 25U;
00262     }
00263     else if (u16NTC >= 3300U)
00264     {
00265       u16Ret = 30U;
00266     }
00267     else if (u16NTC >= 2500U)
00268     {
00269       u16Ret = 35U;
00270     }
00271     else if (u16NTC >= 2000U)
00272     {
00273       u16Ret = 40U;
00274     }
00275     else if (u16NTC >= 1700U)
00276     {
00277       u16Ret = 45U;
00278     }
00279     else if (u16NTC >= 1200U)
00280     {
00281       u16Ret = 50U;
00282     }
00283     else if (u16NTC >= 1000U)
00284     {
00285       u16Ret = 55U;
00286     }
00287     else if (u16NTC >= 800U)
00288     {
00289       u16Ret = 60U;
00290     }
00291     else if (u16NTC >= 900U)
00292     {
00293       u16Ret = 65U;
00294     }
00295     else if (u16NTC >= 800U)
00296     {
00297       u16Ret = 70U;
00298     }
00299     else if (u16NTC >= 600U)
00300     {
00301       u16Ret = 75U;
00302     }
00303     else if (u16NTC >= 500U)
00304     {
00305       u16Ret = 80U;
00306     }
00307     else
00308     {
00309       u16Ret = 85U;
00310     }
00311   }
00312   
00313   return (u16Ret);
00314 }
00315 
00316 /* End: Global functions                                                *//*@}*/
00317 /******************************************************************************/
00318 
00319 /**** Last line of code                                                    ****/

Generated on Sun Jan 23 2011 14:05:40 for ULA replacement firmware by  doxygen 1.7.2