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

Générer un signal MLI
Florian41
Membre
Membre
Messages : 13
Enregistré en : mai 2017

#1 Message par Florian41 » lun. 26 juin 2017 11:16 lien vers la Data-Sheet : Cliquez ici

Bonjour,

Sur le programme ci-dessous je souhaite générer un signal MLI à partir d'un PIC18F45K80, de fréquence et de rapport cyclique arbitraires. Voici le main que j'ai inscrit sur MikroC :

Code : Tout sélectionner



void main
()
{
 
TRISC 0;
 
PORTC 0;
 
PWM1_init(5000);
 
PWM1_start();
 
PWM1_Set_Duty(50);


Comme indiqué sur la datasheet j'ai cablé la sortie PWM sur la broche RC2 du PIC...

Et finalement, même problème que sur mon dernier topic ... Strictement rien en sortie. J'ai bien compilé le programme sur MikroC et implanté dans l'IPE MPLAB X, aucun problème de périphérique... Mais toujours rien en sortie. J'ai changé le PIC pour en prendre un neuf, et pareil, rien du tout. Pourtant le pic est bien alimenté ... Quelle pourrait être la source de ce problème d'après vous?

Générer un signal MLI
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#2 Message par paulfjujo » lun. 26 juin 2017 14:06 lien vers la Data-Sheet : Cliquez ici

bonjour,

la seule interference avec RC2 serait eventuellement la Gate du Timer1

verifier si c'est bien PWM1_Init qui est associé à RC2 et non RC1 !
car sur les 16F rescent:
PWM1 module is initialized on the RC1 pin and PWM2 module on RC2 pin.


ECCP1 compare output and ECCP1 PWM output; takes priority over port data => sur RD4 ?
d'autant que dans le fichier listing *.lst resultant de la compilation on peut y voir :

Code : Tout sélectionner

_PWM1_Start:
;
__Lib_PWM_d4c2675.c,19 ::                 
;__Lib_PWM_d4c2675.c,20 ::                 
0x006C        0x9895              BCF         TRISD4_bit
, BitPos(TRISD4_bit+0) 
;__Lib_PWM_d4c2675.c,21 ::                 
0x006E        0x84CA              BSF         T2CON
, 2 
;__Lib_PWM_d4c2675.c,22 ::                 
0x0070        0x0E0C              MOVLW       12
0x0072        0x12BB              IORWF       CCP1CON
, 1 
;__Lib_PWM_d4c2675.c,23 ::                 
L_end_PWM1_Start
:
0x0074        0x0012              RETURN      0


Rajouter une boucle sans fin en fin de programme..
le PIC reste alive..

remarque : s'abituer à mettre les syntaxes exactes .. meme si c'est un peu contraignant,au départ
la portabilité des sources s'en trouve nettement améliorée.
Tools
Options
Compiler
Case sensitive (cochée)


un petit test prealable de la sortie RC2 (clignotement d'une led !) s'impose:
pour verifier que les bits de config soient bien transferés et que le PIC oscille bien à la frequence désirée.
et que les bits de config soient aussi bien present dans le HEX à charger dans le PIC.


Code : Tout sélectionner

void main()
{
 int i=0;
 TRISC = 0;
 PORTC = 0;
 
 
 while
(i<5)
 {
 LATC2_bit=1;
 Delay_ms(1000);
 LATC2_bit=0;
 Delay_ms(1000);
 i++;
 }
  
 PWM1_init
(5000);
 PWM1_start();
 PWM1_Set_Duty(50);
 
 while
(1);  // <- boucle sans fin vide
} 


j'en conclue qu'il faut utiliser
PWM2_Init(5000);
etc ..
avec cela on a bien
0x006C 0x9494 BCF TRISC2_bit, BitPos(TRISC2_bit+0)
Aide toi, le ciel ou FantasPic t'aidera


Retourner vers « Langage C »

Qui est en ligne

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