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

Programme PWM + BP avec un PIC16F18345
jo7
Débutant
Débutant
Messages : 67
Enregistré en : février 2018

#1 Message par jo7 » mer. 14 mars 2018 16:25 lien vers la Data-Sheet : Cliquez ici

Bonjour à tous,

N'ayant pas trouvé réponse à mon interrogation, je me décide à la poster. Ma demande est simple.

Comment générer un signal PWM à l'aide d'un bouton poussoir pendant l'exécution du programme? pwm? interruptions?

Je veux générer par exemple un signal PWM sur le ventilateur qui est commandé par un MOSFET, mais je ne sais pas quelle méthode utilisé pour cette configuration. La programmation se fait sous MPLAB X IDE V4.01
Merci d'avance ! :-D
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.

Programme PWM + BP avec un PIC16F18345
Triac01
Membre
Membre
Messages : 1
Enregistré en : août 2017

#2 Message par Triac01 » mer. 14 mars 2018 17:37 lien vers la Data-Sheet : Cliquez ici


Programme PWM + BP avec un PIC16F18345
Jérémy
Administrateur du site
Administrateur du site
Messages : 2153
Âge : 39
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#3 Message par Jérémy » jeu. 15 mars 2018 07:22 lien vers la Data-Sheet : Cliquez ici

Bonjour,

jo7 a écrit :Source du message pendant l'exécution du programme? pwm? interruptions?


