V.O. 17 dec 2015
Rev 14/12/2016


Cliker PIC18F47J53

Le materiel d'étude et de démonstration
Prototype de test
ADC12 bits et Afficheur LCD 2119 2x16 bus I2C
Liaison UART2 Remappable <-> RS232 avec Terminal Virtuel PC (via cordon USB-TTL Prolific)
Liaison USB au MikroE HID Terminal
Test One Wire Capteur temperature DS18B20
Test Oled Display 128x32 SSD1306 en I2C


Carte de developement MikroE Clicker for PIC18F47J53
17/12/2015
MikroE Manuel utilisateur

images/t_18F47J53_Click_Board.gif images/t_18F47J53_MCU_Diagram.gif
Référence Mikroe : 1487 19$ H.T. MCU diagram


Carte comportant :
un MCU 18F47J53 44 pins
un quartz 16Mhz
un regulateur 5V -> 3,3V
une liaison USB ( Alim et Programmation)
un emplacement Mikrobus Click
une connection laterale 5 pins : ICSP
un connecteur 10 pins : lateral 8 I/O + alim 3,3V
2 BP : T1 sur RD3 et T2 sur RD2
2 leds : LD1 sur RA0 et LD2 sur RA1

nota: carte equivalente au PUINGUINO !..avec une connectique differente


Schema de la carte

images/t_18F47J53_Click_Schem.gif

HARDWARE :
La carte est alimentée en 3,3v via la liaison USB 5V -> regulateur de tension => 3,3V alim
MicroChip : Datasheet du PIC18F47J53
MikroE : Doc sur cette carte Clicker


Emplacement pour 1 carte fille Click mikroBus

images/t_mikrobus_pinout.gif images/t_mikrobus_schem.gif
MikroBUS Pinout Liaison PIC18F47J53 et MikroBus


Prototype de Test :

images/t_Proto_Test_18F47J53_Click.gif


Mapping I/O pour utiliser UART2 :
La connectique RD5 et RD6 est bien repérée RX et TX sur le MikroBus
3 librairies sont necessaire pour utiliser l'UART2
* activer la bibliotheque PPS Peripheral Pin Select
* La librairie UART ( classique)
* la librairie UART_Remappable

Connection des Pin RD5 et RD6 sur l'UART2 :



Liaison via un cable USB/TTL

images/t_18F47J53_Active_UART2_pins.gif
Cable PL2303HX USB<-> TTL liaison direct <-> UART2

Cablage :
Noir : Ground 0V
Vert : TX ----> sur RX UART2
Blanc : RX -<-- sur TX UART2
Rouge (+5V USB) ..NON CONNECTE (PIC alimenté en 3,3V)
Nota: les pins PORTD sont 5V tolerants.

Datasheet Prolific inrterface
prolific Driver : PL2303 Windows

Port COM Virtuel
../common/Cordon_USB_TTL_Prolific_XP_Vbray.gif

L'alim 3,3V du LC2119 est dispo sur les pins laterales de la carte
Nota: cet interface se comporte IDEM que via l'interface 2Tr -> DB9 PC Vrai port RS232


Software :
Usage de MikroC Pro 6.62 (enregistré!)
Le 1er test software delivré par MikroE .. ne marche pas au 1er coup !
J'ai trouvé d'ailleur une init contradictoire avec celle de la datasheet concernant les Entrees Analogiques
1er Test :
Utilise uniquement les ressources de la carte : 2 BP et 2 Leds
Clignotement des 2 leds F(action sur boutons)
18F47J53_Click_Timer0_Leds_Blink..


2em test :
Mesure ADC 12 Bits sur RA2 .. via un potar alimenté en 3,3V

Rajout du LCD2119 en I2C.. 2x 16 char
Pins I2C2 natives sur RD1 et RD0.. pas besoin du PPS
Usage de ma bibliotheque LCD2119.h .. no problemo
Affichage valeur brute en Points 0 a 4095 et en volts 0,000 a 3,266V
Rajout filtrage arytmetique glissant sur 8 valeurs, affichage en Degres C. ex: 25.456°C

Rajout de UART2 :
Ca se complique a causse des allocation de Pin aux ressources MCU..
Il faut RELIER / AFFECTER L' UART2 aux pins RD5 et RD6 par logiciel.
La aussi, l'exemple mikroC est foireux , car ne doit pas correspondre au 18F47J53 !
Ce sont bien les numeros RPn de PIN qui sont considéres ICI, pas les numeros de pin PHYSIQUES du MCU..

Reception Buffer en mode interruption ..envoi d'un string de 118 bytes en 1 fois ...OK (buffer de 120 cars maxi)
Test envoi commandes clavier: "LD2 ON" ou "LD2 OFF" .. OK

