version 0.0 : 27 Avril 2015
rev 24/03/2023



PIC16F1847

16F1847 test d'un PCF8754
16F1847 Pilotage LCD 4x20 en I2C via un PCF8754
16F1847 Test d'un encoder , Affichage via UART
16F1847 Mesure ADC avec reference Interne (ASM) , affichage viaUART
16F1847 Mes. de temper. : 2x DS18B20 OWS numeric sensor + LCD 2x16 cars I2C + UART / BlueTooh
avec Applications Android :
Appinventor2 ou RFO Basic..
Test d'un dialogue I2C entre 2 PIC16F1847 part1
dialogue I2C entre 2 PIC16F1847 part 2
Lire les mots de configiguration , MCU ID et User ID. PIC16F1847
Test OLED 0,96" jaune et bleu 128x32 I2C1 ..et UART1 (2021-03)





Le PIC 16F1847 :

en connectique PDip18
Utilisé avec Fosc Interne =8Mhz ( sans PLL)
Available RAM: 1008 [bytes], Available ROM: 8192 [bytes])


Pinout


images/t_16F1847_pinout_18pin.gif

Hardware :





PCF8574(T)

voir ici Test avec un PCF8574 avec 8 leds pour validation du dialogue I2C
18f26K22_I2C_Hardw_PCF8574_2013_ok.c





LCD 4x20 cars , dialogue en mode I2C (via PCF8574)
avec PIC 16F1847 et MikroC Pro 6.50

Le LCD 4x20 :
- ref: YwRobot LCM1602 IIC Arduino 20x4 (18.48€)
ref : ODT OCM-20416D-A2023 LCD Module 8/4/1999
http://www.miniinthebox.com/fr/arduino....html
Livre SANS DOCUMENTATION
- couleur : fond bleu, caracteres blancs avec retroeclairage
- dimension utiles de l'ecran 86mm x 36mm et Hors tout :100x60x20
- livre avec interface I2C PCF8754 yW robot LCM1602 Arduino
- 4 pins de connection :
1- Gnd (fil noir)
2- +VCC (5V fil rouge)
3- SDA (fil jaune)
4-SCL (fil vert)
cavalier pour activer le retro-eclairage et potar (bleu) pour regler le contraste d'affichage
attention à zero =RIEN NE S'AFFICHE !

Prototype
le bus I2C va sur le PCF8574T du LCD4x20
Adresse 0x4E
La liaision sortie UART -- interface --- RS232 sert au debugging et tracage du programme

images/t_Proto_16F1847_LCD4x20.gif images/LCD4x20_I2C_bleu_Backpg


Usage de la bibliotheque I2C MikroC et code utilisé pour la librairie LCD_I2C.
Le LCD est sensé etre à l'adresse 0x4E ( car c'est un PCF8574 et A0,A1,A2 reliees au +VCC)
Rappel : il n'ya pas de commutateur d'adresse sur ce modele de LCD !
Au lancement du programme, un test presence device I2C est fait:
Si on a pas le message "Device found OK,at adresse : 78" .. pas la peine d'aller plus loin.!

Philips PCF8574T
adresse I2C : 0x4E
#define LCD_BL 0x08
#define LCD_EN 0x04
#define LCD_RW 0x02
#define LCD_RS 0x01


Adresses de lignes
#define LCD_LINE1 0x80 // 0x00 + bit D7=1
#define LCD_LINE2 0xC0 // 0x40 + bit D7=1
#define LCD_LINE3 0x94 // 0x14 + bit D7=1
#define LCD_LINE4 0xD4 // 0x54 + bit D7=1
Attention,il faut rajouter 80h à l'adresse de debut

Affichage dynamique de la mesure ADC RA3 en point
et de la mesure en flottant recadré à droite, sur la 4em ligne !
Compilation conditionnelle AVEC ou SANS UART..."ifdef With_UART"
L'UART1 est initialisé à 19200,8,N,1 pour sortie annexe debugging


Resultats OK
sur le LCD :

sur le terminal RS232 :




Le projet MikroC :

16F1847_LCD_I2C.zip



source MikroC:
16F1847_LCD4x20_I2C_ADC_UART_150427.c




Test d'un Encoder avec result sur UART

source MikroC:
16F1847_Encoder_Test_with_UART_141203.c




Mesure ADC avec utilisation +Vref Interne 2,048V

