Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---

Problème PWM sur pic18

http://ww1.microchip.com/downloads/en/DeviceDoc/39564c.pdf

Forum général sur le langage C !

Modérateur : Jérémy

Asterix
Membre
Membre
Messages : 18
Enregistré en : janvier 2017

Problème PWM sur pic18

Messagepar Asterix » dim. 26 févr. 2017 16:07

Bonjour,
J'ai essayer de faire marché la PWM d'un PIC18f452 tout à l'heure.
Le problème c'est qu'après configuration des registres j'ai l'impression que celle ci ne fonctionne pas lorsque je la test sur un pic.
Du coup j'ai revérifier les registres mais rien à faire, ça ne fonctionne pas et je n'arrive pas à trouvé d'ou le problème peut venir...

Quelqu'un pourrait me donner un petit coup de main ?

Voici mes fichiers :
PWM_fonc.h:

Code : Tout sélectionner

#define MOT_G_PWM                       PORTCbits.RC2
#define MOT_D_PWM                       PORTCbits.RC1
#define MOT_G_PWM_DIR                   TRISCbits.TRISC2
#define MOT_D_PWM_DIR                   TRISCbits.TRISC1
#define MOT_G_C                         PORTDbits.RD2
#define MOT_G_D                         PORTDbits.RD3
#define MOT_D_C                         PORTDbits.RD0
#define MOT_D_D                         PORTDbits.RD1
#define MOT_G_C_DIR                     TRISDbits.TRISD2
#define MOT_G_D_DIR                     TRISDbits.TRISD3
#define MOT_D_C_DIR                     TRISDbits.TRISD0
#define MOT_D_D_DIR                     TRISDbits.TRISD1
#define VITESSE_MOT_G                   CCPR1L    // sur 8 bits 00>FF
#define VITESSE_MOT_D                   CCPR2L    // sur 8 bits 00>FF

#define MOT_G_Avant()                   MOT_G_C=1; MOT_G_D=0;
#define MOT_G_Arriere()                 MOT_G_C=0; MOT_G_D=1;
#define MOT_G_Bloque()                  MOT_G_C=0; MOT_G_D=0;
#define MOT_D_Avant()                   MOT_D_C=1; MOT_D_D=0;
#define MOT_D_Arriere()                 MOT_D_C=0; MOT_D_D=1;
#define MOT_D_Bloque()                  MOT_D_C=0; MOT_D_D=0;



PWM.c:

Code : Tout sélectionner

#include <p18f452.h>
#include "fonctions.h"
#include "PWM_fonc.h"



void Init_PWM(void)
{
    TRISD = 0x00;
    TRISC = 0x00;

    MOT_G_Bloque();    // moteur en CC
    MOT_D_Bloque();    // moteur en CC

    CCP1CON = 0b00001100;        //Mode PWM, bits 0 et 1 = 0 (10bits)
    CCP2CON = 0b00001100;        //Mode PWM, bits 0 et 1 = 0 (10bits)
    PR2 = 0xFF;                    //Période 4KHz
    T2CON   = 0b00000100;        //Prescaler et Postscaler 1:1 Timer_2 ON c'est parti

    VITESSE_MOT_G=0;    //vitesse nulle
    VITESSE_MOT_D=0;


    MOT_G_PWM_DIR=0;    // PWM en sorties
    MOT_D_PWM_DIR=0;

    MOT_G_C_DIR=0;        // bits cde moteur en sortie
    MOT_G_D_DIR=0;
    MOT_D_C_DIR=0;
    MOT_D_D_DIR=0;

    return;
}



main.c

Code : Tout sélectionner

#include <p18f452.h>
#include "fonctions.h"
#include "PWM_fonc.h"

#pragma config OSC = HS, OSCS = OFF
#pragma config PWRT = OFF, BOR = OFF
#pragma config WDT = OFF
#pragma config CCP2MUX = ON
#pragma config STVR = ON
#pragma config LVP = OFF
#pragma config DEBUG = ON
#pragma config CP0 = OFF, CP1 = OFF, CP2 = OFF, CP3 = OFF, CPB = OFF, CPD = OFF
#pragma config WRT0 = OFF, WRT1 = OFF, WRT2 = OFF, WRT3 = OFF
#pragma config WRTB = OFF, WRTC = OFF, WRTD = OFF
#pragma config EBTR0 = OFF, EBTR1 = OFF, EBTR2 = OFF, EBTRB = OFF




void main(void)
{
  
    Init_ADC
();
    Init_PWM();
    Init_I2C();

    TRISE = 0x00;

    char vision;

   
    while
(1)
    {
        MOT_G_Avant();
        MOT_D_Avant();
        VITESSE_MOT_G=0x80;    //vitesse 50%
        VITESSE_MOT_D=0x80;
        vision = conversion();

        if (vision >= 20)
        {
            PORTE = 0xFF;
        }


    }

    return;
}



Avatar de l’utilisateur
Temps-x
Expert
Expert
Messages : 2911
Enregistré en : juillet 2016
Localisation : Terre

