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
  » relation entre afficheur LCD et oscillateur du PIC24FJ128GA010?
Identifiant Se souvenir de moi ?
Mot de passe
Répondre     Nouvelle discussion
relation entre afficheur LCD et oscillateur du PIC24FJ128GA010?

 

mouride
mouride ☆☆☆☆☆☆ 19/08/2017, 16h39 #1  
Bonjour
je voudrai savoir la relation entre un afficheur lcd et l'oscillateur du pic
En fait si je configure le pic pour qu'il fonction avec le PRIPLL alors l'affichage ne marche pas et si j'utilise l'HORLOGE PAR DEFAUT l'affichage marche très bien.
En attache mon code je cherche de explications
Merci d'avance à tous

int rslt, RE[20];
float RE1[20];
float alpha[20];
float af[2];

void main(void) {
init_lcd();
TRISD=0x0000;
// Initialisation du timer1
T1CON=0x2000;
TMR1 = 0x00;
PR1 = 0xF; // 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


//Initialisation du module CCP
OC1CONbits.OCSIDL = 1; // Arret du modole en mode veille
OC1CONbits.OCTSEL=0 ; // Timer2 choisi pour le mode pwm
OC1CONbits.OCM =0b110; // mode pwm pour le module CCP
OC1R =100;
// Fin Initialisation du module CCP


// Initialisation du Timer2
T2CON=0x2000; // horloge systeme (mode timer)
TMR2=0;
PR2= 0x03FF; //(soit 1023 en decimal) //Fpwm= 15,6kHz
IPC1bits.T2IP = 0x011; // priorit?interruption 3
IFS0bits.T2IF = 0; //Initialiser le drapeau ero
IEC0bits.T2IE = 1; // autoriser les interruptions
T2CONbits.TON = 1; // activer le timer
/* FIN INITIALISATION TIMER2*/


//Initialisation du convertisseur A/D
// AD1CON1
AD1CON1bits.ADON = 0; // module A/D desactive
AD1CON1bits.ADSIDL = 1; // arret du fctmt en mode veille
AD1CON1bits.FORM = 0b00; //resultat en entier
AD1CON1bits.ASAM = 0; //echantillonnage manuel
AD1CON1bits.SSRC = 0b000; //efface le bit SAMP finit l'echant et commence
//la conversion
//AD1CON2
AD1CON2bits.VCFG = 0b000; //vref+=vdd et vref- = vss
AD1CON2bits.BUFM = 0; // Buffer configure en un tampon de 16 mots (ADC1BUF0)
AD1CON2bits.ALTS = 0; // utilise tjrs les parametres du MUXA
AD1CON2bits.SMPI = 0b0000; //Interruption a la fin de chak ECH/Conv
AD1CON2bits.CSCNA = 0; // Ne pas analyser les entrees
//AD1CON3
AD1CON3bits.ADRC = 0; // horloge derive l'horloge du système
AD1CON3bits.SAMC = 0b11111; // 10 TAD
AD1CON3bits.ADCS = 0x07 ; // 3Tcy
// AD1CHS
AD1CHSbits.CH0NA = 0; // l'entree negative du canal 0 est vref-
AD1CHSbits.CH0SA = 0b0111; // L'entree positive du canal 0 est AN7
//AD1CSSL
AD1CSSL = 0; // Aucune entree n'est balayee
/* Fin Initialisation a/D */


AD1CON1bits.ADON = 1; //activer le module A/D
if(AD1CON1bits.DONE==1) // test du bit d'etat de fin de conversion
rslt=ADC1BUF0; // recuperation resultat conversion
OC1RS = ADC1BUF0; // copie du resulat conv ds le registre du rapport cyclique
float alfa= ((float)OC1RS/PR2); // calcul du rapport cyclique
float Um = (alfa*12); // tension moyenne du moteur

/***PARTIE AFFICHAGESURL ECRAN LCD***/
sprintf(RE1,"%.2fV",Um); // conversion de la tension moy en string
lcd_pos(0,0);
lcd_puts(RE1); // affichage de la tension moy
sprintf(RE,"%d",rslt);
lcd_pos(1,0);
lcd_puts(RE);
}
jarek
jarek ★★★★★☆☆ 19/08/2017, 17h17 #2  
La datasheet du PIC ?
Je suppose que l'usine à gaz de sélection de l'oscillateur et des fréquence doit être étudiée avec attention . . .
__________________
Sauf erreur ou omission . . .
mouride
mouride ☆☆☆☆☆☆ 19/08/2017, 19h11 #3  
Posté par jarek

La datasheet du PIC ?
Je suppose que l'usine à gaz de sélection de l'oscillateur et des fréquence doit être étudiée avec attention . . .


Merci de la reponse la datasheet en attache mais j'ai pas du tout compris ce que vous voulez dire par la suite j'attends peut être des éclaircissements
http://ww1.microchip.com/downloads/...eDoc/39747F.pdf
ou http://ww1.microchip.com/downloads/...eDoc/39700c.pdf
jarek
jarek ★★★★★☆☆ 19/08/2017, 20h08 #4  
Je regarde demain . . .
Je ne connais pas C, comment et par quelles pin tu envoies les valeurs au LCD ?
Parce que dans le programme je ne vois que RE1.
__________________
Sauf erreur ou omission . . .
maî
maî ★★★★★☆☆ 20/08/2017, 20h21 #5  
bonsoir

si le reste de ton code tourne en PLL alors:

Lorsque tu es en oscillateur par défaut, tu as donc une fosc de x. En PLL, tu vas la multiplier par 4 donc fosc= x*4
tu as aussi, une jolie init LCD et comme elle sait, ta routine que tu as multiplié par 4 la fosc, car c'est bien joli le langage C, mais dans ta routine de l'init, tu as des tempos a respecter et OUI ce n'est pas un simple
Code:
init_lcd();
et moi je ne vois rien dans ton code pour lui dire la Fosc et par exemple de 40Mhz.car les tempos sont bien sur tributaire de Fosc

allez c'est du style
#DEFINE _XTAL_FREQ .20000000 ;Fosc a 20MHz

ici c'est de ASM

A+
__________________
le souffle du vent passe ...........

Dernière modification par maî 20/08/2017 à 20h33.
jiherve
jiherve ★★★★★☆☆ 21/08/2017, 12h12 #6  
Bonjour,
En effet les afficheurs LCD demandent le respect de leur timing (la lecture de leur datasheet n'est pas inutile) et si ceux ci sont dépendants de la fréquence du µC que ce soit par l'utilisation de boucles soft ou de timer alors il faudra les rendre indépendants c'est tout de même basique!
Donc paramétrer tout le bousin !
JR
RISC
RISC ★★★★★☆☆ 27/08/2017, 23h58 #7  
Mouride,
Utilise une carte particulière ? la carte EXPLORER16 ?
Dans les bits de configuration, si tu choisis PRIPLL cela veut dire que tu utilise un quartz externe multiplié par la PLL interne. Sur la carte EXPLORER16 il y a un quartz externe de 8MHz donc cela fait Fosc = 8MHz x 4 = 32MHz donc Fcyc = Fsoc / 2 = 16 MHz
Si tu utilise l'horloge interne, tu as 8MHz.
Donc le LCD ne peut plus fontionner car cela change tous les timings. Par contre PRI devrait fonctionner mais tu n'auras que 8MHz. La solution c'est de changer les timings du LCD et de les rendre dépendant de l'horloge CPU.
Bien sûr si tu n'as pas de quartz externe, le PIC va se planter...
a+
__________________
Ma marotte : les PICrocontroleurs ;=)
Répondre