00001
00052 #include "avr_compiler.h"
00053 #include "adc_driver.h"
00054
00056 #define SAMPLE_COUNT 100
00057
00059 int16_t adcSamples[4][SAMPLE_COUNT];
00060
00061 uint16_t interrupt_count = 0;
00062 int8_t offset;
00063
00064 int main(void)
00065 {
00066
00067 ADC_CalibrationValues_Load(&ADCA);
00068
00069
00070 ADC_ConvMode_and_Resolution_Config(&ADCA, ADC_ConvMode_Signed, ADC_RESOLUTION_12BIT_gc);
00071
00072
00073 ADC_Prescaler_Config(&ADCA, ADC_PRESCALER_DIV32_gc);
00074
00075
00076 ADC_Reference_Config(&ADCA, ADC_REFSEL_VCC_gc);
00077
00078
00079 ADC_Ch_InputMode_and_Gain_Config(&ADCA.CH0,
00080 ADC_CH_INPUTMODE_DIFF_gc,
00081 ADC_DRIVER_CH_GAIN_NONE);
00082
00083 ADC_Ch_InputMux_Config(&ADCA.CH0, ADC_CH_MUXPOS_PIN1_gc, ADC_CH_MUXNEG_PIN1_gc);
00084
00085 ADC_Enable(&ADCA);
00086
00087
00088 ADC_Wait_8MHz(&ADCA);
00089 offset = ADC_Offset_Get_Signed(&ADCA, &ADCA.CH0, false);
00090 ADC_Disable(&ADCA);
00091
00092
00093 ADC_Ch_InputMode_and_Gain_Config(&ADCA.CH0,
00094 ADC_CH_INPUTMODE_SINGLEENDED_gc,
00095 ADC_DRIVER_CH_GAIN_NONE);
00096
00097 ADC_Ch_InputMode_and_Gain_Config(&ADCA.CH1,
00098 ADC_CH_INPUTMODE_SINGLEENDED_gc,
00099 ADC_DRIVER_CH_GAIN_NONE);
00100
00101 ADC_Ch_InputMode_and_Gain_Config(&ADCA.CH2,
00102 ADC_CH_INPUTMODE_SINGLEENDED_gc,
00103 ADC_DRIVER_CH_GAIN_NONE);
00104
00105 ADC_Ch_InputMode_and_Gain_Config(&ADCA.CH3,
00106 ADC_CH_INPUTMODE_SINGLEENDED_gc,
00107 ADC_DRIVER_CH_GAIN_NONE);
00108
00109 ADC_Ch_InputMode_and_Gain_Config(&ADCA.CH0,
00110 ADC_CH_INPUTMODE_SINGLEENDED_gc,
00111 ADC_DRIVER_CH_GAIN_NONE);
00112
00113
00114 ADC_Ch_InputMux_Config(&ADCA.CH0, ADC_CH_MUXPOS_PIN4_gc, 0);
00115 ADC_Ch_InputMux_Config(&ADCA.CH1, ADC_CH_MUXPOS_PIN5_gc, 0);
00116 ADC_Ch_InputMux_Config(&ADCA.CH2, ADC_CH_MUXPOS_PIN6_gc, 0);
00117 ADC_Ch_InputMux_Config(&ADCA.CH3, ADC_CH_MUXPOS_PIN7_gc, 0);
00118
00119
00120 ADC_SweepChannels_Config(&ADCA, ADC_SWEEP_0123_gc);
00121
00122
00123 ADC_Ch_Interrupts_Config(&ADCA.CH3, ADC_CH_INTMODE_COMPLETE_gc, ADC_CH_INTLVL_LO_gc);
00124
00125
00126 PMIC.CTRL |= PMIC_LOLVLEX_bm;
00127
00128
00129 sei();
00130
00131
00132 ADC_Enable(&ADCA);
00133
00134
00135
00136 ADC_Wait_8MHz(&ADCA);
00137
00138
00139 ADC_FreeRunning_Enable(&ADCA);
00140
00141
00142 while(true){
00143 }
00144 }
00145
00146
00154 ISR(ADCA_CH3_vect)
00155 {
00156
00157 adcSamples[0][interrupt_count] = ADC_ResultCh_GetWord_Signed(&ADCA.CH0, offset);
00158 adcSamples[1][interrupt_count] = ADC_ResultCh_GetWord_Signed(&ADCA.CH1, offset);
00159 adcSamples[2][interrupt_count] = ADC_ResultCh_GetWord_Signed(&ADCA.CH2, offset);
00160 adcSamples[3][interrupt_count] = ADC_ResultCh_GetWord_Signed(&ADCA.CH3, offset);
00161
00162
00163 if(interrupt_count == SAMPLE_COUNT-1){
00164 ADC_Ch_Interrupts_Config(&ADCA.CH3, ADC_CH_INTMODE_COMPLETE_gc, ADC_CH_INTLVL_OFF_gc);
00165 ADC_FreeRunning_Disable(&ADCA);
00166 ADC_Disable(&ADCA);
00167 }
00168 interrupt_count++;
00169 }