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 ---
- 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 ---
Modérateur : Jérémy
Programme PWM + BP avec un PIC16F18345
Programme PWM + BP avec un PIC16F18345
Programme PWM + BP avec un PIC16F18345
-
Jérémy
Administrateur du site- Messages : 2725
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Je ne connais presque pas MPLABX, j'ai donc du mal avec la syntaxe.
As tu fais clignoter une led pour vérifier que ton OSCINT a 8Mhz tournais rond ?
JE n'ai jamais utilisé le module PWM d'un PIC , et cette notion de PR2 mais inconnue ! Je crois comprendre que le PR2 permet de reseter le TMR2 quand celui ci arrive à la même valeur . Mais cela implique un ratio de 50% ? sauf si on change la valeur de PR2 à chaque reset !
Ton Tmr2 est off en tout cas avec le T2CON = 0 ; il faudrait déjà l'allumer
Je serais toi , je commencerai pas régler le timer avec une grande valeur genre 100ms ( si possible) ainsi tu pourrais visualiser tes modification avec une simple led ! Une fois que tu aura vue ta led clignoter au rythme de ton tImer2 , c'est gagné ! il faudra juste modifier les valeurs.
As tu fais clignoter une led pour vérifier que ton OSCINT a 8Mhz tournais rond ?
JE n'ai jamais utilisé le module PWM d'un PIC , et cette notion de PR2 mais inconnue ! Je crois comprendre que le PR2 permet de reseter le TMR2 quand celui ci arrive à la même valeur . Mais cela implique un ratio de 50% ? sauf si on change la valeur de PR2 à chaque reset !
Ton Tmr2 est off en tout cas avec le T2CON = 0 ; il faudrait déjà l'allumer
Je serais toi , je commencerai pas régler le timer avec une grande valeur genre 100ms ( si possible) ainsi tu pourrais visualiser tes modification avec une simple led ! Une fois que tu aura vue ta led clignoter au rythme de ton tImer2 , c'est gagné ! il faudra juste modifier les valeurs.
Programme PWM + BP avec un PIC16F18345
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonjour,
Avec la librairie PWM de mikroc
code issu de l'exemple
Rajouté le test du bouton pour faire Marche Arret
à adapter à ton MCU ( et en ASM ?)
avec le module ECCP
timer2 sert à definir la frequence PWM
pr2 regle le duty cycle
Avec la librairie PWM de mikroc
code issu de l'exemple
Rajouté le test du bouton pour faire Marche Arret
à adapter à ton MCU ( et en ASM ?)
avec le module ECCP
timer2 sert à definir la frequence PWM
pr2 regle le duty cycle
Code : Tout sélectionner
unsigned char current_duty, Marche;
void InitMain() {
ANSEL = 0; // Configure AN pins as digital
ANSELH = 0;
C1ON_bit = 0; // Disable comparators
C2ON_bit = 0;
PORTA = 255;
TRISA = 255; // configure PORTA pins as input
PORTB = 0; // set PORTB to 0
TRISB = 0; // designate PORTB pins as output
PORTC = 0; // set PORTC to 0
TRISC = 0; // designate PORTC pins as output
PWM1_Init(5000); // Initialize PWM1 module at 5KHz
}
void main() {
InitMain();
current_duty = 16; // initial value for current_duty
PWM1_Start(); // start PWM1
PWM1_Set_Duty(current_duty); // Set current duty for PWM1
Marche=1;
while (1)
{ // endless loop
if (RA0_bit) { // button on RA0 pressed
Delay_ms(40);
current_duty++; // increment current_duty
PWM1_Set_Duty(current_duty);
}
if (RA1_bit) { // button on RA1 pressed
Delay_ms(40);
current_duty--; // decrement current_duty
PWM1_Set_Duty(current_duty);
}
if ((RA2_bit==0) && (Marche==1)){ // button STOP
current_duty=0;
PWM1_Stop();
Marche=0;
}
if ((RA2_bit==1) && (Marche==0)){ // button STOP
current_duty=0;
PWM1_Start();
Marche=1;
}
Delay_ms(5); // slow down change pace a little
}
}
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 56 invités