Bonjour
j'aimerais commander un servomoteur à l'aide d'un pic mais je rencontre des pbs pour la génération de pwm.
Voici un code que j'ai fait pour m'entrainer à faire clignoter une led.
****************************** ************
LIST p=16F84
#include <p16F84.inc>
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
OPTIONVAL EQU H'0087'
CBLOCK 0x00c
compteur1 : 8
compteur2 : 8
ENDC
;Initialisations
init
clrf PORTA ; Sorties portA à 0
clrf PORTB ; sorties portB à 0
clrf EEADR ; permet de diminuer la consommation
bsf STATUS,RP0 ; sélectionner banque 1 (permet de mettre les ports en E/S)
movlw OPTIONVAL ; charger masque
movwf OPTION_REG ; initialiser registre option
;Mise des PORTA en sortie (TRISA à 0)
BCF PORTA,0
BCF PORTA,1
bcf STATUS,RP0 ; repasser banque 0 (Permet de modifier l'état des ports)
bsf PORTA,0
bsf PORTA,1
goto start
;**********Droite******
droite
movlw 1000000
movwf compteur1 ;charger compteur 1 à 10000000
droite1
nop ;perdre 1us
decfsz compteur1,f ;boucler tant que compteur pas à 0
goto droite1
return
;*******Programme principal*******
start
bcf STATUS,RP0
bsf PORTA,0
bsf PORTA,1
call droite
bcf STATUS,RP0
bcf PORTA,0
bcf PORTA,1
call droite
goto start
END
****************************** ************
Je devrai obtenir un clignotement toutes les secondes mais je n'ai rien.
j'ai aussi essayé avec le flag du timer
****************************** ***********
LIST p=16F84
#include <p16F84.inc>
OPTIONVAL EQU H'0087'
;INTERMASK EQU H'0000'
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_OFF & _XT_OSC
CBLOCK 0x00C
compteur : 12
ENDC
;Initialisations
init
clrf PORTA ; Sorties portA à 0
clrf PORTB ; sorties portB à 0
clrf EEADR ; permet de diminuer la consommation
movlw OPTIONVAL ; charger masque
movwf OPTION_REG ; initialiser registre option
; movlw INTERMASK
movwf INTCON
bsf STATUS,RP0 ; sélectionner banque 1 (permet de mettre les ports en E/S)
;Mise du PORTA0 en sortie (TRISA à 0)
BCF PORTA,0
BCF PORTA,1
BCF PORTA,2
bcf STATUS,RP0 ; repasser banque 0 (Permet de modifier l'état des ports)
BSF PORTA,0
BSF PORTA,1
BSF PORTA,2
goto start
;******Fonction de temporisation********
tempo
movlw 15
movwf compteur
inter
clrf TMR0
bcf INTCON,T0IF
loop
btfss INTCON,T0IF
goto loop
decfsz compteur,f
goto inter
return
;**********Fonction Principale*************
start
bsf PORTA,0
bsf PORTA,1
bsf PORTA,2
bsf PORTA,3
call tempo
bcf PORTA,0
bcf PORTA,1
bcf PORTA,2
bcf PORTA,3
call tempo
goto start
END
****************************** **********
Meme pb...... Sinon si vous avez une meilleure méthode pour faire des pwm précis je suis preneur! (certains pics n'ont pas cette fonction d'intégrée?)
Merci à bientôt.
-----