From 9bc7e5db8f294e14becaf23be6d59a0693ad36ed Mon Sep 17 00:00:00 2001 From: demonchy Date: Sun, 1 May 2005 20:10:17 +0000 Subject: Résolution du problème de décalage ADC. --- n/avr/adc/adc.c | 32 +++++++++++++++----------------- n/avr/adc/adc.h | 6 +----- n/avr/adc/test_adc.c | 5 ++--- 3 files changed, 18 insertions(+), 25 deletions(-) (limited to 'n') diff --git a/n/avr/adc/adc.c b/n/avr/adc/adc.c index e20a158..48137fb 100644 --- a/n/avr/adc/adc.c +++ b/n/avr/adc/adc.c @@ -33,6 +33,16 @@ # warning "adc: not tested on this chip." #endif +/* ADC configuration. */ +/* REFS = 01: AVCC with external capacitor at AREF pin. + * 11: Internal 2.56V Voltage Reference with external capacitor + * at AREF pin. */ +#define ADMUX_CFG (regv (REFS1, REFS0, ADLAR, MUX4, MUX3, MUX2, MUX1, MUX0, \ + 1, 1, 0, 0, 0, 0, 0, 0)) +#define ADCSR_CFG (regv (ADEN, ADSC, ADATE, ADIF, ADIE, ADPS2, ADPS1, ADPS0, \ + 1, 0, 0, 1, 0, 0, 0, 0)) +#define ADCSR_CFG_115200 7 + /* +AutoDec */ /* -AutoDec */ @@ -40,28 +50,16 @@ void adc_init (void) { - /* REFS = 01: AVCC with external capacitor at AREF pin. - * 11: Internal 2.56V Voltage Reference with external capacitor - * at AREF pin. */ - ADMUX = regv (REFS1, REFS0, ADLAR, MUX4, MUX3, MUX2, MUX1, MUX0, - 1, 1, 0, 0, 0, 0, 0, 0); - /* Adc enabled. */ - ADCSR = regv (ADEN, ADSC, ADATE, ADIF, ADIE, ADPS2, ADPS1, ADPS0, - 1, 0, 0, 1, 0, 1, 1, 1); -} - -/** Change channel. */ -void -adc_mux (uint8_t c) -{ - /* Choose adc. */ - ADMUX = (ADMUX & 0xe0) | (c & 0x07); + /* Low freq. */ + ADCSR = ADCSR_CFG | ADCSR_CFG_115200; } /** Choose and start mesure on adc line. */ void -adc_start (void) +adc_start (uint8_t c) { + /* Choose adc. */ + ADMUX = ADMUX_CFG | (c & 0x07); /* Start mesure. */ ADCSR |= _BV (ADSC); } diff --git a/n/avr/adc/adc.h b/n/avr/adc/adc.h index 05b6e19..8030fcd 100644 --- a/n/avr/adc/adc.h +++ b/n/avr/adc/adc.h @@ -37,13 +37,9 @@ void adc_init (void); -/** Change channel. */ -void -adc_mux (uint8_t c); - /** Choose and start mesure on adc line. */ void -adc_start (void); +adc_start (uint8_t c); /* -AutoDec */ diff --git a/n/avr/adc/test_adc.c b/n/avr/adc/test_adc.c index a8a9267..0e2d5f7 100644 --- a/n/avr/adc/test_adc.c +++ b/n/avr/adc/test_adc.c @@ -71,13 +71,12 @@ main (void) /* Démarre une acquisition de mesure sur l'adc 0. */ for (i = 0; i < 3; i ++) { - adc_mux (i); - delay_ms (33L); - adc_start (); + adc_start (i); /* Attente active sur adc jusqu'a ce que la valeur soit * disponible. */ while (adc_checkf()) ; + delay_us (250L); /* Lit l'adc. */ adc[i] = adc_read(); } -- cgit v1.2.3