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 :
Circuit Imprimé :
Thermometre_Corporel_16F1619_DS18B20_sans_PM.lay6
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 !