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



ça rends fainéant le C
