Mauvaise fréquence PIC
Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

Mauvaise fréquence PIC



  1. #1
    invitec42036d7

    Mauvaise fréquence PIC


    ------

    Bonjour,

    je suis actuellement entrain d'essayer de programmer un PIC. Cependant la fréquence générée n'est pas la bonne. Je m'explique.

    J'utilise un PIC 18F4520 et un quartz 20MHz.

    Le problème est que quand j'inverse une sortie, j'obtiens une fréquence d'environs 1.6MHz et non pas 20MHz comme désiré.

    J'ai vérifié le quartz, il y a bien 20MHz en sortie et j'ai également remplacé les condensateurs de 22pF.
    Le code que j'exécute ne contient que la configuration des ports ainsi que l'inversion de la sortie.

    Le code:

    Code:
    #device HIGH_INTS=TRUE	   //to use save the mininal contexte18.
    #device ICD=TRUE
    #use delay(clock=20000000)
    #fuses NOWDT, HS, NOPUT, NOPROTECT, DEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NOXINST, NOPBADEN
    
    #bit RD0 = PORTD.0
    
    void main(void)
    {	
    	init ();
    
    	while (1)
    	{
    		RD0 =! RD0;
    	}
    }
    
    
    void init(void)
    { 
    	TRISA = 0xFF;
    	TRISB =	0b01111111;
    	TRISC =	0b00000001;
    	TRISD = 0x00;
    	TRISE = 0b111; 
    }
    Si quelqu'un a une solution...

    Merci d'avance

    -----

  2. #2
    zhal

    Re : Mauvaise fréquence PIC

    Peut être commencer par verifier si le quartz oscille correctement

  3. #3
    Aurélien

    Re : Mauvaise fréquence PIC

    Tu codes en C ! Donc tu n'as aucune idée du nombre d'instructions qui séparent les inversions de port (boucle while, etc...). Si tu jettes un oeil au dissassembly, tu comptes les instructions et tu verras ta fréquence.
    De plus, pour piloter une sortie sur les PIC18 et supérieurs, on n'utilise pas le registre PORT mais le registre LAT. Les explication sur les limitations et bugs de type RMW (read-modify-write) sont données dans la datasheet.

    Pour vérifier la fréquence, il vaut mieux passer par un timer, un UART, un SPI, en gros n'importe quel module hard indépendant de ton compilo.

  4. #4
    invitec42036d7

    Re : Mauvaise fréquence PIC

    Merci pour vos réponses mais le problème s'est résolu en recréant un projet.

    Sinon le quartz oscillait bien à 20MHz.

  5. A voir en vidéo sur Futura
  6. #5
    zhal

    Re : Mauvaise fréquence PIC

    c'est parfois le problème avec MPLAB(orieux)

  7. #6
    Biname

    Re : Mauvaise fréquence PIC

    Voir le code assembleur ! Ta boucle comporte plusieurs instructions qui nécessitent 4 ou 8 coups d'horloge pour s'exécuter.


    Code:
    	while (1)
    	{
    		RD0 =! RD0;
    	}
    En assembleur ceci donne ?3? cycles par boucle et 6 cycles par Hz fois 4 coups d'horloge par cycle = 24 coups d'horloge à 20 MHz, tu devrais selon mes calculs mesurer moins de 1 MHz

  8. #7
    Aurélien

    Re : Mauvaise fréquence PIC

    Citation Envoyé par zhal Voir le message
    c'est parfois le problème avec MPLAB(orieux)
    Faut pas se tromper de cible...facile d'accuser un IDE quand la prog n'est pas adaptée...

  9. #8
    zhal

    Re : Mauvaise fréquence PIC

    Même, le fonctionnement de MPlab est douteux parfois.

    Alors peut être que je travaillai sur une ancienne version, (6.xx / 7.xx) et avec un vieux boitier de programmation (ICD2), mais cela ne serait pas la première fois que l'on constate des bugs de ce genre.

    Ex : Utilisation de MPlab avec des fichiers sur le reseau, plutôt risqué

  10. #9
    fdamien12

    Re : Mauvaise fréquence PIC

    Citation Envoyé par flaps Voir le message
    Merci pour vos réponses mais le problème s'est résolu en recréant un projet.

    Sinon le quartz oscillait bien à 20MHz.
    Salut,

    J'ai un peu de mal à comprendre comment le problème a pu être résolu.
    A priori, ton PIC tourne à 20MHz, or sur les PIC18, chaque cycle machine nécessite en général 4 coups d'horloge (c'est peut-être plus pour les goto). On a donc une horloge machine de seulement 5MHz au mieux.
    Même si le programme changeait l'état de la broche à chaque cycle machine, on aurait donc une fréquence en sortie maximale de 2,5MHz.

    Tu observes une fréquence de 1,6MHz car ton programme en C, une fois compilé, est composé de plusieurs instructions en assembleur.

Discussions similaires

  1. Mauvaise temporisation Timer1 Pic
    Par invite99a31ef7 dans le forum Électronique
    Réponses: 3
    Dernier message: 18/10/2012, 23h36
  2. PIC & Fréquence
    Par IHCAAMEL dans le forum Électronique
    Réponses: 23
    Dernier message: 11/05/2011, 16h38
  3. Mesure de fréquence pic 16f628
    Par Ticlem dans le forum Électronique
    Réponses: 18
    Dernier message: 04/03/2011, 19h43
  4. Quartz: mauvaise fréquence
    Par romelec dans le forum Électronique
    Réponses: 9
    Dernier message: 12/12/2004, 10h38
Découvrez nos comparatifs produits sur l'informatique et les technologies.