Bonjour tout le monde,
Je bosse sur une lecture d'ADC, je sais que mon capteur me renverra dans mon cas, maximum 2V. C'est pourquoi au lieu de créer une tension externe de référence, j'utilise la tension interne qui est de 2.56V en modifiant les registres d'ADMUX.
Néanmoins, je cherche depuis plusieurs heures, ma conversion se fait bien jusque 0.5V (il m'affiche 200), puis après, il est bloqué.... j'ai un rapport de conversion de 2.56V/1024, car je travaille sur 10 bits, donc 0.0025.
Que se passe t'il pour qu'il bloque à 200 ? Typage des variables? Aref doit être mis à la masse avec un condensateur. et Avcc je présume qu'il doit etre à la masse également.
Code:void ActiverADC() { // Mode 2.56V ADMUX=(1<<REFS1)|(1<<REFS0); // Ajouter Prescaler et on rend enable l'ADC (8Mhz/64 = 125Khz) OK ADCSRA=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1); } uint16_t mesure_accelerometre(uint8_t voie) { ADCSRA=(1 << ADEN); // 0xF8 permet d'effacer préalablement et on ajoute la voie qu'on veut. //ADMUX = (ADMUX & 0xF8)|voie; // pas bon ... //ADMUX = voie; ADMUX |= voie; // je modifie mon bit pour ma voie //On met le microcontroleur en mode sleep ADC //MCUCR=16; //ADMUX |= voie; // j'active les bits pour la voie sur ADMUX ADCSRA|=(1<<ADSC); // Je commence ma conversion // On attend tant que ADIF n'est pas à 1 (conversion terminée) //while(!(ADCSRA & (1<<ADIF))); //On peut utiliser ADSC également while(ADCSRA & (1<<ADSC)); //on s'assure de remettre ADIF à 0 (effet inverse) //ADCSRA|=(1<<ADIF); //return(ADCW); volatile uint16_t res; res=ADCL+ADCH*256; //res=ADCH; ADCSRA=(0 << ADEN); return res; } int main() { int i=0; uint16_t resultat; ActiverADC(); // init lcd ,... while(1) { lcd_home(); i++; lcd_clrscr(); lcd_string2("Lecture \nAcc. %d ",i); _delay_ms(1000); resultat = mesure_accelerometre(i); if(resultat>200) { DDRD = 0xFF ; PORTD = 0xFF; } else { PORTD = 0x00; } lcd_clrscr(); lcd_string2("Valeur \nAcc. %d ", resultat); _delay_ms(1000); if (i==4) { lcd_clrscr(); lcd_string2("Enregistrement\n OK !"); _delay_ms(500); i=0; } } return 0; }
Un grand merci pour votre aide. Je pense que je ne suis pas loin, mais je vois pas où je bloque...
-----