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

betit broblem avec PWM 18F27K42
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#1 Message par paulfjujo » jeu. 4 août 2022 14:24 lien vers la Data-Sheet : Cliquez ici

bonjour à tous ,

j'ai remanié un peu ma page concernant le PWM 10 bits avec usage de PWM5 , Timer2 ( ou 4)
nota : par defaut le Timer2 est affecté à un PWMx
source dans le lien ci dessus

sortie signal sur RC5
(choix autre sortie dans le source via PPS commandes)
FOSC interne 64MHz
la periode PWM est de 1024 µS soit 977HZ avec T2PR=255
j'ai Prescaler=6 (P6) soit division de 1/64 au demarrage

le programme de test permet , via liaison UART <-> prolific cable USB/TTL <-> Terminal PC YAT
d'envoyer des commandes pour modifier la config du PWM5

la commande Cxxxx =consigne duty cycle x de 0 à 1019 ..voir 1020
problemo #1 :
au dela de 1019 le PWM sort 0 ? je ne vois pas ou est là limite , hormis un probleme lié à la synchro avec FOSC
avez vous déja eu ce constat,
on devrait pouvoir aller à 1022 (..voir 1023) ?
d'autant qu' une consigne de 1 via cde C1 donne bien une pulse de 1,024µS
Cde C512 -> duree pulse état 1= 512µS
Cde 1019 -> 1019µS
Cde 1020 -> 0 !!!

la commande Px permet de choisir le Prescaler Timer2 parmi les 8 valeurs possible 1,2,4,8,16,32,64,128

la commande Sx : permet de chosir la source de frequence pour le timer2
S1 => FOSC/4 = 16Mhz
S5 => MFINTOSC = 500Khz
S6 => MFINTOSC =32Khz

le mixage Px et SX permet moult possibilités
ce qui permet entre autre de pouvoir piloter un servomoteur de radiocommande ..
Mais ATTENTION , certaines combinaisons ne matchent pas !
et ne supportent plus une resolution effective de 10 bits .

voir datasheet

problemo #2 :
J'ai essayé d'utiliser le Format PWM 10 bits FMT=0 ( au lieu de FMT=1)
PWM_10-BIT_Alignement.jpg


je m'attendais à avoir le meme resultat en modifiant aussi , le mode d'ecriture de la valeur consigne Duty

Code : Tout sélectionner



void PWM5_Load_Duty_Value
(unsigned int Duty_Value)
 {
 // suivant config FORMAT   voir FIGURE 23-5: PWM 10-BIT ALIGNMENT  p349
  if (CCP2CON.CCP2FMT==1)
 { UART1_Write('1');
   PWM5DCH = (Duty_Value & 0x03FF)>>2;  // Writing to 8 MSBs of PWM duty cycle in PWMDCH register
   PWM5DCL = (Duty_Value & 0x0003)<<6;   // Writing to 2 LSBs of PWM duty cycle in PWMDCL register
 }
 else
 
{ UART1_Write('0');
   PWM5DCH = (Duty_Value & 0x03FF)>>; //  Writing 2 bits MSB of PWM duty cycle
   PWM5DCL = (Duty_Value & 0x00FF);      //   Writing 8 LSB of PWM duty cycle
  }
 }



:!!: et NON , ça ne marche pas ...avec FMT=0, OK seulement avec FMT=1
d'ou ma question :
:sifflotte: error de code ?
datasheet mal interprétée ?
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Aide toi, le ciel ou FantasPic t'aidera

betit broblem avec PWM 18F27K42
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#2 Message par satinas » jeu. 4 août 2022 17:33 lien vers la Data-Sheet : Cliquez ici

Bonjour Paul,

Les timers utilisés pour les sorties PWM sont les timers 8 bits 2/4/6.

Il y a 4 modules CCP 1/2/3/4 pouvant produire du PWM 10 bits (chapitre 23).
Le registre TxPR définit la période, les registres CCPRxH:L le rapport cyclique.
Le bit config FMT ne concerne que ces modules CCP. D'ailleurs je ne vois pas l'utilité de ce bit d'alignement.

Ensuite il y a aussi 4 modules indépendants PWM 5/6/7/8 10 bits (chapitre 24).
Le registre TxPR définit la période, les registres PWMxDCH:L le rapport cyclique.

betit broblem avec PWM 18F27K42
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#3 Message par paulfjujo » jeu. 4 août 2022 20:59 lien vers la Data-Sheet : Cliquez ici

bonsoir Satinas,

On est d'accord ,
mais ça ne répond pas à ma question :

limite 1019 et non pas 1023 pour la consigne duty ?

FMT=0 ?
en effet on se demande pourquoi cette option ?
idea ! semblerait donc uniquement reservée qu'aux CCP 1,2,3,4
et pas pour 5,6 ..etc...

je vais verifier cela avec un PWM1

le Timer2 intervient bien aussi avec le PWM5 !
utilisé d'ailleurs par defaut.
Aide toi, le ciel ou FantasPic t'aidera

betit broblem avec PWM 18F27K42
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#4 Message par paulfjujo » lun. 8 août 2022 18:36 lien vers la Data-Sheet : Cliquez ici

bonsoir,


Retour sur CCP1 utilisé en PWM 10bits, SANS la librairie MikroC
avec ces 4 fonctions .. ( :sifflotte: à améliorer surement !)

j'utilise le terme CCP1 PWM (CCP1,2,3,4) volontairement pour ne pas se melanger les pinceaux (ça m'est arrivé !)
avec les modules PWM 5,6,7,8

Code : Tout sélectionner


const unsigned char Prescale_Values
[]={1,2,4,8,16,32,64,128};
void CCP1_PWM_Config(void);
void Calcul_and_Set_param_Timer2( unsigned int valeur);
void Init_TMR2(int Valeur) 

et void PWM5_Load_Duty_Value(unsigned int Duty_Value)

configuration du module CCP1
Init TMR2 , si on a choisi ce timer pour l'associer au CCP1 ( associé par defaut)
dans cette init on appelle Calcul_and_Set_param_Timer2 avec comme parametre la frequence desirée
Calculs réalisés pour fournr les paramatres T2CON et T2PR
On essaie toujours de conserver la valeur maxi de T2PR ( =255) pour avoir 10 bits de resolution
Apres l'init Timer 2, on est pret à envoyer une valeur de Duty sur 10 bits ! ..0 à1023
via void PWM1_Load_Duty_Value(unsigned int Duty_Value)

le source ci dessous

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


Retourner vers « Langage C »

Qui est en ligne

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