le projet complet : 18F47J53_Timer0_LCD_I2C2_EA2


3em test :
Rajout terminal HID.. a suivre






4em test :
Rajout Capteur de temperature Numerique One Wire DS18B20


Principales Caractéristiques :
-marque yuanbotong
-modele: d108051
-Matiere: acier inoxydable
-Caractéristiques:
Puce DS18B20 température de la sonde, la sonde étanche, en acier inoxydable,
longueur de câble: 100cm; -Alimentation: 3.0 ~ 5V;
9 ~ 12 chiffres de résolution réglable; .. 3,83?
Wiring: RED (VCC) Yellow (DATA) Black or Green (GND)
DS18B20 data sheet

Montage de test :


t_18F47J53_DS18B20_151227.gif

nota : la plaque d'essai ne sert que pour relier les 3 pins du DS18B20 + R de rappel au +3,3V
Le montage est alimenté via la liaison USB (en +5V) , Alim locale en 3,3V sur la carte Click
DS18B20 et LCD 2119 sont alimentés en 3,3V
Le signal DS18B20 O.W.S. rentre sur RE0 du PIC
Un cordon USB-TTL est connecté sur l'UART2 du PIC .
Le PC affiche aussi les donnees via la liaison USB <-> Port COM 23 virtuel , logiciel HTerm 08.23 .
La resolution (12bits) est de 0,0625°C

SOFTWARE :

Rappel:
Dans tous Projet il est necessaire d'indiquer ou rappeler :
le type de MCU,
la tension d'alim
Le type de compilateur et version
les bits de config,
la frequence FOSC
le resultat de compilation

