Répondre à la discussion
Affichage des résultats 1 à 12 sur 12

PIC32 et fréquence de sortie



  1. #1
    antoine6

    PIC32 et fréquence de sortie


    ------

    Bonjour/bonsoir,

    Ayant quelques problèmes pour faire marcher mon code one-wire, j'ai voulu voir le temps nécessaire pour changer les état des sorties.

    Un code tout bete:

    Code:
    #include <p32xxxx.h>
    #include <plib.h>
    #include <stdint.h>
    
    #pragma config ICESEL   = ICS_PGx2		// ICE/ICD Comm Channel Select
    #pragma config BWP      = OFF			// Boot Flash Write Protect
    #pragma config CP       = OFF			// Code Protect
    #pragma config FNOSC    = PRIPLL		// Oscillator Selection
    #pragma config FSOSCEN  = OFF			// Secondary Oscillator Enable
    #pragma config IESO     = OFF			// Internal/External Switch-over
    #pragma config POSCMOD  = HS			// Primary Oscillator
    #pragma config OSCIOFNC = OFF			// CLKO Enable
    #pragma config FPBDIV   = DIV_2			// Peripheral Clock divisor
    #pragma config FCKSM    = CSDCMD		// Clock Switching & Fail Safe Clock Monitor
    #pragma config WDTPS    = PS1			// Watchdog Timer Postscale
    #pragma config FWDTEN   = OFF			// Watchdog Timer 
    #pragma config FPLLIDIV = DIV_2			// PLL Input Divider
    #pragma config FPLLMUL  = MUL_20		// PLL Multiplier
    #pragma config UPLLIDIV = DIV_2			// USB PLL Input Divider
    #pragma config UPLLEN   = OFF			// USB PLL Enabled
    #pragma config FPLLODIV = DIV_1			// PLL Output Divider
    #pragma config PWP      = OFF			// Program Flash Write Protect
    #pragma config DEBUG    = OFF			// Debugger Enable/Disable
        
    
    
    int main( void )
    {	
      mPORTBSetPinsDigitalOut( BIT_3 );
    
      while(1)
      {	 
    	PORTToggleBits(IOPORT_B, BIT_3);
      }
    }
    Avec cette configuration, le PIC doit tourner à 80MHz (8MHz en entrée, division par 2 et PLLx20).

    Or en sortie j'ai un beau signal carré à ... 312kHz

    J'ai donc remplacé le ToggleBit par une mise à une mise au nivau bas puis au niveau haut:

    Code:
      while(1)
      {	 
    	mPORTBClearBits(BIT_3);
    	mPORTBSetBits(BIT_3);
      }
    (les déclarations ne changent pas)

    La j'ai un temps haut de 490ns, et un temps bas de 310ns (différence de temps due au rebouclage), soit une periode de 1.250MHz, encore une fois c'est loin des 80MHz d'horloge...

    (Les modules de sorties fonctionnent sur la fréquence du cœur, divisée par 2, soit 40MHz)

    J'ai vu un post de RISC ici qui dit d'utiliser uniquement les librairies de C32, c'est ce que je fait, et pourtant, ca foire :s

    Ma carte de dev a un programmateur/debugger intégré, est ce qu'il peut ralentir le PIC32?

    J'ai fait des routines de tempos avec le timer, les délais sont parfaitement exacts, le PIC tournerai donc bien à 80MHz, mais pourtant les instructions prendraient beaucoup plus de temps...

    Des idées?

    Merci d'avance

    -----

  2. Publicité
  3. #2
    RISC

    Re : PIC32 et fréquence de sortie

    Salut,

    Utilises-tu un starterkit PIC32 ? Si oui lequel ?
    Une nouvelle release de CD-ROM a été publiée pour les starterkit PIC32. J'avais des PB avec mon kit PIC32 Ethernet au début.

    J'ai l'impression que tu n'as pas lu du tout le tutoriel PIC32....
    Ton problème actuel est que tu as un moteur de Ferrari...et tu n'as passé que la première
    cherches tu coté de SystemConfigPerformance et autres fonctions....
    Si tu veux gagner des semaines de recherches, fais-toi plaisir et investit dans cette bible sur le PIC32

    L'auteur de ce bouquin a posté quelques un de ses projets (voir à la fin de cette page) sur le site de Mikroelektronika. Ca m'a motivé pour investir dans leur carte Multimédia (dispo aussi chez Lextronic).

    Le forum PIC32 vient d'ailleurs de s'enrichir d'un décodeur logiciel MP3 open source pour PIC32 mis en ligne par un membre du forum.

    a+

  4. #3
    kronanberg

    Re : PIC32 et fréquence de sortie

    Salut !!!

    En regardant un peu le code je vois que tu initialise :

    #pragma config POSCMOD = HS // Primary Oscillator

    Alors que pour utiliser la PLL, il faudrait pas plutot mettre quelque chose comme :


    #pragma config POSCMOD = HSPLL

  5. #4
    antoine6

    Re : PIC32 et fréquence de sortie

    Merci pour ces réponses

    J'ai lu un paquet de littérature, mais faut croire que c'est pas la bonne...

    Sur tous les codes exemples, le quartz est défini en HS pour du 8MHz + PLLx20

    J'utilise une carte 32MX4 de chez digilent (voir ici) (PIC32 starter kit dans MPLAB)

    Pour celle de mikroE, je l'avais déja vu, ca fait un moment que je réfléchi si je dois investir dedans ou pas...

    Je vais regarder les liens de RISC, et surtout l'histoire du configperformance

  6. #5
    RISC

    Re : PIC32 et fréquence de sortie

    Salut,

    Pas mal ta carte. C'est pour faire un robot ?
    Une bonne source d'inspiration pour démarrer avec les PIC32 sont les exemples de code.

    Sur les PIC32 tu peux faire du toggle à 40MHz tant que tu ne rencontres pas un jump ce qui est inévitable un jour ou l'autre
    Cela dit le signal en sortie sera tout ....sauf carré.

    Une autre source sont les tutoriels en ligne sur Youtube en langue arizoniene (si t'es pas allergique aux cactus). Tu peux toujours télécharger la version Sheakspearienne et lisible si tu as un doute

    a+

  7. A voir en vidéo sur Futura
  8. #6
    antoine6

    Re : PIC32 et fréquence de sortie

    C'est surtout qu'au niveau prix et pratique c'était la meilleure que j'ai trouvé (achetée sur ebay avec les frais de port moins chers et les mêmes garanties), mais à terme elle finira surement sur un petit robot. En plus, les connecteurs sur le coté sont très pratiques pour rajouter des petits modules. On peut les acheter sur leur site (15$ pour un max3232 déja cablé...), ou bien le faire soit meme (prix divisé par 10)

    Un seul reproche : aucune sécurité sur la partie alim, il suffit de rentrer en 10V, ou inverser l'alim et la carte fume, je me suis rajouté un pont de diode + 7805 pour éviter les ennuis

    Je viens de voir les deux nouvelles vidéos sur le site de mikroE, à chaque fois que je passe il fait un truc de plus en plus énorme...

    Je verrai les tutos, avec les sous-titres à coté =)
    Dernière modification par antoine6 ; 19/04/2010 à 22h19.

  9. Publicité
  10. #7
    ftorama

    Re : PIC32 et fréquence de sortie

    Pour 30$ de plus, tu aurais ça: http://www.friendlyarm.net/products/mini2440
    Quand un homme a faim, mieux vaut lui aprendre à pecher que de lui donner un poisson.

  11. #8
    RISC

    Re : PIC32 et fréquence de sortie

    Salut,
    Citation Envoyé par antoine6 Voir le message
    Un seul reproche : aucune sécurité sur la partie alim, il suffit de rentrer en 10V, ou inverser l'alim et la carte fume, je me suis rajouté un pont de diode + 7805 pour éviter les ennuis
    Très sage précaution . une mauvaise expérience passée ??

    Je viens de voir les deux nouvelles vidéos sur le site de mikroE, à chaque fois que je passe il fait un truc de plus en plus énorme...
    J'attends avec impatience qu'il poste le code source qui effectue le décodage video + audio (MP3) simultanés

  12. #9
    ftorama

    Re : PIC32 et fréquence de sortie

    Citation Envoyé par RISC Voir le message
    J'attends avec impatience qu'il poste le code source qui effectue le décodage video + audio (MP3) simultanés
    Tu peux patienter avec ça déja:
    http://www.underbit.com/products/mad/
    Quand un homme a faim, mieux vaut lui aprendre à pecher que de lui donner un poisson.

  13. #10
    antoine6

    Re : PIC32 et fréquence de sortie

    Citation Envoyé par RISC Voir le message
    Très sage précaution . une mauvaise expérience passée ??
    A part un PIC18 en DIP40 connecté à l'envers à mes début non, mais vaut mieux anticiper.

    J'ai cherché le SystemConfigPerformance dans les AN et les Getting started, introuvable. J'ai eu plus de chance sur le forum, j'approfondirai ca aujourd'hui.

    Pour les cartes ARM, j'ai commencé avec une carte Armadeus, c'était assez... laborieux.

    La je travaille aussi sur une carte linux, toujours avec un ARM9 (de chez atmel), ca tourne sans aucuns problemes

  14. #11
    antoine6

    Fréquence multipliée par 10, du progrès

    Rapport après de nombreux essais:

    J'ai rajouté dans le début du main une de ces deux lignes :
    Code:
    SYSTEMConfig(80000000L, SYS_CFG_WAIT_STATES | SYS_CFG_PCACHE);	
    ou
    SYSTEMConfigPerformance(80000000L);
    Elles ont le même effet, à savoir multiplier la fréquence de sortie par 8

    Et j'ai utilisé alternativement deux commandes différentes, sensées faire la même chose (inverser la sortie)

    Code:
    PORTToggleBits(IOPORT_D, BIT_0);
    
    code ASM:
    9D0005EC  24040003   addiu       a0,zero,3
    9D0005F0  24050001   addiu       a1,zero,1
    9D0005F4  0F4002DB   jal         0x9d000b6c
    9D0005F8  00000000   nop
    => 2MHz en sortie

    Code:
     mPORTDToggleBits(BIT_0);
    
    code ASM:
    9D0004C4  3C03BF88   lui         v1,0xbf88
    9D0004C8  24020001   addiu       v0,zero,1
    9D0004CC  AC6260EC   sw          v0,24812(v1)
    => 8 MHz en sortie

    Dans les deux cas, les signaux sont dégueulasses, (temps de montés/descente = 80% du niveau haut/bas), mais le but recherché est plus de faire des essais qu'un générateur de signaux carrés

    Ce que je comprends pas, c'est que les deux fonctions font la même chose, en 3 instructions (ou 3 + un nop), mais l'une est 4 fois plus lente que l'autre... (la première fonction, la plus lente est celle données dans la librairie). Pourquoi cette différence?

    J'ai donc réussi à augmenter ma vitesse, mais je tourne toujours pas au maximum.

    Sur le forum de microchip, on propose de modifier les options de compilation, de la passer en "s". Avec ca je passe de 8 à 13MHz en sortie (mais l'optimisation n'est peut être pas maximale vu que ma version d'essai est expirée ("warning: Compiler option ignored due to an expired evaluation period
    ") )

    le code devient ASM du toogle bit devient:

    Code:
    sw          v0,24812(v1)
    Cette optimisation permet apparemment de diminuer la taille du code, et sa vitesse d'exécution. Le truc que j'arrive pas à saisir, c'est pourquoi MPLAB laisse par défaut une configuration telle que le code sera plus le lourd et plus le lent possible?

    Dernière question : j'ai trouvé toutes ces infos sur le forum, mais sur aucunes note d'apply. Seul un projet donné dans les exemples de PIC32 en parle brièvement, tu saurai si il y a une note précise sur ce sujet?

    Merci, bonne soirée =)

  15. #12
    ftorama

    Re : Fréquence multipliée par 10, du progrès

    telle la courbe, je me gausse
    Quand un homme a faim, mieux vaut lui aprendre à pecher que de lui donner un poisson.

  16. Publicité

Sur le même thème :

Discussions similaires

  1. Fréquence de sortie d'un RC4151 ?
    Par AmigaOS dans le forum Électronique
    Réponses: 1
    Dernier message: 13/03/2010, 19h53
  2. Bootloader en C sur pic32
    Par aéxel dans le forum Électronique
    Réponses: 17
    Dernier message: 15/03/2009, 17h12
  3. atteindre25hz la frequence d un PWM sortie pin17 18f458
    Par SpiritSpirit dans le forum Électronique
    Réponses: 3
    Dernier message: 11/02/2009, 20h36
  4. PIC32 et EXPLORER 16
    Par danidof dans le forum Électronique
    Réponses: 4
    Dernier message: 24/12/2008, 21h42
  5. Réponses: 0
    Dernier message: 05/07/2008, 20h59
Découvrez nos comparatifs produits sur l'informatique et les technologies.