Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
On parle des Pics, sans rapport avec le langage ou la programmation

Modérateur : Jérémy

Surveillance de présence de tension externe
Gérard
Avatar de l’utilisateur
Expert
Expert
Messages : 1640
Âge : 65
Enregistré en : septembre 2015
Localisation : Alsace - Haut-Rhin

#11 Message par Gérard » dim. 8 mai 2016 21:12

Regarde page 149, il est dit "The maximum recommended impedance for analog sources is 10 k."
Regarde aussi figure 16-4 page 150.
Le 18/04/19 je suis devenu papy de jumeaux, le 01/09/23 une petite cousine des jumeaux est née.

Surveillance de présence de tension externe
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#12 Message par Jérémy » dim. 8 mai 2016 21:37

OK , à 5K je fais une bonne moyenne alors . cela ne sert a rien ne s'approcher trop de la limite . ce n'est vraimùent pas critique dans mon application .

Pour le programme je préfère faire une moyenne plutôt qu'une lecture seule non ?

Si je fais ceci c'est bon ?

Code : Tout sélectionner

     valeur_ADC = 0;
     valeur_ADC_moy = 0;
     for (i=0;i=9;i++){
         valeur_ADC = ADC_Read(4);
         delay_ms(5);
         valeur_ADC_moy = valeur_ADC + valeur_ADC_moy  ;
      }
      valeur_ADC_moy =  valeur_ADC_moy / 10;


une moyenne sur 10 lectures ainsi j'élimine les éventuelles erreurs?

PS : j'ai rien compris au schéma :oops:
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Surveillance de présence de tension externe
Gérard
Avatar de l’utilisateur
Expert
Expert
Messages : 1640
Âge : 65
Enregistré en : septembre 2015
Localisation : Alsace - Haut-Rhin

#13 Message par Gérard » dim. 8 mai 2016 21:56

Tu es sûr de ta routine?
Pour faire la moyenne de 10 valeurs, il faut acquérir les 10 valeurs dans un tableau, faire la somme des 10 valeurs et diviser par 10.
Si les valeurs de départ sont sur 8 bit, la valeur somme devra être sur 16 bit.

Pas grave pour le schéma, ce n'est pas vital, la valeur de 5K est importante.

Edit, j'ai de nouveau regardé ta routine, je crois que c'est bon. oops
Le C et moi ...
Le 18/04/19 je suis devenu papy de jumeaux, le 01/09/23 une petite cousine des jumeaux est née.

Surveillance de présence de tension externe
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#14 Message par Jérémy » dim. 8 mai 2016 22:03

Tu es sûr de ta routine?

oops non pas sûr du tout je viens de la faire .

Mais je pense que c'est bon ; La valeur valeur_ADC et valeur_ADC_moy sont des int .

Code : Tout sélectionner

unsigned int  valeur_ADC, valeur_ADC_moy;


Code : Tout sélectionner

     valeur_ADC = 0;                // RAZ de la valeur
     valeur_ADC_moy = 0;            // RAZ de la valeur
     for (i=0;i=9;i++){             // 10 boucles de mesure
         valeur_ADC = ADC_Read(4);  // Enregistrement de la valeur lue dans la variable
         delay_ms(5);
         valeur_ADC_moy = valeur_ADC + valeur_ADC_moy  ; // Ajout de la valeur lue au total pour faire la moyenne
      }

      valeur_ADC_moy =  valeur_ADC_moy / 10;            // Après collecte de 10 valeurs on divise par 10 pour sortir la moyenne
 }
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Surveillance de présence de tension externe
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#15 Message par Jérémy » dim. 8 mai 2016 22:04

Posts croisés

Merci !
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Surveillance de présence de tension externe
Gérard
Avatar de l’utilisateur
Expert
Expert
Messages : 1640
Âge : 65
Enregistré en : septembre 2015
Localisation : Alsace - Haut-Rhin

#16 Message par Gérard » dim. 8 mai 2016 22:26

