DS18B20 sur bus 1-Wire

Conseils et outils pour réguler votre installation...

Modérateurs : ramses, Balajol, monteric, ametpierre, j2c

Avatar du membre
richardel
Maitre Solaire
Maitre Solaire
Messages : 824
Enregistré le : dim. juin 29, 2008 23:02 pm
Localisation : Verviers Belgique

Message par richardel »

Ben c'est bien, félicitation :thup:
Connaître quels sont les occupants d'un bus est une bonne chose mais, a mon avis, cette recherche me parait inutile (ou alors juste pour une identification d'un composant) car il faut encore associer que le DS18B20 identifié "xx" correspond a celui qui est placé en haut de la cuve numero 2, par ex.

De façon toute personnelle, c'est dommage que ton code est pour un PIC. Ca aurait été fait sur un atmega, je t'aurais frotté la manche :roll:

En fait, pour les atméga, il existe un langage évolué qui s'appelle bascom. Ce langage est prévu pour interroger des 1Wire mais je suis surpris de ne pas voir l'identité du composant dans l'instruction. Je me demande si ca ne fonctionne pas s'il y a un seul composant sur le bus... (mais alors ou est l'intéret d'un bus ?)
Mais tu es plus loin que moi...

Tiens, au fait, problème avec les températures négatives ???
Il ne suffit pas de lire le signe ? (qui, je crois est répété plusieurs fois) et peut-être lire la valeur (complémentée a deux si je me souviens bien).
y a autre chose ?

Amitiés
L'important n'est pas la température de l'eau solaire, c'est le nombre de KWh engrangé.

Avatar du membre
patrick07
Maitre Solaire
Maitre Solaire
Messages : 1869
Enregistré le : lun. avr. 03, 2006 11:07 am
Localisation : Sud Ardèche -07- St Germain
Contact :

Message par patrick07 »

[quote="daniel 53"]

Je vais essayer maintenant de reproduire les fonctions du minisun, ce sera forcément plus cher, mais moins bien...

Daniel[/quote]

Bonsoir Daniel, tous,

Pourquoi moins bien ??? :-?

Une fois que tu as récupéré les valeurs renvoyées par les DS il te faut encore diviser par 1,6 pour avoir la température en 1/10°C, si tu tournes en 12bits.


Cela revient à multiplier par 5 et diviser par 8, soit la valeur lue décalée 2 fois à gauche (x4) + une fois cette valeur (x5) suivit de 3 décalages à droite (/8), simple et rapide à rajouter en C ou assembleur.

Finalement tu as laissé tomber le C ???

:bye:

Edit: correction diviser par 1,6 et non multiplier.
Modifié en dernier par patrick07 le jeu. juil. 22, 2010 23:29 pm, modifié 1 fois.
Patrick