Hardware:

images/t_Proto_16F1847_ADC.gif
DIP18 Prototype de test


le test est fait avec un potar de 2,2K entre VCC et Gnd, le cursuer relié via 390 ohms à l'entree RA1

Usage de FOSC interne 8MHz
RA1 en entree Analogique
L'UART1 est sur RB1 RX et RB2 TXpar defaut ., liaison directe (19200bds) à Prolic 2303 cordon TTL/USB PC COM virtuel
La tension de reference Interne +2,048V est utilisée ici comme +VREF ADC ,pour augmenter la resolution
Le PIC est alimenté en 3,3V.
Differents seuils de niveau de tension (exprimé en points) permettent d'allumer une diode pour chaque pallier de tension.

Projet MikroC
source :
_16F1847_UART_ADC_Test_Battery_170108.c
Chargeur :
16F1847_ADC_Test_Battery_170108.hex
Zipé :
16F1847_UART_ADC_Test_Battery_2017.zip


 



Mesure 2 temperatures avec sensor numérique OWS DS18B20
affichage sur LCD I2C 2x16 cars + Uart

Hardware:

Capteurs : detail sur cette page

Schéma , PIC Pinout liaisons

images/t_16F1847_2xDS18B20_LCD_I2C_UART_BT_2023.gif images/t_16F1847_pinout_2xDS18B20_Schem.gif
Schema ISIS 30/03/2017 Pinout details



Attention : Config particuliere de l'UART , pour recuperer les pins dédiées à L'I2C1




Resultats sur LCD 2119 :

affichage local sur LCD 2x16 cars Affichage distant sur Phone Startrail 2 Android


SOFTWARE:

Projet MikroC :
projet zipé : _16F1847_OWS_2xDS18B20_Temp_LCD_I2C_170327.zip
source : _16F1847_OWS_2xDS18B20_Temp_LCD_I2C_170327.c
Nota:
rajout d'un flag "Special" dans la fonction LCD_Write_Chr_At(ligne,col,car,special);
pour pouvoir afficher les caracteres perso crées en CGRAM
Special=1 => caractere special CGRAM
Special=0 : caractere normal CGROM

Nota: Liaison BlueTooth avec module HC06-7D69Bconnecté sur la sortie UART du PIC



APPLI Apinventor2

Designer :


Blocks
images/t_HC06_Temp_DS18B20_Alarm_16F1847_blocks_170501.gif


Source AIA 2:
HC06_Temp_DS18B20_Alarm_16F1847_170501.aia
Traitement des seuils Haut et Bas, Alarmes correspondantes

Executable *.APK dispo sur site Appinventor





Application RFO-Basic sur phone StarAddict II Android

La meme appli MikroC , envoie les 2 mesures capteurs OWS DS18B20, toutes les 1,5sec ,via la trame de base
au format CSV (separateur = point virgule) : "j=116;T1= 22.56;T2= 22.81" + CR
J : indice de progression T1 : tempearure exterieure , T2 temperature Interieure
Un module HC06-0539R est utilisé à lapalace du HC05.
L'appli Android tourne sur un Staraddict II Android

Pour simplifier la connectivité , j'ai dissocié tous les autres Bluetooth environnant vu par la phone Staraddict 2
Une premiere fos appairé (code = 1234) , il est automatiquement reconnu et connecté
Il faut cependant valider la conection : message vocal le confirmant et Icone BT en haut à droite de l'ecran
Un fond d'ecran, réalisé via Paint Shop Pro , affiche les 2 thermometres, ayant chacun une echelle differente
-10 à +40 pour la temperature exterieure et +10 à +40°C pour la temperature interieure
Le grafique d'evolution des 2 temperatures est affiché via des petits cercles (diam 3pixels)
Le pas d'avance sensX est de ~2 sec.
2 cases à cocher permettent :
soit d'appliquer ou pas un filtre exponentinel fixé à K=0,2 sur les 2 mesures
soit d'activer le stockage des 2 mesures sur un fichier texte
La ligne du bas de l'ecran, affiche à gauche, en bas, la trame reçue via BlueTooth ( emise par le 16F1847)
La partie droite sert de STATUS géneral .. affiche au depart , la version du source *.bas, ou le nom du fichier de stockage ...
Le stockage, (activé par la case à cocher, s'effectue modulo 10 mesures ..
apparait alors une petite fentre pop up : Sauvegarde sur fichier .. puis Saved.
Enlever la coche pour arreter le stockage ou le filtrage.

Usage des softwares de developpement :
BASIC! Launcher SciTE flavour Sc1 Version 3.5.5 pour developper le programme *.bas sur le PC
Liaison WIFI entre le PC et le phone Android STARADDICT II
Le Bluetooth est activé aussi sur le Phone ! et le modue HC06 a été apparairé.
Le programe BASIC Laucher Version 0.8 tourne en arriere plan sur le Phone Android.
un appui sur la touche F5 de l'editeur PC, envoie le fichier *.bas dans le Phone et lance automatiquement
l'interpreteur RFO-Basic version 01.91
si le compte rendu coté Editeur SC1 PC est egal à 1



Le programme est alors en RUN et s'execute sur le phone (si il ny a pas eu d'erreur programme)
source RFO basic :
DS18B20_x2_BT_16F1847_170503.bas