L'exemple MikroC ne me donnait qu'une resolution de 0,625 au lieu des 0,0625 possible annoncés en mode 12 bits.
A l'aide de la data sheet , j'ai donc repris la demarche pour comprendre comment on determine la mesure finale
voir le diagramme suivant ...
On retouve la partie entiere de la mesure en °C dans les 2 premiers bytes de la memeoire intermediare (scratchpad RAM)
mais , melangée avec la partie decimale et le signe.
Il suffit d'isoler les bon bits et de les concatener pour reconstituer la partie entiere de la mesure
On la multiplie par 10 000 , et on pose la virgule separatrice entre unites et decimales,
et on rajoute en fin , la partie decimale (exprimee en 1/10000eme de degré modulo 625 correspond a 1/16 em de degré
La partie decimale etant sur 4 bits => possibilité 0 a 15 , 16 pas de 0,0625°C
Pour les valeurs negatives de temperature ,le bit de signe (poids fort 2^8) du 2em byte = 1
on applique le complement a 2 +1 ( notion de base en logique !) sur les 2 bytes..

images/DS18B20_decode.gif
J'attends les grands froids pour test en reel des valeurs negatives ! ( je sais , il y a le frigo,mais loin de mon bureau)
La precision absolue donnée pour ce capteur est de +-0,5°C , grand devant la resolution 0,0625°C
mais ce qui compte c'est surtout la fidelité, repetabilité et eventuellement hysteresie.
Difficile a apprecier sans un four ETALON ....mais avec un offest de compensation d'etalonnage,
un filtrage sur quelques mesures, on devrais atteindre un resultat proche de +-<=0,1°C.
C'est toujours mieux qu'avec un LM35DZ analogique.

images/DS18B20_Temperature_Numeric_value.


La fonction Mesure DS18B20 recupere cete mesure sous 3 formats : entier long 32 bit , texte , flottant
La mesure est cadrée a droite , sur 9 caracteres.
Le detail du module mesure DS18B20 , dans le main programme, pour afficher ,au moins 1 fois ,les 9 registres du Scratchpad RAM DS18B20



Ce PIC a la particularité d'avoir un ADC sur 12 bits ! donc 4096 pts 0 a 4095 pour 0 a 3,3V

On peut SIMPLIFIER ce programme, via la compilation conditionelle, si on a pas encore
pratiqué un des modules. ... il faut toute fois avoir au minimum l'UART ou le LCD pour visualiser un resultat !
Meme si les PC n'ont plus de port COM, il existe multe solutions pour avoir un port virtuel COM via USB
voir meme via bluetooth.

Compilation conditionnelle :
pour aciver les modules suivants :

#define With_UART2
#define With_ADC12
#define With_TMR1
#define With LCD2119
#define With_DS18B20
choix d'oscillateur interne ou externe :
#define OSCILLATEUR_INTERNE
Test ou pas de la valeur FOSC , si UART utilisé !
#define TEST_FOSC
Infos (non utilisées par le programme):
#define Project "18F47J53_LCD_UART2_I2C2_ADC_DS18B20_2016.mcppi"
#define PROCESSOR 18F47J53
#define POWER_SUPPLY_3_3V .... bien qu'alimenté via USB 5V, la carte comporte un regulateur 3,3V

Pour désactiver un module :
il suffit de mettre un commentaire devant le #define .. ex: //define UART2 => UART NON utilisé
Le fichier source C , autodocumenté , comprend le maximum de renseignements , liens xml vers docus.

a noter :
fonction decimal vers ascii en simil flottant : char * Decimal_less_9_999_to_Ascii( unsigned int k)
fonction Long32bits vers ascii simili flottant avec 4 decimales : char * Long32bits_to_Ascii_4decimales( long L1)
pour eviter l'usage de flottant et Maths consommant beaucoup de ressources.
meme si , avec ce PIC, on pourrait utiliser des fonctions evoluees tel que Sprintf ou Printout

Resultat sur Terminal Virtuel PC

Testé OK avec FOSC a 4MHz et 8MHz

Test Presence Device a l'adresse : 116 present .. OK ......... Le LCD 2119 est bien sur le bus I2C
Projet:18F47J53_LCD_UART2_I2C2_ADC_DS18B20_2016.mcppi
Click 18F47J53
Ver: 01-01-2016
Init PPS for UART2 :
Fosc = 4000 KHz .... FOSC Interne 4MHz
Check delay de 5000mS entre # et @
#
@
DS18B20 device present..sur pin RE0 ..Ok ..... le capteur est bien sur le bus O.W.

Version perso from scratch .. resolution 0,0625°C
91 1 75 70 127 255 12 16 7 21.687
Mesure ADC 12bits sur RA2
EA2= 1,705 1.374EA2= 1705 ou 1.374 volts ou 15.387°C filtre DS18B20 (txt) : +21.6875 long 4 decimales: 21,6875
EA2= 2,166 1.745EA2= 2166 ou 1.745 volts ou 15.769°C filtre DS18B20 (txt) : +21.6875 long 4 decimales: 21,6875
EA2= 1,783 1.436EA2= 1783 ou 1.436 volts ou 15.858°C filtre DS18B20 (txt) : +21.7500 long 4 decimales: 21,7500
EA2= 2,179 1.756EA2= 2179 ou 1.756 volts ou 15.857°C filtre DS18B20 (txt) : +21.8125 long 4 decimales: 21,8125
EA2= 1,783 1.436EA2= 1783 ou 1.436 volts ou 15.855°C filtre DS18B20 (txt) : +21.8125 long 4 decimales: 21,8125
EA2= 2,182 1.758EA2= 2182 ou 1.758 volts ou 15.855°C filtre DS18B20 (txt) : +21.8750 long 4 decimales: 21,8750
EA2= 1,785 1.438EA2= 1785 ou 1.438 volts ou 15.855°C filtre DS18B20 (txt) : +21.9375 long 4 decimales: 21,9375

9:32:23.187> Fosc = 4000 KHz
9:32:23.250> Check delay de 5000mS entre # et @
9:32:23.250> #
9:32:28.187> @ ............ on a bien 5 secondes ecoulees !


et testé a 48Mhz, avec //#define OSCILLATEUR_INTERNE

9:50:59.953> Init PPS for UART2 :
9:51:01.953> Fosc = 48000 KHz .. FOSC: Q=16MHz + PLL + divisuer => 48Mhz
9:51:01.953> Check delay de 5000mS entre # et @
9:51:01.953> #
9:51:06.953> @ .......... on a toujours bien 5 secondes ecoulees !
9:51:06.953> DS18B20 device present..sur pin RE0 ..Ok
9:51:08.015>
9:51:08.015> Version perso from scratch .. resolution 0,0625°C
9:51:08.765> 83 1 75 70 127 255 12 16 45 21.187
9:51:11.328> Mesure ADC 12bits sur RA2
9:51:12.078> EA2= 1,737 1.399EA2= 1737 ou 1.399 volts ou 15.377°C filtre DS18B20 (txt) : +21.1875 long 4 decimales: 21,1875
9:51:14.328> EA2= 1,782 1.436EA2= 1782 ou 1.436 volts ou 15.375°C filtre DS18B20 (txt) : +21.1875 long 4 decimales: 21,1875
9:51:15.453> EA2= 2,177 1.754EA2= 2177 ou 1.754 volts ou 15.773°C filtre DS18B20 (txt) : +21.2500 long 4 decimales: 21,2500


Test mesure temperature négative

dans le compartiment Congelateur de mon frigo ... réchauffement climatique oblige !
// 19-01-2016
// test avec temperature congelmateur -22°C ... BAD affichage en LONG
// car NON signé et ne traite que du positif
donc modif pour afficher Temp DS12B20 en Flottant et LONG signé 3 decimales sur le LCD
J'ai utilisé un thermocouple K associé a mon multimetre pour connaitre la temperature "réelle" ?
et comparer avec celle donnée par le capteur DS18B20

images/Mesure_temp_negative-18C.gif

Le temps de reponse du thermocouple + multimetre est de l'ordre de 40 secondes ( 5 teta ou >96% de l'echelon)
entre la temperature ambiante de + 19°C et la température finalie -18°C (dans le congelateur)
Par contre, pour le capteur DS18B20 (qui est encapsulé dans une gaine inox) , il est l'ordre de 6 minutes
pour atteindre plus de 96% de l'echantillon (6 mn a 5 teta ), l'echelon a 63% étant de l'ordre de 80 sec.

