(Tu avais le seuil de 512 à 2,48V, or, 512*4,88e-3= 2,499 ce qui était pas mal...)
Donc à mon avis ca ne vient pas de ta tension de Ref..
Bizarre...
Bon lil vince,
je viens de refaire le testet le basculement entre RA3 et RA4 et donc entre 256 et 512 se fait lorsque la tension AN1 est de 2,495V....
donc si je multiplie 512 par 4.88e-3, ça donne 2.498 ..!!!ça devrait etre bon
Je suis d´accord mais je me répète:Bizarre...
Donc au pire, (si tes 2,48V sont mesurés avec précision (Attention erreur du multimètre)) ton q = 2,48/512 = 4,84e-3 ou alors t´as un offset...Tu avais le seuil de 512 à 2,48V, or, 512*4,88e-3= 2,499 ce qui était pas mal...
Mais un offset de 10% ca serait vraiment un CAN de m***
(de toute facon ce n´est pas le cas puisqu´en utilisant ADRESH tes seuils sont corrects)
ExactementBon lil vince,
je viens de refaire le testet le basculement entre RA3 et RA4 et donc entre 256 et 512 se fait lorsque la tension AN1 est de 2,495V....
donc si je multiplie 512 par 4.88e-3, ça donne 2.498 ..!!!ça devrait etre bondonc
Normalement quand on prend plus de bits, on est plus précis, enfin je croyais(ne pas prendre au serieux)
Il suffit que je fasse ça:
et la ça déconne...la tension de seuil est de 2,98V....M**** alors que le seuil fixé était de 2.5V et q est de 4.88mVan1 = ((ADRESH*256)+ADRESL)*q;
....????....§§§§!!!!....????§§ §§
Et impossible de visualiser le contenu du registre ADRES avec le debugger j y arrive pas...je suis trop nul !!!!
C'est régulier ce genre d'erreur sans l'utilisation d'une référence de tension stable, il suffit d'une alimentation mal filtrée sur le µC, et le CAN a la dérive de cette alimentation...
David.
Pourtant l'alimentation de mon PIC est réalisé par un régulateur L78M05 avec en amont deux condensateurs en parallèle de 100µ et 100n et en aval 100n et 10µ...C'est régulier ce genre d'erreur sans l'utilisation d'une référence de tension stable, il suffit d'une alimentation mal filtrée sur le µC, et le CAN à la dérive de cette alimentation...
Fais une moyenne glissante sur 8 échantillons de 8b prélevés à intervalles fixes ...
[Edit] Fais quelques essais : tu as des résultats vraiment differents à chaque fois ? ( et regarde en même temps avec un oscillo si la tension sur AN0 est bien stable ... )
Un L78M05 n'est pas une référence de tension absolument stable...
Utilise la solution de Seb26 avec en plus l'augmentation du temps des TAD.
David.
Ou ré-éssaye en 2 étapes:
int x = ADRESH*256 + ADRESL;
tu refais le test avec un seuil = 512
et si ca marche, tu rajoutes:
Van0 = x*q;
et tu test avec un seuil de 2,5...
(Pour voir si ca vient pas de la conversion en float)
Exact mais avec 100uF et 100nF, ca devrait quand même être pas mal(ca dépend de la pre´cision voullue)...Un L78M05 n'est pas une référence de tension absolument stable...
J'ai augmenté les TAD...et la c'est la meme chose...
je vais essayé la procédure de seb26..
le L78M05 peut avoir une dérive de 100mV suivant l'appel de courant avec les condos recommandés par le constructeur...
Alors, je te laisse calculer la dérive sur un CAN 10bits!
David.
PS: pourquoi veux tu absolument convertir la valeur de ton CAN en volt ??? ( donc dans un float )Code:unsigned short us_canVal = ADRES; float f_canVal = (float)us_canVal; f_canVal *= q;
... ça revient pas au même de convertir tes tensions de seuils en valeur du CAN ? ... et ce serait bien moins couteux en CPU ... faut pas oublier que c'est un PIC, et pas un Core2Duo avec 2GB de RAM ... donc moins y'a de int et de float, mieux il se porte ...![]()
Ca fait 2%, donc pour aller à 10% il en manque encore...(de plus, il me semble que les 7805 fournissent 1A, non?)le L78M05 peut avoir une dérive de 100mV suivant l'appel de courant avec les condos recommandés par le constructeur...
A mon avis, (surtout du fait que ca fonctionnait très bien en 2 bits) ca vient du Soft...
Bon j'ai fait ce test....
et la a 2,5V sur an1, j'ai bien 512...donc jusque la tout va bien...je vais essayé avec q maintenant...x=((ADRESH*256)+ADRESL)
par la suite je veux l'afficher sur un afficheur LCD graphique, mais je n'en suis pas la pour le moment..mais c'est sur que pour l'instant les float prennent de la place!!pourquoi veux tu absolument convertir la valeur de ton CAN en volt ???
Et voila quand je fais
le basculement ne se fait pas à 2,5 mais 2,99V...donc ça vient de la convertion en float...non?x=((ADRESH*256)+ADRESL)*q
Tu veux afficher des volts ? ... Tu ne voudras pas plutôt afficher des °C ?! ...
NB: la place, c'est un chose, mais un float n'est que 4 octets ... le truc c'est surtout le temps CPU pris pour faire une opération sur un float ... fait quelques essais avec un oscillo juste pour voir ...... en general on essaye d'utiliser des nombres à virgule fixes surtout quand on connait la plage des valeurs possibles ...
![]()
x, c´est moi qui est mis un nom de variable au hasard, c´est un entier.
Je lui ais déjà dit de faire la même chose, et en 2 étapes pour déjà voir si x est bon et si ca vient de la conversion...(message#73)x=((ADRESH*256)+ADRESL);
float f = ((float)x) * q;
Sinon, t´as raison, pourquoi utiliser des float?
Seb 26............................ ...........![]()
![]()
![]()
Nikel....
ça marche le basculement se fait à 2,500000000000000000000000000 !!!
Par contre faut m'expliquer...
Pourquoi ça ça marche
et pas ça:x=((ADRESH*256)+ADRESL);
float f = ((float)x) * q;
Merci encorex=((ADRESH*256)+ADRESL)*q
Faut pas mettre x = float puisque x est un entier, il faut faire:Et voila quand je fais
Citation:
x=((ADRESH*256)+ADRESL)*q
le basculement ne se fait pas à 2,5 mais 2,99V...donc ça vient de la convertion en float...non?
x=((ADRESH*256)+ADRESL); (x est un entier)
Van0 = x*q; (avec Van0 un float)
Bah je viens de le faire, t´avais mis entier = float donc ca ne pouvait pas marcher!Nikel....
ça marche le basculement se fait à 2,500000000000000000000000000 !!!
Par contre faut m'expliquer...
(Fallait lire mon message #73 correctement...)
Je suis désolé lil vince...je me suis emméler les pinceau entre les entier et les float...je définisais x comme entier que j'utilisai ensuite comme un float...pas très malin je suis...
Encore merci pour votre aide
Au plaisir, c´est toujours intéressant de connaitre des sources d´erreurs possibles...et ca fait plaisir de se rendre utile...
Bonne continuation pour la suite de ton projet...![]()
le L78M05 c'est 300mA...
100mV est à multiplier par deux; au moment de l'appel de courant (-100mV) et au relâchement du courant (+100mV)
Vu le fil, c'est bien un problème soft, mais si on ajoute LCD et tout le tralala, méfiance avec l'utilisation de VDD comme VREF+...
Perso par sécurité, j'utiliserais le méthode de Seb26, avec l'augmentation des TAD de manière à effacer au maximum les dérives de tension du régulateur.
David.
Je te remercie pour tes conseils David, je tacherai de prendre ça en compte lors de la réalisation total de mon projet.
Encore merci pour votre aide
Nicolas