21 juillet 2012
avec version MikroC demo
rev 2014 avec version MikroC enregistree
last rev 02/08/2017


Applications / tests avec PIC12F1840 (en dip 8)

PIC12F1840 et PWM sur sortie RA2 (MC)
PIC12F1840 et PWM Basse FRequence sur RA2 (MC)
PIC12F1840 avec UART en RA4 et RA5 avec Version limitée 2K
PIC12F1840 avec UART en RA0 et RA1 avec Version limitée 2K
PIC12F1240 en Test liaison BlueTooth YC-MCU avec Version limitée 2K
PIC12F1840 simulation sonde CTN jeep ( Uart ,PWM) (MC)
PIC12F1840 Bus I2C LCD4x20 , UART et ADC (MC)
PIC12F1840 (idem +) mode Sleep et cde Backlight (MC)
PIC12F1840 Mesure Temp OWS DS18B20 + mode Sleep UART(MC)
PIC12F1840 Mesure Temp 2x DS18B20 + mode Sleep via UART Terminal PC (MC)
PIC12F1840 Mes Temp 2x DS18B20 + mode Sleep via BlueTooth et Appli AI2 Tablette Android (MC)
PIC12F1840 + Afficheur LCD 2x16 cde via 2 fils via 74HCT164 (ASM)

Filtrage Exponentiel mesure Analogique : RC virtuel (MC)




PIC12F1840 et sortie PWM sur RA2

Tester les possibilité de Pulse Width Modulation
Mesure de 1 voie Analogique 10 bits , avec Vref interne de 4.096V
Utilise le Timer2 et le module PWM, l'UART1 est configuré pour l' affichage sur terminal PC, via interface 2T <-> RS232
Pas de quartz, usage horloge interne du Pic. : 16Mhz sans PLL

Schema :

images/12F1840_PWM_UART_Schem.jpg

Test avec differentes frequences :

Init PR2 Freq(Hz) reelle obtenue
1000 250
2000 500
3000 745
4000 4000
5000 5000
20000 20033
40000 40049
80000 80132
100000 100165

Meme à 100Khz la commande de Ratio est OK.
sans toucher au parametrage de Timer2 (valeurs par defaut)
Memesi la Frequence ne suit pas la consigne pour F<4000Hz , la commande de Ratio reste OK
En modifiant le prescaler du timer2 ,on obtient la bonne relation Consigne=Frequence pour Freq <4000

images/PWM_5Khz_36.jpg images/PWM_5Khz_512.jpg images/PWM_5Khz_768.jpg
images/PWM_40Khz_30.jpg images/PWM_40Khz_512.jpg images/PWM_40Khz_990.jpg


