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 l'Assembleur !

Modérateur : mazertoc

Pwm avec Pic 18F27K42 impossible à mettre en fonction
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2616
Enregistré en : juillet 2016
Localisation : Terre

#1 Message par Temps-x » mar. 1 févr. 2022 02:38

Bonjour tout le frorum,

Voilà mon problème, je n'arrive pas à mettre en fonction le PWM du Pic 18F27K42, je ne comprends pas car j'ai tout configuré comme décrit dans la datasheet qui est disponible ICI

Code : Tout sélectionner


      BANKSEL RC0PPS                      
; bank 58

      movlw 0x0D                          
; mode PWM (PWM5)
      movwf RC0PPS                        ; sortie sur RC0       

      movlw B
'00000000'                   ; 
      movwf ANSELC                        
; mode normal
                                        
      movlw B
'00000000'                   ; pas de tirage de résistance
      movwf WPUC 

      BANKSEL TRISC                       
; bank 63

      movlw B
'00000000'                   ; 11(RC0), 12(RC1), 13(RC2), 14(RC3), 15(RC4), 16(RC5), 17(RC6), 18(RC7)    
      movwf TRISC   

      movlw    0xFF                           
; 
      movwf    T2PR                          
; réglage du "débordement" de TMR2                                                                     
                                          
; pwm Period = ((T2PR) +1) * 4 * TOSC * (TMR2 Prescale Value)      

      movlw B
'00000100'                   ; source d'horloge pour pwm
      movwf T2CLK       
      
      movlw B'
00100001'                   ; division par 4, mise en fonction du pwm (CKPS)
      movwf T2CON

      movlw B'
00000001'                   ; utilisation du timer2 pour création du pwm 
      movwf CCPTMRS1

      movlw B'
10000000'                   ; mise en fonction du pwm  
      movwf PWM5CON

      movlw D'
1'                          ; réglage du pwm
      movwf PWM5DCH  
     
      movlw D'
128'
      movwf PWM5DCL



Merci ! pour l'aide que vous pourriez m'apporter

==> A+
Modifié en dernier par Temps-x le mer. 2 févr. 2022 01:55, modifié 1 fois.
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Pwm avec Pic 18F27K42 impossible à mettre en fonction
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2597
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#2 Message par paulfjujo » mar. 1 févr. 2022 14:37

bonjour TempsX

si ça peut t'aider ...


j'ai testé sous MPLABX XC8
Test_18F27K42_IVT_PWM10b_2021
avec PWM5 et Timer4 associé


PAR DEFAUT c'est TMR2
The PWM timer can be selected using the PxTSEL bits
in the CCPTMRS1 register.
The default selection for PWMx is T2TMR.

avec ici, pin de sortie :
RC5PPS = 0x0D; //RC5->PWM5:PWM5;

Code : Tout sélectionner

 
 
void TMR4_Init
(void)
{

    T4CLKCON = 0x01;    // T2CS FOSC/4    ou  0x05 pour 500Khz
    T4HLT = 0x00;
    T4RST = 0x08;         // T4RSEL PWM5OUT; 
    T4PR = 0xFF;          // PR4 255; 
    T4TMR = 0x00;           // TMR4 0; 
    PIR7bits.TMR4IF = 0;  // Clearing IF flag.
    T4CON = 0x60;      //  avec TMR4ON=0=OFF    T2CKPS 1:64; T2OUTPS 1:1 not used
    T4CONbits.TMR4ON = 1;
   } 
 

void PWM5_Init
(void)
 {
     PWM5CON = 0x80;        // PWM5EN =1=enabled; PWM5POL=0=normal => active_hi;  
    PWM5DCH = 0x00;    //  Duty Cycle= 0    
    PWM5DCL = 0x00;   // 
    CCPTMRS1bits.P5TSEL = 2;  //page 360  Select timer 1=>TMR2      [b] 2=>TMR4  [/b]       3=>TMR6
}
 
 
 void PWM5_LoadDutyValue
(uint16_t dutyValue)
 {
     // Writing to 8 MSBs of PWM duty cycle in PWMDCH register
     PWM5DCH = (dutyValue & 0x03FC)>>2;
    // Writing to 2 LSBs of PWM duty cycle in PWMDCL register
     PWM5DCL = (dutyValue & 0x0003)<<6;
 }
 
 void main 
