Rev 24/07/2014
DATALOGGERS
version
avec 16F628 ... 100% asm
version mini avec 16F876 ...
MikroC (demo)
version avec 18F252 ...MikroC
(registered)
Datalogger
à PIC16F628
& DS1307, 24LC256, DS1624, en
I2C software
& ADC 12 bits AD7896 en mode SPI + dialogue RS232
rev 0: 05
nov 06
last update: 24/07/2014
Cette application differe de l'application avec DS1302 dans la
mesure où
les liaisons avec les differents composants (devices) utilisent
l'I2C (100% software ) et non
le SPI (ou simili SPI) bien qu'il soit plus facile à utiliser et
à mettre en oeuvre.
Neanmoins, l'ADC 12bits AD7896, reste piloté en simili SPI
Software!
Difficultés
recontrées:
Le dialogue avec le DS1307 ,circuit d'horloge,a
été laborieux ! en particulier pour le démarrer en
oscillation.
Attention au type de quartz!
Il faut que la led connectée sur SQWE clignote dès
le lancement du programme, à 1Hz, sinon ..chercher l'erreur.
même si la mesure de temperature avec le DS1624 est correcte.
Mettre le strap en service à la 1ere mise sous tension ou au
changement de pile pour Initialiser le circuit RTC,
l"enlever apres mise à l'heure via terminal PC sur RS232.
Attention: si la batterie n'est pas
en place, placer un strap relié au 0V sur l'entree VBat. du
DS1307
notes:
Attention à la valeur du quartz utilisé
ou du résonnateur céramique ...ex: vendu pour
4Mhz mais plaqué 3,58Mhz !
bonjour le debugging de la liaison RS232 avec un
tel ecart!
Gestion RS232 :
Reception caractere ,en
interruption sur le front descendant du 1 bit du
1er caractère reçu sur pin Rb0
Les 8 bits du caractère sont alors "
composé " par la routine interruption qui
stoke le caractere dans RsByte.
Si Rb1 est mis à 0, on entre dans la boucle de
test presence caractere dans RsByte
modif : Rajout
set du flag boucle d'attente , permet de traiter
de suite le caractere..
sinon il fallait attendre la fin d'intervalle et
interruption Timer0
On
peut ainsi établir un dialogue et utiliser un
menu de commande.
<H>elp , affiche la liste des commandes
<E> demarre le stockage sur EEPROM
<I> intervalle de mesure exprimé en
Seconde
<P>commande toggle (bascule) permet de
faire une PAUSE sur le stockage , on conserve la
derniere adresse EEPROM utilisée
<T> commande toogle pour afficher la
Temperature
<D> commande toggle pour afficher la Date
et Heure
<A> commande toggle pour afficher la valeur
ANAlogique mesurée par AD7896
<M> commande MAJ date et heure horloge
DS1307
<R> commande RAZ adresse en cours stockage
EEPROM, repart en page 000
<L>ect.MEM, affiche tout le contenu de
l'EEPROM , stopper par ESC
<S> status des bits de commande
<ESC> sortie de boucle, RAZ de toutes les
commandes en cours.
Mise
à l'heure RTC
Avec le
caractère M comme Mise à jour,
on fait alors la saisie des caracteres de la date
et heure au format
AAMMJJWWHHMMSS, attention WW
represente le jour de la semaine sur 2 digits!
soit 01 à 07, exemple:
06072805130105 pour
le 28 juillet 2006, vendredi, à 13H01M05S
les caracteres sont testés valide de>= 0 à
<= à 9
si (27) ESC => sortie de la
saisie,date inchangee.
si (8) Backspace =>
correction (annulation) du dernier caractère
entré.
L'affichage est raffraichit tous les 2 cacateres
saisis correspondant à un octet en BCD
Une fois mis à l"heure, si la
batterie de secours est branchée (sur
le DS1307) il suffira de laisser
ouvert le strap sur RB1 (à l'etat 1 permanent)
pour démarrer l'application avec l'heure
stockée dans le DS1307
Gestion
du stockage des datas dans EEPROM 24LC256
Les data sont
stockées par page (modulo 64 octets)
4 octets sont utilisé pour JJ:HH:MN:SS, les 60
autres octets definissent 30 mesures (sur 16
bits).
L'intervalle de mesure est initialisé à 10 sec.
on dispose en tout de 512 pages! (avec 1 seule
EEPROM)
Modifier l'intervalle par la touche I ,
mini=01-> 1 sec maxi=99-> 99sec .
Donc une plage mini de 1*30*512=> 4.2Heures
à maxi = 99*30*512 => 422Heures(soit
17jours).
Pourquoi limiter à 99 ? ..parceque j'utilise la
meme subroutine pour lire un ensemble de
2 digits BCD pour la mise à l'heure du DS1307 !
Si il y a de la demande , je pourrai
eventuellement modifier, étendre à 9999 sec
l'intervalle
en traitant la saisie sur 4 digits BCD -> mot
de 16 bits.
Remplacement du
MAX232 en DIL16 par un DS275 en DIL8 sans condensateurs
bien plus simple à mettre en oeuvre si on n'a
besoin que de 2 lignes RS232 (Tx et Rcv),
mais cout important
: ex chez RS ref 262-8997
5,94
H.T.
nota: Attention
au comportement bizarre du
DS275,si la liaison RS232 est croisée (Tx et
Rx),
le terminal recoit l'echo de l'envoi ?! sans
relier ensemble les pins 1 et 3 coté TTL,
(testé sans le PIC installé).
Folkorique pour les test! Ce n'est pas le cas
avec le MAX232!
Le DS275 se
comporte à nouveau Normalement si la RS232 est
connecté correctement:
on a un echo que si on
relie les pins 1 et 3
Usage d'un quartz 6Mhz, donc
RS232 passe de 4800 à 9600 bauds.
La consommation, RS232 non connectée au PC, se
situe en dessous de 3mA sous 5V
ce qui présume une bonne longévité si
alimenté par piles ou accus.
Rajout d'un ADC
12 bits AD7896 pour mesure T° Exterieure avec
LM335 ou Entree Ana banalisée.
Rajout d'un diviseur de tension par 2 , formé
par R=1Mo et 2 R de 820K en serie
pour avoir une echelle de mesure 0-10V pour 4096
points
ou faire la
Modif décrite ci-après
Programme source et chargeable
datalog7_16F628_070515.ASM
datalog7.HEX
Résultats avec terminal
RS232 9600 bauds Sans parité 8 bits 1
stop (terminal.exe de Win311 ok
sous XP):
voir extrait du fichier résultat datalog.tst , data
relues via commande L
L'usage d'un régulateur "Low dropout
voltage" permet l'alimentation du montage à
partir de 5,2V seulement !!
pour une alim regulée de 5.00V.
La consommation globale, RS232 en service, potar
de 10K alimenté ... reste inférieure à 7 mA
Une pile de 9V , meme usagée peut donc tenir
assez longtemps.
Traitement des resultats
avec Excel : Datalogger.xls
outil d'aide aux calculs : PIC_calculs.xls
News :Réalisation d'un
circuit imprimé
CI version Datalogger_dec07.jpg
CI version Areslite 6.92: Datalogger_dec07.LYT
rev 27/12/07:
corrections
de bugs sur cicuit imprimé:
inverser les lignes RS232 : 2 et 3 DB9
car connecteur DB9 male , du coté Cicuit imprimé.
rajout régulateur
4.096V (+-4.1mV
derive maxi de 120ppm sur 120H) alim du convertisseur
AD7896 pour avoir une
parfaite correlation de mesure ADC , 1 mV / bit soit
4096mV pour 4096 points et rajout de R=750 + petit condo
tantale 1µF
Coupure piste alim Pin2 de AD7896 pour la relier la pin2
au 4.096V
Mode d'emploi:
Dès la mise sous tension , le datalogger enregistre en EEprom avec
un interval de 10 secondes (par defaut)
pour initialiser le datalogger autrement et maitriser le
depart de stockage, se connecter au PC via la RS232
9600,8,N,1
avec Terminal.exe ou mieux Terminal Vbray et envoyer la commande <H>elp qui
affiche alors le menu d'aide
H
M/A<T>emper
M/A<P>ause MEM
M/A<D>ate/Heure
M/A<A>nalog
<I>nterv.Sec
<E>crit.MEM
<M>AJ Heure
<L>ect.MEM
<ESC>Abort
<R>az Adr.MEM
<H>elp
<ESC> pour
sortir du mode enregistrement
<M
>pour eventuellement mettre à l'heure au format
AAMMJJWWHHMMSS
<I> pour modiifer l'intervalle
entre les mesures (01 à 99 secondes)
<R> pour RAZ compteur adresse
EEPROM
<E> pour lancer l'Ecriture sur eeprom
...... pour verifier la progression sur l'ecran
<D> affichae ou pas la date et
heure
<A> affiche ou pas la valeur
analogique 000 à 4095 sur l'entree bornier
<T> affiche ou pas la temperature
-25.00 à +125.00 °C(DS1621)
A chaque serie de 15 mesures le compteur de page EEPROM
s'incremente de 1 , jusqu'au Maxi =512!
L'acquisition s'arrete alors avec un message
"Memoire pleine".
Pour recuperer le tout:
mettre le terminal en mode enregistrement sur fichier
texte .txt ou .log
<L> ecture de l'eeprom de la page 000 à la page
511
<ESC> pour aborter la liste.
le fichier texte peut ensuite etre traité via excel ou
autre application....
last update:
datalog_16F628_2010_.HEX
datalog_16F628_2010.ASM
Exemple d'acquisition:
Temperature ambiante dans une
chambre.et temperature arrivee eau chaude du radiateur
![]() |
fichier associé: Datalogger_16F628_130220.log |
Historique :
lien vers datalogger_16F628_Historique
depuis version originale 16F84.
Evolutions :
Petit bug à corriger au changement de
page EEPROM qui affecte momentanement la date et heure
Gestion de la tension de batterie alimentation : Stopper
proprement l'acquisition en dessous de 5,2V
et noter date et heure incident dans l'eeprom
Rajout de 2 circuits MCP23017 pour avoir 16E et 16S pilotées en I2C
Rajout de 8 entrees ANA 12 bits I2C
Passage au 16F876 ou 18F252
liaison au XPORT (Ethernet ..internet) voir Serveur WEB
Gestion LCD et Liaison IR pour dialogue opérateur (HMI)
avec une sortie RS232 conservée.
Autres versions :
VERSION mini avec 16F876 et en C
MIKROC
limite 2K!!
VERSION 18F252 avec Eeprom
24LC256 et en C MIKROC (registered)
Questions ?
Evolutions ?
paulfjujo@free.fr
retour à l'index général