From 7bed3836db97e3c626a604cbe8b10c49236bb724 Mon Sep 17 00:00:00 2001 From: schodet Date: Sun, 1 May 2005 14:59:03 +0000 Subject: Correction du problème de plantage. ADC clock à 115200 Hz. --- n/avr/adc/adc.c | 35 +++++++++-------------------------- n/avr/adc/adc.h | 24 ++++++++++++++++-------- n/avr/adc/test_adc.c | 5 +++-- 3 files changed, 28 insertions(+), 36 deletions(-) diff --git a/n/avr/adc/adc.c b/n/avr/adc/adc.c index 7f6ee52..e20a158 100644 --- a/n/avr/adc/adc.c +++ b/n/avr/adc/adc.c @@ -23,7 +23,6 @@ #include "adc.h" #include "n/avr/utils/utils.h" -#include #include /* Tested AVR check. */ @@ -34,11 +33,6 @@ # warning "adc: not tested on this chip." #endif -/* Different name on ATmega8535. */ -#if defined (__AVR_ATmega8535__) -#define ADCSR ADCSRA -#endif - /* +AutoDec */ /* -AutoDec */ @@ -53,33 +47,22 @@ adc_init (void) 1, 1, 0, 0, 0, 0, 0, 0); /* Adc enabled. */ ADCSR = regv (ADEN, ADSC, ADATE, ADIF, ADIE, ADPS2, ADPS1, ADPS0, - 1, 0, 0, 0, 0, 0, 0, 0); + 1, 0, 0, 1, 0, 1, 1, 1); } -/** Choose and start mesure on adc line. */ +/** Change channel. */ void -adc_start (uint8_t d) +adc_mux (uint8_t c) { /* Choose adc. */ - ADMUX &= 0xe0; - ADMUX |= d & 0x07; - /* Clear ADIF. */ - ADCSR = ADCSR; - /* Start mesure. */ - ADCSR |= _BV (ADSC); -} - -/** Return a value different of zero if finished. */ -uint8_t -adc_checkf (void) -{ - return !(ADCSR & _BV (ADSC)); + ADMUX = (ADMUX & 0xe0) | (c & 0x07); } -/** Read mesure. */ -uint16_t -adc_read (void) +/** Choose and start mesure on adc line. */ +void +adc_start (void) { - return ADCW; + /* Start mesure. */ + ADCSR |= _BV (ADSC); } diff --git a/n/avr/adc/adc.h b/n/avr/adc/adc.h index 57df73a..05b6e19 100644 --- a/n/avr/adc/adc.h +++ b/n/avr/adc/adc.h @@ -24,6 +24,12 @@ * }}} */ #include +#include + +/* Different name on ATmega8535. */ +#if defined (__AVR_ATmega8535__) +#define ADCSR ADCSRA +#endif /* +AutoDec */ @@ -31,18 +37,20 @@ void adc_init (void); -/** choose and start mesure on adc line */ +/** Change channel. */ +void +adc_mux (uint8_t c); + +/** Choose and start mesure on adc line. */ void -adc_start (uint8_t d); +adc_start (void); + +/* -AutoDec */ /** check on finish mesure */ -uint8_t -adc_checkf (void); +#define adc_checkf() bit_is_set (ADCSR, ADIF) /** read mesure */ -uint16_t -adc_read (void); - -/* -AutoDec */ +#define adc_read() ADCW #endif /* adc_h */ diff --git a/n/avr/adc/test_adc.c b/n/avr/adc/test_adc.c index b7ab6bb..a8a9267 100644 --- a/n/avr/adc/test_adc.c +++ b/n/avr/adc/test_adc.c @@ -71,11 +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 (i); + adc_start (); /* Attente active sur adc jusqu'a ce que la valeur soit * disponible. */ - while (adc_checkf() !=0) + while (adc_checkf()) ; /* Lit l'adc. */ adc[i] = adc_read(); -- cgit v1.2.3