version 0.0 : 20/01/2020
rev 12/04/2020......




Thermometre Corporel avec PIC16F1619, ecran OLED et capteur DS18B20 (avril 2020)
     Schema, Prototype, Circuit Imprimé ,Resultat ,Software
Test sur Ecriture/Lecture en Zone HEF , avec PIC16F1619 (avril 2020)
Rajout Stockage Offset de calibration (en Zone HEF) pour ce thermometre (avril 2020)
     
New Software




Thermometre Corporel à base de sonde OWS DS18B20 et PIC16F1619)

Usage d'un afficheur OLED 132x32 ( précédement decrit)
Bus OWS sur PIN RC0 pour le capteur DS18B20
Ce PIC n' a pas assez de taille FLASM ROM ==> Reduction drastique de l'espace occupé par les Fontes caracteres,
pour ne conserver que la Taille 2 et 3
afin d'avoir un affichage maximal de la valeur de temperature .
La mesure est aussi envoyée sur l'UART .. RB7=TX donc possible de la recuperer via bluetooth
Affichage sur 4 digits
La Led Bleue sur RC5, clignote pour signaler Temperature inférieure à la normale
La Led rouge sur RA4 clignote pour signaler Temperature au dessus de la normale
sinon , les 2 diodes leds clignotent ensemble, si la temperature est dans la bonne gamme ( 37,5 + - 0,8 )
Un OFFSET d'etalonnage serait un plus ..
A suivre .. gestion de la zone de 128 bytes dispo dans High Endurance Flash ..
adresse 0x1F80 ..0x1FFF
Nota: Programmation du 16F1619 via MPLAB IPE V5.0 et PICKIT4.


Schéma :



Prototype :

images/Proto_Themo_Corporel_16F1619_200323.jpg


Circuit Imprimé :

Thermometre_Corporel_16F1619_DS18B20_sans_PM.lay6

images/t_Thermo_Corporel_16F1619_Circuit_Imprime.gif images/t_Thermo_Corporel_16F1619_Circuit_Photo.gif
   


SOFTWARE application (mikroC)
version 1: Mars 2020.
Projet : _Thermometre_Corporel_2020_03.zip
Chargeur : Thermometre_Corporel_16F1619_OLED_DS18B20_2020_03_22.hex
Source : Thermometre_Corporel_16F1619_UART1_RB7_TX_RB5_RX_I2C_RB6_SCL_RB4_SDA_DS18B20_RC2_2020_03_22.c

voir Thermometre version 2...

 


Résultats sur terminal

Presentation :

Projet : Test_16F1619_OLED_LCD_128x32_I2C_RB4_SCL_RB6_SDA_UART_RB7_TX_RB5_RX_DS18B20_RC2_2020_03_21.mcppi
Source : _16F1619_Test_UART1_RB7_TX_RB5_RX_I2C_RB6_SCL_RB4_SDA_DS18B20_RC2_2020_03_21.c

I2C1 Hardw.init RB4=SDA RB6=SCL
OLED SSD1306 128x32 I2C, init. en mode 2
Test Sonde OWS DS18B20 sur RC2
Family Code : 28 ID1 = AA56C1381401 CRC= 40

85.000
DS18B20= 85.000°C 138346506
DS18B20= 34.625°C 47500
DS18B20= 34.562°C -2875

A droite de la mesure : ecart avec 37.5°C exprimé en 1/1000em degré !

DS18B20= 38.000°C 625
DS18B20= 37.875°C 500
DS18B20= 37.812°C 375
DS18B20= 37.687°C 312
DS18B20= 37.562°C 187






TEST zone HEF sur 16F1619 ( avec MikroC)


Programme #1 : Tests Ecriture/lecture en zone HEF
Projet mikroC :
Source C : _16F1619_TEST_HEF_Zone_UART1_RB7_TX_RB5_RX_2020_04_01.c
Chargeur : Test_HEF_16F1619_UART_2020_0401.hex
Ce programme montre que l'on peut stocker 256 valeurs numerique ascii dans 128 mots de 14bits.,
sinon prévoir 1 valeur par mot, si la valeur à stocker , peut evoluer de 0x00 à 0xFF
Le stockage parait OK pour le Block #1 de 32 mots .. mais anomalie sur la suite ???
sans doute lié à la granulometrie modulo 32 mots , au niveau de la HEF
voir Test2



