21 juillet 2012
avec version MikroC demo
rev 2014 avec version MikroC enregistrée
last rev 30/12/2022
Applications / tests avec PIC12F1840 (en dip 8)
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 et PWM sur sortie RA2 (MC)
PIC12F1840 et PWM Basse FRequence
sur RA2
(MC)
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 Recepteur télécommande
IR SONY Audio RM-SCU37 & SONY TV TX300 (MC) 05/2020
PIC12F1840 Mesure Temp OWS DS18B20 +
mode Sleep UART(MC)
PIC12F1840 Mes Temp 1x DS18B20 + via
BlueTooth et Appli Appinventor2 pour Tablette Android
PIC12F1840 Mes Temp 1x DS18B20 + via
BlueTooth et Appli PC RAPIDQ (en basic) (13/12/2018)
PIC12F1840 Mes Temp 1x DS18B20
+ via BlueTooth et Appli BlueElectronics Android
PIC12F1840 Mes 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)
PIC12F1840 Guirlande Sapin
de Nöel PWM 4x10leds (MPLAB XC8) 24/12/2022
PIC12F1840 Générateur de
signal DTMF
PWM CCP1 Timer2 (MPLAB XC8) 29/12/2022
Annexes :
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 :
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
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
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
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:
![]() |
![]() |
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:
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
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
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:
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):
Prototype :
![]() |
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):
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:
![]() |
![]() |
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 1 sonde DS18B20 avec module
BlueTooth HC06
Hardware :
Montage sur une Breadboard de 45x 35mm
Acquisition 1 seuul capteur DS18B20 + 1 voie Analogique brute .
Liaison module blueTooth HC06_0539R (repère pastille Rouge)
Alimentation par batterie 3,6V LI-ION
Le projet MikroC :
_12F1840_1xDS18B20_HC06_171006.zip
Appinventor2 Application :
![]() |
APK sur Phone StraAdict 2 et vue Apinventor 2 Designer |
la partie Blocks :
Choix du module BlueTooth à connecter et affichage de son
adresse MAC
Affichage de la sequence emise par le PIC
Rafraichissement 1 sec
Affichage de l'indice J en cours
Affichage de la mesure de temperature DS18B20 en °C
Affichage d ela valeur analogique en points 0 à 1023
Reglage du seuil haut d'alarme
Reglage du seuil bas d'alarme
à Valider , si modification
Alarme vocale pendant 10 cycles ,puis arret
Messages vocaux
wakeup et sleep non implementé à ce jour ..
le projet appinventor et l'appli compilée:
HC06_Temp_1xDS18B20_Alarm_12F1840_171006.aia
HC06_Temp_1xDS18B20_Alarm_12F1840_171006.apk
Variante 1 sonde DS18B20 avec Appli
BlueElectronics
Hardware :
12F1840 en DIP8
pin 1 VDD Alim +5.0
pin 2 RA5 UART RX <--- UART
pin 3 RA4 UART --> TX
pin 4 RA3/MCLR/VPP -- ICSP et Reset R=5.6K de rappel au +3,3V
pin 5 RA2 - output --1k---Led --> +Vcc
pin 6 RA1 ICSP Clock
pin 7 RAO ICSPDAT ------ OWS sonde temperature DS18B20 avec R
pull up =4,7K
pin 8 VSS alim 0V
Rappel :
Préparation de L'affichage :
La mesure de base :
Source: _12F1840_1xDS18B20_UART_RA4_RA5_HC06_181206.c
Chargeur : 12F1840_1xDS18B20_Uart_RA4_RA5_HC06_1812.hex
Application BlueElectronics :
fichier de config : Temp_ext_DS18b20_1812.kwl
Bluetooth-Electronics.1.1.apk dispo sur Google Play.
Bug Application pour
valeurs négatives ?
grafique :
Receive char *T
Data points 900
Max Y value 40.0
Min Y value -10.0
echelle -10.00 à +40.00
La mesure affichée en numerique est OK,
mais l'affichage plafonne à zero entre 0.00°C et -9.99°C ,
puis descend d'un coup à -10°C
Nota: impossible de mettre une gamme avec un minima negatif pour
la Jauge Ronde et le Thermometre.
Attention:
Le BP (Led sur RA2) envoi "En" ou "Hors"
suivi d'un "LF"
au lieu de l'habituel CR !
Variante 1 sonde DS18B20, avec
Appli PC en basic RapidQ
le meme hardware que ci-dessus
La trame emise par le PIC comprend simplement un indice
representant un numero de trame 0 à 65535
et la valeur issue du capteur OWS DS18B20
mesure de temperature via bluetooth
PIC12F1840 + DS18B20 + HC06
PC avec appli RapidQ connection Port Virtuel COM6
Appli BlueSoleil + cle USB/BlueTooth APM (Maitre) SSP COM5
et Service port COM A => COM5
Version avec graphique glissant
Stockage de la mesure à chaque minute dans un fichier journalier
L'interface coté PC
L'application RapidQ
le graphique est déroulant .. se deplace de droite à gauche,
des qu'une nouvelle mesure apparait.
La partie négative est fonctionelle .. contrairement à
BlueElectronis appli android.
le code RapidQ
fichier source : Temper_12F1840_DS18B20_HC06_181213.rqw
fichier *.ini : Temper_BT.ini
fichier exec: Temper_12F1840_DS18B20_HC06_181213.exe
Version
avec 2 sondes DS18B20
et interrogation via leur ID Numero ID # , dialogue via Terminal
PC :
![]() |
![]() |
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)
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%)
A suivre :
version avec un 16F1847 ...car PIC FULL
Version avec usage d'une
Application Appinventor2 .. comme interface operateur (GUI 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 PROLIFIC 2303 en parrallele 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 :
le 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 Appinventor2 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
![]() |
![]() |
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..
Variante avec 1 mesures DS18B20 et
une sortie PIC commandable
Cette version testée OK avec mesures de temperatures negatives..
modif de la mesure DS18B20 pour l'adapter aux exigences de
Appinventor2
qui ne supporte pas d'espace entre le signe - et le 1er
digit de valeur
ex: - 0.312 °C
alors qu'il y a bien l'espace representant le signe + , pour les
valeurs positives.
Application MikroC 12F1840 :
_12F1840_1xDS18B20_UART_RA4_RA5_HC06_181213.c
L'application Appinventor2
_HC06_Temp_DS18B20_Alarm_12F1840_181212.apk
le BP commande la sortie RA2 du PIC12F1840.
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 :
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)
PIC12F1840 , Reception et décodage
Telecommande IR SONY (2020_05_09)
Audio RM-SCU37
Télecommande
![]() |
télécommande systeme Audio |
Schéma :
![]() |
Hardware :
PIC 12F1840 en DIP8
pin 1 VDD =Alim +5V ATTENTION
!! brochage inhabituel
pin 2 RA5 output2 -- R1K-- Led Blanche -- +5V
pin 3 RA4 output1 -- R1K-- Led Rouge -- +5V
pin 4 RA3/MCLR/VPP ------------------------------------- ICSP
Reset
pin 5 RA2 <---- IR signal TSOP36
pin 6 RA1--- input RX ---- Prolific cable TTL/USB fil Vert <---
Clavier Terminal YAT----ICSP Clock
pin 7 RA0-- output TX --- - Prolific cable TTL/USB fil Blanc--->Ecran
Terminal YAT---ICSPDAT
pin 8 VSS = alim 0V
* le TSOP36 est alimenté via une cellule de filtrage 82 ohms et
100µF sur le 5V
ce TSOP36 n'est pas optimisé pour une telecommande SONY , car il
faudrait un TSOP37 (37Khz)
Au repos, le signal sur RA2 est à l'état Haut , avec R 10K en
pull up
TSOP Pin 1=Gnd Pin 2 = alim Vcc via filtre 82 ohms 100µF Pin 3 :
signal (R pull up de 10K)
Entete Gap à zero =2.412mS
bit=0 => Zero: 508 µS + UN: 718µS
bit=1 => Zero: 588 µS + UN: 1210µS
Analyser Ikalogic SQ50 sur pin Signal RA2
Test de la touche "+"
télécommande
lien sur un document codage telecommande SONY
lien
sur le site de Kudelsko protocol SONY
SOFTWARE :
Projet MikroC : _12F1840_SONY_Telecommande_IR.zip
Source C : _12F1840_Sony_IR_decode_Uart_Hardw_200502.c
Chargeur : 12F1840_Sony_IR_decode_Uart_Hardw.hex
quelques codes relevés:
Touche | Code |
Volume + | 0x0812 |
Volume - | 0x0813 |
Avance | 0x0D32 |
Pause | 0x0D39 |
Arriere | 0x0D33 |
Avance GV | 0x0D31 |
Arriere GV | 0x0D30 |
Clear | 0x0D0F |
USB | 0x081A |
TUNER | 0x080F |
Test avec telecommande SONY TV RMT_TX300E
Rajout origine du
signal de télécommande Audio ou TV.
Presentation :
Mikroc pro 7.60
12F1840 UART1 TSOP IR
Projet :12F1840_Sony_IR_decode_Uart_Hardw_2020_06.mcppi
Source :_12F1840_Sony_IR_decode_Uart_Hardw_2020_06.c
Telecommande :Sony RM-SCU37 ou SONY RMT-TX300E TV
<CR> IT UART RA0=Tx RA1=Rx & IT RA2
Attente action sur télécommande SONY ...<LF><CR>
codage touches
numeriques 0 à 9 TV
Attente action sur télécommande SONY ...<LF><CR>
1 Code : 0089 Device ID = 1 Code Touche = 9 0 from Sony TX300 Cde
2 Code : 0080 Device ID = 1 Code Touche = 0 1 from Sony TX300 Cde
3 Code : 0081 Device ID = 1 Code Touche = 1 2 from Sony TX300 Cde
4 Code : 0082 Device ID = 1 Code Touche = 2 3 from Sony TX300 Cde
5 Code : 0D4F Device ID = 26 Code Touche = 15 TUNER from Sony SCU37
Cde
6 Code : 0083 Device ID = 1 Code Touche = 3 4 from Sony TX300 Cde
7 Code : 0084 Device ID = 1 Code Touche = 4 5 from Sony TX300 Cde
8 Code : 0085 Device ID = 1 Code Touche = 5 6 from Sony TX300 Cde
9 Code : 0086 Device ID = 1 Code Touche = 6 7 from Sony TX300 Cde
10 Code : 0087 Device ID = 1 Code Touche = 7 8 from Sony TX300
Cde
11 Code : 0088 Device ID = 1 Code Touche = 8 9 from Sony TX300
Cde
12 Code : 0089 Device ID = 1 Code Touche = 9 0 from Sony TX300
Cde
Software :
chargeur : 12F1840_Sony_IR_decode_Uart_Hardw_2020_06.hex
Source : _12F1840_Sony_IR_decode_Uart_Hardw_2020_06.c