ADC_task.c

Go to the documentation of this file.
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 }

Generated on Wed Mar 14 10:53:31 2007 for Mega88_&_ATA6824_High_temperature_H-Bridge_system by  doxygen 1.4.7