ABCelectronique : portail d'information dans le domaine de l'électronique

Merci de ne pas poster des messages en relation avec le piratage.


    Forums de Abcelectronique > Electronique Analogique et Numérique
  » Temporisation en utilisant un timer du pic24fj128ga010
Identifiant Se souvenir de moi ?
Mot de passe
Répondre     Nouvelle discussion
Temporisation en utilisant un timer du pic24fj128ga010

 

mouride
mouride ☆☆☆☆☆☆ 28/08/2017, 22h16 #1  
Bonsoir à tous
je vous reviens pour chercher de l'aide. En fait j'utilise le pic24fj128ga010
pour afficher des valeurs. maintenant je pense avoir un problème avec la fréquence de l'oscillateur. l'oscillateur par défaut marche correctement mais par contre si je configure le PRIPLL aucune valeur ne s'affiche. Avec le PRIPLL
la fréquence du cycle est de 16Mhz trop rapide pour le LCD.
Donc je dois creer des fonctions de temporisation avec un timer pour afficher les valeur en temps reel.
voici mon code s'il y a des erreurs vous me le dites

int comptflag=0;
// Initialisation du timer1

void initimer1(void){

T1CON=0x2000;
TMR1 = 0x00;
PR1 = 0x0F; // duree d'acquisition 15 (80 nS)
IPC0bits.T1IP = 0x101; // priorité interruption 5
IFS0bits.T1IF = 0; //Initialiser le drapeau ero
IEC0bits.T1IE = 1; // autoriser les interruptions
T1CONbits.TON = 1; //Activer le timer1
//fin Initialisation du timer1
}
//la routine d'interruption

void __attribute__((__interrupt__, __shadow__)) _T1Interrupt(void)
{
AD1CON1bits.SAMP = 1; //debut echantillonnage
if(IFS0bits.T1IF ==1) // lecture du bit
{
AD1CON1bits.SAMP = 0; // fin echantillonnage debut conversion
comptflag++;
}
comptflag=0;
IFS0bits.T1IF = 0;
}

la fonction de temporisation c'est à moi de donner compt pour obtenir la durée voulue.

void delay_Xns(unsigned char compt)
{

if(comptflag==compt)
{
lcd_write(0x30);
}
}

merci d'avance je suis très impatient
maî
maî ★★★★★☆☆ 04/09/2017, 09h14 #2  
Bonjour

Si c'est toujours pour ton LCD ?? dur de te suivre avec tous ces posts que tu ouvres.

Si c'est le cas, tu as amha 2 possibilités:

1- La plus facile c'est de diminuer Fsytem de la valeur de la multiplication du PLL avec le registre OSCON bit 9:7 Postscaler lorsque tu appelles TOUTES fonctions du LCD puis de repasser a zero le Postscaler pour la suite
exemple: PLL->X4 programme: Postscaler -> :4 appel fonction LCD puis retour Postscaler=0.
Petit probleme c'est que tu n'as pas pour Postscaler =8 avec le PLL->8 .Donc cela n'est bon que pour PLL 4 et 16

2- La très formatrice amha, c'est :
a/ Faire des tempos, avec comme ref Fosc, et comme toutes tempos avec des macros en ASM pas d'utilisation d'un Timer, car ce n'est pas, passe partout (marche plus si tu as besoin du Timer) à faire quelques choses :-).
Avec les 16 bits, c'est tres simple puisque tu as des instructions boucle -> DO et répèter REPEAT et de ce fait, elles sont très précises: (REPEAT à 1 instruction prés .DO à 1 instruction x D0 prés)
b/ refaire les fonctions du LCD

je pense que tu vas essayer la 1 :-)

A+

PS cela peut fonctionner si le fait d’exécuter tes fonctions LCD ne viennent pas contrarier tes mesures, mais a toi de voir
__________________
le souffle du vent passe ...........
maî
maî ★★★★★☆☆ 04/09/2017, 15h50 #3  
oups c'est les bits 6:7 de OSCON
__________________
le souffle du vent passe ...........
Répondre