[Autre] Capteur de température Ds18b20, défaillance, tolérance ou solution !
Répondre à la discussion
Page 1 sur 2 1 DernièreDernière
Affichage des résultats 1 à 30 sur 36

Capteur de température Ds18b20, défaillance, tolérance ou solution !



  1. #1
    myst33

    Capteur de température Ds18b20, défaillance, tolérance ou solution !


    ------

    Bonjour,

    J’ai un DS18B20 de connecté sur un DLP-Io8.
    Avec une seule commande je peux lire la température en une fraction de seconde. Je prend cette lecture à chaque 2 secondes (entre 20C et 22C)!
    Si il n’y a aucun capteur de relié au DLP-Io8 je reçois 999.00C comme réponse.

    Dans la documentation du DLP-Io8 on dit d’utiliser une résistance (PullUp au +) de 1.5K et de diminuer cette valeur selon la longueur du câble !
    J’ai 10 mètres entre le dlp-Io8 et le capteur, j’ai utilisé un cable reseau de 8 fils en prenant soin de d’utiliser 4 fils faisant parti de 2 paires twisté. Afin d’éviter les interférences ou statique !

    J’ai mis une résistance de 980 Ohms, mais l'ai essayé a 1.5 !

    J’ai fait le test pensant une nuit avec un cable de 1 mètre et pendant une autre nuit avec 10 mètres.

    Mais quelques fois je reçois des fausses information de 999.99C …. Alors que ca devrait être entre environ 20C et 22C.
    Soit environ 26 mauvaises informations erronée sur un total de 25,000 lectures

    J’ai essayé de changer la valeur de la résistance, mais ça change pas les choses !
    J’ai essayé d’espacer les lectures au 10 secondes, mais le pourcentage d’erreur reste semblable soit environ .001% !

    Y a-t-il quelques chose a changer pour éviter ces erreurs ?
    Ce pourcentage d’erreur est-il dans les tolérances normales ?


    Nom : dlp2.jpg
Affichages : 827
Taille : 89,2 Ko

    -----

  2. #2
    adipie

    Re : Capteur de température Ds18b20, défaillance, tolérance ou solution !

    Bonjour, essaye le mettre une résistance de 4.7k entre VCC et la sortie
    Si tu as un deuxième capteur tu peux comparer.
    Arrête toute les applications qui tournent sur le PC sauf celle ci.
    .Nom : Ds18B20.JPG