capture ecran Phone Staraddict II


Compilation du programme
Avec rfo-basic app builder.exe (1137Ko) version 2.6
Attention, NORTON le mets en quarantaine ! passer outre
usage du Android-SDK 4.1

PROBLEMO ... avec Win10.1
meme en mode administrateur
App Builder n'est plus suportée .. because versions java >= 1.8

sous fenetre dos j'obtiens
C:\>java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) Client VM (build 25.131-b11, mixed mode, sharing)
C:\>



à suivre


Retour sur mon vieux PC Win XP
Usage de RFO-AppBuilder V2.6 et de Basicv01.90.zip

Versions JAVA installées:



Verif . Avec commande fenetre DOS :


Microsoft Windows XP [version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\>java -version
java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) Client VM (build 24.45-b08, mixed mode, sharing)

C:\>


La compilation est OK


07/05/2017
Test run sur phone StarAddict II ..
l'appli demarre mais s'arrete sur erreur test Wifi ...
Cannot get WifiInfo: WifiService: Neither user 10056 nor current process has android.permission.ACCESS_WIFI_STATE.
Line: wifi.infossid$,,mac$,ip$


Modif source programme pour enlever le test Wifi ..
DS18B20_x2_BT_16F1847_170509_wo_wifi.bas
Recompilation =>OK
Retest sur Staradict2 => OK




Application rev 11 mai 2017:
ajout : Hordatage datas stockées en CSV
DS18B20_1705_104.apk


Evolutions à faire :
Test du compilateur basic
recyclage historique du grafique ..
Envoyer des commandes particulieres vers le MCU

usage module BLE à la place du module BT normal..
liens:
Application similaire avec un 12F1840

 





Test Liaison I2C entre PIC16F1847 Maitre et PIC16F1847 Esclave


Config Hardware :
2 planches à pain
avec liaison UART 19200,8,N,1 sur les 2 modules ( via des cordons USB/TTL Prolific => 2 vue ecran Terminal Teratem)
la liaison I2C entre les 2 modules à 100Khz (R pull up de 2,7K sur SCL et SDA)
Pins ICSP pour lien avec PickiT2.
j'ai utilisé la meme alim 3,6V (donc avec le meme 0V Gnd)

donc 1 PIC16F1847 MASTER I2C1 bus <---> I2C1 Bus PIC 16F1847 ESCLAVE
j'ai aussi un LCD2119 sur le bus I2C ..mais pas activé pour ce test là. ..à suivre prochainement .. AVEC le LCD comme 2em esclave
je suis parti d'un exemple donné par MikroE Libstock ref: 1470586910_i2c_master_slave_mikroc_pic.zip pour 16F887 .
qui est formateur, car s'appuye sur la note microchip AN 734 I2C Maitre -esclave.
J'utilise l'adresse I2C 0x40 (sur 8 bits ,donc R/W=0) , et non pas l "'adresse <<1" , qui est perturbant, par rapport
à l'adressage habituel utilisé avec d'autres composants esclave (LCD2119,DS1307..)
le bit R/W etant ,bien sur, manipulé en fonction de Ecriture=0 ou Lecture =1

La transposition 16F1847 n'est pas immediate .. UART specific , I2C1 specific .aun niveau des affectation PINS via registre APFCON0
et j'ai quand meme galéré plusieurs jours, avant d'obtenir un echange OK

1ere version :

