henk schrieb:
> void init_adc_A_frun(char gain) {
> ADCA.CTRLA = 0x01; //0000 0001
> ADCA.CTRLB = 0x18; //0001 1000
> ADCA.REFCTRL = 0x10; //0001 0000
> ADCA.PRESCALER =0x03; //ADC_PRESCALER_DIV32_gc; //
> ADCA.CH0.CTRL = 0x02; // hier ist das Problem, mit 0x03 für Diffw
> gain02 geht es;)
> ADCA.EVCTRL = 0x40;
> ADCA.CH0.MUXCTRL = 0x00;
> ADCA.CH1.MUXCTRL = 0x00; //0000 0000
>
>
> }
Wer soll den das verstehen? Mach es doch bitte in Klarschrift, z.B. so:1 | #define ADC ADCA
|
2 | static void ADCInit(void)
|
3 | {
|
4 | ADC.CTRLA = 0x01;
|
5 | ADC.CTRLB = ADC_RESOLUTION_12BIT_gc | (ADC_MODE << 4) ; // 12 bit right adjusted
|
6 | ADC.PRESCALER = ADC_PRESCALER_DIV256_gc;
|
7 | ADC.REFCTRL = ADC_REFSEL_VCC_gc;
|
8 | ADC.EVCTRL = ADC_SWEEP_012_gc ;
|
9 | // speed input
|
10 | ADC.CH0.CTRL = ADC_CH_INPUTMODE_SINGLEENDED_gc;
|
11 | ADC.CH0.MUXCTRL = ADC_CH_MUXPOS_PIN0_gc;
|
12 | //
|
13 | ADC.CH1.CTRL = ADC_CH_INPUTMODE_SINGLEENDED_gc;
|
14 | ADC.CH1.MUXCTRL = ADC_CH_MUXPOS_PIN1_gc;
|
15 | // diff. channel
|
16 | // gain32 for weak KMZ magnetic field sensor
|
17 | ADC.CH2.CTRL = ADC_CH_INPUTMODE_DIFFWGAIN_gc | ADC_CH_GAIN_32X_gc;
|
18 | ADC.CH2.MUXCTRL = ADC_CH_MUXPOS_PIN4_gc | ADC_CH_MUXNEG_PIN5_gc;
|
Das ist wesentlich einfacher zu warten und auch mal zu ändern. Nicht
umsonst gibts doch die ganzen defines. Kanal 2 ist hier einer mit
Verstärkung und Diferenzeingängen.