Problème PWM sur pic18

Messagepar Temps-x » dim. 26 févr. 2017 16:34

Bonjour,

Je connais pas grand chose au C, mais en ASM le changement de banque est obligatoire :

Passer en banque approprier 
CCP1CON = 0b00001100;        
CCP2CON = 0b00001100;        

Passer en banque approprier 
PR2 = 0xFF;                    //Fréquence du PWM 3900 Hz de 0% à 99,5%, pas plus grand, sinon plantage

Passer en banque approprier 
T2CON   = 0b00000100;  

A+
Modifié en dernier par Temps-x le dim. 26 févr. 2017 17:05, modifié 2 fois.
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Avatar de l’utilisateur
HULK28
Amateur
Amateur
Messages : 106
Enregistré en : août 2015
Localisation : IdF

Problème PWM sur pic18

Messagepar HULK28 » dim. 26 févr. 2017 16:41

Bonjour Astérix,

je ne vois pas l'usage de "LATx" dans tes codes, es-tu bien certain que ce µC ne possède pas cette fonctionnalité?
Il vaudrait mieux utiliser un PIC18F4520, le PIC18F452 est annoncé obsolète:
http://www.microchip.com/wwwproducts/en/PIC18F452

@+
"Pour la carotte, le lapin est la parfaite incarnation du mal" -Robert Shecley-

Avatar de l’utilisateur
HULK28
Amateur
Amateur
Messages : 106
Enregistré en : août 2015
Localisation : IdF

Problème PWM sur pic18

Messagepar HULK28 » dim. 26 févr. 2017 16:42

En C les banques sont gérées automatiquement par le compilateur. :wink:
"Pour la carotte, le lapin est la parfaite incarnation du mal" -Robert Shecley-

Avatar de l’utilisateur
Temps-x
Expert
Expert
Messages : 2911
Enregistré en : juillet 2016
Localisation : Terre

Problème PWM sur pic18

Messagepar Temps-x » dim. 26 févr. 2017 16:44

Bonjour HULK28,

humour!! ça rends fainéant le C dehors!!

A+
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Avatar de l’utilisateur
HULK28
Amateur
Amateur
Messages : 106
Enregistré en : août 2015
Localisation : IdF

Problème PWM sur pic18

Messagepar HULK28 » dim. 26 févr. 2017 16:47

Tu ne précises pas la valeur de ton oscillateur, je prends pas défaut 8MHz dans l'exemple ci-dessous

Code : Tout sélectionner

/*
 * PWM configuration des registres
 * Fosc = 8000000 Hz
 * Fpwm = 1000.00 Hz
 * Duty Cycle = 50 %
 * Resolution  10 bits
 * Prescaler  16
 */

PR2 = 0b01111100 ;
T2CON = 0b00000111 ;
CCPR1L = 0b00111110 ;
CCP1CON = 0b00011100 ;
"Pour la carotte, le lapin est la parfaite incarnation du mal" -Robert Shecley-

Avatar de l’utilisateur
HULK28
Amateur
Amateur
Messages : 106
Enregistré en : août 2015
Localisation : IdF

Problème PWM sur pic18

Messagepar HULK28 » dim. 26 févr. 2017 17:20

Temps-x a écrit :Bonjour HULK28,

humour!! ça rends fainéant le C dehors!!

A+


C'est sur ! :wink:
"Pour la carotte, le lapin est la parfaite incarnation du mal" -Robert Shecley-

Avatar de l’utilisateur
paulfjujo
Maître
Maître
Messages : 3262
Enregistré en : juillet 2015
Localisation : 01800
Contact :

Problème PWM sur pic18

Messagepar paulfjujo » dim. 26 févr. 2017 17:26

bonsoir,


un document interressant, meme si c'est en anglais

18F252_PWM_lectures.pdf
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Aide toi, le ciel ou FantasPic t'aidera

Asterix
Membre
Membre
Messages : 18
Enregistré en : janvier 2017

Problème PWM sur pic18

Messagepar Asterix » dim. 26 févr. 2017 23:48

Bonjour Hulk,

Si il me semble que le pic18f452 possède la fonctionnalité de LATx. C'est juste que j'ai peut être pris une mauvaise habitude à ne pas l'utiliser.
Sinon pour la configuration il me manquait en faite la config du registre CCPR1L c'est ça ?

Et merci beaucoup pour le document paulfjuljo en plus le pic18f252 est quasiment le même.

Je posterai un message demain soir pour vous dire si j'ai résolu le problème.

Sur ce, bonne nuit.

Asterix
Membre
Membre
Messages : 18
Enregistré en : janvier 2017

Problème PWM sur pic18

Messagepar Asterix » lun. 27 févr. 2017 23:41

Bon le programme fonctionne, j'ai simplement enleer Mot_G_Avant() et Mot_D_Avant() du while et les ai mis avant.


Retourner vers « Langage C »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 2 invités