18/01/2017
rev 28/01/2017

Mesures de Self et Capacitemetre basé sur un 16Fxxx

1ere version avec 16F628 seul (100% ASM)
2em version 16F628 avec en C ...ABORTE
3em version avec LM311 en C avec 16F1847.......

lien vers
CAPACIMETRE

Version 1 .. en asm 16F628
Schema utilisé :


images/LCmetre_16F628_sch.jpg

Nota: *petite erreur de schema : le commutateur choix L ou C était sur RB5 au lieu de RB6


Principe :

Usage des comparateurs Analogiques du 16F628 , montés en oscillateur , accordé via L et C


La resistance de 47K ,reliée à l'entree (-) ,permet de lineariser l'ampli OP et de conserver un niveau de repos en DC.
La R de 100k ,entre sortie AOP et entree (+) , introduit une reaction poistive => oscillation du circuit
Le circuit LC: 100µH et 1000pF est le coeur de l'oscillateur, qui va donner une valeur de frequence F1,
En faisant au plus court :
le maximum de ré-injection se faisant à la valeur maxi de l'impedance Z (mode parallele) du circuit LC
Uentree = USortie * Z / (Z+100k) , on se cale alors sur la valeur de résonnance
En rajoutant le condo de 1000pF (à 1%) on decale la frequence à une valeur de frequence F2

Mesures Réalisées à l'Oscillo Tektronix TDS2002C

F1= 550Khz , amplitude 220mV eff. F2 =385 Khz amplitude 120mV eff.

Usage des straps JP1 à JP4 :
- Les sorties vers le LCD, RB0..RB4 sont commutées momentanément en entrées pour lire l'etat des straps
cet etat est memorisé dans la variable "links"
Etat Links sur "Test F1 JP3 " : Le relais est "OFF" pour mesurer F1

   


Etat Links sur "Test F2 JP4 " : Le relais est "ON" pour mesurer F2

   


