Bienvenue aux nouveaux arrivants sur FantasPic !
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
Modérateur : Jérémy
Usage du compteur 24bits SMT1 sur 18F27K42
- paulfjujo
Expert- Messages : 2589
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonsoir,
je me lance dans l'etude des fonctions spécifiques de ce MCU 18F27K42
un lien utile
l' avantage d'un compteur Hardware 24 bits , est la grande dynamique de mesure.
Le 1er test, le plus simple est l'usage en timer
le compteur peut recevoir FOSC ou FOSC/4 en entrée
un bit Marche / Arret .. et ça suffit pour faire des chronometrages au cycle pret
tests avec FOSC Interne de 16MHzx PLL ..soit 64MHz
j'utilise un pointeur byte pour ranger la mesure 24 bits ( en 3 registres 8 bits) dans un entier long non signé de 32 bits.
Timer0 est initialisé pour definir une duree de 1 sec ..
traitement via interruption TMR0IF et TMR0IE, pour armer un flag
Avec FOSC=64MHz , la resolution de comptage est de 62,5nSec !
programme de test :
init module SMT1
1 cycle= 4/64= 0.0625 µS
(SMT1CLK:CSELx= 001 ou 010 )
Mesure= 16 000 264 AVEC AVEC FOSC ou HINTOSC=64MHz
en decalant le MARCHE/ARRET compteur , au plus pres du delay de 1sec
Mesure = 16 000 108 AVEC FOSC ou HINTOSC=64MHz
on remarque qu'il n'y a pas 16 000 000 pile poil,
car il faut y rajouter les cycles necessaires au traitement de l'interruption
et la restitution du contexte .
en rajoutant 2 NOP en asm
Mesure = 16 000 116 AVEC FOSC ou HINTOSC=64MHz
la difference de 2 NOP = 2 cycles .... 116-108=8 8/4=>2 cycles
résolution 4 points par cycle.
Avec seulement les 2 NOP
Mesure = 12 AVEC FOSC ou HINTOSC=64MHz
la difference de 2 NOP = 2 cycles .... 12/4=>3 cycles
*résolution 4 points par cycle.
un bon outil facile à utiliser
A suivre ..les autres modes d'utilisation sur SMT
periodmetre
frequencemetre
...
je me lance dans l'etude des fonctions spécifiques de ce MCU 18F27K42
un lien utile
l' avantage d'un compteur Hardware 24 bits , est la grande dynamique de mesure.
Le 1er test, le plus simple est l'usage en timer
le compteur peut recevoir FOSC ou FOSC/4 en entrée
un bit Marche / Arret .. et ça suffit pour faire des chronometrages au cycle pret
tests avec FOSC Interne de 16MHzx PLL ..soit 64MHz
j'utilise un pointeur byte pour ranger la mesure 24 bits ( en 3 registres 8 bits) dans un entier long non signé de 32 bits.
Code : Tout sélectionner
unsigned long SMT1_Measure;
unsigned char *ST; // pointeur sur unsigned char (ou Byte)
ST=&SMT1_Measure; // pointeur Byte sur debut entier long 32 bits
SMT1_Measure=0; // la valeur resultat de mesure
Timer0 est initialisé pour definir une duree de 1 sec ..
traitement via interruption TMR0IF et TMR0IE, pour armer un flag
Avec FOSC=64MHz , la resolution de comptage est de 62,5nSec !
programme de test :
init module SMT1
Code : Tout sélectionner
//USAGE du compteur SMT1 18F27K42
// registre SMT1CON0
SMT1CON0.WPOL=0; // Window Polarity
SMT1CON0.SPOL=0; // Signal Polarity
SMT1CON0.CPOL=0; // Clock Polarity
SMT1CON0.SMT1PS1=0; // PS<1:0>: SMT Prescale Select bits = 1/1
SMT1CON0.SMT1PS0=0; // 11=1/8 10=1/4 01=1/2 00=1/1
SMT1CON0.SMT1EN =1; // SMT enabled
SMT1CON0.SMT1STP=0; // 0 =reset 1=STOP;
SMT1CON1.SMT1GO=0; // 1= suit l'entrée 0=stop suivi
SMT1CON1.SMT1REPEAT=0; // 0= Single Acquisition 1=repeat mode
// REGISTER 25-4: SMT1CLK: SMT CLOCK SELECTION REGISTER 16MHz
// 000=FOSC/4 001=FOSC 010=HINTOSC 16MHz
SMT1CLK.CSEL2= 0;
SMT1CLK.CSEL1= 1;
SMT1CLK.CSEL0= 0;
// 25.7.1 PW (Pulse Width) AND PR (Periode Read) ACQUISITIONI NTERRUPTS
PIR1.SMT1PRAIF=0;
PIE1.SMT1PRAIE=0;
// 25.7.2 PERIOD MATCHI NTERRUPT
PIR1.SMT1IF=0;
PIE1.SMT1IE=0;
// MODE de fonctionnement TIMER
// modes page 396 Windowed measure
// 0000=Timer 0100=windowed measure 1000=counter
SMT1CON1.B3=0;
SMT1CON1.B2=0;
SMT1CON1.B1=0;
SMT1CON1.B0=0;
1 cycle= 4/64= 0.0625 µS
(SMT1CLK:CSELx= 001 ou 010 )
Mesure= 16 000 264 AVEC AVEC FOSC ou HINTOSC=64MHz
Code : Tout sélectionner
SMT1CON1.SMT1GO=1;
Init_Timer0();
LED_Rouge=ON;
LED_Verte= SMT1STAT.B0 ;
while( Drapeaux.Tmr0_Elapsed==0); // delay
SMT1CON1.SMT1GO=0;
LED_Verte= SMT1STAT.B0 ; //
LED_Rouge=OFF;
// impression du resultat sur Terminal YAT
*(ST)= SMT1TMRL;
*(ST+1)= SMT1TMRH;
*(ST+2)= SMT1TMRU;
*(ST+3)=0 ;
LongWordToStr(SMT1_Measure,CRam1);
Print(CRam1); CRLF1();
en decalant le MARCHE/ARRET compteur , au plus pres du delay de 1sec
Mesure = 16 000 108 AVEC FOSC ou HINTOSC=64MHz
Code : Tout sélectionner
Init_Timer0();
LED_Rouge=ON;
LED_Verte= SMT1STAT.B0 ;
SMT1CON1.SMT1GO=1;
while( Drapeaux.Tmr0_Elapsed==0); // delay 1sec
SMT1CON1.SMT1GO=0;
on remarque qu'il n'y a pas 16 000 000 pile poil,
car il faut y rajouter les cycles necessaires au traitement de l'interruption
et la restitution du contexte .
en rajoutant 2 NOP en asm
Mesure = 16 000 116 AVEC FOSC ou HINTOSC=64MHz
la difference de 2 NOP = 2 cycles .... 116-108=8 8/4=>2 cycles
résolution 4 points par cycle.
Code : Tout sélectionner
Init_Timer0();
LED_Rouge=ON;
LED_Verte= SMT1STAT.B0 ;
SMT1CON1.SMT1GO=1;
while( Drapeaux.Tmr0_Elapsed==0); // delay 1sec
_asm nop;
-asm nop;
SMT1CON1.SMT1GO=0;
Avec seulement les 2 NOP
Mesure = 12 AVEC FOSC ou HINTOSC=64MHz
la difference de 2 NOP = 2 cycles .... 12/4=>3 cycles
*résolution 4 points par cycle.
Code : Tout sélectionner
SMT1CON1.SMT1GO=1;
_asm nop; // <--1
-asm nop; // <--2
SMT1CON1.SMT1GO=0; // <--3
un bon outil facile à utiliser
A suivre ..les autres modes d'utilisation sur SMT
periodmetre
frequencemetre
...
Usage du compteur 24bits SMT1 sur 18F27K42
Usage du compteur 24bits SMT1 sur 18F27K42
Bonsoir paulfjujo, Jérémy, et tout le forum,
et pour ce post, mais il faudra que s'attende, car j'ai pas de quoi programmer ce pic là et vu le prix du Pickit4 je vais attendre que le prix chute.
Par contre ce Pic est très intéressante au niveau Sdram et mémoire programme, et même Eeprom, je vais surement en faire mon pic préféré par la suite.
A+
et pour ce post, mais il faudra que s'attende, car j'ai pas de quoi programmer ce pic là et vu le prix du Pickit4 je vais attendre que le prix chute.
Par contre ce Pic est très intéressante au niveau Sdram et mémoire programme, et même Eeprom, je vais surement en faire mon pic préféré par la suite.
A+
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 48 invités