images/t_Test_DS18B20_a-18degres_160119.gi

Je n'ai pas de thermometre ou appareil plus precis pour verifier la justesse de mesure de la sonde DS18B20.
CON"s : temps de réponse lent,
PRO's : mesure Numerique & tres bonne résolution
Apres on peut discuter pendant 107 ans sur la precision ..etc

Dossier MikroC complet :
18F47J53_UART2_LCD_I2C2_LM335_ADC12b_DS18B20_2016.zip
ou clicker sur l'image ci dessous
contenu de l'archive zip :






5em test :
Test Afficheur OLED 128x64 (ou 32) SSD1306 en I2C

rev 14/12/2016
Documentation OLED SSD1306

Usage du Click 18F47J53 alimenté via le port USB , mais utilise le +3,3V élaboré sur la carte.
Le module OLED est raccordé via 4 piins
.1) +Vcc 3,3V
.2) Gnd (0V)
.3) SCL du bus I2C2 --fil vert ---RD0 MikroBus
.4) SDA du bus I2C2 -- fil jaune --RD1 mikroBus

La liaison UART2 (optionelle) est utilisée pour suivre / tracer le programme.
Au lieu de mettre une tempo definie., entre les differents affichages, .on attend l'appui d'une touche clavier ou timeout de 3sec

Le prototype :

images/t_OLED_Clicker_Proto.gif
cable USB pour Programmation via bootloader USB, et pour alimentation du montage.
cable USB Prolic 2303 relié directement sur UART2 du PIC18 ( pour affichage sur terminal Teraterm)


Le schema :




Affichage display terminal :

images/Oled_Terminal_trace.gif


images/t_Oled_matricage.gif
matricage Lignes colonnes


SOFTWARE:

Nota: software fortement inspiré de la documentation et software du fabriquant (supposé etre) HELTEC

Specificité du PIC18F47J53 :
On retouve la config assez particuliere de l'UART2 ( optionnelle)
Le bus I2C2 Hardware est utilisé ici ,pour piloter le display OLED SSD1306

Problemo : Afficheur vendu pour 128x64 .. mais réel 128x32 seulement ?
d'ou ,une grosse perte de temps a chercher un probleme inexistant ..
Utilisation d'une fonte 6x8 => 21 caracteres sur 4 lignes (0,1,2,3 pages)
Fonte de 16x16 =>2 lignes de 10 caracteres , avec position Y modulo 8 !


MikroC :
Source :Clicker_18F47J53_Oled_SSD1306_128x32_161213.c
Chargeur: Clicker_18F47J53_Oled_SSD1306_Heltec_161213.hex
projet complet : Clicker_18F47J53_Oled_SSD1306_128x32_161213.zip


Display filled with 0xFF car Big size 16x24 on page 1 to 3 write on Page 0 to 3 with 21 char size 6x8
write on page 4 to 7 Medium size 16x16 load BMP image

une ecriture en page 4 a 7 n'est pas visible .. mais apparait si je change l'origine de la page a 4 au lieu de 0
En commutant , via la commande 0xD3 ,0x40 => affichage des pages 0 a 3
En commutant, via la commande 0xD3 , 0x60 => affichage des pages 4 a 7

affichage obtenu avec image BMP1 Heltec Backside of my display .. AUCUNE REFERENCE

il semble pourtant que l'affichage saute 1 ligne entre les pixels ! PROBLEME NON RESOLU !
L' AFFICHEUR est-il défectueux ou specifique ? ou une config inadaptée ..malgré multes essais négatifs.
Je n'en ai pas d'autre pour verifier .

Display of BMP1 .. miniinthebox original backside .. miniinthebox




Questions/reponses
via mail ci dessous
paulfjujo@free.fr



../common/GIF/LTC1286p.jpg

retour a l'index