Explicage du programme : ( ou ce que j'en ai compris)
voir Datasheet 16F628 DS40300C page 20
Option REG = 0x37
T0CS: TMR0 Clock Source Select bit 1 = Transition on RA4/T0CKI pin
T0SE: TMR0 Source Edge Select bit 1 = Increment on high-to-low transition on RA4/T0CKI pin
PS2:PS0: Prescaler Rate Select bits 111 => 1/256
Le signal provenant de l'oscillateur est mis en forme via le second ampli OP , est ensuite connecté
à l'entree RA4 , Comptage Timer0.
La mesure de frequence ( via le Timer0) est faite dans une fenetre temporelle de 100mS
et utilise le Prescaler 1/256 comme LSB et TMR0 comme MSB (car situé Apres le diviseur par 256)
valeur 16 bits stokée dans la variable F3 ( et F3+1)
Le prescaler recoit alors des impulsion via TOSE ,
qui sont decompté sur F3+1 , initialisé prealablement à 0 .. donc 256..254..253
... etc .. jusqu'à ce que le prescaler atteigne 0 .. et se propage au Tmr0 .
on aura alors recopié le complement du Prescaler ,
donc le nb de pulses entrées dans le prescaler à la fermeture de fenetre 100mS.
Nota : la capacité de comptage (F3 et F3+1) est de 65535 maxi .. on ne tient pas compte du debordement TMR0

images/t_Timer0_config_et_comptage.gif
* modif programme :
- rajout subroutine Tempo 4 sec
- insertion messages de presentation "Titre" et "Version" en EEPROM
.. qui introduisent donc un delai de stabilisation de 2x4=8sec apres la mise sous tension
- rajout Alternative à la Calibration :
pour eviter de repasser par la case RESET = cause d'instabilité
necessitera un Switch ( dédié Calibration) avec 2 contacts !
Test simultané sur JP3 et JP4 actifs pour rentrer dans le mode Calibration
-Rajout message d'invitation à "Remov Cal Switch"
Desactiver le Swtich Calibration pour revenir dans la boucle principale du programme
donc en mode Calibration
On peut conserver éventuellement , à part , un BP dédié au Reset .

RA4 est configurée en Sortie 0 sur TRISA bit4 ?
La, c'est pas bien clair ! il semblerait que le signal de sortie comparateur soit aiguillé vers la sortie RA4
qui est indirectement , une entree de comptage pour le Timer0 , via un circuit "OU"
Ce n'est pas du tout evident à la lecture de la datasheet..

QUAND ON NE LIT PAS TOUT
!
En fouillant de nouveau dans
la Data Sheet PIC16F628 partie I/O. dont RA4

Là , le cheminement de la sortie Comparateur est mieux explicite.
Le choix de config Comparator Mode 110 montre que pour traverser le
ETen sortie comparateur, il faut un 1 permanent de l'autre coté.
Ce 1 est fournit par la sortie bascule Q barre commandée par un Write de 0 (= Output) sur TRISA RA4 .
Le signal carré sortie Comparteur2 se retrouve bien sur RA4 .. qui necessite une R Pull up au +VCC ( ici 4,7k )
Un Write 1 sur TRISA.RA4
=> Q barre=0 bloque le
ET => plus de signal vers Tmr0..
Nota: il manque aussi sur ce schema l'aiguillage du
OU pour la connection de ce signal OU celui de TOSE
à l'entree comptage timer0.


Calculs :
F = 1 / (2*PI*F)
Get_Lscale 1/ (2*PI)^2 * 1E17 => 2533029591058440
Cal_t 10 000 ( 1000pF * 10)
L=100µH C=1000pF F1= 503 292
L=100µH C=2000pF F2= 355 881
Rapport (F1/F2) 1,4142136
Rapport (F1/F2)^2 2,0000000
Rapport (F1/F2)^2 -1 1,0000000
FX avec L=100µH C=1000pF + Cx=1000pF F2= 355 881
Rapport (F1/Fx)^2-1 => 1,000 * Cal_t => 1000,0pF
FX avec L=100µH C=1000pF + Cx=33pF FX 495 188
Rapport (F1/Fx)^2-1 => 0,033 * Cal_t => 33,0pF


SOFTWARE :
MPLAB IDE 8.92 + ASM :
un code tres instructif.
ported to 16F628 by Egbert Jarings PA0EJH.
_
LCMeter_16F628_170119.zip
_
LCMeter_16F628_170119.asm
_
LCMeter_16F628_170119.HEX
_fichier XLS :
LC_Metr16F628_170119.xls




Version 2 .. 16F628 en C

Test avec MikroC .. partie mesure brute OK pour F1 et F2
_16F628_LCmeter_LCD2x16_4bits_BAD.c
mais IMPOSSIBLE d'utiliser du flottant (MikroC) .. prend trop de place
=> abandon de cette version avec 16F628.. Quid du 16F1847 ?




Version 3 . avec 16F1847 et LM311
(comparateur externe au MCU)


Hardware :
schema issu d'une version ATMEGA
portage sur PIC16F1847

images/t_LC_Meter_LM311_Atmega_Schem.gif

Ce PIC a suffisament de ROM program et RAM


Test de l'Oscillateur , basé sur le LM311
1ere etape essentielle ..

En simulation (avec CMS60)

images/t_LC_Meter_LM311_simulation.gif
LC_Meter_test.ckt

En Mode Reel ,

images/t_LCmeter_Test_LM311_oscilateur.gif

Pinout (en guise de schéma)

images/t_16F1847_Pinout_LCmeter.gif

Prototype :

images/t_Proto_LCMETER_16F1847_2017.gif



1ere Breadboard
Alimenté en 5V
Decouplage 100µ//470nF
Le LM311 Oscillateur + self 100µH + capa + relais CCal 1 contact + capa 1nF 1% sont monté sur la breadboard du haut
Lle signal Frequence (sortie du LM311) va sur l'entree RB6 du PIC ..
qui est aussi utilisée par l'ICSP
Il faut donc debrancher cette connection pour utiliser l'ICSP ..
2em Breadboard
Le PIC 16F1847 + quartz + 2x33pF + decouplage (100nF +10µF) + Circuit reset RC
commande les 2 relais,recoit les 2 entrees Calibr et choix LC
Liaison I2C avec l'afficheur 4x20 cars
Liaison UART via cable Porlic 2303 (directe)
Liaison ICSP avec Pickit2
Alim 5V

Attente appro Relais 2 RT ...
Cdé chez Conrad


Fonctionalites :
Affichage sur un LCD 4x20 car piloté en I2C
Affichage sur terminal UART
Au choix: Commandes via BP et switch
ou via terminal UART Clavier :.
Mode Calibration
Mode Test
Mode Capacilmetre
Mode Selfmetre
Cde RESET
....... . ou via BlueTooth <--> Android appli

SOFTWARE :

Ce PIC a des E/S configurable via le registre APFCON
mais toutes les config possibles NE SONT PAS explicitées !
Grosse galere pour arriver à configurer RB2 comme RX UART
( nota: plus aisé si choix RB1 RX et RB2 TX comme UART)
alors que No problemo avec RB5=TX UART emiision OK .. reception BAD
RB2 ecrase le signal RX reçu !
La solution (?) : Configuere le Hardware, configurer l L'UART Hardware, configurer le registre APFCON
et en plus reconfigurer RB2 en entree..
Nota: la config Soft_UART_Init(&PORTB,2,5,9600,0) .. ne configure pas non plus RB2 en RX UART !
FOSC avec Q=8MHz

Le Timer1 16 bits , est bien plus confortable que le Timer0 8bits du 16F628+ Prescaler
Fenetre temporelle de 100mS pour mesurer la frequence (en dizaine de Hz bien sur!)
Le mode TEST :
Commande "Test<CR>
permet de verifier que les frequences de base
F1 (100µH et 1000pF) et F2 (100µH+1000pF+1000pF CCal) sont bien dans les clous à +-5%.
Les valeurs de base (references) sont définies en dur, dans le programme .. on pourrait aussi les mettre en EEPROM .. Hum ! boof!
Nota: Je n'ai que 100µH sous la main au lieu de 82µH ..
Le mode Calibration
Commande "Calibre<CR>"permet de calculer le rapport F1/F2 necessaire aux calculs suivants ...voir tableau de formules
Relais CCal au repos, on mesure la frequence d'oscillation de F1 (LC=100µH//100pF)
Relais CCal activé,permet de rajouter 1000pF en parralele sur le circuit oscillant de base pour obtenir F2
on en deduit F1/F2...
Le mode capacimetre
Commande="Capa<CR>"
Le relais LC est au repos,
utilise la base 100µH + 1000pF auquel on rajoute (mise en parallele sur le 1000pF) la capa Cx à mesurer.
Le mode Selfmetre
commande="Self<cR>
Le relais LC 2 contacts RT est activé pour pouvoir mettre Lx en serie avec L=100µH
Le condensateur C de 1000pF reste en parallele sur l'ensemble L +Lx
En cas de probleme sur le LM311 , si l'oscillateur n'oscille pas, le MCU part en RESET ..
Nota: on peut aussi envoyer une commande "RESET<CR>" via l'UART.

     

A suivre mesures C et L





Resultats sur Terminal..






Projet MIKROC :
source :
_16F1847_LCMeter_BT_170128.c
Chargeur:
16F1847_LCMeter_BT_2017.hex
projet zipé:
_16F1847_LCMeter_BT_170128.zip

à suivre : Circuit imprimé


Retour à l'index general