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

Information RPn pic18F46J50 + PWM



  1. #1
    Hizaack

    Information RPn pic18F46J50 + PWM


    ------

    Bonjour à tous,

    Je souhaite utiliser deux PWM indépendant sur un pic 18F46J50 en C18 avec MPLAB.
    Cependant, j'ai remarqué que certaines entrées étaient multiplexées. Ce sont les I/O RPn.
    J'ai bien essayer de configurer mon PWM channel A sur RB0 (comme préciser page 150 de la datasheet : http://ww1.microchip.com/downloads/e...doc/39931b.pdf ), mais j'obtiens un +5V continue.

    Voila ce que j'ai fais (entre autres):

    Code:
    	ANCON0 = 0xFF;                  // Default all pins to digital
       	ANCON1 = 0xFF;                  // Default all pins to digital
    
            //Configuraton RPn PWM
    	RPOR3 = 14; //RB0
    	RPOR4 = 15; //RB1
    
    	//PWM*******************************************
    	OpenPWM1(0x00);
    	SetOutputPWM1 (SINGLE_OUT, PWM_MODE_1);
    	SetDCPWM1( 0b0000000011111111);
    J'aimerais savoir si j'ai loupé quelque chose pour la configuration des broches. Par contre la fréquence et le rapport cyclique du PWM sont mis au hazard (je sais il faut calculer mais je voudrais m'assurer avant que ma sortie RPN fonctionne).

    Merci de votre aide

    -----

  2. Publicité
  3. #2
    RISC

    Re : Information RPn pic18F46J50 + PWM

    Salut,

    Ton problème est que le PIC18F46J50 possède le "PPS" (affectation des broches aux périphériques).
    Il faut exécuter une séquence de "unlock" avant de configurer les registres RPINR et RPOR puis une séquence de "lock".

    Voir la section 10.7 de la datasheet.
    Il existe aussi peut être un exemple de code pour cela ici : http://www.microchip.com/codeexamples

    a+
    Ma marotte ? les microcontrôleurs ;=)

  4. #3
    Hizaack

    Re : Information RPn pic18F46J50 + PWM

    Bonjour RISC,

    Merci pour cette réponse, je me fais toujours avoir par les bits de verrouillage, je ne suis pas encore habitué.

    J'arrive donc à récupérer une fréquence sur RB0 avec mon PWM1.
    Je souhaite générer un deuxième PWM(2) sur RB1, de manière indépendante.

    Cependant le compilateur C18 + MPLAB v8.04 ne reconnais pas la fonction SetOutputPWM2 (SINGLE_OUT, PWM_MODE_1); et j'ai l'erreur suivante :
    Code:
          Error - could not find definition of symbol 'SetOutputPWM2' in file 'temp\main.o'.
    alors que la fonction est bien définie dans le pwm.h inclus et fonctionne pour le PWM1.

    Voilà mon code :
    Code:
    PPSCON = 0; // I/O lock is not active, pin configurations can be changed
    
    	//Configuraton RPn PWM
    	RPOR3 = 14; //RB0 <-- PWM 1
    	RPOR4 = 15; //RB1 <-- PWM 2
    	
    	PPSCON = 1; // I/O lock is active, RPORx and RPINRx registers are write-protected
    
    	//PWM*******************************************	
    	SetOutputPWM1 (SINGLE_OUT, PWM_MODE_1); //Output config, output mode
    	OpenPWM1(0x00); //Period 
    	SetDCPWM1( 0b0000000011111111); //DutyCycle 
    
    	SetOutputPWM2 (SINGLE_OUT, PWM_MODE_1); //Output config, output mode
    	OpenPWM2(0x00); //Period 
    	SetDCPWM2( 0b0000000011111111); //DutyCycle
    Comment puis-je résoudre cette erreur?
    J'ai dû faire une petite bêtise quelque part non?

    Merci de votre aide.

  5. #4
    RISC

    Re : Information RPn pic18F46J50 + PWM

    Salut,

    Tu utilises une TRES VIEILLE version de MPLAB !
    Télécharges la dernière version (v8.70) ici : http://www.microchip.com/MPLAB

    Quelle version du compilateur C18 utilises-tu ?
    La dernière version gratuite (version Lite : v3.38) est téléchargeable ici : http://www.microchip.com/stellent/id...cName=en010014

    Concernant les librairies, as-tu fait attention de prendre la librairie PWM correspondant à ton PIC (il en existe je crois 10 différentes pour les PIC18...)

    a+
    Ma marotte ? les microcontrôleurs ;=)

  6. #5
    Hizaack

    Re : Information RPn pic18F46J50 + PWM

    Désolé, je ne sais pas ce qu'il m'as prit, mais j'utilise MPlab v8.63.
    Pour le C18, la version : 3.37
    En détails: MPASMWIN.exe v5.40, mplink.exe v4.38, mcc18.exe v3.37.01, mplib.exe v4.38

    Je vais mettre tout ca à jour, mais je dois utiliser la version Standard Eval de C18, sinon mon code ne tient pas dans le 18F46J50 car j'utilise FS + SPI.

    J'ai bien ajouter la librairie <pwm.h> recommandé par la doc C18 librairies, comme tu peux le voir page 48 : http://ww1.microchip.com/downloads/e...ies_51297f.pdf

    En fouillant un peu dans le pconfig.h de pwm.h, il y a peu de définition pour le 18F46J50.

    Je vais deja installer les dernières versions.

    Merci du conseil.

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

    Re : Information RPn pic18F46J50 + PWM

    Re-bonsoir,

    J'ai donc maintenant tout à jour.

    Mais le problème persiste et c'est très gênant.
    Mon PWM1 sur RB0 fonctionne (presque, je n'arrive pas à faire changer la fréquence! mais pas d'oscilloscope pour visualiser le rapport cyclique, que un fréquencemetre/multimetre, mais c'est un autre probleme), mais mon PWM2 sur RB1 ne fonctionne pas.

    Pour rappel, mon erreur :
    Code:
    MPLINK 4.39, Linker
    Device Database Version 1.1
    Copyright (c) 1998-2011 Microchip Technology Inc.
    Error - could not find definition of symbol 'SetOutputPWM2' in file 'temp\main.o'.
    Errors    : 1
    Et le morceau de code en question concernant le PWM :
    Code:
    #include <pwm.h>
    [...]
    void main(void)
    {
    [...]
    PPSCON = 0; // I/O lock is not active, pin configurations can be changed
    
    	//Configuraton RPn PWM
    	RPOR3 = 14; //RB0 <-- PWM 1
    	RPOR4 = 15; //RB1 <-- PWM 2
    	
    	PPSCON = 1; // I/O lock is active, RPORx and RPINRx registers are write-protected
    
    	//PWM*******************************************	
    	SetOutputPWM1 (SINGLE_OUT, PWM_MODE_1); //Output config, output mode
    	OpenPWM1(128); //Period 
    	SetDCPWM1(511); //DutyCycle 
    
    	SetOutputPWM2 (SINGLE_OUT, PWM_MODE_1); //Output config, output mode
    	OpenPWM2(0x00); //Period 
    	SetDCPWM2( 0b0000000011111111); //DutyCycle 
    
    	while(1)
    	{}
    
    }

    Est ce qu'il pourrait s'agir d'un conflit de RPn?
    Ou c'est que clairement le compilateur ne trouve pas la fonction SetOutputPWM2 () dans pwm.h?

    Merci de l'aide apportée.

  9. Publicité
  10. #7
    RISC

    Re : Information RPn pic18F46J50 + PWM

    Salut,

    L'erreur se trouve au niveau du linker.

    Peux-tu vérifier que tu as bien sélectionné "Assemble / Link in project directory" dans l'onglet "directories" des "Build Options" ?

    Il y a donc probablement un problème de résolution de symboles.

    Essaye d'ajouter manuellement le chemin pour les fichier xxxx.h des librairies :
    Dans la fenêtre "build options", onglet "Directories", menu déroulant "include search paths", ajoute le chemin :
    c:\Program Files\Microchip\mplabc18\v3.37 .01\h\

    Il existe des exemples de code pour les PIC18 ici : http://www.microchip.com/codeexamples

    a+
    Ma marotte ? les microcontrôleurs ;=)

  11. #8
    Hizaack

    Re : Information RPn pic18F46J50 + PWM

    Bonjour,

    Oui, j'ai bien selectionné "Assemble / Link in project directory", et j'ai aussi rajouté, depuis le début, la localisation des headers du mcc18, comme vous pouvez le voir dans l'image jointe.

    J'ai trouver une example de code de PWM pour pic18, mais il s'avere etre en assembleur donc je ne peux pas vraiment comparer.
    De mon coté je cherche toujours des exemple de pwm avec un 18F4550 ou 18F46J50 mais c'est rare.

    Est ce que vous auriez plus d'informations au niveau de cette erreur?
    Il trouve bien "SetOutputPWM1()", mais pourquoi pas "SetOutputPWM2()"...?

    En regardant le fichier pwm.h, j'ai trouver les fonctions que je souhaitent utilisées :
    Code:
    void OpenPWM1 ( char period);
    void SetDCPWM1 ( unsigned int duty_cycle);
    #if  defined (PWM_V4) || defined (PWM_V5) || defined (PWM_V6) ||\
         defined (EPWM_V7) || defined (PWM_V8) || defined (PWM_V10) || \
    	 defined (PWM_V11) || defined (PWM_V12)|| defined (PWM_V13)
    
    void SetOutputPWM1 ( unsigned char output_config, 
                         unsigned char pwm_mode);
    #endif
    void ClosePWM1 (void);
    
    
    
    #if defined (PWM_V2) || defined (PWM_V3) || defined (PWM_V4) || \
        defined (PWM_V5) || defined (PWM_V6) || defined (PWM_V9) ||\
        defined (PWM_V10) || defined (PWM_V11) || defined (PWM_V13)	
    
    void OpenPWM2 ( char period);
    void SetDCPWM2( unsigned int duty_cycle);
    
    #if  defined (PWM_V4)
    void SetOutputPWM2 ( unsigned char output_config, 
                         unsigned char pwm_mode);
    #endif
    void ClosePWM2 (void);
    
    #endif
    On remarque que la fonction SetOutputPWM2 () n'est "active" que si PWM_V4 est définie.
    Serait-ce une piste? Est ce que je dois définir PWM_4 quelque part?

    Merci du temps consacré.
    Images attachées Images attachées

  12. #9
    RISC

    Re : Information RPn pic18F46J50 + PWM

    Salut,

    Si tu regardes ton fichier pwm.h tu verras que le fichier header pconfig.h est lui même inclus au début. C'est lui qui valide les définitions pour chaque PIC18.

    Tu verras que la librairies PWM correspondant au PIC18F46J50 est la PWM_V13 (voir ligne 12690 ...)

    Tout semble donc correct au niveau des headers.

    Mais...aurais-tu par hasard oublié d'inclure le fichier library dans ton projet ????
    Lis le document :
    c:\Program Files\Microchip\mplabc18\v3.37 \doc\PIC18F Peripheral Library Help Document.chm

    Dans la section Getting started il est bien précisé qu'il faut inclure le header file du/des périphs utilisés et AUSSI le fichier "p18F46J50.lib" sous la catégorie Library Files dans ton projet

    a+
    Ma marotte ? les microcontrôleurs ;=)

  13. #10
    Hizaack

    Re : Information RPn pic18F46J50 + PWM

    Je ne savais pas du tout qu'il fallait également inclure la librairie.
    J'ai encore beaucoup de choses à apprendre

    Je l'ai donc inclus, en utilisant l'option -l pour compiler avec comme il est dit dans le document d'aide, dans les options "Use alternate setting" de l'onglet MPLAB C18 de "Build Options". Mes options de compilation sont donc "-mL -Ls -l".

    Mais...aucun résultat hormis un warning sur le SetOutputPWM2 : call of function without prototype.

    Je ne sais pas quoi faire

    Ci joint un imprimer d'écran.

    Merci pour l'aide.
    Images attachées Images attachées

  14. #11
    RISC

    Re : Information RPn pic18F46J50 + PWM

    Salut,

    A ce stade ton problème est difficile à tracer car je ne sais pas avec quel projet tu as démarré...
    Tu utilises apparemment (d'après ta copie d'écran) un projet modifié de la librairie MAL mais il n'y a aucun projet dans la librairie pour le PIC18F46J50...

    Peux-tu expliquer ce que tu as fait depuis le debut :
    * projet original ? (compilation OK?)
    * TOUTES les modifications que tu as faites et à partir de quel moment la compilation ne passe plus

    Surtout...je touche pas manuellement aux switches de compilation
    Tes messages montrent des "redefinitions" donc il y a des choses pas propres qui trainent...

    a+
    Ma marotte ? les microcontrôleurs ;=)

  15. #12
    Hizaack

    Re : Information RPn pic18F46J50 + PWM

    Bonsoir,

    C'est une longue histoire...
    Tout à commencé quand j'ai utilisé pour démarrer le projet de Microchip Librairies nommé SD Card Data logger.
    Les principales étapes :
    - Enlever la connexion USB
    - Conversion A/N dans quatre variables
    - Écriture d'un fichier .csv sur une carte SD
    - Écriture de plusieurs données dans ce fichier
    - Création des fichiers avec l'heure en cours (RTCC)
    - Génération de deux PWM indépendant en fonction de la valeur des variables.

    Donc j'en suis à ce point là. Précédemment j'ai rencontré plusieurs coquilles (voir mes autres postes) que j'ai réussis à résoudre.

    C'est le premier projet aussi gros et aussi complexe que je fais, je n'est donc pas l'expérience pour faire quelque chose de niquel. Mais je ne demande qu'à nettoyer tout ce qui n'est pas "propre"

    Je fais mon projet étapes par étapes, donc entre chaque étape le code compile et fonctionne sur ma carte de démonstration.

    La dernière fois qu'il fonctionnait, c'est avant que je rajoute précisément les fonctions PWM.

    Est ce que je peux vous donner plus de détails?
    Avez-vous une idée?

    Merci de votre patience.

  16. Publicité
  17. #13
    RISC

    Re : Information RPn pic18F46J50 + PWM

    Salut,

    J'ai pris le projet c:\Microchip Solutions v2010-10-19\MDD File System-SD Card\MDDFS-SD-PIC18.mcw
    que j'ai modifié pour utiliser le PIC18F46J50 au lieu du PIC18F87J50.
    Il a fallu que j'utilise l'optimisation pour que la compilation passe.
    J'ai ensuite comme toi ajouté le header file (pwm.h) et aussi la librairie p18F46J50.lib et...j'ai obtnu la même erreur que toi.
    J'ai analysé le fichier pwm.h et j'ai vu qu'il y a une erreur concernant les fonctions pwm2. Je l'ai corrigée mais....c'est certainement la librairie pwm qui a été mal compilée...
    Si tu sais comment recompiler une librairie tu peux t'y attaquer
    L'autre solution c'est de signaler ce problème au support technique pour qu'ils t'aident à trouver la solution.

    a+
    Ma marotte ? les microcontrôleurs ;=)

  18. #14
    Hizaack

    Re : Information RPn pic18F46J50 + PWM

    Bonsoir,

    Merci d'avoir pu confirmer le problème.

    Donc quelles sont les solutions disponibles?

    Je ne sais pas recompiler la librairie.

    - Je peux demander au support technique?
    - Vous pouvez m'aider à recompiler la librairies/corriger l'erreur, si vous avez le temps et la patience?

    Merci pour l'aide apportée!

  19. #15
    Hizaack

    Re : Information RPn pic18F46J50 + PWM

    Précision :
    Le projet pour lequel le PIC18F46J50 fonctionne et a été fait, et duquel je suis partie, est le suivant :

    C:\Microchip Solutions v2010-10-19\USB Device - Mass Storage - SD Card data logger\Mass Storage - Data Logger - Firmware\USB Device - Mass Storage - SD Card data logger - C18 - PIC18F46J50 PIM.mcp

  20. #16
    RISC

    Re : Information RPn pic18F46J50 + PWM

    Salut,
    Citation Envoyé par Hizaack Voir le message
    Donc quelles sont les solutions disponibles?
    La solution la plus simple et la plus rapide dans ton cas est de ne pas passer par la librairie et d'initialiser les registres toi-même en utilisant les exemples de code pour les PIC18 ici : http://www.microchip.com/codeexamples

    - Je peux demander au support technique?
    Oui, mais c'est parfois long...

    - Vous pouvez m'aider à recompiler la librairies/corriger l'erreur, si vous avez le temps et la patience?
    Malheureusement non. C'est un boulot qui peut demander pas mal de temps même avec de bonnes bases

    a+
    Ma marotte ? les microcontrôleurs ;=)

  21. #17
    Hizaack

    Re : Information RPn pic18F46J50 + PWM

    Bonjour,

    Merci d'avoir pu me confirmer l'erreur au niveau de la librairie PWM, ça m’ôte d'un doute à propos de mon projet
    Par contre je me demande pourquoi je n'ai rien trouvé à ce sujet sur le Web, personne n'as encore fait de PWM en C18 ?

    Bref, j'ai juste une petite question :
    Je souhaite donc générer deux PWM (1 et 2) indépendant respectivement sur RB0 et RB1 (sur ma carte de demo). J'ai besoin par la suite de modifier en temps réel la fréquence de mes deux PWM indépendant.

    J'ai facilement pu générer ma PWM1 sur RB0 en utilisant les registres de configuration.

    Mais voila, j'ai du mal à saisir comment générer et contrôler mon PWM2 sur RB1. Est ce les même registres? Est-il nécessaire d'utiliser les bits PxM<1:0> ? Comment faire pour basculer du contrôle de l'un à l'autre?

    Voilà ce que j'ai fait :

    Code:
    	PPSCON = 0; // I/O lock is not active, pin configurations can be changed
    
    	//Configuraton RPn PWM
    	RPOR3 = 14; //RB0 <-- PWM 1
    	RPOR4 = 15; //RB1 <-- PWM 2
    	
    	PPSCON = 1; // I/O lock is active, RPORx and RPINRx registers are write-protected
    
    
    	//PWM*******************************************	
    	CCP1CON = 0b00001100; //Configuration Mode PWM
    	CCP1CONbits.DC1B1 = 0; //These bits are the two LSbs of the 10-bit PWM duty cycle
    	CCP1CONbits.DC1B0 = 0;
    
    	T2CON = 0b00000100; //Timer2 Control Register, Timer2 On, 2 LSB = prescaler (1,4,16)
    	T2CONbits.T2CKPS0 = 1;  //Prescale de 16 par défaut
    	T2CONbits.T2CKPS1 = 1;
    
    	CCPR1L = 0b00111111;  //Chargement des 8 bits de configuration du rapport cyclique dans CCPR1L
    	PIR1bits.TMR2IF = 0; //Demarrer le PWM 
    
    	//PxM<1:0> // For PWM2 ?
    Merci pour les indications.

  22. #18
    RISC

    Re : Information RPn pic18F46J50 + PWM

    Salut,

    Lis la datasheet (section 18) et tu verras qu'il y a 2 unités de CCP.
    Il y a donc des registres pour chaque unité de CCP (CCP1CON, CCP2CON, etc...)

    Tu peux je pense utiliser le même timer pour les 2
    Il te suffit de plus ou moins dupliquer le code que tu as écrit.

    a+
    Ma marotte ? les microcontrôleurs ;=)

  23. Publicité
  24. #19
    Hizaack

    Re : Information RPn pic18F46J50 + PWM

    Bonjour,

    Ôte moi d'un petit doute, si j'utilise le même timer pour les deux, je ne pourrais pas avoir deux PWM de fréquence indépendante? :yes!:

  25. #20
    RISC

    Re : Information RPn pic18F46J50 + PWM

    Salut,

    Le doute c'est pas moi qui vait le lever...c'est la datasheet...
    Tu l'ouvres au paragraphe 18-4 et tu auras la réponse

    a+
    Ma marotte ? les microcontrôleurs ;=)

  26. #21
    Hizaack

    Re : Information RPn pic18F46J50 + PWM

    Bonsoir,

    Exact, c'est mieux quand on lit à tête reposée. Mais pour ma part la page 202 (section 13-3) a été beaucoup plus clair.

    Conclusion: il est possible de faire ce que l'on veut ^^

    Pour ceux qui le souhaite, je poste le code qui génère deux PWM avec remappage des sorties sur RD3 (PWM1 à 10kHz, 50%) et RD5 (PWM2 à 5kHz, 50%) :

    Code:
    //Remappage des ports RPN*******************************************
    	PPSCON = 0; // I/O lock is not active, pin configurations can be changed
    
    	//Configuraton RPn PWM
    	RPOR20 = 14; //RD3 <-- PWM 1
    	RPOR22 = 18; //RD5 <-- PWM 2
    	
    	PPSCON = 1; // I/O lock is active, RPORx and RPINRx registers are write-protected
    
    	//Mode d'utilisation des timers pour la PWM (p.202)**************************
    	TCLKCON = 0b00010001;	
    
    	//PWM1_10kHz********************************************************************
    	CCP1CON = 0b00001100; //Configuration Mode PWM
    	CCP1CONbits.DC1B1 = 0; //These bits are the two LSbs of the 10-bit PWM duty cycle
    	CCP1CONbits.DC1B0 = 0;
    
    	PR2 = 0b01001010 ;
    	T2CON = 0b00000111; //Timer2 Control Register, Timer2 On, 2 LSB = prescaler (1,4,16)
    	T2CONbits.T2CKPS0 = 1;  //Prescale de 16 par défaut
    	T2CONbits.T2CKPS1 = 1;
    
    	CCPR1L = 0b00100101;  //Chargement des 8 bits de configuration du rapport cyclique dans CCPR1L
    	PIR1bits.TMR2IF = 0; //Demarrer le PWM 
    
    
    
    	//PWM2_5kHz*************************************************************************
    	CCP2CON = 0b00111100; //Configuration Mode PWM, bit 5-4 DCxB<1:0>: PWM Duty Cycle bit 1 and bit 0
    	CCP2CONbits.DC2B1 = 0; //These bits are the two LSbs of the 10-bit PWM duty cycle
    	CCP2CONbits.DC2B0 = 0;
    
    	PR4 = 0b10010101 ;
    	T4CON = 0b00000111; //Timer2 Control Register, Timer2 On, 2 LSB = prescaler (1,4,16)
    	//T4CONbits.T4CKPS0 = 1;  //Prescale de 16 par défaut
    	//T4CONbits.T4CKPS1 = 1;
    
    	CCPR2L = 0b01001010;  //Chargement des 8 bits de configuration du rapport cyclique dans CCPR1L
    	PIR2bits.TMR3IF = 0; //Demarrer le PWM
    Merci RISC d'avoir passé du temps sur mon petit probleme, et de m'avoir donné quelques conseils. ^^

Sur le même thème :

Discussions similaires

  1. Réponses: 19
    Dernier message: 05/07/2011, 12h03
  2. Programmation PIC18F46J50 en CAN
    Par khaoulalak dans le forum Électronique
    Réponses: 1
    Dernier message: 27/03/2011, 12h44
  3. Calcul PWM Period / PWM Duty Cycle
    Par Paintitblack dans le forum Électronique
    Réponses: 14
    Dernier message: 02/12/2010, 21h34
  4. Réponses: 1
    Dernier message: 27/04/2010, 23h10
  5. backup pour pic18f46J50
    Par nevada62 dans le forum Électronique
    Réponses: 2
    Dernier message: 24/02/2010, 09h15
Découvrez nos comparatifs produits sur l'informatique et les technologies.