[url=https://ard-tek.com/index.php/forum/sujets-recents]Le forum du MaxiSun[/url]

Forhorse
Etudiant Solaire
Etudiant Solaire
Messages : 278
Enregistré le : lun. févr. 08, 2010 14:42 pm
Localisation : 61 - Perche

Message par Forhorse »

Ah bon, j'ai jamais eu a faire cette multplication de 1.6. C'est a quelle chapitre de la datasheet ? (j'aurais loupé quelque chose ?)

Avatar du membre
daniel 53
Technicien Solaire
Technicien Solaire
Messages : 406
Enregistré le : mer. déc. 27, 2006 21:49 pm
Localisation : 53 300 Ambrières-les-Vallées

Message par daniel 53 »

Bonjour
Bien content que ce sujet en intéresse quelques uns.
Pour les félicitations, il faut y mettre un bémol à cause des chevilles qui enflent et surtout parce que je suis parti d'un programme déjà fait dont j'ai supprimé les parties inutiles pour moi et corrigé ces erreurs en négatif. C'était bien traité en complément à 2, mais il y avait un bug entre le code obtenu en hexa et la conversion en décimal pour l'affichage.

Bien sur, pour faire fonctionner le bus avec plusieurs capteurs, il faut utiliser l'instruction "match rom" code h55. Et pour connaitre les codes, il faut au préalable faire "search rom" code hF0.



Non Patrick, je n'ai pas laisser tomber le C. Je vais d'ailleurs faire subir le même traitement à ton programme qu'avec celui en assembleur pour mieux le comprendre, je vais même commencer par mettre la sonde au congélateur pour voir et me replonger sur cette multiplication par 1,6.

C'est vrai que le C sera plus universel...

mode joke"on"
Tu n'as pas encore essayé avec plusieurs capteurs sur le bus?
Il me semble que tu as le matériel pour...
mode "joke "off"

Daniel

Avatar du membre
daniel 53
Technicien Solaire
Technicien Solaire
Messages : 406
Enregistré le : mer. déc. 27, 2006 21:49 pm
Localisation : 53 300 Ambrières-les-Vallées

Message par daniel 53 »

Pour Patrick

En ce qui concerne ton programme, je viens de mettre la sonde au congélateur: les décimales 4, 5, 0, et 9 n'apparaissent jamais pour les températures négatives.
Vérification pour les températures positives: ce sont les 0, 1, 5 et 6 qui se font oublier.

Y'a quelque chose qui cloche la d-dans
J'y retourne immédiatement...

Daniel

Avatar du membre
p_bricoleur
Modérateur
Modérateur
Messages : 1671
Enregistré le : mar. déc. 27, 2005 10:37 am
Localisation : Rueil-Malmaison (92)
Contact :

Message par p_bricoleur »

Ah bon, j'ai jamais eu a faire cette multplication de 1.6. C'est a quelle chapitre de la datasheet ? (j'aurais loupé quelque chose ?)
Le datasheet ne dit pas qu'il faut multiplier mais si on regarde dans le chapitre "Operation- measuring temperature", on voit que le bit le moins significatif vaut 2^(-4) : 0,0625 en décimal.
Donc si on charge les 2 octets dans un entier 16-bit, la valeur est 16 fois trop grande.

On le voit dans la table du dessous puisque 125°C est codé 07D0 (héxa) soit 2000.
On peut se contenter de faire un décalage de 4 bits vers la droite (ou de diviser par 16), on obtient des degrés Celsius, mais on perd 4 bit de précision (ça revient à supprimer les chiffres après la virgule en décimal).
Ça peut être satisfaisant selon l'application.

Il y a quelques mois, j'ai écrit (en C) toutes les fonctions nécessaires pour :
- configurer la précisions & les seuils des sondes
- lire les températures de 1, n ou toutes les sondes
- chercher les devices 1-wire sur le bus

Ceci basé sur la bibliothèque au dessus des drivers Maxim Windows quui permet d'envoyer ou lire un octet sur le bus 1-wire.

Le programme est là si ça peut inspirer : http://solarihome.perso.sfr.fr/oneWire/oneWire2.c
Fait sur Visual C++ (gratuit)

C'est le programme qui sert à mon script Python à aller chercher les températures sur le bus 1-wire.
Il a passé l'hiver donc les températures négatives, par contre il garde la précision totale en flottant.

Cordialement,
Thierry Streiff

Avatar du membre
patrick07
Maitre Solaire
Maitre Solaire
Messages : 1869
Enregistré le : lun. avr. 03, 2006 11:07 am
Localisation : Sud Ardèche -07- St Germain
Contact :

Message par patrick07 »

[quote="p_bricoleur"]

Le datasheet ne dit pas qu'il faut multiplier mais si on regarde dans le chapitre "Operation- measuring temperature", on voit que le bit le moins significatif vaut 2^(-4) : 0,0625 en décimal.
Donc si on charge les 2 octets dans un entier 16-bit, la valeur est 16 fois trop grande.
[/quote]

Bonsoir,

Thierry a bien résumé le truc, comme d'hab.

Petite erreur de ma part, ce n'est bien sûr pas une multiplication mais une division par 1,6 qu'il faut apliquer à la lecture des DS18b20 pour avoir une résolution du 1/10éme de degré Celcius.
La manip que j'ai donnée au-dessus (x5 et /8) reste bonne et fonctionnait sur mon proto.

:bye:
Patrick

[url=https://ard-tek.com/index.php/forum/sujets-recents]Le forum du MaxiSun[/url]

Avatar du membre
daniel 53
Technicien Solaire
Technicien Solaire
Messages : 406
Enregistré le : mer. déc. 27, 2006 21:49 pm
Localisation : 53 300 Ambrières-les-Vallées

Message par daniel 53 »

Bonjour

J'allais donner les mêmes explications.
Je me remet au C. Je ne vois toujours pas apparaitre certaines décimales mais j'avoue que je n'ai pas encore cherché pourquoi. La vue qui baisse?
Je vais plutôt me concentrer sur le remplacement de "skip command" par "match rom" pour sélectionner un capteur parmi d'autres.

Si ça se trouve, l'exemple de P Bricoleur peut m'être utile, merci

Daniel

Avatar du membre
p_bricoleur
Modérateur
Modérateur
Messages : 1671
Enregistré le : mar. déc. 27, 2005 10:37 am
Localisation : Rueil-Malmaison (92)
Contact :

Message par p_bricoleur »

Je me remet au C. Je ne vois toujours pas apparaitre certaines décimales mais j'avoue que je n'ai pas encore cherché pourquoi.
Quand on est en résolution maximale (12 bits), et que l'on fait une traduction sans perte de précision, on a 4 chiffres après la virgule en décimal mais :
- le 4ème chiffre est toujours 0 ou 5
- le 3ème chiffre est toujours 0, 2, 5, ou 7

En mode 11-bit, on a 3 chiffres après la virgule mais :
- le 3ème chiffre est toujours 0 ou 5
- le 2ème chiffre est toujours 0, 2, 5 ou 7

Idem pour le mode 10-bit, avec le 1 et 2ème chiffre après la virgule.

Pour avoir la résolution maximale, il faut s'assurer que la sonde est configurée avec 12 bits de résolution.
Maxim indique que c'est le cas en sortie d'usine, mais j'ai eu quelques sondes qui étaient en résolution 9-bit.

Du coup, il m'a fallu programmer le changement de configuration dans le scratchpad + la copie du scratchpad dans l'EPROM (sinon la nouvelle configuration est perdue dès la perte d'alimentation).

A noter aussi que le datasheet ne précise pas la valeur des bits de précision inutilisés après une conversion, mais en pratique ils sont à 0.

Cordialement,
Thierry Streiff

pruvost
Etudiant Solaire
Etudiant Solaire
Messages : 283
Enregistré le : lun. juil. 20, 2009 12:51 pm
Localisation : sathonay (69)

Message par pruvost »

Bonjour à tous
Je ne suis pas venu depuis un moment et je trouve des tas de développements
Oui "gros daddy", une carte simple intéresse sans doute.
Il y a des tas de solutions programmées mais quand on ne possède pas le matériel pour programmer ni les connaissances...
Mon problème futur semble çà ce jour être limité à une douzaine de températures et des fonctions "ET"et "OU".
Est ce compliqué ou n on ??? je ne sais pas très bien.
Est ce nécessaire de passer par un micro ??? je ne sais trop.
Une solution universelle ???
Difficile me semble t il.
réflexion sans plus.
Commençons par le circuit solaire et après on verra.
Bon soleil à tous

Avatar du membre
richardel
Maitre Solaire
Maitre Solaire
Messages : 824
Enregistré le : dim. juin 29, 2008 23:02 pm
Localisation : Verviers Belgique

Message par richardel »

Bonjour a tous,
Mon problème futur semble çà ce jour être limité à une douzaine de températures et des fonctions "ET"et "OU".
Est ce compliqué ou n on ??? je ne sais pas très bien.
Est ce nécessaire de passer par un micro ??? je ne sais trop.
L'exemple du minisun est l'exemple type de la carte parfaite (désolé, Patrick, ta modestie va un peu souffrir) parce que dans toute installation solaire, on fait démarrer le circulateur quand les capteurs sont plus chauds que le bas de cuve.
A partir de là (ou si tu veux, après le circulateur) tu auras des installations avec une cuve ou plusieurs, dont certaines sont mise en parallèle, d'autres en série, il y aura un support chauffage, d'autres seulement sanitaire. Certains auront une décharge et d'autres pas. Si décharge il y a, ca peut être une piscine, un radiateur (avec ou sans ventilateur). Certains refroidissent la cuve en faisant circuler l'eau dans les capteurs la nuit. Certaines installations sont en drain-bach, d'autres pas. L'energie solaire est stockée dans la (les) cuves par serpentins et d'autres via un échangeur a plaque (qui demande 2 circulateurs).
Chaque situation demande une régulation spécifique.
Voila pourquoi je dis que quelque chose d'universel est impossible (surtout en version cablée (portes OU, ET))

Ton idée de porte OU et ET est tout a fait applicable mais avec 12 sondes de températures, voila déjà une fameuse table de vérité qu'il te faudra simplifier si tu ne veux pas dépasser la quinzaine de circuits intégrés. De plus, s'il y a la moindre erreur, tu devra redessiner une nouvelle plaque.
Et quand on connait le prix d'une carte prototype de ce type, on a pas intéret a se tromper de trop.
C'est surtout là qu'est l'avantage du microprocesseur. Comme ce composant comprend beaucoup de possibilités, ca simplifie la conception de la carte et ca limite les erreurs. De plus, une carte de ce type a plus de chance de convenir a une autre installation car la spécificité se joue dans le programme et pas sur le circuit imprimé.
Et si tu te trompe dans le programme (et ca arrive...), tu corrige et tu reprogramme et ca ne te coute pas un centime, ta carte reste la même.
Le processeur accepte d'être reprogrammé au moins un millier de fois... de quoi apprendre :cool:
C'est ca, le grand avantage des microprocesseurs.

Autre avantage, tu as une installation qui fonctionne mais après 2 ans, tu décides d'ajouter "quelque chose" (un radiateur de décharge, par exemple). Il te suffit de remanier le programme et le tour est joué (il faut juste que tu aies prévu, sur ta carte, une sortie pour commander ta décharge... ah ce hardware, c'est compliqué, faut pas hésiter a prévoir :roll: ).

Tu dis que tu n'as pas le matériel pour programmer... tu as déjà 95% de ce qu'il te faut sinon, je ne verrais pas ton message :roll:
Il te faut juste acheter un programmateur USB (entre 50 et 100 euros je pense) et prévoir, sur ta carte, un connecteur ad-hoc pour connecter le programmateur... c'est tout

Au niveau programme, je te comprends, le pas n'est pas facile a faire mais il en vaut le coup car on découvre des possibilités insoupçonnées.
Il existe des langages évolués très facile d'accès.
Je pense a Bascom par exemple qui traduit du basic en un code que le microprocesseur peut exécuter. Il te fourni un fichier que tu programme dans le microprocesseur, c'est tout.
Au niveau de Bascom, on peut télécharger, sur leur site, une version demo qui permet de faire déjà pas mal de chose et si tu veux une version non limitée, tu peux l'acheter pour moins cher que le programmateur.
Certains te diront que le "basic" n'est pas très professionnel mais je te garanti qu'a notre niveau, tu n'atteindras jamais ses limites.
Maintenant, il existe d'autres systèmes tout aussi valable mais je connais bien ce matériel qui me donne satisfaction depuis quelques années sur des processeurs type ATméga.

y a que le premier pas qui coute :-D

Tout ca pour te dire que le passage au micro n'est plus si difficile de nos jours.

Amitiés
L'important n'est pas la température de l'eau solaire, c'est le nombre de KWh engrangé.

Avatar du membre
daniel 53
Technicien Solaire
Technicien Solaire
Messages : 406
Enregistré le : mer. déc. 27, 2006 21:49 pm
Localisation : 53 300 Ambrières-les-Vallées

Message par daniel 53 »

Bonjour

Les 2 températures affichées sont issues de 2 capteurs différents connectés sur un même bus.
Le programme est en C (base de Patrick 07, merci Patrick) mais très mal écrit à mon gout, je ne suis pas un expert.

Le processeur est un PIC 16F877.

Maintenant je sèche sur "faire une soustraction toute bête" afin d'en faire un thermostat différentiel.
Voyez à quel point je suis nul...

Daniel
Fichiers joints
ds18B20.JPG

Avatar du membre
richardel
Maitre Solaire
Maitre Solaire
Messages : 824
Enregistré le : dim. juin 29, 2008 23:02 pm
Localisation : Verviers Belgique

Message par richardel »

J'aime pas les gens qui prétendent être nul alors que, manifestement, ils sont déjà arrivés a quelque chose :???:
de quoi démoraliser totalement ceux qui n'en sont pas encore aussi loin :roll:

Blague a part, je n'ai jamais pratiqué le C mais je dirais qu'un test du type :
si T capteur > T ballon + 7 alors circulateur on
si T capteur < T ballon alors circulateur off
ca devrait marcher, non?
le "7" étant l'hystérésis mais qui peut aussi être mis comme paramètre.

comme ca, si le capteur dépasse le ballon de 7 degrés, on charge
si le capteur devient moins chaud que le ballon, on arrête
si le capteur est entre la température du fond de cuve et du fond de cuve + 7 degrés, on ne change pas l'état de la sortie (s'il était on, on laisse on, s'il était off, on laisse off). c'est l'hystérésis

ca doit pas être plus compliqué que ca.

Amitiés
Modifié en dernier par richardel le jeu. juil. 29, 2010 21:21 pm, modifié 1 fois.
L'important n'est pas la température de l'eau solaire, c'est le nombre de KWh engrangé.

Avatar du membre
daniel 53
Technicien Solaire
Technicien Solaire
Messages : 406
Enregistré le : mer. déc. 27, 2006 21:49 pm
Localisation : 53 300 Ambrières-les-Vallées

Message par daniel 53 »

Comme tu dis "ca doit pas être plus compliqué que ca."

J'ai donc fais ce que tu m'as dis, et ça marche, j'allume une moche selon l'écart de température.

Par contre, je m'aperçois qu'il y a un bug car la seconde température lue est instable et cela n'a pas l'air de venir du capteur.
Si quelqu'un veut bien analyser mon programme, pas de problème...

Daniel

pruvost
Etudiant Solaire
Etudiant Solaire
Messages : 283
Enregistré le : lun. juil. 20, 2009 12:51 pm
Localisation : sathonay (69)

Message par pruvost »

Bonjour à tous, salut Richardel.
Tu m'as convaincu et je crois que je vais tenter de me lancer dans la programmation.
Encore faut il que j'assimile tout cela ce qui est un pas énorme me semble t il.
J'ai le temps mon installation n'est pas faîte donc ce sera sans doute pour cet automne.
Le temps d'approvisionner tous ces circuits et composants.
J'ai ressorti mon scope qui, surprise, fonctionne encore, malgré un stockage de plus de 30 ans, j'ai acheté un nouveau fer et des bricoles, dégagé un établi et on va s'y intéresser.
Je reviendrai sans doute vous solliciter pour dissiper mes ignorances au fur et à mesure.
Merci à tous et bon soleil.

Répondre

Retourner vers « Régulation »