Affichages : 817
Taille : 5,1 Ko
    Dernière modification par adipie ; 12/01/2017 à 16h11.

  3. #3
    invite03481543

    Re : Capteur de température Ds18b20, défaillance, tolérance ou solution !

    Bonsoir,

    si tu reçois une mauvaise acquisition c'est probablement que ta fonction qui lit le capteur est mal écrite.
    En principe un bon programme rejette une valeur qui sort largement du cadre normal.

    Tu mesures quoi au juste?

  4. #4
    myst33

    Re : Capteur de température Ds18b20, défaillance, tolérance ou solution !

    Citation Envoyé par adipie Voir le message
    Bonjour, essaye le mettre une résistance de 4.7k entre VCC et la sortie
    Si tu as un deuxième capteur tu peux comparer.
    Arrête toute les applications qui tournent sur le PC sauf celle ci.
    .Pièce jointe 332062
    Justement, il me semble l'avoir essayé !
    Je vais le re-essayer a nouveau pour être certain !

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

    Re : Capteur de température Ds18b20, défaillance, tolérance ou solution !

    Citation Envoyé par HULK28 Voir le message
    Bonsoir,

    si tu reçois une mauvaise acquisition c'est probablement que ta fonction qui lit le capteur est mal écrite.
    En principe un bon programme rejette une valeur qui sort largement du cadre normal.
    Sur le DLP-Io8 il y a déjà son programme interne, lequel je n'y peux rien !
    Par contre le programme que l'ai fait en VB6 et qui interroge le dlp-io8 .. je peux faire ce que je veux.

    Je pourrais y ajouter une ligne de code comme suit:
    If Tableau(5) = "999.99øC" Then
    Et je recommence tout de suite la requête sans attendre le 2 secondes prévu !

    Mais je préféré toujours quelques chose de plus safe, mais si je n'y parviens pas c'est ce que je ferai !

    Tu mesures quoi au juste?
    Je veux installer cette sonde a l'intérieur d'un conduit de ventilation !

  7. #6
    invite03481543

    Re : Capteur de température Ds18b20, défaillance, tolérance ou solution !

    Ton problème n'est pas hardware mais bien logiciel.
    L'activité du PC est possible mais dans tous les cas tu dois ajouter ces lignes.

    Mon avis est que tu ne devrais pas choisir 999.99 mais une condition disant si T>100°C (si c'est suffisant mais à mon avis oui) alors on ignore et on relit.
    Comme cela tu réduis encore plus le risque d'erreurs si tu as un résultat erratique ou un parasite.
    @+

  8. #7
    invite03481543

    Re : Capteur de température Ds18b20, défaillance, tolérance ou solution !

    Si tu es exigeant alors tu peux même créer une fonction qui interdit une valeur de plus +/- 10°C de la valeur précédente, vu que la température est un phénomène plutôt lent.
    A toi de voir.

  9. #8
    jiherve

    Re : Capteur de température Ds18b20, défaillance, tolérance ou solution !

    Bonsoir
    bien que la datasheet du capteur http://datasheets.maximintegrated.com/en/ds/DS18B20.pdf ne stipule aucune valeur pour les temps de montée , j’essaierais bien de partager la résistance de tirage en 2 donc 2,2K vers le capteur et 2,2k vers l'automate.
    JR
    l'électronique c'est pas du vaudou!

  10. #9
    myst33

    Re : Capteur de température Ds18b20, défaillance, tolérance ou solution !

    Citation Envoyé par HULK28 Voir le message
    Si tu es exigeant alors tu peux même créer une fonction qui interdit une valeur de plus +/- 10°C de la valeur précédente, vu que la température est un phénomène plutôt lent.
    A toi de voir.
    Tu as raison, ca serait surprenant qu'une telle variation se fasse en 2 secondes !

  11. #10
    myst33

    Re : Capteur de température Ds18b20, défaillance, tolérance ou solution !

    Citation Envoyé par jiherve Voir le message
    Bonsoir
    bien que la datasheet du capteur http://datasheets.maximintegrated.com/en/ds/DS18B20.pdf ne stipule aucune valeur pour les temps de montée , j’essaierais bien de partager la résistance de tirage en 2 donc 2,2K vers le capteur et 2,2k vers l'automate.
    JR
    C'est que mon propre circuit est connecté sur un autre circuit inaccessible et complet appelé dlp-io8, qui lui passe par 16F686 pour interroger le DS18B20 !
    Sachant ceci est-ce que ta suggestion tient toujours la route ?

    Merci jiherve

  12. #11
    jiherve

    Re : Capteur de température Ds18b20, défaillance, tolérance ou solution !

    Bonjour
    Donc les connexions ne correspondent pas au schéma donné en #1 !
    Il y aurait donc un PIC entre le DLP-IO8 et le capteur ? ou ais je compris de travers ?
    JR
    l'électronique c'est pas du vaudou!

  13. #12
    adipie

    Re : Capteur de température Ds18b20, défaillance, tolérance ou solution !

    Peux tu modifier la vitesse de communication coté DLP-IO8 à 9600 bauds ?
    Dans ce document : http://www.ftdichip.com/Support/Docu...io8-ds-v15.pdf ils parles de 115200 bauds ce qui semble beaucoup.
    A tu vérifié si le temps de latence du PC n'est pas en cause ?
    La trame envoyée par le DLP-IO8 contient elle un checksum et si oui est il utilisé ?
    J'utilise un réseau de 7 capteurs DS18B20 avec 1 acquisition / s avec un PIC 18F2420 vers carte SD sans raté et ceci depuis plusieurs années.

  14. #13
    myst33

    Re : Capteur de température Ds18b20, défaillance, tolérance ou solution !

    Citation Envoyé par jiherve Voir le message
    Bonjour
    Donc les connexions ne correspondent pas au schéma donné en #1 !
    Il y aurait donc un PIC entre le DLP-IO8 et le capteur ? ou ais je compris de travers ?
    JR
    En fait le PIC est soudé sur le Dlp-Io8 !
    Voici une photo de ce DLP-Io8:

    Nom : dlpip8.jpg
Affichages : 716
Taille : 60,0 Ko

    Comme tu peux voir il y a d'autres composantes, tel le FTD
    Quand je fais une requête par mon port USB je vais recevoir ce genre de réponse vraiment textuel comme je l'ai écris:
    5.0V
    999.99C
    24.00F
    1
    0
    Voici une réponse exact que je viens de recevoir:
    100005.0V0.0VCC18.93øC

    Dans ce cas ci, les 5 premières réponses sont des demande DigitalInput, les deux suivantes sont des demandes AnalogInput, et la derniere est une demande de température !

    En fait je peux envoyer une commande qui me permet de recevoir 8 réponses d'un seul coup:
    Ces 8 réponses sont divisées par un invisible LineFeed (chr(13) et chr(10))
    Si je remplace ici moi même dans cette chaîne de caractères ce Linefeed invisible comme suit:
    string = Replace(string, Chr(13), "") 'remplace chaque caractère 13 par rien
    string = Replace(ssring, Chr(10), "-") 'remplace chaque caractère 10 par un trait d'union
    et le résultat ressemble a ceci qui est plus facile a visualiser:
    1-0-0-0-0-5.0V-0.0VC-C18.93øC-

    On voit qu'il y a bien 8 réponses correspondants aux 8 canaux du Dlp-Io8 !

    Et pour recevoir ces 8 réponses j'envois une seule commande de 8 caractères qui ressemble a ceci:
    MSComm1.Output = "ASDFGNM[" et je recois en 100ms cette réponses: 100005.0V0.0VCC18.93øC

    Maintenant si j’envoie cette commande:
    MSComm1.Output = "ASDFG" et je reçois cette réponse: 10000
    MSComm1.Output = "A" et je reçois cette réponse: 1
    MSComm1.Output = "AAA" et je reçois cette réponse: 111
    MSComm1.Output = "[" et je reçois cette réponse: 18.93øC
    MSComm1.Output = "[[[" et je reçois cette réponse: 18.93øC18.93øC18.93øC

    Bien sûr ici il est inutile d'envoyer en double ou en triple une même commande, mais ça marche quand même, c'était juste pour mieux vous expliquer son fonctionnement !

    Alors il existe 5 commandes différentes pour chacun des 8 canaux soit un total de 40 commandes différentes pré-établis par le fabriquant du Dlp-Io8.
    C'est le micro contrôleur dans le DLP-Io8 qui s'occupe de tout !

    Je peux donc utiliser ses 8 canaux pour 8 capteurs DS18b20, ou 8 canaux en DigitalInput ou un mélange comme bon me semble !

    Mais ce bidule est très limité, je peux rien faire d'autres que d'envoyer des commandes et recevoir les réponses attendus par contre c'est très facile à gérer !
    Et en passant je ne pourrais même pas utiliser d'autres capteurs de température autres que le DS18B20.
    Je ne peux même pas utiliser un capteur d'humidité !


    Au plaisir !

  15. #14
    myst33

    Re : Capteur de température Ds18b20, défaillance, tolérance ou solution !

    Citation Envoyé par adipie Voir le message
    Peux tu modifier la vitesse de communication coté DLP-IO8 à 9600 bauds ?
    Dans ce document : http://www.ftdichip.com/Support/Docu...io8-ds-v15.pdf ils parles de 115200 bauds ce qui semble beaucoup.
    A tu vérifié si le temps de latence du PC n'est pas en cause ?
    La trame envoyée par le DLP-IO8 contient elle un checksum et si oui est il utilisé ?
    J'utilise un réseau de 7 capteurs DS18B20 avec 1 acquisition / s avec un PIC 18F2420 vers carte SD sans raté et ceci depuis plusieurs années.
    Oui j'ai déja essayé de baisser la vitesse du port.... actuellement je suis a 9600-8-N-1 physiquement, mais mon logiciel est a 115200-8-N-1 mais a bien y penser voici:
    Si tu lis le message #13 que je viens tout juste d’écrire je recois les répondes du port sans corruption de données, elle sont
    toujours complètes, car je m'arrange pour toujours recevoir huit réponses d'un seul coup et tous sont cohérentes ....

    Je considère que 999.99C est une réponse cohérente provenant d'un port USB ce qui ne le met pas en cause, mais c'est non cohérent pour l'interrogation de la sonde !
    D'ailleurs toutes les autres données de ces mêmes réponses sont tous aussi cohérentes !

    Peut-être que ça vient de ma sonde, mon câble, ou longueur du câble, quand on dit 1 erreur sur 1000 (1/1000) a raison d'une lecture a chaque deux secondes !

    J'ai commandé 3 sondes, je devrais les recevoir d'ici 3 semaines !
    mais si, en attendant, vous avez d'autres solutions, je suis ouvert !

    Mais je vais essayer ta proposition précédente de 4.7K d'ici quelques jours ! Quoiqu'on dit de baisser la valeur de cette résistance si on augmente la longueur du câble !

    Merci

  16. #15
    myst33

    Re : Capteur de température Ds18b20, défaillance, tolérance ou solution !

    Citation Envoyé par adipie Voir le message
    Bonjour, essaye le mettre une résistance de 4.7k entre VCC et la sortie
    Si tu as un deuxième capteur tu peux comparer.
    Arrête toute les applications qui tournent sur le PC sauf celle ci.
    .Pièce jointe 332062
    J'ai essayé hier avec le 4.7K et c'est trop, ca donne continuellement 999.99C
    J'ai donc essayé avec 2.2K toute la nuit, et ca me donne 32 erreurs sur 23500 (32/23500) lectures a raison d'une lecture par 2 secondes !
    Alors que ça soit 1K ou 2.2K il n'y a pas de différence !

  17. #16
    adipie

    Re : Capteur de température Ds18b20, défaillance, tolérance ou solution !

    Bonjour,
    La difficulté est cette boîte noire DLP-IO8 totalement inaccessible.
    As tu essayé:
    De mettre un câble très court entre le capteur et le DLP-IO8 (30 cm)
    De faire une acquisition toutes les 5 s.
    As tu des entrés sorties en l'air sur ce montage ?
    Si tu as des E/S non utilisées, configure les en sorties.

  18. #17
    myst33

    Re : Capteur de température Ds18b20, défaillance, tolérance ou solution !

    Citation Envoyé par adipie Voir le message
    Bonjour,
    La difficulté est cette boîte noire DLP-IO8 totalement inaccessible.
    As tu essayé:
    De mettre un câble très court entre le capteur et le DLP-IO8 (30 cm)
    De faire une acquisition toutes les 5 s.
    As tu des entrés sorties en l'air sur ce montage ?
    Si tu as des E/S non utilisées, configure les en sorties.
    Bon, je viens de mettre ça sans fil soit a moins de 2.5 cm pour le + et le Data et 8 cm pour le ground ...
    Ça peut pas être plus court que ça !
    J'ai mis çà a 5 secondes
    J'ai mis les 7 autres canaux en sortie
    Résultat : 11/4300

    Je vais donc attendre mes 3 prochaines sondes que j'ai acheté et voir si ce n'est pas la sonde qui a un défaut !

    Merci bien !

  19. #18
    invite03481543

    Re : Capteur de température Ds18b20, défaillance, tolérance ou solution !

    Ca ne vient pas du capteur.
    Tu verras que c'est le soft.

  20. #19
    adipie

    Re : Capteur de température Ds18b20, défaillance, tolérance ou solution !

    Comme tu es en présence d'une boîte noire inaccessible, il ne te reste que la solution de rejeter les valeurs incohérentes au niveau du PC.
    En pièce jointe une bidouille maison qui fait l'acquisition de 4 capteurs DS18B20 et 8 entrées Tor.
    Tu remarquera que ces capteurs sont sur un réseau One Wire sur une seule entrée du PIC.
    Images attachées Images attachées

  21. #20
    myst33

    Re : Capteur de température Ds18b20, défaillance, tolérance ou solution !

    Citation Envoyé par HULK28 Voir le message
    Ca ne vient pas du capteur.
    Tu verras que c'est le soft.
    Oui il est bien possible que le soft interne du DLP-Io8 soit a l'origine des défaillances occasionnelles !
    Si c'est le cas je n'ai qu'a ignorer ces fausses informations dans mon logiciel !

  22. #21
    myst33

    Re : Capteur de température Ds18b20, défaillance, tolérance ou solution !

    Citation Envoyé par adipie Voir le message
    En pièce jointe une bidouille maison qui fait l'acquisition de 4 capteurs DS18B20 et 8 entrées Tor.
    Tu remarquera que ces capteurs sont sur un réseau One Wire sur une seule entrée du PIC.
    J'ai regardé avec interet ton document.
    Dans ce document tu parle de "Une petite carte munie d’un PIC 18F2420 cadencé à 8 MHz"

    As-tu un lien de cette carte ?
    Tout ce que j'ai trouvé sur eBay c'est le PIC seul et pas la carte muni de ce PIC !

    Pour ce qui est de l'exemple du code en Delphi, il serait facile pour moi de le re-ecrire en VB6 !

    Merci !

  23. #22
    adipie

    Re : Capteur de température Ds18b20, défaillance, tolérance ou solution !

    J'avais réalisé cette carte moi même et programmé le PIC avec le logiciel MikroBasic Pro.
    Quel est ton besoin réel en entrée/sortie ?
    Le seul inconvénient avec tous les capteurs DS18B20 sur un bus One Wire est qu''il faut stoker les adresses des capteurs dans le programme ou dans l'EEPROM du PIC

  24. #23
    DAUDET78

    Re : Capteur de température Ds18b20, défaillance, tolérance ou solution !

    Citation Envoyé par adipie Voir le message
    Le seul inconvénient avec tous les capteurs DS18B20 sur un bus One Wire est qu''il faut stoker les adresses des capteurs dans le programme ou dans l'EEPROM du PIC
    Non
    A la mise sous tension, tu peux rechercher, en dynamique, les adresses des modules OneWire qui sont sur le bus . Pas de changement du soft en cas de maintenance et de changement de capteur .
    http://daniel.menesplier.free.fr/Doc/BUS%201%20WIRE.pdf
    Dernière modification par DAUDET78 ; 15/01/2017 à 11h41.
    J'aime pas le Grec

  25. #24
    adipie

    Re : Capteur de température Ds18b20, défaillance, tolérance ou solution !

    Bonjour,
    Cette méthode permet de faire la liste des adresses sur le bus, mais ne permet pas de savoir où se trouve la sonde.
    Je prend le cas d'un réseau de 3 capteurs montés sur 3 cuves différentes.
    Je peux faire l'inventaire des 3 adresses A1, A2 et A3, mais comment savoir quelle adresse est affecté au capteur de la cuve N°2.
    Maintenant, si quelqu'un a un exemple concret, je suis preneur.
    Pour l'instant je branche un capteur après l'autre, je lis l'adresse et je la sauvegarde à la bonne position dans l'eeprom du PIC

  26. #25
    invite03481543

    Re : Capteur de température Ds18b20, défaillance, tolérance ou solution !

    Bonjour,

    chaque capteur a une adresse unique, donc tu peux éventuellement les identifier individuellement en les soumettant à une source de chaleur, de là tu sais qui est qui et tu les identifies dans ton code.
    Il faut le faire avant de les monter dans les cuves évidemment.
    Ensuite dans ton code tu leur donnes un nom (temp_cuve 1, temp_cuve 2, etc).
    Ou alors j'ai pas compris ton problème...

  27. #26
    adipie

    Re : Capteur de température Ds18b20, défaillance, tolérance ou solution !

    Bonjour, je suis entièrement d'accord avec ce que tu expliques et c'est de cette façon dont je procède.
    C'est la remarque de DAUDET qui me chagrine.
    Code:
     Non
    A la mise sous tension, tu peux rechercher, en dynamique, les adresses 
    des modules OneWire qui sont sur le bus  Pas de changement du soft en cas de maintenance et de changement de capteur .
    Il semble vouloir dire qu'il n'est pas utile de toucher au soft et tout tourne autour de cela.

  28. #27
    myst33

    Re : Capteur de température Ds18b20, défaillance, tolérance ou solution !

    Citation Envoyé par adipie Voir le message
    Quel est ton besoin réel en entrée/sortie ?
    Moi j'ai besoin de 4 entrées en DigitalInput, et 3 entrées pour les sondes et je tiens pas plus que ca a l'option OneWire!

    Citation Envoyé par adipie Voir le message
    J'avais réalisé cette carte moi même et programmé le PIC avec le logiciel MikroBasic Pro.
    Le seul inconvénient avec tous les capteurs DS18B20 sur un bus One Wire est qu''il faut stoker les adresses des capteurs dans le programme ou dans l'EEPROM du PIC
    Ah Ok je comprend mieux maintenant !

    Si je comprend bien, je dois créer un programme, le compiler, l'uploader dans l'EEPROM qui lui est autonome et qui s'adresse au DS18B20 directement !
    Est-ce que la valeur de la température recu par ce programme dans le PIC provenant du DS18B20 exemple:10.0C est :
    -en string comme : 10.0
    -en binaire comme : (00110001 00110000 00101110 00110000) qu'on peut simplement reconvertir
    -ou est-ce d'autre type de format

  29. #28
    DAUDET78

    Re : Capteur de température Ds18b20, défaillance, tolérance ou solution !

    Citation Envoyé par adipie Voir le message
    Il semble vouloir dire qu'il n'est pas utile de toucher au soft et tout tourne autour de cela.
    La scrutation identifie le code de chaque machin OneWire sur le bus. Donc , on n'a pas besoin de mettre le code de chaque machin en dur avant la compil .

    Reste à savoir quel capteur correspond à quel code. Y a plusieurs solution.
    - Tu branches un capteur. C'est le numéro 1
    - Tu branches deux capteurs. C'est le numéro 2 et le numéro 1
    - Tu branches trois capteurs. C'est le numéro 3 et le numéro 2 et le numéro 1
    etc
    J'aime pas le Grec

  30. #29
    adipie

    Re : Capteur de température Ds18b20, défaillance, tolérance ou solution !

    A Myst33 :
    Non, je me suis sans doute mal exprimé.
    Chaque capteur Ds18B20 a une adresse unique sur 8 bytes qui est stockée dans une ROM interne au capteur.
    Exemple pour 8 capteurs:
    Code:
     'Adresse capteurs T° One Wire___________________________________________________
    const serial_1 as byte[8]= ($10,$45,$6D,$A9,$01,$08,$00,$7F) 'DS18S20 Bal.bas
    const serial_2 as byte[8]= ($10,$C9,$D5,$A9,$01,$08,$00,$99) 'DS18S20 Circ. bal.
    const serial_3 as byte[8]= ($10,$FA,$DF,$A9,$01,$08,$00,$90) 'DS18S20 Bal. haut
    const serial_4 as byte[8]= ($10,$8F,$A6,$A9,$01,$08,$00,$7D) 'DS18S20 Circ. Ecs
    const serial_5 as byte[8]= ($28,$DF,$FB,$2B,$02,$00,$00,$83) 'DS18B20 Arrivé eau
    const serial_6 as byte[8]= ($28,$9A,$17,$2C,$02,$00,$00,$60) 'DS18B20 Rejet eau
    const serial_7 as byte[8]= ($28,$BB,$3C,$85,$02,$00,$00,$53) 'DS18B20 Ecs
    const serial_8 as byte[8]= ($28,$FF,$1A,$D1,$64,$15,$03,$CD) 'DS18B20 T° ext.
    Pour lire les T° il faut adresser cycliquement chaque capteur et traiter la réponse du capteur.
    Voir Datasheet du DS18B20 ici: http://cdn.sparkfun.com/datasheets/S...mp/DS18B20.pdf
    Si tu veux t'amuser tu peux déchiffrer mon programme embarqué dans un PIC
    Code:
     program CarteIo_Pc
    'Ce programme traite 4 capteurs de T° DS18B20, lis 8 entrée Tor, 1 compteur rapide, 2 entrées ana et 7 sorties 'Tor, 
    'Les adresses des capteurs de T° sont stockés en eeprom
    Symbol LedVisuCom  = PORTA.2
    Symbol O_RelancePc = PORTA.3
    Symbol O_Alarme    = PORTA.4
    
    dim FinConv, DemIn as bit
     F_TrameRec,i,b, j1, OutByt, Veb4, Veb5, Bc7,CtrlCom,CntManquePc as Byte
     Ad as byte[32]                                         '8 octets x 4 capteurs
     Bc1, Cnt1, Cnt2,E1, E4, InAna0,InAna1, Iana0, Iana1,CptRc0 as word
     Vd as integer
     Mode as char
     Dt12F,Tf1,Tf2,Tf3,Tf4 as float
     Tor, St1, OutStr  as string[3]
     Iana0Str, Iana1Str as string[5]
     St6 as string[6]
     CptRc0Txt as string[5]
     St0 as string[1]
     Tt1,Tt2,Tt3,Tt4,Tt5,Tt6,Tt7,Tdif as String[23]
     TrRec as string[66]
     Af1 as string[56]  '4 sondes
     Af3 as string[32]
     Af4 as string[66]
     Af5 as string[96]
    'Uart Rx interrupt___________________________________________________________________
    Sub procedure interrupt
     if PIR1.RCIF = 1 then
       if (UART1_Data_Ready() = 1) then
        'UART1_Read_Text(TrRec,"H",66)       'Réception trame 66 octets du PC
        UART1_Read_Text(TrRec,"H",255)       'Réception trame 66 octets du PC
        F_TrameRec = 1
        LedVisuCom = 1
        DemIn = 1
       end if
       PIR1.RCIF = 0
     end if
    end sub
    '_______________________________________________________________________________
    sub function ReadTemp12() as float          '12 bits DS18B20
        Dim temp12 as byte[2]
        Dim Td12 as longint
             Ow_Write(PORTA, 5, $BE)            'Lecture du scratchpad 2 octets
             temp12[0] = Ow_Read(PORTA, 5)      'Read octet bas Temp L
             temp12[1] = Ow_Read(PORTA, 5)      'Read octet haut Temp H
              Td12 = temp12[1] * 256 + temp12[0]'Valeur température brute
              if Td12 <> 65535 then             'Détection défaut capteur
              if (Td12 >>15) = 1 then           'Si bit poids fort = 1 alors négatif
               Td12=(Td12 xor $FFFF)            'Négatif
               Td12=Td12+1
               Dt12F=0-float(Td12)* 0.0655       'Facteur pour 12 bits
              else
               Dt12F=float(Td12)* 0.0655         'Positif
              end if
              else
              Dt12F = -50.0  'Si défaut capteur T° = -50°
              end if
             Result = Dt12F
    end sub
    '_______________________________________________________________________________
    sub function ConvFloatStr(Dim ValF as float) as string[23]
      Dim FlSt as string[23]
       floattostr(ValF,FlSt)                       'Conversion temp. float en chaine
          if ValF > -10 then                       'Mise en place des espaces avants
           if ValF < 0 then strappendpre(" ",FlSt)
            else
            if ValF >= 0 then
             if ValF < 10 then
              strappendpre(" ",FlSt)
              else
              if ValF> 10 then strappendpre(" ",FlSt)
             end if
             end if
             end if
             end if
             end if
      Result = FlSt
    end sub
    
    '_______________________________________________________________________________
    main:
     Uart1_Init(9600)      'Init Usart à 9600 bauds
     Delay_ms(100)
     ADCON1 = $0D          'RA0 -> RA1 en Ana
     CMCON = 7             'Comparateur off
     INTCON2.RBPU = 0      ' Pull Up interne sur port B
     T1CON = $3           'RC0 en compteur Timer1
     INTCON.PEIE =$0      'Interupt externe Enable
     PIE1.RCIE = 1
     INTCON.PEIE = 1
     INTCON.GIE = 1
     PORTA = $0
     PORTB = $0
     PORTC = $0
     TRISA = %00000011
     TRISB = %11111111
     TRISC = %10000001
     ADC_Init()
      for E1 = 0 to 31                 'Lecture Eeprom
       Ad[E1] = Eeprom_read(E1)
       delay_ms(5)
      next E1
     DemIn = 0
     Mode = 0
     TrRec = ""
     St1 = ""
     F_TrameRec = 0
     TMR1H = 0
     TMR1L = 0
    '_______________________________________________________________________________
      while true
    
        'Conversion pour tous les capteurs_____________________________________________
           Ow_Reset(porta, 5)        'Reset OW
           Ow_Write(porta, 5, $CC)   'Envoi CMD à tous les capteurs
           Ow_Write(porta, 5, $44)   'Commande de conversion à tous les capteurs
           Gt:                       'Attente fin conversion
           FinConv = Ow_Read(PortA, 5)
           if Finconv <> 1 then goto Gt end if
      'Capteur 1____________________________________________________________________
           Ow_Reset(porta, 5)         'Reset OW
           Ow_Write(porta, 5, $55)    'Commande sélection capteur
           for i=0 to 7               'Sélection du capteur
                b = Ad[i]
                Ow_Write(porta, 5, b) 'envoi des 8 octets d'adresse au capteur
                Delay_ms(10)          'Délai entre envois
           next i
            Tf1 = ReadTemp12          'Température en float
            Tt1 = ConvFloatStr(Tf1)   'Température en string
           delay_ms(50)
      'Capteur 2____________________________________________________________________
          Ow_Reset(porta, 5)          'Reset OW
          Ow_Write(porta, 5, $55)     'Commande sélection capteur
           for i=8 to 15               'Sélection du capteur
                b = Ad[i]
                Ow_Write(porta, 5, b) 'envoi des 8 octets d'adresse au capteur
                Delay_ms(10)          'Délai entre envois
           next i
            Tf2 = ReadTemp12           'Température en float
            Tt2 = ConvFloatStr(Tf2)   'Température en string
            delay_ms(50)
      'Capteur 3____________________________________________________________________
          Ow_Reset(porta, 5)          'Reset OW
          Ow_Write(porta, 5, $55)     'Commande sélection capteur
           for i=16 to 23               'Sélection du capteur
                b = Ad[i]
                Ow_Write(porta, 5, b) 'envoi des 8 octets d'adresse au capteur
                Delay_ms(10)          'Délai entre envois
           next i
            Tf3 = ReadTemp12           'Température en float
            Tt3 = ConvFloatStr(Tf3)   'Température en string
            delay_ms(50)
      'Capteur 4____________________________________________________________________
          Ow_Reset(porta, 5)          'Reset OW
          Ow_Write(porta, 5, $55)     'Commande sélection capteur
           for i=24 to 31               'Sélection du capteur
                b = Ad[i]
                Ow_Write(porta, 5, b) 'envoi des 8 octets d'adresse au capteur
                Delay_ms(10)          'Délai entre envois
           next i
            Tf4 = ReadTemp12           'Température en float
            Tt4 = ConvFloatStr(Tf4)   'Température en string
            delay_ms(50)
       '_____________________________________________________________________________
       'Comptage sur RC0 par le Timer1
         CptRc0 = (TMR1H*256) + TMR1L        'Lecture RC0 et calcul valeur compteur
         WordToStr(CptRc0, CptRc0Txt)
      '_____________________________________________________________________________
      'Création trame sorties et envoi au PC________________________________________
       DemIn = 1
       if DemIn = 1 then                'Si demande état des entrées
         InAna0 = Adc_read(0)           'Lecture entré ana 0
         Iana0 = (AdresH*256)+ AdresL
         wordtostr(Iana0,Iana0Str)
        InAna1 = Adc_read(1)           'Lecture entré ana 0
        Iana1 = (AdresH*256)+ AdresL
        wordtostr(Iana1,Iana1Str)
        bytetostr(PORTB,Tor)          'Lecture Port B et conversion en chaine
        Af1= ""
        strAppendSuf(Af1,chr(2))      'STX       1
        strcat(af1,Tt1)               'Sonde1    9
        strcat(af1,Tt2)               'Sonde2    9
        strcat(af1,Tt3)               'Sonde3    9
        strcat(af1,Tt4)               'Sonde4    9
        strcat(Af1,Iana0Str)          'Ana0      5
        strcat(Af1,Iana1Str)          'Ana1      5
        strcat(af1,CptRc0Txt)         'Compt C0  5
        strcat(af1,Tor)               'Port B    3
        strAppendSuf(Af1,chr(3))      'ETX       1
        Uart1_Write_Text(Af1)         'Usart envoi la trame de 50 octets au PC
    'Execution des sorties__________________________________________________________
        St6 = "000"
        memcpy(@St6+0,(@TrRec + 1) ,3)     'Extraction de l'état des sorties
        OutByt = strtoint (St6)
        'if byte(OutByt) and 1 = 1 then
          'TMR1H = 0
          'TMR1L = 0
         'end if
        PORTC = byte(OutByt)
        OutByt = 0
        DemIn = 0                          'Raz demande état des entrées
       end if
       DemIn = 0
      Delay_ms(2000)
      LedVisuCom = 0
     '_____________________________________________________________________________
     wend 'Boucle sans fin
     end.
    Cté PC:
    Nom : IO_Pc.JPG
Affichages : 699
Taille : 35,7 Ko
    Si tu souhaites réaliser cette carte, je suis à ta disposition pour entrer plus dans les détails
    Dernière modification par adipie ; 15/01/2017 à 16h18.

  31. #30
    adipie

    Re : Capteur de température Ds18b20, défaillance, tolérance ou solution !

    Désolé DAUDET, j'ai du mal à comprendre.
    Après ta procédure je coupe l'alimentation du PIC, quelle sera l'ordre de lecture à la remise sous tension ?

Page 1 sur 2 1 DernièreDernière

Discussions similaires

  1. Capteur DHT22 et DS18B20
    Par invite786add39 dans le forum Électronique
    Réponses: 23
    Dernier message: 19/03/2015, 21h28
  2. fonction Capteur de température DS18B20
    Par invite712e037c dans le forum Électronique
    Réponses: 5
    Dernier message: 31/12/2014, 14h33
  3. capteur DS18B20
    Par invite85b02122 dans le forum Électronique
    Réponses: 1
    Dernier message: 14/04/2014, 06h47
  4. Capteur de température Ds18b20
    Par yvan30 dans le forum Électronique
    Réponses: 5
    Dernier message: 29/12/2013, 18h31
  5. capteur de temperature dallas ds18b20
    Par invite8e6b42f1 dans le forum Électronique
    Réponses: 1
    Dernier message: 21/02/2006, 00h06
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...