Répondre à la discussion
Affichage des résultats 1 à 25 sur 25

16F877A ADC=CAN tension de référence ??



  1. #1
    hakim34

    16F877A ADC=CAN tension de référence ??


    ------

    Bonjour,

    J'aimerai à l'aide d'un pic16F877A couplé à un ecran LCD réaliser un voltmètre. Ce voltmètre devra mesurer des tensions sur une plage de 0 à 60V.
    Je programme en C avec le compilateur Mikroelectronik C pour pic. J'aimerai donc savori si le CAN du pic accepte des tensions aussi élevées mais aussi le rôle de la tension de référence. Et si quelqu'un à des exemples de programme en C qui gère ce type de fonction je suis preneur.

    MErci d'avance

    -----

  2. Publicité
  3. #2
    lempat

    Re : 16F877A ADC=CAN tension de référence ??

    Bonjour

    je connais le 16F876
    pour ces µc il y a le C mais aussi le langage machine (que je fais tous le temps)
    non, l'entrée du CAN a une excursion de 0 à 5v
    il faudrait faire un pont diviseur avec des résistances 1% avec diode zener de protec à l'entrée du CAN

  4. #3
    invite03481543

    Re : 16F877A ADC=CAN tension de référence ??

    Salut,

    pour réaliser ce voltmètre tu dois en effet adapter la pleine échelle à l'entrée du CAN (0-60V -> 0-5V) comme le dis lempat.

    Tu dois donc intercaler un montage suiveur précédé d'un pont diviseur sur son entrée +.
    L'usage d'une zéner n'est pas indispensable coté CAN si tu utilises un AO 'rail to rail' type LMV358 qui s'alimente en 5V, la sortie aura une excursion limitée à Vcc soit 5V.
    Dans le pack de programmation de chez MikroE tu as déjà des exemples de programmes pour faire une conversion A/D.
    @+

  5. #4
    hakim34

    Re : 16F877A ADC=CAN tension de référence ??

    Bonjour,

    Merci pour les infos. Alors si je comprend bien il faudrait par exemple diviser ma tension en entré par un coef puis la une fois la conversion faite la remultiplier numériquement par ce meme coef avant de l'afficher sur le lcd.
    Donc comme j'ai une plage de tension assez vaste il me faudrait mettre en oeuvre un sélecteur de calibre qui va sélectionner qu'elle pont diviseur de tension doit etre utilisé??
    Et quand n'est-il de la tensio nde référence, qu'elle est son utilitée .?

    Meric d'avance

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

    Re : 16F877A ADC=CAN tension de référence ??

    Bonjour HULK,

    Merci pour ces infos, mais quel est l'utilité du montage suiveur dans ce cas la il s'agit de supprimer le courant graca à la forte impédance d'entrée ? portéger le uC?? Pourrai-tu avori l'amabilité de m'envoyer le schéma de cablage.

    Merci

  8. #6
    SiNeRgY

    Re : 16F877A ADC=CAN tension de référence ??

    Bonjour
    La tension de reference comme son nom l'indique est la tension avec ton CAN comparera et te donnera la fraction de tnsion a injectée a celle de la reference, c'est a dire, si tu as 5V comme reference, et tu veux convertire 2.5V, tu auras un ratio de 0.5, c'est a dire, que si ton CAN a une resolution de 8bits=>2.5V correspond a 128 (256x0.5) en numerique.

  9. Publicité
  10. #7
    hakim34

    Re : 16F877A ADC=CAN tension de référence ??

    Re Bonjour LEmpat,

    Merci des infos et pourrai tu m'expliquez comment à quel endroit tu branche le zener je pensais la mettre en parallèle avec la résistance du bas du pont diviseur de tension.

    MErci

  11. #8
    jonas

    Re : 16F877A ADC=CAN tension de référence ??

    Bonjour, je serai toi je m'arrangerai pour la valeur "600" du registre du CAN corresponde à ta valeur 60V, donc en plaçant un diviseur de tension.
    (5V=1023, xVmax=(600/1023)*5V)

  12. #9
    hakim34

    Re : 16F877A ADC=CAN tension de référence ??

    Salut jonas,

    J'ai pas tout compris pourrai -tu être plus clair ?? MErci

  13. #10
    SiNeRgY

    Re : 16F877A ADC=CAN tension de référence ??

    Bonjour
    Je ne crois pas que mettre 600 dans le registre pour 60V est une bonne solution (meme que je ne vois pas vraiment l'utilité)
    Mettre 600 donc utilisation du CAN en mode 10 bits, ca se traduit par perte de sensibilité, car le registre a 1024 possibilités.
    Si on utilise 600 pour 60 V, donc le quantum sera de 0.1 V, mais si on affecte 1023 a 60V, le quantum sera de 58mV.

  14. #11
    jonas

    Re : 16F877A ADC=CAN tension de référence ??

    Re, tout d'abord tu vas utiliser le can du pic en mode 10bits, la valeur max (1023) carrespond à 5v, 0 à 0v si tu n'as pas indiquer de réf par défaut c'est la masse; alors pour te simplifier l'affaire tu pourrais t'arranger pour que lorsque tu as ta tension max (60v) tu trouves comme tension d'un diviseur que tu auras calculé une tension telle que dans ton registre de CAN se trouve la valeur 600 (+ou- mileu de plage), comme ça tu n'as plus qu'à afficher ces valeurs sans effectuer de convertions dans le pic.

  15. #12
    hakim34

    Re : 16F877A ADC=CAN tension de référence ??

    Re jonas,

    C'est bon j'ai compris, mais je ne gagne rien à utiliser ce principe. LE plus simple c'est le lire le résultat dans ADRESH ou ADRESL sur 10 bits et calculé à qu'elle tension correspond 1bit soit 5/1024 = 0.0048V. donc au final de multiplier le mots sur 10 bits obtenue par le quantum.

  16. Publicité
  17. #13
    hakim34

    Re : 16F877A ADC=CAN tension de référence ??

    re tt le monde,

    Une dernière question, si je lis la valeur du registre de résultat après conversion ADRESH et que je multiplie directement cette valeur (sur 10 bits) par un le quantum quui lui est en décimale, j'ai peur que cela ne pose problème. J'aimerai avoir votre avis sur la question. J'ai penser faire une conversion mais bon;

  18. #14
    jonas

    Re : 16F877A ADC=CAN tension de référence ??

    re, tout depend aussi du language utilisé.. ce sera peut étre plus aisé en .c je ne sais pas t'aider à ce sujet...

  19. #15
    hakim34

    Re : 16F877A ADC=CAN tension de référence ??

    Merci Jonas,

    ouai en c avec le compilateur mikroElectronika C for pic. C'est pas grave merci quand même.

  20. #16
    jonas

    Re : 16F877A ADC=CAN tension de référence ??

    De rien

  21. #17
    invite03481543

    Re : 16F877A ADC=CAN tension de référence ??

    De quelle résolution (précision) as-tu besoin?

    Le PIC possède un CAN sur 10 bits soit 5/1024=4.88mV

    Ramené sur ton 60 volt, cela te permet d'avoir une résolution de 58.56mV ce qui est déjà confortable.

    Le suiveur permet d'avoir une sortie faible impédance pour attaquer l'entrée du CAN, avec une grande impédance d'entrée coté mesure donc sans influence sur la source du signal.
    @+

  22. #18
    invite03481543

    Re : 16F877A ADC=CAN tension de référence ??

    Citation Envoyé par hakim34 Voir le message
    re tt le monde,

    Une dernière question, si je lis la valeur du registre de résultat après conversion ADRESH et que je multiplie directement cette valeur (sur 10 bits) par un le quantum quui lui est en décimale, j'ai peur que cela ne pose problème. J'aimerai avoir votre avis sur la question. J'ai penser faire une conversion mais bon;
    Tu récupères une valeur Hexa du CAN (les 10 bits sont répartis en 8 bits dans un premier registre ADRESH (MSB) et 2 bits (LSB) dans un autre ADRESL.
    Lorsque le mot de 10 bits est reconstitué sous forme Hexa, tu le convertis en décimal et ensuite tu appliques le coefficient de mise à l'échelle.
    Puis tu effectues une conversion décimal/ASCII pour le formater vers l'afficheur.

  23. Publicité
  24. #19
    invite03481543

    Re : 16F877A ADC=CAN tension de référence ??

    Citation Envoyé par hakim34 Voir le message
    Bonjour HULK,

    Merci pour ces infos, mais quel est l'utilité du montage suiveur dans ce cas la il s'agit de supprimer le courant graca à la forte impédance d'entrée ? portéger le uC?? Pourrai-tu avori l'amabilité de m'envoyer le schéma de cablage.

    Merci
    Voici le schéma correspondant.
    @+
    Fichiers attachés Fichiers attachés

  25. #20
    hakim34

    Re : 16F877A ADC=CAN tension de référence ??

    Merci HULK,

    Y a quand même des points que je n'ai pas compris.
    Tu dit que tu récupère une valeur en hexa sur 10 bits, moi je pense plutot que tu récupère un mot binaire sur 10 bits.
    Tu parle de mot hexa recomposé, j'ai pas compris non plus ???
    Le plus simpe serai que tu me donen un exemple.
    Genre celui la :

    On reçoit le mot sur 10 bits suivant 11011110 11 donc les 8 premiers sur ADRESH et les deux derniers ADRESL
    Mon compilateur à une fonction ADC_READ qui lit ce résultat sur 10 bits donc mot recomposé.
    j'ia un quantum de 4.88mV. comment multiplier le mot binaire sur 10 bits par un float??
    Comment convertir un mot de 10 bits en 8 Bits ???

    Es ce possible que mon compilateur fasse la conversion décimal/ASCII automatiquement .

    MErci

  26. #21
    invite03481543

    Re : 16F877A ADC=CAN tension de référence ??

    Je n'ai peut-être pas été assez précis, on ne dit pas que l'on récupère une valeur Hexa sur 10 bits ça n'a pas de sens, un bit n'a de sens qu'en binaire seulement.

    Citation Envoyé par Hulk28
    Tu récupères une valeur Hexa du CAN (les 10 bits sont répartis en 8 bits dans un premier registre ADRESH (MSB) et 2 bits (LSB) dans un autre ADRESL.
    En fait le convertisseur du PIC reçoit le résultat de la conversion dans 2 registres ADRESH et ADRESL, il faut donc extraire les 10 bits utiles sur les 16 bits que forment ces 2 registres pour recueillir le résultat complet sur 10 bits (ce qui s'écrit 3FF en Hexa ou 1023 en décimal).

    Le registre ADCON0 contrôle le fonctionnement du CAN, le registre ADCON1 permet de sélectionner les entrées utilisées et le format du résultat.
    En effet on peut justifier à droite ou à gauche le résultat des 2 registres ADRESH et ADRESL, en général on préfère justifier à gauche, ce qui permet de ce contenter le cas échéant d'un résultat sur 8 bits en lisant uniquement ADRESH.
    On écrit dans le registre ADCON1 pour fixer la configuration du port analogique, les tensions de référence (Vref+ et Vref-) ainsi que le format du résultat.
    On écrit dans le registre ADCON0, pour fixer la fréquence de conversion et la voie à convertir et valider le module.
    Enfin on lance la conversion par le bit GO que l'on positionne à 1 dans ADCON0, puis on teste ADIF pour détecter la fin de conversion.

    Tu peux écrire ces résultats en binaire, Hexa ou décimal, cependant la conversion Hexa-ASCII est la plus simple ici à réaliser donc c'est elle qu'il faut privilégier.


    /****************************** ****************************** ****
    Conversion Hexa -> ASCII (Max:999)
    ****************************** ****************************** ****/
    uchar HexToAscii(uchar hexa)
    {
    hexa = hexa + 0x30 ;
    if (hexa > 0x39) hexa = hexa + 7 ;
    return(hexa) ;
    }

    @+
    Dernière modification par HULK28 ; 09/07/2007 à 23h42.

  27. #22
    Pascal13

    Re : 16F877A ADC=CAN tension de référence ??

    Bonjour a tous
    Je suis nouveau sur ce forum...,

    Hulk28,
    J'ai lu attentivement tes explications et je profite de ce post car j'ai également à peu pres identiques sur le meme montage ( réalisation d'un voltmetre a double entrée permettant de lire la valeur des tensions de 2 batteries moteur et accessoires pour un bateau).

    Je bloque depuis un certain temps sur ces 2 fameux registres qui forment 10 bits pour lire la valeur de la tension appliquée au port analogique.
    En effet, je ne comprend pas que les 2 registres soit incrémentés simultanément ,car comment dans ce cas je puis compter correctment ?

    Je ne sais pas si je suis clair dans mes explications
    Merci

  28. #23
    invite03481543

    Re : 16F877A ADC=CAN tension de référence ??

    Salut,

    sur quoi bloques-tu exactement?

  29. #24
    Pascal13

    Re : 16F877A ADC=CAN tension de référence ??

    Merci Hulk de bien vouloir me repondre
    Mais en bien cherchant et en reflichissant.......j'ai trouvé
    Merci encore

  30. Publicité
  31. #25
    meriman

    Re : 16F877A ADC=CAN tension de référence ??

    bonjour,

    moi aussi j'ai un problème de précision, mais je n'ai pas compris comment ajouter e coefficient de mise à l'échelle dans mon programme.

    Merci de donner plus de detail sur ce point.

Discussions similaires

  1. soustraire une tension de référence
    Par alainav1 dans le forum Électronique
    Réponses: 8
    Dernier message: 26/10/2007, 17h59
  2. PORTD sur 16f877a
    Par sdow dans le forum Électronique
    Réponses: 2
    Dernier message: 12/10/2007, 14h16
  3. crystal 16F877A
    Par maxime.drouin dans le forum Électronique
    Réponses: 1
    Dernier message: 03/06/2007, 22h08
  4. Comparer différence de potentiel avec tension de référence
    Par thomasalbert1993 dans le forum Électronique
    Réponses: 2
    Dernier message: 02/04/2007, 14h29
  5. cherche une réference d'un régulateur de tension
    Par Pascal dans le forum Électronique
    Réponses: 7
    Dernier message: 30/03/2007, 08h14
Découvrez nos comparatifs produits sur l'informatique et les technologies.