Tu as plusieurs solutons pour generer un PWM . Un broiche dédié avec la focntion qui va bien en interne du PIC comme sur le lien de Triac01 .
Tu peux aussi le faire toi même ( je l'ai déjà fait ) pour piloter un ou plusieurs PWM avec un timer et une interrutpion dessus .

Un gros u nPWM , c'est un sortie à l'état bas pendant X millisecondes, et un état haut pendant Y millisecondes ; Les deux formes une periode .

SI cela se passe pendant l'execution d'uin programme, il faudra forcement utilisé les interruptions sur timer
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Programme PWM + BP avec un PIC16F18345
jo7
Débutant
Débutant
Messages : 67
Enregistré en : février 2018

#4 Message par jo7 » ven. 23 mars 2018 16:03 lien vers la Data-Sheet : Cliquez ici

Bonjour Jeremy,

As-tu un exemple d'un programme que tu as fait pour générer un PWM car j'ai du mal à structure la logique.
Merci d'avance ! :)

Programme PWM + BP avec un PIC16F18345
Jérémy
Administrateur du site
Administrateur du site
Messages : 2153
Âge : 39
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#5 Message par Jérémy » ven. 23 mars 2018 16:30 lien vers la Data-Sheet : Cliquez ici

Bonjpour jo7,

Voici n programme pour piloter deux servo donc deux PWM avec un seul timer : viewtopic.php?p=6709#p6709

IL te sera facile de le transposer . Pour ta structure logique il suffit de raisonner ainsi :

JE fais une pause ( j'éteins ma sortie) sur une interruption timer.
L’interruption timer suivante , je précharge la valeur de ma future interruption, puis j'allume ma sortie je signale ( par un flag ) que je suis allumé .
Puis je reboucle, je fais une pause ( j'éteins ma sortie) sur une interruption timer, je précharge la valeur de ma future interruption.
etc ...

Il y a également les fonction MikroC toute faites pour gérer les PWM.
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Programme PWM + BP avec un PIC16F18345
jo7
Débutant
Débutant
Messages : 67
Enregistré en : février 2018

#6 Message par jo7 » ven. 23 mars 2018 16:38 lien vers la Data-Sheet : Cliquez ici

Pour mon programme avec un bouton poussoir, je veux :
1. J'appuie et je relâche --> j'active le PWM
2. 2ème appuie --> je désactive le PWM

Je vais dans la même logique que toi sauf que je modifie les différents paramètres de ton programme, c'est ça ?
J'utilise le Timer2 du PIC donc il y aura forcément un programme d'interruption si j'ai bien compris.

Programme PWM + BP avec un PIC16F18345
Jérémy
Administrateur du site
Administrateur du site
Messages : 2153
Âge : 39
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#7 Message par Jérémy » ven. 23 mars 2018 17:56 lien vers la Data-Sheet : Cliquez ici

Yop,

Dans mon travail je HURLE quand les gens disent " Je veux" quand il viennent quémander mon aide. Pour moi "Je veux" désigne un ordre ! Hors je recois pas d'ordre sauf de mes patrons ! :sifflotte:
Il est beaucoup p^lus agréable de lire, "j'aimerais" ou "je souhaiterais" implementant une légére notion d'interrogation plutot que de l'exigeance .

Ceci étant dit revenons à nos moutons!

Ton PWM dont je ne connais pas la fréquence sera cadencé par un timer ! un coup il allume la broche un coup il 'léteint . Du coup si le timer ne tourne pas , le PWM est éteint . Du coup il suffit de déclencher ton timer avec ton bouton Poussoir pour activer ou non le PWM .

Oui il te faut un programme d'interruption. Tu mets au point rapport cyclique de ton PWM ainsi que sa fréquence et ensuite tu l'active ou non avec le BP .

Allez zou au travail ! :langue:
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Programme PWM + BP avec un PIC16F18345
jo7
Débutant
Débutant
Messages : 67
Enregistré en : février 2018

#8 Message par jo7 » ven. 23 mars 2018 20:51 lien vers la Data-Sheet : Cliquez ici

Bonsoir Jérémy,

Merci pour ta réponse, je vais m'y mettre et je t'enverrais mon code pour voir ce que tu en penses.
Pardon pour cette expression "je veux", ce n'était pas dans le but de te donner un ordre :langue: je te rassure !

A bientôt ! :-)

Programme PWM + BP avec un PIC16F18345
Jérémy
Administrateur du site
Administrateur du site
Messages : 2153
Âge : 39
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#9 Message par Jérémy » ven. 23 mars 2018 20:55 lien vers la Data-Sheet : Cliquez ici

Ok pas de soucis !
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Programme PWM + BP avec un PIC16F18345
jo7
Débutant
Débutant
Messages : 67
Enregistré en : février 2018

#10 Message par jo7 » mer. 25 avr. 2018 23:11 lien vers la Data-Sheet : Cliquez ici

Jérémy a écrit :Ok pas de soucis !


Bonsoir Jérémy,

J'ai commencé mon programme PWM + BP mais je n'arrive pas à établir une fonction interruption pour gérer l'activation du PWM. Pourrais-tu me donner quelques infos. Merci d'avance ! :)

Code : Tout sélectionner

// CONFIG1
#pragma config FEXTOSC = OFF        // FEXTOSC External Oscillator mode Selection bits (Oscillator not enabled)
#pragma config RSTOSC = HFINT1      // Power-up default value for COSC bits (HFINTOSC with 2x PLL (32MHz))
#pragma config CLKOUTEN = OFF       // Clock Out Enable bit (CLKOUT function is enabled; FOSC/4 clock appears at OSC2)
#pragma config CSWEN = ON           // Clock Switch Enable bit (Writing to NOSC and NDIV is allowed)
//#pragma config FCMEN = OFF          // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor is disabled)

// CONFIG2
#pragma config MCLRE = ON           // Master Clear Enable bit (MCLR/VPP pin function is MCLR; Weak pull-up enabled)
#pragma config PWRTE = OFF          // Power-up Timer Enable bit (PWRT disabled)
#pragma config WDTE = OFF           // Watchdog Timer Enable bits (WDT disabled; SWDTEN is ignored)
#pragma config LPBOREN = OFF        // Low-power BOR enable bit (ULPBOR disabled)
#pragma config BOREN = SBOREN       // Brown-out Reset Enable bits (Brown-out Reset enabled according to SBOREN)
#pragma config BORV = LOW           // Brown-out Reset Voltage selection bit (Brown-out voltage (Vbor) set to 2.45V)
#pragma config PPS1WAY = OFF        // PPSLOCK bit One-Way Set Enable bit (The PPSLOCK bit can be set and cleared repeatedly (subject to the unlock sequence))
#pragma config STVREN = OFF         // Stack Overflow/Underflow Reset Enable bit (Stack Overflow or Underflow will not cause a Reset)
#pragma config DEBUG = OFF          // Debugger enable bit (Background debugger disabled)

// CONFIG3
#pragma config WRT = OFF            // User NVM self-write protection bits (Write protection off)
#pragma config LVP = ON             // Low Voltage Programming Enable bit (Low Voltage programming enabled. MCLR/VPP pin function is MCLR. MCLRE configuration bit is ignored.)

// CONFIG4
#pragma config CP = OFF             // User NVM Program Memory Code Protection bit (User NVM code protection disabled)
#pragma config CPD = OFF            // Data NVM Memory Code Protection bit (Data NVM code protection disabled)

// PORT A
#define ICSPDAT         RA0                     // Port de programmation
#define POWER           RA1                     // Retour d etat charge batterie
#define MCLR            RA3                     // Port de programmation
#define Vactiv          RA5                     // Grille transistor ventilateur


// PORT C
#define BP              RC5                     // Bouton poussoir

#include <xc.h>

#define _XTAL_FREQ  8000000                     // Oscillateur réglé à 8MHz


void main(void)
{

    // Reglages des entrees/sorties
    TRISA = 0x0B;                         // Choix entrees/sorties
    LATA = 0x00;                          // RAZ des ports
    ANSELA = 0x00;                        // Choix mode analogique/numerique    
    WPUA = 0x02;                          // Resistances de pull-up interne
    
    TRISB 
= 0x00;                         // Choix entrees/sorties
    LATB = 0x80;                          // RAZ des ports
    ANSELB = 0x00;                        // Choix mode analogique/numerique
    WPUB = 0x00;                          // Resistances de pull-up interne 
    
    TRISC 
= 0x20;                         // Choix entrees/sorties
    LATC = 0xC0;                          // RAZ des ports
    ANSELC = 0x18;                        // Choix mode analogique/numerique
    WPUC = 0x20;                          // Resistances de pull-up interne

    // Reglages du Timer2
    PR2 = 0x63;
    T2CON = 0x00;
    TMR2 = 0x00;
    
    
// Reglages CCP2
    CCP2CON = 0b10001111;
    CCPR2H = 0x00;
    CCPR2L = 0b01001111;
    CCPTMRS = 0x00;
    INTCON = 0b11000000


Retourner vers « Langage C »

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 1 invité