00001 /*This file has been prepared for Doxygen automatic documentation generation.*/ 00015 /* Copyright (c) 2009 Atmel Corporation. All rights reserved. 00016 * 00017 * Redistribution and use in source and binary forms, with or without 00018 * modification, are permitted provided that the following conditions are met: 00019 * 00020 * 1. Redistributions of source code must retain the above copyright notice, this 00021 * list of conditions and the following disclaimer. 00022 * 00023 * 2. Redistributions in binary form must reproduce the above copyright notice, 00024 * this list of conditions and the following disclaimer in the documentation 00025 * and/or other materials provided with the distribution. 00026 * 00027 * 3. The name of Atmel may not be used to endorse or promote products derived 00028 * from this software without specific prior written permission. 00029 * 00030 * 4. This software may only be redistributed and used in connection with an Atmel 00031 * AVR product. 00032 * 00033 * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED 00034 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 00035 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE 00036 * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR 00037 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 00038 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 00039 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 00040 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 00041 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 00042 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE 00043 * 00044 */ 00045 //_____ I N C L U D E S ___________________________________________________ 00046 #include <string.h> 00047 #include <stdio.h> 00048 00049 #include "compiler.h" 00050 #include "s_temperature.h" 00051 #include "board.h" 00052 #include "gpio.h" 00053 #include "adc.h" 00054 00055 //_____ M A C R O S ________________________________________________________ 00056 00057 //_____ D E F I N I T I O N S ______________________________________________ 00058 00065 const unsigned short temperature_code[]={ 00066 0x3B4,0x3B0,0x3AB,0x3A6,0x3A0,0x39A,0x394,0x38E,0x388,0x381,0x37A,0x373, 00067 0x36B,0x363,0x35B,0x353,0x34A,0x341,0x338,0x32F,0x325,0x31B,0x311,0x307, 00068 0x2FC,0x2F1,0x2E6,0x2DB,0x2D0,0x2C4,0x2B8,0x2AC,0x2A0,0x294,0x288,0x27C, 00069 0x26F,0x263,0x256,0x24A,0x23D,0x231,0x225,0x218,0x20C,0x200,0x1F3,0x1E7, 00070 0x1DB,0x1CF,0x1C4,0x1B8,0x1AC,0x1A1,0x196,0x18B,0x180,0x176,0x16B,0x161, 00071 0x157,0x14D,0x144,0x13A,0x131,0x128,0x11F,0x117,0x10F,0x106,0xFE,0xF7, 00072 0xEF,0xE8,0xE1,0xDA,0xD3,0xCD,0xC7,0xC0,0xBA,0xB5,0xAF,0xAA,0xA4,0x9F, 00073 0x9A,0x96,0x91,0x8C,0x88,0x84,0x80,0x7C,0x78,0x74,0x71,0x6D,0x6A,0x67, 00074 0x64,0x61,0x5E,0x5B,0x58,0x55,0x53,0x50,0x4E,0x4C,0x49,0x47,0x45,0x43, 00075 0x41,0x3F,0x3D,0x3C,0x3A,0x38}; 00076 00078 static volatile avr32_adc_t * adc= (volatile avr32_adc_t *) &AVR32_ADC; 00079 00080 //_____ D E C L A R A T I O N S ____________________________________________ 00081 00089 Bool b_temperature_get_value( char* buf ) 00090 { 00091 int i_current_val, value, index = 0; 00092 00093 00094 /* enable channel for sensor */ 00095 adc_enable( adc, ADC_TEMPERATURE_CHANNEL ); 00096 // start conversion 00097 adc_start( adc ); 00098 // get value for sensor 00099 value = adc_get_value( adc, ADC_TEMPERATURE_CHANNEL ); 00100 /* Disable channel for sensor */ 00101 adc_disable( adc, ADC_TEMPERATURE_CHANNEL ); 00102 00103 if(value > temperature_code[0]) 00104 { 00105 i_current_val = -20; 00106 } 00107 else 00108 { 00109 while(temperature_code[index++] > value); 00110 i_current_val = (index - 1 - 20); 00111 } 00112 00113 // Build the log string. 00114 sprintf( buf, "%2dC\r\n", i_current_val); 00115 return TRUE; 00116 }