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 ---
Forum général sur le langage C !

Modérateur : Jérémy

Problème PWM sur pic18
Asterix
Membre
Membre
Messages : 18
Âge : 27
Enregistré en : janvier 2017

#1 Message par Asterix » dim. 26 févr. 2017 16:07 lien vers la Data-Sheet : Cliquez ici

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;
}



Problème PWM sur pic18
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2617
Enregistré en : juillet 2016
Localisation : Terre

#2 Message par Temps-x » dim. 26 févr. 2017 16:34 lien vers la Data-Sheet : Cliquez ici

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:

Problème PWM sur pic18
HULK28
Avatar de l’utilisateur
Amateur
Amateur
Messages : 106
Enregistré en : août 2015
Localisation : IdF

#3 Message par HULK28 » dim. 26 févr. 2017 16:41 lien vers la Data-Sheet : Cliquez ici

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-

Problème PWM sur pic18
HULK28
Avatar de l’utilisateur
Amateur
Amateur
Messages : 106
Enregistré en : août 2015
Localisation : IdF

#4 Message par HULK28 » dim. 26 févr. 2017 16:42 lien vers la Data-Sheet : Cliquez ici

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-

Problème PWM sur pic18
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2617
Enregistré en : juillet 2016
Localisation : Terre

#5 Message par Temps-x » dim. 26 févr. 2017 16:44 lien vers la Data-Sheet : Cliquez ici

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:

Problème PWM sur pic18
HULK28
Avatar de l’utilisateur
Amateur
Amateur
Messages : 106
Enregistré en : août 2015
Localisation : IdF

#6 Message par HULK28 » dim. 26 févr. 2017 16:47 lien vers la Data-Sheet : Cliquez ici

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-

Problème PWM sur pic18
HULK28
Avatar de l’utilisateur
Amateur
Amateur
Messages : 106
Enregistré en : août 2015
Localisation : IdF

#7 Message par HULK28 » dim. 26 févr. 2017 17:20 lien vers la Data-Sheet : Cliquez ici

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-

Problème PWM sur pic18
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2597
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#8 Message par paulfjujo » dim. 26 févr. 2017 17:26 lien vers la Data-Sheet : Cliquez ici

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

Problème PWM sur pic18
Asterix
Membre
Membre
Messages : 18
Âge : 27
Enregistré en : janvier 2017

#9 Message par Asterix » dim. 26 févr. 2017 23:48 lien vers la Data-Sheet : Cliquez ici

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.

Problème PWM sur pic18
Asterix
Membre
Membre
Messages : 18
Âge : 27
Enregistré en : janvier 2017

#10 Message par Asterix » lun. 27 févr. 2017 23:41 lien vers la Data-Sheet : Cliquez ici

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 15 invités