La nuit nous portera conseil, réveil à 4h30 ... :evil:
Le 18/04/19 je suis devenu papy de jumeaux, le 01/09/23 une petite cousine des jumeaux est née.

Surveillance de présence de tension externe
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#17 Message par Jérémy » dim. 8 mai 2016 22:26

Bon courage pour le réveil !
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Surveillance de présence de tension externe
sylvain54
Avatar de l’utilisateur
Amateur
Amateur
Messages : 194
Âge : 51
Enregistré en : août 2015
Localisation : Dans l'est de la France

#18 Message par sylvain54 » lun. 9 mai 2016 08:26

Salut à tous,

Juste pour pinailler, il serait mieux de déclarer une valeur ''unsigned int Max_Sampling = 10;'' pour faciliter la reprise ou la modification de code ultérieure.
Cela donnerai ça du coup :

Code : Tout sélectionner



unsigned int  valeur_ADC
, valeur_ADC_moy;
unsigned int Max_Sampling = 10;    //nombre d'échantillons



    valeur_ADC = 0;                // RAZ de la valeur
    valeur_ADC_moy = 0;        // RAZ de la valeur

         for (i=0;i< Max_Sampling ;i++){             // 10 boucles de mesure
         valeur_ADC = ADC_Read(4);  // Enregistrement de la valeur lue dans la variable
         delay_ms(5);
         valeur_ADC_moy = valeur_ADC + valeur_ADC_moy  ; // Ajout de la valeur lue au total pour faire la moyenne
      }

      valeur_ADC_moy =  valeur_ADC_moy / Max_Sampling ;            // Après collecte de 10 valeurs on divise par 10 pour sortir la moyenne
  }


C'est sur que pour un petit programme, cela ne change pas grand chose, mais imagine dans un truc monstrueux :-D , tu n'as que ta valeur Max_Sampling à modifier, pas besoin d'aller voir ta routine.

A ++

Surveillance de présence de tension externe
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#19 Message par Guest » lun. 9 mai 2016 19:01

bonsoir

Bon je sais, je vais être rabat-joie, plutôt que de faire une moyenne sur dix, c'est notre éducation la base 10, nous travaillons pas ici sur la base 10, mais plutôt sur base 2( binaire)
la rotation droite >> est une divisions en base 2. La rotation gauche << étant une multiplication en base 2
Donc cela nous donne :
2 additions et 1 rotation droite, c'est une moyenne
4 additions et 2 rotations droite c'est aussi une moyenne
8 additions et 3 rotations droite cela est aussi une moyenne
etc....

Avantage plus rapide et bien plus court au niveau occupation flash pour avoir la moyenne, plus de division par 10 pas très bon pour nos petits pic :wink:
Pose toi la question pourquoi 10 ? pourquoi pas 12 15 18 , une moyenne est une moyenne. Maintenant si tu veux base de dix .Comme tu veux tu choises :wink:

perso j'aime bien les 3 rotations droite

A+
Modifié en dernier par Anonymous le lun. 9 mai 2016 19:53, modifié 1 fois.

Surveillance de présence de tension externe
HULK28
Avatar de l’utilisateur
Amateur
Amateur
Messages : 106
Enregistré en : août 2015
Localisation : IdF

#20 Message par HULK28 » lun. 9 mai 2016 19:42

Je rejoins tout à fait maï.
Il est plus propre de faire appel aux décalages que de faire une division, sauf contrainte majeure.
Tu peux prendre 8 ou 16 ce qui revient à faire un décalage à droite du résultat de respectivement 3 et 4 -> (2^3=8)
Perso je prends 16 quand je veux bien filtrer (technique de décimation).
La décimation augmente le nombre de bits mais diminue la vitesse de conversion, donc le choix dépend des contraintes de l'application.
"Pour la carotte, le lapin est la parfaite incarnation du mal" -Robert Shecley-


Retourner vers « Généralités sur les PICs »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 38 invités