Deboires rencontres :
- PB: pas de reception UART1!
- allea de fonctionnement UART avec PWM en service
...allant jusqu'au plantage MCU
La breadboard presente 2 à 3pF entre RA2 sortie PWM et Entree RX !!
car les 2 pin MCU sont cote à cote..
=> Rajout de 470µF et 100nF en // sur alim 5V (deja regulée!)
mais toujours pas d'interrupt reception !
PB du à la connection permanente du Pickit2 sur RA1 et RA0
donc :
=> soit déconnecter le Pickit2 (ICSP CLCK)
=> soit Rajourer R pull up de 6,2K entre RA1 pin6 et +5V (malgre l'activation de WPUA)
Reception USART ... OK apres cette modif

nota: usage de interface-2T pour TTL/RS232




PIC12F1840 et sortie BASSE FREQUENCE PWM sur RA2

rev 02/08/2017
Tester les possibilité de
Pulse Width Modulation vers les basses frequences !
Meme configuration que dans l'exemple precedent..
mais cette fois ,
ON VA TRICHER AVEC LA CONFIG TIMER 2 .. tout en gardant la lib PWM MikroC.
Le reglage PWM peut se faire soit avec un Potar , Mesure analogique sur RA0
soit via une commande Terminal : "S=nnn<CR>"
tout autre commande refait passer en mode reglage PWM par Potar
Pas de quartz, usage horloge interne du Pic. : 16Mhz sans PLL

pour obtenir par exemple
une periode PWM de 4mS à 16Mhz
ou une periode PWM de 16mS à 4MHz
en modifiant les diviseurs Pre et Post scaler du Timer2 ...

on initialise SURTOUT PAS la fonction
PWM_Init() de la lib MikroC PWM

// PWM1_Init(1000L);

// over Init Timer2
// maximum de diviseurs

T2OUTPS0_bit=1; // postscaler =1/16
T2OUTPS1_bit=1;
T2OUTPS2_bit=1;
T2OUTPS3_bit=1;
T2CKPS1_bit=1; //prescaler select=11 => 1/64
T2CKPS0_bit=1;
PWM1_Set_Duty(Ratio);
PWM1_Start();

On obtient ainsi :

avec FOSC = 16MHz Fmini= 250Hz
à 8MHz .. 125Hz
à 4MHz ..62,5Hz

images/t_PWM_16mS_4MHz.gif

Tout en conservant la possibilité de reglage de 0 à100% du rapport cyclique (Duty Cyle):
via la commande :
PWM1_Set_Duty(Ratio);
Ratio évoluant de 0 à 255

Projet MikroC complet :
_12F1840_PWM_16mS_at_4MHz.zip

 

 

 

 

 

 



.. appli en MikroC avec Version limitée 2K

Test#1 Uart en RA4 et RA5
Test#2 Uart en RA0 , RA1
Test #3 Uiaison BlueTooth YC-MCU


TEST #1
PIC12F1840 avec UART en RA4 et RA5

But:
Tester cette version evoluée de PIC12Fxxxx
Mesure de 1 voie Analogique 10 bits , avec Vref interne de 4.096V
gestion Timer1 et UART hardware, affichage sur terminal PC, via interface DS275 TTL<-> RS232
Pas de quartz, usage horloge interne du Pic. : 16Mhz sans PLL

Il est INDISPENSABLE d'avoir la datasheet sous la main , en permanence !
ATTENTION à la nouvelle disposition des pins d'alimentation



Montage de TEST#1



Programme source :

Le projet defini dans MikroC, permet de definir la config du PIC12F1840 sur 2 mots de config :
CONFIG1 :$8007 : 0x0984
CONFIG2 :$8008 : 0x3413

En particulier l'usage de l'oscillateur interne à 16MHz , ce qui libere des pins..
A noter : le retour à la notation RA0 et non plus GPI0 comme sur le 12F683.

La fonction Master Clear est inhibée pour pouvoir recuperer la pin RA3 comme entree .
RA5 et RA4 sont mobilisés pour gerer la RS232 via
l'interface RS232 ,
La liaison ICSP au Pickit2 pour la programmation est faite via les Pin RA0 pour ICSPDAT et RA1 pour ICSPClock
RA2 est configure en Entree Analogique
RA0 est aussi utilisee comme sortie vers une Led via R=1K
RA3
..inutilisée

PicKit2 est integré dans l'environnment MickroC via
"outils".

PicKit2 configuration :
Device family -> MidRange -> 1,8V family
Bien que le 12F1840 demmarre à 2,3V mini ..jusqu'à 5,5V maxi.
C'et le modele 12LF1840 qui peut descendre à 1,8V
dans mon cas VDD Pickit2= 5,0V , mais qui n'est pas connecté sur le connecteur ICSP
c'est une alim externe 5V qui alimente le VDD du Pic.
Lors du chargement du chargeur *.HEX dans le pickit2 , on doit voir apparaitre en haut à droite
config : 0984 3413
<- OK

fichier Device version 1.63.146 pour Pickit2


Le programme de ce test :

Sous MikroC PRO v 5.6.1,
Usage des bibliotheques : Uart, ADC, Cstring, Convertions
pour evaluer quelques possibilites du PIC12F1840.


Deboires rencontres :

Difficulté pour trouver le Device dans Pickit2 !
introuvable dans PicKit3 !!!

Difficulte pour l'Init de l' UART (hardware UART) , relativement spécifique , via l'usage du registre APFCON qui permet de designer
les pin RAO,RA1 OU RA4,RA5 pour les fonctions TX et RX de l'UART

Gestion des erreurs de COM : Overflow et Frame error, necessitant plusieurs correctifs à integrer dans la routine d'interrupt UART
Erreurs qui se manifestent surtout lorsqu'une trame de caracteres est envoyée en 1 seule fois, ne se remarque pas si envoi de carcatere
à la vitesse de frappe au clavier , car delai intercaractere !
dans cet exemple , la reception est limitée à 32 car (taille du buffer), à modifier si besoin.

Non fonctionnement de la sortie RA0 si usage de l'UART.. la librairie UART modifie le TRISA ! =>
re-init TRISA APRES l'init de l'UART pour conserver RA0 en sortie.=> OK


Le Source: 12F1840_Usart_Interrupt_Timer1.c
une erreur est volontairement glissée dans ce programme !
Le chargeur
12F1840_Usart_IT_Timer1.hex

on doit voir apparaitre sur le terminal le msg stocké en rom :
Mikroc pro 5.61 20/07/2012
12F1840 platine avec DS275
Lect ADC2 RA2
suivi de
compteur incremental, mesure analogique AN2 en points, eventuelle saisie clavier, compteur d'erreur, drapeau Error

au rytme du cadencement Timer1 calé sur 1 seconde
La Led sur RA0 change d'etat à chaque cycle : 1seconde ON 1 seconde OFF
sur le terminal Vbray on peut cocher la fonction "Time" pour verifier le timing d'acquisition


resultat sur terminal Vbray:




TEST #2
PIC12F1840 avec UART en RA0 et RA1


Version avec
- UART sur RA0 et RA1 en mode interrupt
- usage de Timer0 et Timer1 en mode interrupt
- 1 ADC avec Vref interne de 4.096V
- 2 sorties Leds

modif affectation des Pins :
pin 7 RA0= ICSPDAT and RX --> blanc 3 DS275 <-- TX RS232
pin 6 RA1= ICSPCLK and TX --> rouge 1 DS275 -->RX RS232
pin 5 RA2= Analog Input AN2 <- potar 4,7K 0 à 5V
pin 4 RA3 ICSP MCLR
pin 3 RA4 Output Led Rouge -- 1K -- 0V
pin 2 RA5 Output Led Blanche -- 1K -- 0V
pin 1 VDD +5V power supply
<- ATTENTION !!!
Pin 8 VSS ..0V



Deboires rencontres :
Interaction CCP1CON avec Pin RA0, Dediée à l'UART


source :
12F1840_Usart_RA0_RA1_Interrupt_Timers_b.c
une erreur est volontairement glissée dans ce programme !
Chargeur : 12F1840_Usart_RA0_RA1_IT_Timers.hex





TEST #3
PIC18F1240 en Test liaison BlueTooth YC-MCU

Prototype

Modification: usage de l' Horloge interne FOSC= 16Mhz (sans PLL) dans le programme
Usage de message en EEPROM
Mesure ADC 0 à 4.096V pour 0 -1023 points
Module BlueTooth
Linvor YC-MCU connecté sur l'UART (RA0 RA1) à 9600 bauds
Envoi indice J + mesure ADC toutes les 2 secondes (delai par Timer0)
Liaison avec Archos43It programme BlueTooh_links.apk (developpé sous Appinventor)
Le programme envoi les commandes AT puis AT+VERSION
Le module YC-MCU doit repondre ex:
OKlinvorV1.5 si la led du YCMCU clignote
donc s'il nest PAS déja APPAIRE.

Il faut donc , en face, sur l'ARCHOS Android , activer le Bluetooth via PARAMETRES,et surtout
Valider la coche "Identifiable" ..
ATTENTION ne dure que 120 secondes. (sur ma tablette!)
On peut ainsi lncer l'appli Android qui etablira le dialogue avec le YC-MCU
Une fois connecté, on doit recvoir toutes les 2 secondes le message emis par le PIC
Tous message envoyé par l'appli Android sera renvoyé en Echo par le PIC

si rien ne fonctionne coté BlueTooth ,
verifier le module BT directement avec un terminal et voir s'il repond aux commandes AT et AT+VERSION
Si pas de réponse : faire un RESET suivant
ceci ..
Mon module YC-MCU est equipé d'un regulateur de tension, il peut donc fonctionner avec une alim 5V
contrairement à certaines affirmations prises sur le web ( doit dependre du type de module !).

Schema:

images/12F1840_UART_Linvor_test.jpg images/BT_links_131015_Archos.jpg

Projet MikroC
_12F1840_YCMCU_2013.zip





PIC12F1840 simulation sonde CTN jeep ( Uart ,PWM)


Base de depart , idem que test PWM
Le but est de pouvoir utiliser une sonde CTN nouvelle generation pour la mesure de temperature
d'un bloc moteur de Jeep année 1985 . La nouvelle sonde ayant un rapport de l'ordre de 10 par rapport au modele original.
voir
Futurascience
La particularité de l'indicateur de temperature est que c'est la deformation thermique d'un bilame,qui deplace l'aiguille indicatrice
De plus, commun à l'indicateur de FUEL, un systeme de modulation sur l'alim 12V, à base de bilame et contact
permet d'alimenter les jauges FUEL et TEMPER que 100mS toutes les 700mS
ceci afin que les bilames NE BRULENT PAS.( ou le potar de la jauge FUEL)
Le bilame TEMPER fait 21 ohms
La CTN originale peut descendere à 9 ohms
Pour faire cette adaptation, utilisation du MCU 12F1840 en DIP8
largemenrt suffisant,pour avoir une netree ANA : mesure de la CTN via un diviseur de tension issu du +5V local
une sortie PWM qui se substuera à la CTN d'origine, pour alimenter le bilame indicateur TEMPER
Le lien ci apres est une tres bonne reference sur le
materiel Jeep utilisé

Schema de principe
:

images/t_CTN_like.gif


Evaluation sous Excel avec une CTN de 2,5K et coeff B=4450
La nouvelle sonde CTN est montée dans un pont diviseur à partir du +5V local
Le choix d'un talon de 470 pour le diviseur de tension permet de mieux dilater les ecarts
de mesures ANALOGIQUE en fin d'echelle.
La liaison serie RS232 ou BT UART est optionnelle..ne sert qu'à la mise au point des parametres

La mesure ANA sur 10bits , est inversée, complementée via: M' = 1024-M
puis divisée par 4 (2 decalages à droite) pour rester dans la gamme de consigne PWM 0 à 255 maxi
correspondant au duty cycle 0 à100%
Une R de protection 9 ou 10 ohms peut etre mise en serie sur la sortie PMW qui ira sur l'indicateur TEMPER ( bilame=21 ohms)
à la place de la sonde CTN originale.
Le +5V local sera issus du 12V batterie via un regulateur de tension 5V , genre LM7805 ou LM2940-5
De cette façon , il n'y a pas d'intrusion dans le cablage existant, Hormis le +12V necessaire à l'alim (5V local)
Le 0V alim sera relié au Chassis 0V batterie. La CTN étant vissée dans le bloc moteur .


les 2 courbes de réponses sondes : originale et nouvelle


images/t_Jeep_reponse_sondes_CTN.gif


Projet MikroC
_12F1840_PWM.zip




Filtrage Exponentiel mesure Analogique : filtre RC virtuel

Formulation
Teta=RC= -(durée (intervalle de rafraichissement) / LN ( 1- Kfiltre))


Le filtrage est ajusté via la valeur KFiltre, qui peut evoluer de 0,0 à 1,0
ATTENTION aux 2 valeurs extremes :
KFiltre = 0.0 ; la valeur filtrée NE SERA JAMAIS rafraichie
KFiltre = 1.0; la valeur N'EST PAS FILTREE.

Application Excel pour demonstration :
Filtre_Exponentiel.xls

images/t_Exponential_filter_xls.gif


Test avec PIC12F1840 , et liaison UART
meme
hardware que celui utilisé pour le test #2
Le soft est legerment modifié pour ne conserver que le Timer0 , en mode interrupt
qui va imposer la duree de boucle programme à 0,5 seonde.
Dans la boucle temporelle :
la valeur filtree= (Valeur instantannée (en cours) * KFiltre) + (Ancienne valeur * (1-Kfiltre)
puis on met à jour Ancienne Valeur=Valeur filtree
.. et on boucle

Avec une boucle à 0,5 sec
Teta=-( 0.5 / Ln(1-0.2))= 2,41 seconde .. pour reponse à 63% sur un signal evoluant de 0 à 100%

Resultat:
images/Calcul_filtre_exponentiel_pratique.jpg

source MikroC
chargeur hex

nota: Attention

si le Pickit2 ICSP reste branché, l'UART est fortement perturbé,

surtout en reception (ne recoit plus rien)

 


 



PIC 12F1840 avec LCD 4x20 I2C + UART + ADC
sous MikroC Pro V 6.50
14/06/2015

HARDWARE :
FOSC interne 8MHz
LCD 4 lignes de 20 car ecran bleu, ecriture blanche , retro-ecliarage
avec interface BackPig I2C PCF8574 YwRobot Arduino LCM1602 IIC V1
ATTENTION à la disposition des Pins d'alimentation !

principe :


Schema (version avec backlight cde par MOSFET):
images/t_12f1840_i2c_lcd_uart_adc_2015.gif
Prototype :

images/t_PIC12F1840_Proto_LCD_I2C_150609.gi
prototype 12F1840 UART + I2C + ADC



Le Pickit2 pourrait alimenter le tout en 5V.(testé OK)
alimentation via alim 5V externe ( avec PC arreté!)
Resultats sur LCD I 4 lignes de 20 caracteres, connecté sur le BUS I2C (RA1(SCL) ,RA2(SDA) avec R de rappel 2,7Kau +5V)
possible aussi d'afficher via l'UART à 19200,8,N,1 : RA4 (TX) et RA5 (RX) via interface 2T
Mesure analogique sur RA0 : à à 5V pour 0 à1023 pts



Source mickroC pro :
_12F1840_ADC_RA0_LCD4x20_I2C_RA1_RA2_UART_RA4_RA5.c
Chargeur :
_12F1840_ADC_LCD4x20_I2C.hex



PIC 12F1840 Sleep test
LCD I2C + UART + ADC
sous MikroC Pro V 6.50
18/06/2015

Schema (version avec backlight cde par MOSFET):

images/t_12F1840_I2C_Sleep_150618.gif


Usage de la fonction SLEEP et du WatchDOG
Le PIC est mis en mode Sleep, reveillé par l'interuption RX UART et la reconnaissance d'un caractere specific BREAK
tous les bits à 0 donc Valeur à 0
La reception d'un seul Break n'est pas fiable pour reveiller le PIC, j'utilse donc l'envoi de 2 caracteres à 0 suivit de CR
pour dans un 1er temps sortir le PIC du mode sleep = Reveil..
Un message est renvoyé en echo sur l'UART TX
Ce signal permet de charger le condo aux bornes du Mosfet commandant le retroeclairage.
Le buffer est aussitot vider pour permettre une reception UART
Dans la foulée une mesure ADC est faite et envoyée sur l'UART TX et sur le LCD en I2C
suivit d'une tempo de 2 secondes
permettant de saisir un message ENTRANT dans l'UART
Si un message est capté ,celui ci est renvoyé en echo sur l'UART TX et affiché (partiellement) sur le LCD.
Ensuite du fait de l'abscence d'envoi sur l'UART, Le retro eclairage s'eteint..

En résumé:
Rajout Commande retro-eclairage sur envoi d'un Break ou commande via l'UART
pour reduire notablement la consommation
- conso globale : PIC + Potar + PCF8754 + LCD + circuit LED = 7mA au repos
- conso sur reveil , apres 34 secondes .. PIC à 18mA et retour rapide à 7mA
- Conso sur reception d'un Break : monte à plus de 30mA, retro eclairage important ,
puis retour à 7 ou 8 mA apres 5 secondes.
idem si envoi d'un message apres le Break..

Principe :

ce n'est pas le bon Mosfet dans cette simule..

version avec Backlight :
12F1840_Sleep_150619.c

Conclusion de ce test :
Le mode sleep n'apporte rien.. un simple delai d'attente agirait d ememe,
vu l'ecart de conso trop minime



PIC 12F1840
Mesure de Temperature DS18B20 et mode Sleep
+ UART + OWS + SLEEP
sous MikroC Pro V 6.50
02/02/2017

Le capteur O.W.S.:



Prototype:

images/t_Proto_12F1840_Sleep_Test_2017.gif ../common/t_DS18B20_Bloc_Diagram.gif
montage breadboard Sonde DS18B20 O.W.S.


Schema :



Attention : débrancher la sonde sur RA0 pour utiliser le Pickit2 .

Programme :


Le montage est alimenté en 3,3V et je compte utiliser une pile plate 4,5V
(ou 3 piles 1,5V) + regulateur ASM117 3,3 pour alimenter le tout
et utiliser le mode sleep sur commande .. via équipement distant pour envoyer la commande SLEEP ou WAKEUP
pour recup de l'info sur demande et reduction de conso si pas besoin.
en mode sleep conso < 15µA
en mode normal conso < 1,15mA

Resolution de mesure de temperature +- 0,0625°C

Probleme autour du caractere BREAK pour reveiller le PIC via L'UART RX
ma commande WAKEUP ne passe qu'au bout de la 3em fois et je recupere dans les 2 premieres
fois du "garbage"
l'UART est censé reveiller le PIC des le premier caractere qui devrait etre un BREAK code 00
mais dans la pratique il se reveille avec n'importe quel car reçu..
d'ou l'envoi de "WAKEUP<CR>"
sorti du mode sleep si au moins 1 car recu
delay pour laisser passer les autres car jusqu'au <CR>
si detection du CR , examen du buffer
si message WAKEUP je reveille le PIC , sinon je le rendors .
En pratique, le WAKEUP ne passe correctement qu'à la Troisieme fois ?



il semblerait bien que le premier car pour reveiller le PIC ait un codage < 0x3F ..
test avec
>WAKEUP ..OK pas de garbage !
test avec
.WAKEUP .. OK pas de garbage !


page 266 Datasheet MicroChip du
PIC12F1840
26.4.3 AUTO WAKE P BREAK
.. the initial character in the transmission must be all '0'S.
This must be 13 times for LIN bus ,
or any number of bit times for RS232

il semblerait donc que les 2 premiers bits de
">" = 0011 1110
ou
"." = 0010 1110
soient suffisants pour Reveiller et reactiver l' UART


Compilateur : MikroC 7.0.0

Directory :C:\_MikroC\_MesProjets_MikroC\_12F1840_Sleep
Projet :12F1840_Sleep_Temper_DS18B20_WakeUpbyUart_2017.mcppi
Source :_12F1840_Sleep_WakeUpOnUartBreak_DS18B20_Test_170202
MCU :12F1840 DIP8

Send <SLEEP> to put PIC en mode sommeil
Send a BREAK character pour reveiller le PIC
Indice j= 0 ; DS18B20#1 Temper.Amb.= 19,0000
Indice j= 1 ; DS18B20#1 Temper.Amb.= 19,0000
Indice j= 2 ; DS18B20#1 Temper.Amb.= 19,0000
Indice j= 3 ; DS18B20#1 Temper.Amb.= 19,0000
Indice j= 4 ; DS18B20#1 Temper.Amb.= 19,0000
SLEEP
Au dodo .. consommation < 15µA
Indice j= 5 ; DS18B20#1 Temper.Amb.= 19,0000
>WAKEUP
Reveillé par reception de :3E Consom. remonte à ~1,15mA
Indice j= 6 ; DS18B20#1 Temper.Amb.= 19,0000
Indice j= 7 ; DS18B20#1 Temper.Amb.= 19,0000
...
Indice j= 82 ; DS18B20#1 Temper.Amb.= 19,0625
Indice j= 83 ; DS18B20#1 Temper.Amb.= 19,0625
Indice j= 84 ; DS18B20#1 Temper.Amb.= 19,1250
Indice j= 85 ; DS18B20#1 Temper.Amb.= 19,0625

SOFTWARE :

Projet zipé :
_12F1840_Sleep_WakeUpOnUartBreak_DS18B20_Test_170202.zip
Source :
_12F1840_Sleep_WakeUpOnUartBreak_DS18B20_Test_170202.c
Chargeur :
12F1840_Sleep_Temper_DS18B20_WakeUpbyUart_2017.hex



Version avec 2 sondes DS18B20
et interrogation via leur ID Numero ID # , dialogue via Terminal PC :


images/t_Proto_12F1840_2_DS18B20_UART_sleep.gif
La 2em sonde est simplement en parrallele avec la 1ere , seul le numero ID les differencie ! prototype 2 sondes DS18B20 sous etui inox


La capacité ROM RAM de ce PIC ne permet pas la recherche automatique des Numero de serie , donc ..

Au niveau Hardware , il faut prevoir de pouvoir selection une ou l'autre sonde DS18B20
au moins pour la phase de reconnaissance de leur numero d'identification codé sur 8 octets
le 1er octet doit etre 0x28 = type de sonde DS18B20
puis vient un numero de serie UNIQUE pour chaque sonde (sur 6 byrtes)
et en dernier le CRC des precedents bytes

Pour le 1er RUN du programme ,avec une seule sonde connectée
envoyer la commande ID#1? depuis le terminal.
On obtient en reponse le ID Number de ce capteur #1, qui sera stocké en EEPROM à l'adresse 0xB0
on fait de meme ensuite avec la sonde #2 (sonde #1 debranchée)
envoyer la commande ID#2? depuis le terminal.
On obtient en reponse le ID Number de ce capteur #2 , qui sera stocké en EEPROM à l'adresse 0xC0
Une fois cette operation faite, on aura plus besoin de la refaire , vu que le programme lira ces ID Number au demaarrage programme.
ON peut envoyer le reglage des seuils Haut et bas d'alarme de chaque sonde via TH1=xxx TL1=yyy (ou TH2=xxx et TL2=xxxx)
L'alarme est active en dehors de la fourchette TH1<->TL1
n'est pas géree dans cette version car le PIC est FULL
// Used RAM (bytes): 233 (97%) Free RAM (bytes): 7 (3%)
// Used ROM (program words): 4075 (99%) Free ROM (program words): 21 (1%)

Un espace pour 4 sondes ID# est reservé en EEPROM modulo 16 bytes .. on pourait donc aussi en stocker 8 !
Si on connait par ailleur le IDnumber , on pourrait aussi le stocker directement dans l'EEPROM du PIC ..

Dialogue Terminal pour 1er lancement du programme



1)
sur reset , pas de mesure, si les ID number n'ont pas été relevés
via la cde ID#1? et #ID#2? pour etre stockées en EEPROM PIC

Version 170303
Compilateur MikroC 7.0.1
Alim 3,3V
PIC12F1840 et 2 Sonde DS18B20
Alarm TH1 et TL1 TH2 et TL2
Cdes DISPO :
TH1= ou TL1=
SLEEP
.WAKEUP


ID #1 ?
ID #2 ?
j= 0
j= 1
j= 2
j= 3

......
j= 59
j= 60
Recherche ID#1

1 seul DS18B20 doit etre connecté
Data: FamilyCode 28 ID1= FF4715811603 CRC= 24

j= 61;T1= 20,62;TH1= 3TL1= 0
j= 62;T1= 21,50;TH1= 3TL1= 0
j= 63;T1= 21,50;TH1= 3TL1= 0

...
j= 72;T1= 21,43;TH1= 3TL1= 0
j= 73;T1= 21,43;TH1= 3TL1= 0
Recherche ID#2

1 seul DS18B20 doit etre connecté
Data: FamilyCode 28 ID2= FF83C7641503 CRC= B8

j= 74;T1= 21,43;TH1= 3TL1= 0T2= 21,43;TH2= 3TL2= 0
j= 75;T1= 21,43;TH1= 3TL1= 0T2= 21,43;TH2= 3TL2= 0
j= 76;T1= 21,43;TH1= 3TL1= 0T2= 21,43;TH2= 3TL2= 0
j= 77;T1= 21,50;TH1= 3TL1= 0T2= 21,50;TH2= 3TL2= 0

Nota:
sur pickit2 .. DEVALIDER (decocher) EEprom DATA
pour ne pas ecraser le contenu EEPROM PIC, si modif programme


Les 2 capteurs sont maintenant connus via leur ID number ..
sur reset , relecture des ID number en EEPROM PIC
et activation immediate des capteurs reconnus

Version 170303
Compilateur MikroC 7.0.1
Alim 3,3V
PIC12F1840 et 2 Sonde DS18B20
Alarm TH1 et TL1 TH2 et TL2
Cdes DISPO :
TH1= ou TL1=
SLEEP
.WAKEUP


ID #1 28 FF 47 15 81 16 03 24
ID #2 28 FF 83 C7 64 15 03 B8
j= 0;T1= 19,75;H1= 23;L1= 15;T2= 19,75;H2= 23;L2= 15
j= 1;T1= 19,75;H1= 23;L1= 15;T2= 19,75;H2= 23;L2= 15
j= 2;T1= 19,75;H1= 23;L1= 15;T2= 19,75;H2= 23;L2= 15


rappel:

SLEEPING <---------- on reste en attente , conso <15µA
.WAKEUP <----------- réveillé , la consom. remonte à ~1,5mA


Projet MikroC complet zip : (_12F1840_2xDS18B20_UART_Sleep_170303.zip)
Source MikroC (_12F1840_Sleep_WakeUpOnUartBreak_2xDS18B20_Test_170303)
Chargeur (12F1840_Sleep_Temper_DS18B20_WakeUpbyUart_2017.hex)
EEPROM PIC (12F1840_Sleep_Temper_2xDS18B20_Uart_2017.ihex)

A suivre :
version avec un 16F1847 ...car PIC FULL
1144 Used RAM (bytes): 233 (
97%) Free RAM (bytes): 7 (3%)
0 1144 Used ROM (program words): 4075
(99%) Free ROM (program words): 21 (1%)




Version avec usage d'une Application Appinventor2 .. comme interface operateur (Guy User Interface)
liaison HC06 BlueTooth au lieu / ou avec terminal PC


L' UART du 12F1840 est relié directement sur le module identifié par son nom , (préallablement attribué) : HC06-7D69B
Je repere mes differents modules BT par les 4 digits de fin d'adresse MAC et une pastille de couleur collée dessus , ici B=Bleu
Ce module a déja été initialisé auparavant (avec un terminal ,pour tourner à 19200 bds au lieu de 9600 bds, et affeter un nom via
la commande ATNAME ..
Pour le debugging, un PC peut etre raccordé en meme temps,via un cordon PROLIC 2303 en parralele sur TX ou RX du PIC

Rajout d'une Commande pour interrogation systematique du PIC par l'Application distante
commande "Mes" envoyée si le BP AUTO est activé.
Les commandes SLEEP et .WAKEUP sont conservée.
L'application coté PIC est peu modifiée .. on peut garder , en parrallele , la sortie UART vers Terminal PC .
Au demarrage , le BlueTooth doit etre activé sur l'Android Tablette, et l'assocciation avec le HC05 doit etre aussi activée.
Appuy sur BP "Connect" => La liste des modules ACTIVABLES avec la Tablette apparait
Choisir le bon module ( celui qui est sur l'appli PIC12F1840 .. dans mon cas c'est un HC05 ....
La led clignotante du module HC05 , doit passer en fixe, des l'appairage et connection réussie
Signal vocal de confirmation . L'adresse du module est affichée , sous fond vert .
sinon adresse sur fond rouge, si non connecté .. il se peut qu'une rreur 505 soit affichée ??? cause inconnue ??
mais qui disparait ensuite .
Il faut appuyer sur le BP "AUTO" pour declencher la demande systematique des mesure, toutes les 2,5sec
Le BP "AUTO" passe en fond Vert,
Une fenetre montre la trame ascii reçue ( celle emise par le PIC )
et l'indice J , puis les 2 mesures de temperature sont affichées en °C , dans les emplacement reservés à cet effet.
L'appui sur la Touche SLEEP ..met le PIC en sommeil .. donc plus de rafraichissement mesures, la touche AUTO est devalidée
passe sur OFF., confirmation par message vocal
L'Appui sur "Wakeup" le reveille .. message vocal
Il faut revalider la Touche "AUTO" pour avoir à nouveau les mesures.

L'Appli MikroC (révisée)
Projet complet zipé :
12F1840_Sleep_WakeUpOnUartBreak_2xDS18B20_BT_170319.zip
le code source :
12F1840_Sleep_WakeUpOnUartBreak_2xDS18B20_170319.c

L' Application Appinventor2 :

l
e source : HC06_Tempe_DS18B20_170314.aia
Probleme de latence TRES IMPORTANTE sur demande de mesure Mes toutes les 2 sec,
la reponse se fait au bout de 15 à 20 secondes. L'envoi Mes est bien recu toutes les 2sec par le PIC
PB Résolu :
En fait le flag reception coté PIC se faisait par le debordement taille buffer1 au lieu de la detection de CR
Dans l'appli Appinvento2 l'envoi du texte Mes\r\n envoi reellement un 0x0A (LF) , mais pas de 0xOD (CR) ??
WHy ?
Modif : Envoi Texte "Mes" ,puis envoi Byte 13 ( 0x0D =CR) .. est là c'est OK
Le PIC renvoit les 2 mesures en moins de 120mS

La surveillance et/ou modification des seuils TH et TL des DS18B20 a été supprimé coté PIC
par manque de place RAM et ROM , de plus l'alarme DS18B20 ne se fait qu'en dehors de la zone TH..TL et ne peut pas distinguer
si c'est une alamr haute ou basse
Rajout Alarme Haute ou Basse sur chaque capteur , coté Tablette Archos..message sonnore sur 10 occurences successive maxi

Nouvelle version :

l'executable :
HC06_Tempe_DS18B20_Alarmes_170320.apk

images/t_HC06_Tempe_DS18B20_with_alarmes_Designer_170320.gif images/t_HC06_Tempe_DS18B20_avec_alarmes_blocks_170320.gif
Designer Screen1 Blocs de controle programme .aia



Resultats sur écran Tablette Archos 43it

clicker sur Selectionner le module BT choisir le bon module ! et selectionner Auto Mesure 1 > Alarme 1

En plus, Elle cause ...


Verification Dialogue au niveau du PIC

avec le terminal VBRAY et l'option Time cochée , sauvegarde dans fichier log
Terminal log file
Date: 19/03/2017 - 11:45:49
-----------------------------------------------
avec RX terminal sur RX du PIC, on verifie ce qu'envoie l'appli Android
11:45:51.097, Mes
11:45:53.284, Mes
11:45:55.360, Mes
11:45:57.765, Mes
11:45:59.953, Mes
11:46:02.032, Mes
11:46:04.221, Mes
11:46:06.298, Mes
11:46:08.484, Mes
11:46:10.891, Mes
avec RX terminal sur TX du PIC, on verifie la réponse du PIC vers l'appli Android
11:46:17.671, j= 93;T1= 20.50;T2= 21.50;
11:46:19.749, j= 94;T1= 20.50;T2= 21.50;
11:46:22.925, j= 95;T1= 20.50;T2= 21.50;
11:46:25.000, j= 96;T1= 20.50;T2= 21.50;
11:46:27.080, j= 97;T1= 20.50;T2= 21.50;
11:46:29.267, j= 98;T1= 20.50;T2= 21.50;
11:46:31.345, j= 99;T1= 20.50;T2= 21.50;
11:46:33.532, j=100;T1= 20.50;T2= 21.50;
11:46:35.612, j=101;T1= 20.50;T2= 21.50;

-----------------------------------------------
Date: 19/03/2017 - 11:46:36
End log file

Bien sur,
c'est toujours perfectible ..
ex: separation des alarmes Haute et Basse,
BP d'acquitement alarme.
stockage des valeurs en BDD
Grafique Tendances..




PIC 12F1840 et Afficheur LCD 2x16 cars
Cde en 2 fils via circuit 74xx164
MPlab 8.92 ASM 100%
Rendons à Cesar ce qui est à Cesar ,
Version Originale ICI


le schema :
12F1840_2w_LCD_74LS164_sch.gif

Le prototype :

Pic12F1840_LCD_2wire_via_74164.gif
PIC avec FOSC interne à 1MHz , l'UART connecté n'est pas utilisé dans ce programme, ni la PIN MCLR
Il n'y a donc que 3 pins utilisées
RA0 : entree ANALOG CH0 utilisée ici en mode 8 bits cadres à Gauche (Potar)
RA1 : Data serial
RA2 : Clock
Le potar de reglage de contraste est remplacé simplement par une R de 2,7K à la masse (0V)


Le Programme:
suite discussion Forum
sur ce fil :

test avec un 12F1840 en ASM du montage LCD 74164 .. montage 2 fils
Affiche sur la 1ere ligne "0123456789"
Affiche sur la2em ligne , la valeur 8bits de la voie analogique RA0
une etoile = separateur
et la valeur en Beaufort , en divisant la valeur brute par 28 .. soit maxi 255/28=9
(filtrage mesure à rajouter)

Le projet MPLAB ASM: 12F1840_LCD_2w_74164.zip

Notas:
Attention : debrancher le cursor du potar pour ne pas perturber le chargement du *.HEX via le pickit2
L'impedance du Potar pouvant court-circuiter le niveau ISCP

Probleme : usage conditionnel de variable avec #ifdef ??
error 121
Question posée sur le forum Futura Science
Reponse :
definir plusieurs zones avec cbloc

solution OK..


La meme application avec 12F683 (asm)

retour à l'index général