00001
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046 #include "config.h"
00047 #include "stk_525.h"
00048
00049 #if (TARGET_BOARD==STK525)
00050
00051 #ifdef USE_ADC
00052 #include "lib_mcu/adc/adc_drv.h"
00053
00054
00055
00056
00057
00058
00059
00060
00061
00068 code U16 temperature_code[]={ 0x3B4,0x3B0,0x3AB,0x3A6,0x3A0,0x39A,0x394,0x38E,0x388,0x381,0x37A,0x373,
00069 0x36B,0x363,0x35B,0x353,0x34A,0x341,0x338,0x32F,0x325,0x31B,0x311,0x307,
00070 0x2FC,0x2F1,0x2E6,0x2DB,0x2D0,0x2C4,0x2B8,0x2AC,0x2A0,0x294,0x288,0x27C,
00071 0x26F,0x263,0x256,0x24A,0x23D,0x231,0x225,0x218,0x20C,0x200,0x1F3,0x1E7,
00072 0x1DB,0x1CF,0x1C4,0x1B8,0x1AC,0x1A1,0x196,0x18B,0x180,0x176,0x16B,0x161,
00073 0x157,0x14D,0x144,0x13A,0x131,0x128,0x11F,0x117,0x10F,0x106,0xFE,0xF7,
00074 0xEF,0xE8,0xE1,0xDA,0xD3,0xCD,0xC7,0xC0,0xBA,0xB5,0xAF,0xAA,0xA4,0x9F,
00075 0x9A,0x96,0x91,0x8C,0x88,0x84,0x80,0x7C,0x78,0x74,0x71,0x6D,0x6A,0x67,
00076 0x64,0x61,0x5E,0x5B,0x58,0x55,0x53,0x50,0x4E,0x4C,0x49,0x47,0x45,0x43,
00077 0x41,0x3F,0x3D,0x3C,0x3A,0x38};
00078
00079
00080
00081
00082 #ifdef __ICCAVR__
00083 #pragma diag_suppress=Pa082
00084 #endif
00085
00086 U16 Get_adc_mic_val(void)
00087 {
00088 Start_conv_channel(ADC_MIC_CH);
00089 while (!Is_adc_conv_finished());
00090 return Adc_get_10_bits_result();
00091 }
00092
00093 U16 Get_adc_pot_val(void)
00094 {
00095 Start_conv_channel(ADC_POT_CH);
00096 while (!Is_adc_conv_finished());
00097 return Adc_get_10_bits_result();
00098 }
00099
00100 U16 Get_adc_temp_val(void)
00101 {
00102 Start_conv_channel(ADC_TEMP_CH);
00103 while (!Is_adc_conv_finished());
00104 return Adc_get_10_bits_result();
00105 }
00106
00107 S16 Read_temperature(void)
00108 {
00109 #ifndef __GNUC__
00110 U16 adc_code;
00111 S8 index=0;
00112 adc_code=Get_adc_temp_val();
00113 if(adc_code>temperature_code[0])
00114 {
00115 return (S16)(-20);
00116 }
00117 else
00118 {
00119 while(temperature_code[index++]>adc_code);
00120 return (S16)(index-1-20);
00121 }
00122 #else
00123 U16 adc_code;
00124 S8 index=0;
00125 adc_code=Get_adc_temp_val();
00126 if(adc_code>pgm_read_word_near(&temperature_code))
00127 {
00128 return (S16)(-20);
00129 }
00130 else
00131 {
00132 while(pgm_read_word_near(&temperature_code[index++])>adc_code);
00133 return (S16)(index-1-20);
00134 }
00135
00136 #endif
00137 }
00138
00139 #endif // USE_ADC
00140
00141 #endif // (TARGET_BOARD==STK525)