Une relecture avec MPLAB IPE ( en forçant la zone jusqu'à 0x1FFF !)
permet de voir ce qui a été modifié dans le 1er block HEF
on retouve l'offset de 500 .. mais pourquoi le rest est affecté par des valleurs ?????
On voit aussi que le 2em bloc n'a pas été affecté , car contient 3FFF



voir question posée sur le forum MikroC

Le probleme était dù en fait que l'ecriture en HEF doit se fait en 1 seule fois , et via une table de 32 integers,
à placer dans une table , adresse de la table en argument, qui sera envoyée en 1 seule fois dans la zone HEF
d'ou le nouveau test , ci dessous :


Ce PIC necessite le PICKIT4 + MPLAB IPE
====================================================================
Loading code from C:\_MikroC\_MesProjets_MikroC\_16F1619_TEST_HEF\
Flash_test_MikroE_rev1.hex...
2020-04-11 20:11:05 +0200 - Hex file(s) loaded successfully.
2020-04-11 20:11:06 +0200 - Programming...

****************************************************
Calculating memory ranges for operation...

Erasing...

The following memory area(s) will be programmed:
program memory: start address = 0x0, end address = 0x71F
configuration memory
Programming/Verify complete
2020-04-11 20:11:11 +0200 - Programming complete
======================================================================


ATTENTION :


SOFTWARE révisé :
(12/04/2020)
Projet zippé : Flash_HEF_Test_Mikroe_rev1.zip
Source C : Flash_test_MikroE_rev1.c
Chargeur : Flash_test_MikroE_rev1.hex

Resultat :

test du stockage de :
abcdefghijkl0123456789ABCDEFGHIJ@KLMNOPQRSTUVWXYZ-abcdefgh









Rajout d'un OFFSET de CALIBRATION pour Thermometre

Il n'y a pas d'EEPROM sur ce PIC , mais une zone speciale HEF ( High Endurance Flash ) de 128 mots ,comprise entre 0x1F80 et 0x1FFF
Via le terminal (UART) ,ou via blueTooth, saisie d'un Offset de Calibration compris : -300 à +300 pour -3°C à +3°C
ce qui devrait etre tres largement suffisant .
La valeur envoyée est verifiée et encadrée avant d'etre stockée dans le 1er bloc de 32 mots HEF
La zone de stockage est exprimée en mots de 14 bits . Pour des valeurs ascii traditionnelles, seul le LSB (octet) de poids faible
sera utilisé , afin de pouvoir stocker une valeur de 0x000 à 0xFF
Dans le cas de la valeur ascii Offset , il s'agit de valeurs numeriques comprise entre 0x30 et 0x39 ( 0 ) 9) et le signe - ou +
donc code ascii < 0x3F .. on peut donc dans un même mot de 14 bits , stocker 2 valeurs ascii numeriques.
pour la valeur +300 => 4 chars => tient dans 2 mots (14bits)
sera donc stocké en 0x01F80 et 0x1F81
C'est donc possible, mais un peu capilotracté !

* Pour la version finale, j'ai utilisé toute un bloc de 32 integer ..pour stoker 6 caracteres representant la correction , dans 6 entriers !
à noter qu'il faut effacer le bloc , pour pouvoir ecrire une modif ..

Cette valeur est rajoutée à la mesure brute du capteur DS18B20, puis affichée sur le LCD OLED.
Sur un RESET , ou demarrage à froid, la mesure stockée est relue .
*ATTENTION à ce que le code (programme) n'empiete pas sur la zone HEF
avec MPLAB IPE , on peut definir la taille code maxi .. ici 0x1F80-1 => 0x1F7F
CAR le compilateur MikroC ne s'en preoccupe pas !
en cas de debordement , le programme se bloque ..

La problematique qui s'ensuit , est de trouver un THERMOMETRE ETALON !

Resultat (Terminal)


Presentation :
Mikroc 7.6.0 PIC 16F1619
Directory : C:\_MikroC\_MesProjets_MikroC\_Thermometre_Corporel_2020
Projet : Thermometre_Corporel_16F1619_OLED_DS18B20_200412.mcppi
Source : Thermometre_Corporel_16F1619_UART1_RB7_TX_RB5_RX_I2C_RB6_SCL_RB4_SDA_DS18B20_RC2_2020_04_12.c
DEVICE : OLED DISPLAY IIC I2C 0.91 128x32

I2C1 init RB4=SDA RB6=SCL
OLED CLS
1rst value HEF= 3FFF
HEF vierge

Family Code: 28 ID1= AA6B96411401
CRC= 17

85.00
Mode Muet
TB= 85.00°C; Ofs= 0; TC=308°C ;+30.8°C; Ec=4750
TB= 22.68°C; Ofs= 0; TC=2268°C ;+22.68°C; Ec=-863
TB= 22.68°C; Ofs= 0; TC=2268°C ;+22.68°C; Ec=-863
TB= 22.75°C; Ofs= 0; TC=2275°C ;+22.75°C; Ec=-800
TB=
COR=-010
22.75°C; Ofs= 0; TC=2275°C ;+22.75°C; Ec=-800
TB= 22.75°C; Ofs= 0; TC=2275°C ;+22.75°C; Ec=-800
COR=-010
COR=-010
New Offset : -10
OK
Erase #1 HEF
Write #1 HEF
TB= 22.75°C; Ofs= -10; TC=2265°C ;+22.65°C; Ec=-810
TB= 22.81°C; Ofs= -10; TC=2271°C ;+22.71°C; Ec=-748


on voit bien que l'Offset de -10/100 soit -0.1°C à bien été retranché de la mesure originale

Sur Reset ou redémarrage à froid, on récupere cette valeur d'Offset


Presentation :
Mikroc 7.6.0 PIC 16F1619
Directory : C:\_MikroC\_MesProjets_MikroC\_Thermometre_Corporel_2020
Projet : Thermometre_Corporel_16F1619_OLED_DS18B20_200403.mcppi
Source : Thermometre_Corporel_16F1619_UART1_RB7_TX_RB5_RX_I2C_RB6_SCL_RB4_SDA_DS18B20_RC2_2020_04_02.c
DEVICE : OLED DISPLAY IIC I2C 0.91 128x32

I2C1 init RB4=SDA RB6=SCL
OLED CLS
1rst value HEF= 0020
Read Offset Temp.en HEF OK .. -10

Family Code: 28 ID1= AA6B96411401
CRC= 17

22.81
Mode Muet
TB= 22.81°C; Ofs= -10; TC=2271°C ;+22.71°C; Ec=-748
TB= 22.81°C; Ofs= -10; TC=2271°C ;+22.71°C; Ec=-748


Software :

Projet MikroC : rev 12/04/2020

Pour tenir dans l'espace de Flash ROM restreint , j'ai été obligé de supprimer des Fontes ascii
et ne garder que la fonte Big_Number Numerique en taille 3 de hauteur , pour le LCD
L'avantage de ce LCD est sa tres faibe consommation ...
l'inconvenient : prend plus de place en CODE qu'un LCD texte.

Projet : _Thermometre_Corporel_2020_04_12.zip
Table caracteres : OLED_128x32_Tables_2020_Ultra_Reduite.h
Source C : Thermometre_Corporel_16F1619_UART1_RB7_TX_RB5_RX_I2C_RB6_SCL_RB4_SDA_DS18B20_RC2_2020_04_12.c
Source Afficheur : OLED_128x32_I2C1_remapp_16F1619_2020_04_02.mcl
Header Afficheur :OLED_128x32_I2C1_remapp_16F1619_2020_04.h
Chargeur : Thermometre_Corporel_16F1619_OLED_DS18B20_200403.hex

A noter : Mise en doute de la Bibliotheque FLASH mikroC . à cause d'explication insuffisante dans le Hlep MikroE !.. voir ce post

Occupation RAM ,ROM
Used RAM (bytes): 932 (92%) Free RAM (bytes): 76 (8%)
0 1144 Used ROM (program words): 7972 (97%) Free ROM (program words): 220 (3%)

nota sur MPLAB IPE :
Manually select memories and Ranges
Program Memory 0 - 1F7F
Preserve Program Memory 1F80 - 1FFF

Loading code from C:\_MikroC\_MesProjets_MikroC\_Thermometre_Corporel_2020\Thermometre_Corporel_16F1619_OLED_DS18B20_200412.hex...
2020-04-12 15:34:08 +0200 - Hex file loaded successfully.
2020-04-12 15:34:10 +0200 - Programming...

**************************************
Erasing...

The following memory area(s) will be programmed:
program memory: start address = 0x0, end address = 0x1f7f
configuration memory
User Id Memory
Programming/Verify complete



si RX UART est resté connecté sur le coron Prolific TTL/USB, pendant le chargement du programme via Pickit4
MPLAB IPE fait la gueule et envoie :
We have detected some residual VDD voltage at the connector interface.
Connection Failed.
il faut débrancher RX UART !


paulfjujo@free.fr


../common/GIF/LTC1286p.jpg



Retour à l'index general