L'echange est TRES SIMPLE :
le maitre envoi 2 valeurs à l'esclave
celui ci en fait l'adittion
et retourne le resultat au Maitre, qui affiche ce resultat

un rappel du Pinout

Les echanges entre PIC
images/t_Master_Slave_I2C_test.gif

Maitre :



Projet MikroC Maitre

Esclave



Projet MikroC Esclave
.


Evolution:

Prototype

utilisation de 2 breadboards
Connecteur ICSP sur chacun des PIC pour branchement Pickit2
UART avec TX sur RB5 pour se connecter au Display terminal Teraterm via cordon Prolic (TTL/USB) à 19200,8,N,1
1 potar 4.7Ksur EA1 maitre => mesure Volt
1 potar 4,7K EA1 Esclave => mesure Temperature
LCD sur Bus I2C1 .. esclave @074, piloté par le PIC Maitre
PIC esclave sur le bus I2C1
Les 2 PICS sont alimentés en 3,7V , et utilisent FOSC interne 8 MHz
nota; le LCD comporte deja 2 R pull up de 2,7K sur SDA et SCL

images/t_16F1847_to_16F_via_I2C_Sch_1706.gif


images/t_Proto_16F1847_to_16F_via_I2C_170605.gif


LCD 2119 sur bus I2C1 , piloté par le Maitre à @0x74
La mesure analogique EA1 du maitre est envoyée à l'eclave ( 2 bytes)
L'esclave convertit la mesure en Vots (flottants 32 bits) et renvoi cette valeur au Maitre qui l'affiche sur le LCD
L'esclave acquier aussi une mesure ADC1 , temperature, la converti en degres Celcius et l'envoi au Maitre
Le maitre affiche la temperature sur la 2em ligne du LCD
L'esclave renvoi aussi l'indice de boucle J ( 0 à100)
L'esclave envoi une signature : string sur 16 cars " I am the slave"
Le tout transite via une table d'change de 32 bytes

Table d'echange




Master project

Capture terminal:


Programme MikroC:
PIC16F1847_I2CMaster_Protocol.zip



Slave Project

Capture terminal


programme MikroC
PIC16F1847_I2CSlave_Protocol.zip





Lire les mots de configuration , MCU ID et User ID. d'un PIC16F1847


Usage de la datasheet du PIC , et descriptifs des zones située à partir de 8000H











Usage de SCANQUAD SQ50 analyser logique 4 canaux
Capture trame via outil Hard + soft Scanquad SQ50 (IKALOGIC)

trame vers PIC Esclave @0x40

images/t_16F1847_linked_by_I2C_170604b.gif

Trame vers LCD2119 @0x74

images/t_16F1847_LCD2119_1ere_ligne.gif

nota:

Check dialogue I2C avec LCD

On definit un filtre avec l'adresse LCD = 0x74 ( sur 8 bits)
car on a aussi le PIC esclave en 0x40, sur le mem bus

Partie du programme MAITRE où on installe le repère d'observation..

strConstRamCpy(txt,"Indice Slave ");
Indice_Slave = I2C_MasterReadEx(0x40,3); // J value of slave
ByteToStr(Indice_Slave,CRam1);
strncpy(txt+12,CRam1,3);
UART1_Write_Text(txt);UART1_Write(' ');
// RA3 output -> CH1 Scanquad pour reperer la sequence I2C
Track_Signal=1;
LCD_Write_Text_At(1,1,txt);
Track_Signal=0;


Sur SCANQUAD on remarque qu'on ne peut pas voir en clair l'ascii du string envoyé :
meme avec l'option affichage : HEX+ASCII
explication:
because les datas ne sont pas dans le domaine Ascii ! car rajout de 0x80
=> ata correspondant à l'offset 1ere ligne du LCD + code ascii
la preuve


avec l'editeur NotePad++
-Complements
----Converter
-------- Ascii -> Hex

on recupere l'equivalent du string Ascii

Indice Slave 10
49 6E 64 69 63 65 20 53 6C 61 76 65 20 31 30
et on rajoute manuellement 0x80 ! pour chaque data sur la 1ere ligne LCD
C9 EE E4 E9 E3 E5 ... etc
Cela correspond bien à ce qui est affiché dans le champ Packetview
les 3 lignes DATA..

A suivre ..



paulfjujo@free.fr


../common/GIF/LTC1286p.jpg



Retour à l'index general