00001
00019
00020
00021
00022 #ifndef _ADC_DRV_H_
00023 #define _ADC_DRV_H_
00024
00025
00026
00027
00031
00032
00036
00040 #define Adc_enable() (ADCSRA |= (1<<ADEN))
00042
00046 #define Adc_right_adjust_result() (ADMUX &= ~(1<<ADLAR))
00047 #define Adc_left_adjust_result() (ADMUX |= (1<<ADLAR))
00049
00053 #define Adc_enable_high_speed_mode() (ADCSRB |= (1<<ADHSM))
00054 #define Adc_disable_high_speed_mode() (ADCSRB &= ~(1<<ADHSM))
00056
00057
00061 #define Adc_enable_internal_vref() (ADMUX |= ((1<<REFS1)|(1<<REFS0)) )
00062 #define Adc_enable_external_vref() (ADMUX &= ~((1<<REFS1)|(1<<REFS0)) )
00063 #define Adc_enable_vcc_vref() ( ADMUX &= ~(1<<REFS1), \
00064 ADMUX |= (1<<REFS0) )
00066
00070 #define Adc_enable_it() (ADCSRA |= (1<<ADIE) )
00071 #define Adc_disable_it() (ADCSRA &= ~(1<<ADIE) )
00072 #define Adc_clear_flag() (ADCSRA &= (1<<ADIF) )
00074
00078 #define Adc_set_prescaler(prescaler) (ADCSRA &= ~((1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)),\
00079 ADCSRA |= (prescaler) )
00081
00085 #define Adc_clear_mux() (ADMUX &= ~((1<<MUX4)|(1<<MUX3)|(1<<MUX2)|(1<<MUX1)|(1<<MUX0)) )
00086 #define Adc_select_channel(channel) \
00087 (ADMUX = ( ADMUX & (~((1<<MUX4)|(1<<MUX3)|(1<<MUX2)|(1<<MUX1)|(1<<MUX0)))) \
00088 | (channel) )
00090
00094
00098 #define Adc_start_conv() (ADCSRA |= (1<<ADSC) )
00099 #define Adc_start_conv_channel(channel) (Adc_select_channel(channel),\
00100 Adc_start_conv() )
00102
00106 #define Adc_start_conv_idle() SMCR |= (1<<SM0)|(1<<SE) )
00107 #define Adc_start_conv_idle_channel(chl) (Adc_select_channel(chl),\
00108 Adc_start_conv_idle() )
00109 #define Adc_clear_sleep_mode() (SMCR &= ~(1<<SM0)|(1<<SE) )
00111
00113
00117 #define Adc_get_8_bits_result() ((U8)(ADCH))
00118 #define Adc_get_10_bits_result() ((U16)(ADCL+((U16)(ADCH<<8))))
00120
00121
00125 #define Adc_disable() (ADCSRA &= ~(1<<ADEN))
00127
00131 #define Adc_is_conv_finished() ((ADCSRA & (1<<ADIF)) ? TRUE : FALSE)
00132 #define Adc_is_conv_not_finished() ((ADCSRA | ~(1<<ADIF)) ? TRUE : FALSE)
00133 #define Adc_wait_end_of_conversion() while (ADCSRA & (1<<ADSC))
00135
00139 #define Adc_config() \
00140 ADMUX = (ADC_REF_SOURCE<<REFS0)| \
00141 (ADC_ADLAR_VALUE<<ADLAR)| \
00142 (ADC_CHANNEL<<MUX0); \
00143 ADCSRA = (ADC_ENABLE_BIT_VALUE<<ADEN)| \
00144 (0<<ADSC)| \
00145 (ADC_AUTO_TRIG_ENABLE_VALUE<<ADATE)| \
00146 (0<<ADIF)| \
00147 (ADC_INTERRUPT_ENABLE_VALUE<<ADIE)| \
00148 (ADC_PRESCALER_SELECT_VALUE<<ADPS0); \
00149 ADCSRB = (ADC_HIGH_SPEED_MODE_VALUE<<ADHSM)| \
00150 (ADC_CURRENT_SOURCE_ENABLE_VALUE<<ISRCEN)| \
00151 (ADC_AREF_PIN_ENABLE_VALUE<<AREFEN)| \
00152 (ADC_AUTO_TRIG_SOURCE<<ADTS0);
00154
00158 #define Amp0_config() \
00159 AMP0CSR = (AMP0_ENABLE_VALUE<<AMP0EN)| \
00160 (AMP0_INPUT_SHUNT_VALUE<<AMP0IS)| \
00161 (AMP0_GAIN<<AMP0G0)| \
00162 (AMP0_CMP0_CONNECTION_VALUE<<AMPCMP0)| \
00163 (AMP0_CLOCK_SOURCE<<AMP0TS0);
00165
00169
00170 #define Amp1_config() \
00171 AMP1CSR = (AMP1_ENABLE_VALUE<<AMP1EN)| \
00172 (AMP1_INPUT_SHUNT_VALUE<<AMP1IS)| \
00173 (AMP1_GAIN<<AMP1G0)| \
00174 (AMP1_CMP1_CONNECTION_VALUE<<AMPCMP1)| \
00175 (AMP1_CLOCK_SOURCE<<AMP1TS0);
00177
00181
00182 #define Amp2_config() \
00183 AMP2CSR = (AMP2_ENABLE_VALUE<<AMP2EN)| \
00184 (AMP2_INPUT_SHUNT_VALUE<<AMP2IS)| \
00185 (AMP2_GAIN<<AMP2G0)| \
00186 (AMP2_CMP2_CONNECTION_VALUE<<AMPCMP2)| \
00187 (AMP2_CLOCK_SOURCE<<AMP2TS0);
00189
00191
00192
00193
00194 #define ADC_REF_EQ_AREF_PIN 0
00195 #define ADC_REF_EQ_AVCC_PIN 1
00196 #define ADC_REF_EQ_INT_VREF 3
00197
00198 #define ADC_RIGHT_ADJUST_RESULT 0
00199 #define ADC_LEFT_ADJUST_RESULT 1
00200
00201 #define ADC_INPUT_ADC0 0
00202 #define ADC_INPUT_ADC1 1
00203 #define ADC_INPUT_ADC2 2
00204 #define ADC_INPUT_ADC3 3
00205 #define ADC_INPUT_ADC4 4
00206 #define ADC_INPUT_ADC5 5
00207 #define ADC_INPUT_ADC6 6
00208 #define ADC_INPUT_ADC7 7
00209 #define ADC_INPUT_ADC8 8
00210 #define ADC_INPUT_ADC9 9
00211 #define ADC_INPUT_ADC10 10
00212 #define ADC_INPUT_TEMP_SENSOR 11
00213 #define ADC_INPUT_VCCDIV4 12
00214 #define ADC_INPUT_ISRC 13
00215 #define ADC_INPUT_AMP0 14
00216 #define ADC_INPUT_AMP1 15
00217 #define ADC_INPUT_AMP2 16
00218 #define ADC_INPUT_BANDGAP 17
00219 #define ADC_INPUT_GND 18
00220
00221
00222 #define ADC_DISABLE 0
00223 #define ADC_ENABLE 1
00224
00225 #define ADC_AUTO_TRIG_DISABLE 0
00226 #define ADC_AUTO_TRIG_ENABLE 1
00227
00228 #define ADC_INTERRUPT_DISABLE 0
00229 #define ADC_INTERRUPT_ENABLE 1
00230
00231 #define ADC_DIV_CLOCK_BY_2 0
00232 #define ADC_DIV_CLOCK_BY_4 2
00233 #define ADC_DIV_CLOCK_BY_8 3
00234 #define ADC_DIV_CLOCK_BY_16 4
00235 #define ADC_DIV_CLOCK_BY_32 5
00236 #define ADC_DIV_CLOCK_BY_64 6
00237 #define ADC_DIV_CLOCK_BY_128 7
00238
00239
00240 #define ADC_LOW_SPEED_MODE 0
00241 #define ADC_HIGH_SPEED_MODE 1
00242
00243 #define ADC_CURRENT_SRC_DISABLE 0
00244 #define ADC_CURRENT_SRC_ENABLE 1
00245
00246 #define ADC_AREF_PIN_DISABLE 0
00247 #define ADC_AREF_PIN_ENABLE 1
00248
00249 #define ADC_FREE_RUNNING 0
00250 #define ADC_TRIG_WITH_INT0 1
00251 #define ADC_TRIG_WITH_TCM0 2
00252 #define ADC_TRIG_WITH_TCOVF0 3
00253 #define ADC_TRIG_WITH_TCM1 4
00254 #define ADC_TRIG_WITH_TCOVF1 5
00255 #define ADC_TRIG_WITH_TCCAPT1 6
00256 #define ADC_TRIG_WITH_PSC0 7
00257 #define ADC_TRIG_WITH_PSC1 8
00258 #define ADC_TRIG_WITH_PSC2 9
00259 #define ADC_TRIG_WITH_CMP0 10
00260 #define ADC_TRIG_WITH_CMP1 11
00261 #define ADC_TRIG_WITH_CMP2 12
00262 #define ADC_TRIG_WITH_CMP3 13
00263
00264 #define AMP_DISABLE 0
00265 #define AMP_ENABLE 1
00266
00267 #define AMP_SHUNT_DISABLE 0
00268 #define AMP_SHUNT_ENABLE 1
00269
00270 #define AMP_GAIN_5 0
00271 #define AMP_GAIN_10 1
00272 #define AMP_GAIN_20 2
00273 #define AMP_GAIN_40 3
00274
00275 #define AMP_CMP_DISCONNECTED 0
00276 #define AMP_CMP_CONNECTED 1
00277
00278 #define AMP_CLOCK_EQ_ADC_DIV_8 0
00279 #define AMP_CLOCK_EQ_TCCM0 1
00280 #define AMP_CLOCK_EQ_TCOVF0 2
00281 #define AMP_CLOCK_EQ_TCCMB1 3
00282 #define AMP_CLOCK_EQ_TCOVF1 4
00283 #define AMP_CLOCK_EQ_PSC0 5
00284 #define AMP_CLOCK_EQ_PSC1 6
00285 #define AMP_CLOCK_EQ_PSC2 7
00286
00287
00288
00292
00297 void init_adc(void);
00298 void init_vref_source (void);
00300
00302
00303 #endif // ADC_DRV_H