[ATMEGA32] ADC aref=2.56V
Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

[ATMEGA32] ADC aref=2.56V



  1. #1
    valentin8

    Question [ATMEGA32] ADC aref=2.56V


    ------

    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;
    }
    Nom : ADC.png
Affichages : 94
Taille : 33,6 Ko


    Un grand merci pour votre aide. Je pense que je ne suis pas loin, mais je vois pas où je bloque...

    -----

  2. #2
    micka_ch

    Re : [ATMEGA32] ADC aref=2.56V

    Bonjour,

    J'utilise un ATMEGA128 au boulot et je sais que la pin AVCC est connecter au 5 volts dans nos schémas. Dans la fiche technique du ATMEGA128, au chapitre "Pin description" il y a l'information suivante :

    AVCC is the supply voltage pin for Port F and the A/D Converter. It should be externally
    connected to VCC, even if the ADC is not used. If the ADC is used, it should be connected
    to VCC through a low-pass filter.


    Vérifie dans la fiche technique de ton contrôleur si tu as correctement branché la pin AVCC. Peut-être est-ce là la source du problème.

    Salutations

  3. #3
    micka_ch

    Re : [ATMEGA32] ADC aref=2.56V

    Re,

    En faite j'ai même pris le temps d'aller chercher dans la fiche technique d'un ATMEGA32 :

    AVCC is the supply voltage pin for Port A and the A/D Converter. It should be externally connected
    to VCC, even if the ADC is not used. If the ADC is used, it should be connected to VCC
    through a low-pass filter.


    Donc tu dois connecter AVCC à un "Vcc filtré"

  4. #4
    valentin8

    Re : [ATMEGA32] ADC aref=2.56V

    Bonjour, je te remercie. Je n'ai pas fait attention j'avoue.
    Pour filtrer (simulation), j'ai mis 100nF. J'ai vu que certains mettent un céramique 100nf ? et un autre électrolytique (on voit le signe +). Quelle est la différence?

    J'ai bien mon 2.56V en aref, il fonctionne bien et atteint bien 1023.

    Mais j'avance petit à petit. (j'écrirais bien un article quand tout sera fini..)

    Je n'ai pas d'appareils de mesure, donc j'ai du mal à comprendre comment fonctionne l'accéléromètre.


    Je vous mets le lien pour rappel: http://wwww.hansfordsensors.com/asse...eets/TS083.pdf

    On peut lire qu'on doit l'alimenter en 18V/30V (je vais prendre 24V je pense bien) avec un courant de 0.5 à 8mA.
    Une tension bias est générée (10V 12V) par l'accéléromètre.

    Le schéma électronique est à la deuxième page de la datasheet:

    bias12V.png

    et j'ai ceci :

    alim acc.png


    De plus, on remarque dans la datasheet que c'est 100mV/g. Je dois monter à 200g minimum.

    ma question est la suivante :

    Quel signal ais-je en sortie ? Est ce que c'est +/-100mv qui oscille autour de 0V, (bias 10V DC, donc [9.9,10.1] V ?). Ou en fait, je suis ma première idée et je me dit que le condensateur va filtrer ma composante continue, donc mon DC bias, il ne sera jamais visible et j'obtiendrais que mes +/-100mV?


    J'ai une deuxième question, je sais qu'un atmega ne pourra jamais lire 20V (oui, car 100mV * 200g). il supporte maximum 5V sur son entrée. Donc je dois remettre à l'échelle.

    Mais comment ?

    1. Première idée, on s'imagine le pont diviseur, mais ça pompe pas mal en courant non ?
    2. Mon autre idée est l'utilisation d'un AOP mais avec un gain négatif comme un AOP inverseur (gain -R2/R1). Mais je crains les courants/et tensions d'offset qui au final vont varier ma valeur ADC. Il faut jouer alors sur des résistances de compensation (un peu lourd pour juste une mise à l'échelle non ?)
    3. Je prends mon diviseur de tension avec des résistances et je commande avec un transistor (mais lequel, ça a une réelle importance) ?

    J'ai encore pleins de questions, mais je vais m’arrêter là pour le moment...

    Je vous remercie pour votre aide ainsi que votre expérience.

    Bien à vous,

  5. A voir en vidéo sur Futura
  6. #5
    micka_ch

    Re : [ATMEGA32] ADC aref=2.56V

    Bonjour,

    D'après la fiche technique de l'accéléromètre, tu as une plage de mesure de +-80g, une sensibilité de 100 mV/g +- 10% et un offset de 10 à 12 V

    Remarque : tu ne pourras pas mesurer 200g avec ton capteur !!

    Sinon la tension maximale de sortie est donnée par : sensibilité max * gmax + offset max = 0.11*80+12= 20.8 V
    La tension minimale : sensibilité max * gmin + offset min = 0.11*(-80)+10= 1.2 V

    En gros tu as une droite comprise entre ces 2 limites (voir graphe ci-dessous).

    Nom : Vout.png
Affichages : 92
Taille : 8,2 Ko

    Ensuite tu dois adapter cela à l'entrée de ton ADC

    En espérant que cela t'aide, salutations

  7. #6
    valentin8

    Re : [ATMEGA32] ADC aref=2.56V

    Bonjour micka_ch, je reviens vers toi et en relisant ton schéma, je me dis pour la sensibilité minimale, ne faut t'il pas qu'elle soit à 0.9 au lieu de 1.1.

    Je te remercie pour l'aide que tu m'apportes.

    Bien à toi,

  8. #7
    valentin8

    Re : [ATMEGA32] ADC aref=2.56V

    Ma question parait bête mais pourquoi à 0g, il y a une variation du coefficient angulaire ? Merci

    quand je calcule : 0.11*(-80)+12 , je tombe sur 3.2V et sur le graphique, il est à 5V.

    Aurais je loupé une étape ?
    Dernière modification par valentin8 ; 24/04/2012 à 14h40.

Discussions similaires

  1. Fréquencemetre avec un Atmega32
    Par invite6d67225b dans le forum Électronique
    Réponses: 15
    Dernier message: 01/06/2011, 21h53
  2. Bootloader ATmega32 langage c
    Par thomasalbert1993 dans le forum Électronique
    Réponses: 3
    Dernier message: 01/05/2009, 14h33
  3. Aref 4.096V !?
    Par invite52a78f30 dans le forum Électronique
    Réponses: 13
    Dernier message: 02/11/2008, 16h35
  4. [ATMEGA32] module bluetooth
    Par inviteff7a2099 dans le forum Électronique
    Réponses: 2
    Dernier message: 18/08/2008, 13h19
  5. ATmega32 HS ?
    Par Kilhian dans le forum Électronique
    Réponses: 0
    Dernier message: 18/07/2007, 08h01
Découvrez nos comparatifs produits sur l'informatique et les technologies.