()
 {
    ....
   Init_Hardware();
   ...   
   
....
     CPrint(" Module PW5 1Khz  10 bits, (lie a TMR4 ) ,sortie RC5\r\n");
    ... 
   TMR4_Init
(); // pour  1KHz PWM5 
   ...
    CPrint(" Init PWM5 out RC5 = 25%\r\n");
    PWM5_Init();
    PWM5_LoadDutyValue(250);
  ...


Reglage Duty par saisie valeur au clavier ou via reglage potar sur ADC
gamme 0 à 100% pour 0 à 4095
Aide toi, le ciel ou FantasPic t'aidera

Pwm avec Pic 18F27K42 impossible à mettre en fonction
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#3 Message par satinas » mar. 1 févr. 2022 17:03

Bonjour

Pour les timers 1/3/5, le bit d'activation dans TxCON est le bit b0
Pour les timers 2/4/6, le bit d'activation dans TxCON est le bit b7
C'est pas gentil de la part de Microchip, mais faut pas que ce soit trop simple aussi hein :-)

donc sauf erreur :

Code : Tout sélectionner

      movlw B'10100000'                   ; division par 4, mise en fonction du pwm (CKPS)
      movwf T2CON

Pwm avec Pic 18F27K42 impossible à mettre en fonction
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2616
Enregistré en : juillet 2016
Localisation : Terre

#4 Message par Temps-x » mar. 1 févr. 2022 19:37

Bonsoir paulfjujo, satinas, et tout le forum,


paulfjujo a écrit :Source du message j'ai testé sous MPLABX XC8


:shock: J'ai été voir sur ton site hier soir, j'ai recopié la version MikroC :? en la traduisant en version ASM :-D mais rien à faire MikroC continu à bugger :lol:
:sifflotte: et contamine ASM.

satinas a écrit :Source du message C'est pas gentil de la part de Microchip, mais faut pas que ce soit trop simple aussi hein :-)


:eek: Non d'un canard, ça fonctionne comme tu le décris, pour un sale tour, c'est un sale tour, car rien de marqué dans la datasheet.

Ou as tu eu cette info ?

Je laisse le soin à paulfjujo de le découvrir voir ci-dessous

T2CON.jpg


J'aurais pu chercher longtemps, j'ai passé tout mon dimanche pour comprendre, :furieux: et il y en a qui disent qu'il faut lire la datasheet :evil:

:roll: Si la datasheet raconte des bêtises... mais ou va ton .... :eek:

Merci ! à vous deux, je vais m'occuper de la formule à l'aide d'un petit programme pour avoir une automatisation.

==> A+
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Pwm avec Pic 18F27K42 impossible à mettre en fonction
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#5 Message par satinas » mar. 1 févr. 2022 20:11

Tout est dans le datasheet, il y a 3 types de timer (0 - 1/3/5 - 2/4/6) avec 2 versions du registre TxCON, cela aide pas quand on fait des recherches par mot clé. Pour chercher les infos sur un module, on affiche le sommaire à gauche. On sélectionne un module, par exemple chapitre 21 pour les timers 1/3/5 ou chapitre 22 pour les timers 2/4/6. Le périphérique est décrit, avec à la fin la liste des registres correspondants, et il y a donc un TxCON pour chacun de ces 2 chapitres.

En recherche rapide sur un registre particulier, on se met en début de document, et on tape TxCON: dans la zone de recherche (le suffixe : a son importance). Le premier qui s'affiche est celui du chapite 21, le second celui du chapitre 22.

Ils ont mis le bit enable en b7 pour aligner CKPS et OUTPS sur un quartet, ce qui simplifie le calcul en hexa de la valeur à mettre dans le registre. Mais bon, ils auraient dû aussi le faire pour les autres timers, car b7 n'y est pas utilisé. En plus c'est aussi b7 pour le timer0, qui a ses propres registres.

Pwm avec Pic 18F27K42 impossible à mettre en fonction
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2597
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#6 Message par paulfjujo » mar. 1 févr. 2022 20:18

bonsoir TempsX

tu ne dois pas avoir la bonne version de datasheet

section 22.0 TIMER2/4/6 MODULE
REGISTER 22-5: TxCON: TIMERx CONTROL REGISTER

TxCon_register.jpg


ref DS40001919F-page 339

test mikroC
ByteToStr(T2CON ,CRam1); donne "000"
TMR2ON_bit=1;
ByteToStr(T2CON ,CRam1) ; donne "128"
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Aide toi, le ciel ou FantasPic t'aidera

Pwm avec Pic 18F27K42 impossible à mettre en fonction
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2616
Enregistré en : juillet 2016
Localisation : Terre

#7 Message par Temps-x » mer. 2 févr. 2022 01:22

Bonjour paulfjujo, satinas, et tout le forum,

satinas a écrit :Source du message Tout est dans le datasheet, il y a 3 types de timer (0 - 1/3/5 - 2/4/6) avec 2 versions du registre TxCON

Exacte, l'erreur que j'ai fait c'est de faire une recherche de T2CON seulement, au lieu de faire une recherche de TXCON

paulfjujo a écrit :Source du message tu ne dois pas avoir la bonne version de datasheet

Si c'est la bonne version de la datasheet, merci pour le numéro de la page, je comprends mieux maintenant, regarde en page 314


Pas curiosité j'ai été voir dans le fichier p18f27k42.inc ou sont configurés toutes les adresses des registres avec leurs bits.

Pour T2CON correspond bien (page 339)

Code : Tout sélectionner



;----- T2CON Bits -----------------------------------------------------
ON_T2CON         EQU  H'0007'

T2ON             EQU  H'0007'

T2OUTPS0         EQU  H'0000'
T2OUTPS1         EQU  H'0001'
T2OUTPS2         EQU  H'0002'
T2OUTPS3         EQU  H'0003'
T2CKPS0          EQU  H'0004'
T2CKPS1          EQU  H'0005'
T2CKPS2          EQU  H'0006'

OUTPS0           EQU  H'0000'
OUTPS1           EQU  H'0001'
OUTPS2           EQU  H'0002'
OUTPS3           EQU  H'0003'
CKPS0_T2CON      EQU  H'0004'
CKPS1_T2CON      EQU  H'0005'
CKPS2_T2CON      EQU  H'0006'
TMR2ON           EQU  H'0007'



Pour T1CON correspond bien (page 314)

Code : Tout sélectionner



;----- T1CON Bits -----------------------------------------------------
ON_T1CON         EQU  H'0000'
RD16             EQU  H'0001'
NOT_SYNC         EQU  H'0002'

TMR1ON           EQU  H'0000'
T1RD16           EQU  H'0001'
NOT_T1SYNC       EQU  H'0002'
T1CKPS0          EQU  H'0004'
T1CKPS1          EQU  H'0005'

CKPS0_T1CON      EQU  H'0004'
CKPS1_T1CON      EQU  H'0005'



Ce que j'en conclus, comme tout les deux en un X Il y a confusion avec TXCON qui corresponds à la page 314 (T1CON, T3CON, T5CON)
et TXCON qui corresponds à la page 339 (T2CON, T4CON, T6CON) qui sont complétement différent.

T1CON, T3CON, T5CON font partie du timer1, timer3, timer5 (page 314)
T2CON, T4CON, T6CON font partie du timer2, timer4, timer6 (page 339)

:eek: Il y a un paquet de diviseur dans les timer2, timer4, timer6, très intéressant pour réglage d'un PWM


De toute façon le X m'appartient :langue:

Merci pour tout.

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

Pwm avec Pic 18F27K42 impossible à mettre en fonction
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2597
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#8 Message par paulfjujo » jeu. 3 févr. 2022 16:13

TempsX a écrit ::eek: Il y a un paquet de diviseur dans les timer2, timer4, timer6, très intéressant pour réglage d'un PWM



Sauf que, malheureusement , le Postscaler n'intervient pas dans le PWM!
on en avait déja discuté il y a longtemps , je ne sais plus dans quel Post .. Avec Satinas
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Aide toi, le ciel ou FantasPic t'aidera

Pwm avec Pic 18F27K42 impossible à mettre en fonction
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2616
Enregistré en : juillet 2016
Localisation : Terre

#9 Message par Temps-x » ven. 4 févr. 2022 19:57

Bonjour paulfjujo, et tout le forum,

paulfjujo a écrit :Source du message Sauf que, malheureusement , le Postscaler n'intervient pas dans le PWM !

Exacte, en faisant des essais je me suis rendu compte que le Postscaler ne fonctionnait pas, :sifflotte: et je me suis dit : surement un bug de plus de MikroC....

Ton schéma ci joints ci-dessus en explique le pourquoi, Merci !

paulfjujo a écrit :Source du message on en avait déja discuté il y a longtemps

paulfjujo à toujours une longueur d'avance, ce qui me ralentit c'est surtout la langue anglo-saxonne :furieux: ou je ne comprends qu'a trois quart de ce qui est écrit même en traduisant, heureusement que tu es là avec satinas, car plus beaucoup de monde dans la section ASM :cry: à par moi est F6FCO

Je viens de m’apercevoir que le programme PicPWM qui est disponible ICI est compatible pour trouver la valeur du PWM, il vaut que je modifie juste quelle que paramètre pour les Pic 18FxxKxxxx, je vais faire une nouvelle version pour ASM :langue:


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


Retourner vers « Langage ASM »

Qui est en ligne

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