11 mars 2006 rev 0
26 mars 2015 rev 1.0
Capteur
temperature I2C DS1621,DS1624 et 16F84 (Asm)
Capteur
temperature I2C DS1631 et 18F26K22 (MikroC)
MESURE DE TEMPERATURE avec DS1621 & DS1624
AVEC PIC16F84,16F628 et Horloge DS1307 (I2C) 100% asm
Capteurs sur bus I2C.
source ds1624_2.asm , listing ds1624_2.lst,
chargeable ds1624_2.hex
source ds1621_6.asm, chargeable ds1621_6.hex
Comments and
Tricks :
Attention à l'adresse du (device)
composant qui ne doit pas etre altérée
par les manipulations avec adresse famille et rajout bit
R/W
Inhiber les pull_up du port B, pin SDA doit etre open
drain! car usage en ecriture / lecture
quelques fois il est preferable de partir de zero (from
scratch!) plutot que de ré-utiliser des sources
de differentes provenance..me signaler SVP les
bugs éventuels!
Description :
La partie DS1621 est une reprise issue
du web : http://www.phanderson.com/PIC/16C84/ds1621.html
avec Copyright ! mais versions un peu buguées ! à vous
de voir !
Apres quelques correctifs, adressage device et routine
BCD, c'est OK !
La partie DS1624 a été
adaptée , surtout pour la facilité de lecture du poids
faible LSB , afin de pouvoir
afficher à +- 0,03125°C ... en trichant un peu, puisque
la partie decimale est sur 1024 points au lieu de 1000
ce qui donne en gros 2,4% d'erreur sur 1°C ! soit 0,024°C
mais la résolution du capteur est de 0,031 ..donc no
problemo.
Le LSB peut prendre les valeurs de 0 à 248 , par pas de
8 puisque 1°C * 8/256= 0,03125°C
Apres avoir mis le LSB dans un mot de 16 bits, il suffit
de multiplier ce mot par 4, facile avec 2 decalages à
gauche
et l'afficher tel quel en decimal pour obtenir une mesure
au format: XXX,YYY Deg C
La routine bcd3 affiche le MSB sur 8 bits (000 à 255 ) ,on
intercale le séparateur "." ou ","
et la routine BCD999 afffiche le mot (LSB) sur 3 digits ,
en conservant les zero inutiles.
Gestion du circuit DS1307, horloge temps réelle
sauvegardée par pile
le PIC16F628 a une capacité programme double du PIC16F84
et permet de rajouter la gestion
de l'horloge RTC DS1307 , gérée aussi en mode I2C.
nota: une led connectée sur la sortie SQW doit s'eclairer
chaque seconde si l'initialisation est réussie
On peut alors mettre à jour l'horloge, et récupérer la
mesure du DS1624 ,
horodatée sur le port série (relié au terminal PC).
Prototype et Résultats
voir ds1624_2_test.txt
on remarque bien l'evolution de la mesure par pas de 32/1000éme
de degrés
Docu : DS1621_.pdf
et DS1624.pdf
25/03/2015
MESURE DE TEMPERATURE avec DS1631 (I2C)
AVEC PIC18F26K22 & MikroC
Capteur sur bus I2C.
Ce circuit peut delivrer la mesure de temperature sous un format
de 9,10,11,12 bits
et atteindre une resolution de 0,0625°C
La precision annoncée reste autour de 0,5°C absolu.
Ce circuit comprent aussi 2 seuils Thermostat Niveau Haut et
Niveau Bas
et une sortie logique associée TOut
schema:
Datasheet DS1631
![]() |
![]() |
Diagram fonctionnel | example de configuration |
Hex:18F26K22_DS1631.hex
Source MikroC :18F26K22_DS1631_temper_150325.c
Eeprom: 18F26K22_DS1631_EEPROM.ihex
Probleme :
Au depart, j'ai une mesure de 38°C au lieu de 20° C (temperature
ambiante) ?
J'arrive à bien lire les seuils de temperature thermostat, en
mode 12 bits
15,00°C pour TH et 10.00°C pout TL qui sont les valeurs
réglage usine.
Hors il s'avere que si le seuil
haut est au dessus de la mesure de temperature
la mesure de temperature s'embale ...et prend
plus de 10°C au dessus du reel
En mettant le seuil Haut à 30.00°C .. no problemo.
La mesure de temperature est correcte.
De meme ,ma sortie TOut ne change JAMAIS .?
sortie chargée uniquement avec une LED + 5,2K tiree au +5V
Test realisé sur mon2em circuit DS1631..idem..
Les 2 devices DS1631 seraient-ils défectueux ?
nota: commandés chez RS-Composants à 5,63 piece!
Pour les tests , mon nouveau PC n'ayant pas de port serie,
j'ai utilisé sur la sortie UART1 PIC, un module bluetooth (5V
compliant) HC05 YC-MCU )))
et à l'autre bout :
))) Cle USB BT APM => appli .BlueSoleil => Port serie A =>
Terterm COM15 9600,N,1
Nota: La vitesse de l'UART doit etre la meme que celle dfinie
dans le module BT.
Via le clavier PC distant,
il est possible de modifier :
- la valeur seuil Haut thermostat : H35.50 <enter>
- la valeur seuil Bas thermostat : B12.80 <enter>
- demander l'etat du registre Config : CFG<enter> =>
affichage en hexa et binaire
- Faire un Power On reset : POR<enter>
questions ? mailto:paulfjujo@free.fr
Raytracing .. une autre passion
>retour à l'index
général