00001 /* 00002 ** 00003 **************************************************************************** 00004 ** 00005 ** 00006 ** Copyright (c) 2007 - Atmel Corporation 00007 ** Proprietaty Information 00008 ** 00009 ** Project : ATMEGA88 + ATA6824 High Temperature H-bridge System 00010 ** Module : ADC_task.c 00011 ** Description : Manage ADC to acquire Current (VSHUNT) Supply voltage (Vbat) 00012 ** and Speed set 00013 ** 00014 ** 00015 ** Version : Date: Author: Comment: 00016 ** 1.0 12.02.2007 F.G. Creation 00017 ** 00018 ** LICENSE - 00019 ** 00020 ** ATMEL - 2007 00021 ** All software programs are provided 'as is' without warranty of any kind: 00022 ** Atmel does not state the suitability of the provided materials for any 00023 ** purpose. Atmel hereby disclaim all warranties and conditions with regard 00024 ** to the provided software, including all implied warranties, fitness for 00025 ** a particular purpose, title and non-infringement.In no event will Atmel 00026 ** be liable for any indirect or consequential damages or any damages 00027 ** whatsoever resulting from the usage of the software program. 00028 **************************************************************************** 00029 ** 00030 */ 00031 00032 00033 /*_____ I N C L U D E S ____________________________________________________*/ 00034 #include "config.h" 00035 #include "ADC_task.h" 00036 00037 /*_____ M A C R O S ________________________________________________________*/ 00038 00039 00040 /*_____ D E F I N I T I O N S ______________________________________________*/ 00041 00042 /*_____ P R O T O T Y P E S - D E C L A R A T I O N ________________________*/ 00043 00044 /*_____ G L O B A L S ______________________________________________________*/ 00045 unsigned int Speed_set; 00046 unsigned int current; 00047 unsigned int V_bat; 00048 00049 00050 /*_____ P R I V A T E - F U N C T I O N S __________________________________*/ 00051 00065 void ADC_Init(void) 00066 { 00067 /* init ADC */ 00068 ADMUX |= (1 << REFS0); // conversion result right ajusted in ADC, AVCC with external capacitor at AREF pin, ADC0 selected 00069 ADCSRA |= (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0); // enable ADC, division factor : clk/128 00070 DIDR0 |= (1<<ADC0D); // Disable ADC0 digital input buffer 00071 } 00072 00073 00078 void ADC_task(void) 00079 { 00080 static ADC_state_t ADC_state = ADC_INIT_TASK; // ADC state machine init 00081 00082 switch(ADC_state) 00083 { 00084 case ADC_INIT_TASK: // Start current measurement 00085 Set_ADC_Channel(ADC0); // Select ADC0, Vshunt signal 00086 ADC_start_conv(); // Start conversion 00087 ADC_state = ADC_WAIT_CURRENT_MEAS; 00088 break; 00089 00090 //---------------------------------------------------------------------------- 00091 case ADC_WAIT_CURRENT_MEAS: // Wait current measurement aquisition 00092 if(ADC_end_conv()) // When ADC conversion is completed 00093 { 00094 ADC_clear_end_conv_flag(); // Clear end conv interrupt flag 00095 current = ADC_data_reg(); // Get Current in ADC data register 00096 00097 Set_ADC_Channel(ADC7); // Select ADC7, Potentiometer speed signal 00098 ADC_start_conv(); // Start conversion 00099 ADC_state = ADC_WAIT_SPEED_SET_MEAS; 00100 } 00101 break; 00102 //---------------------------------------------------------------------------- 00103 00104 case ADC_WAIT_SPEED_SET_MEAS: // Wait desired speed measurement aquisition 00105 if(ADC_end_conv()) // When ADC conversion is completed 00106 { 00107 ADC_clear_end_conv_flag(); // Clear end conv interrupt flag 00108 Speed_set = ADC_data_reg(); // Get Speed in ADC data register 00109 00110 Set_ADC_Channel(ADC6); // Select ADC6, Vbat measure signal 00111 ADC_start_conv(); // Start conversion 00112 ADC_state = ADC_WAIT_VBAT_MEAS; 00113 } 00114 break; 00115 //---------------------------------------------------------------------------- 00116 00117 case ADC_WAIT_VBAT_MEAS: 00118 if(ADC_end_conv()) // When ADC conversion is completed 00119 { 00120 ADC_clear_end_conv_flag(); // Clear end conv interrupt flag 00121 V_bat = ADC_data_reg(); // Get Speed in ADC data register 00122 00123 Set_ADC_Channel(ADC0); // Select ADC0, Vshunt (current) signal 00124 ADC_start_conv(); // Start conversion 00125 ADC_state = ADC_WAIT_CURRENT_MEAS; 00126 } 00127 break; 00128 //---------------------------------------------------------------------------- 00129 default: 00130 ADC_state = ADC_INIT_TASK; 00131 break; 00132 //---------------------------------------------------------------------------- 00133 } 00134 } 00135 00138 unsigned int adc_get_speed(void) 00139 { 00140 return Speed_set; 00141 } 00142 00145 unsigned int adc_get_current(void) 00146 { 00147 return current; 00148 } 00149 00152 unsigned int adc_get_V_bat(void) 00153 { 00154 return V_bat; 00155 }
1.4.7