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
ASM: routine servomoteur 16F88
- F6FCO

Expert- Messages : 2846
- Âge : 99
- Enregistré en : décembre 2017
- Localisation : Banlieue sud de Klyntar
- Contact :
Une petite routine pour commander un servomoteur de modélisme. Le PWM à été calculé pour un xtal de 4Mhz. Testé sur servomoteur MG996R de Tower Pro.
Fichier main:
Fichier routines:
Fichier tempos:
Fichier main:
Code : Tout sélectionner
;******************************************************************************
; F6FCO - 16mai2024
; routine servomoteur
; xtal horloge 4Mhz
;
; NOTE: - Ce code à été mis au point avec un servomoteur MG996R Tower Pro et n'a pas
; été testé avec d'autres servosmoteurs.
; Il est possible que les valeurs duty-cycle ne soient pas adaptées pour
; un autre type, dans ce cas il faudra consulter le datasheet du servo et recalculer les tempos.
; - Pour un positionnement correct j'ai du adapter les valeurs de tempo
; par rapport à celles données par le datasheet.
; - Le PWM est calculé pour une horloge de 4Mhz. Pour une autre fréquence
; d'horloge il faudra recalculer les tempos.
; - Pour des valeurs d'angles intermédiaires, recalculer les tempos.
;
;******************************************************************************
List p=16F88
#include <p16F88.inc>
__CONFIG _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_ON & _PWRTE_OFF & _WDT_OFF & _XT_OSC
__CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF
OPTIONVAL EQU H'0087' ; Valeur registre option, Prescaler à 256
#define servo1 PORTA,0
#define cycle d'50' ; nombre de cycles que met le servo pour atteindre la position
BANK0 macro
bcf STATUS , RP0
endm
BANK1 macro
bsf STATUS , RP0
endm
CBLOCK 0x00C
cmpt :1
w_temp :1 ; Sauvegarde du registre W
status_temp :1 ; Sauvegarde du registre STATUS
Reg_1 :1
Reg_2 :1
Reg_3 :1
conchita :1 ; variable à tout faire
ptr :1
ENDC
org 0x000 ; Adresse de départ après reset
goto init ; Adresse 0: initialiser
; ------------------------ Init
init
clrf PORTA
clrf PORTB
clrf EEADR ; diminue la consommation
BANK1
movlw OPTIONVAL
movwf OPTION_REG
clrf ANSEL ; broches toutes en I/O
movlw b'00000000'
movwf TRISA
movwf TRISB
BANK0
;call _0degres_servo1
;call tempo2s4
;call tempo2s4
;call _180degres_servo1
; -----------------------------------
main
;goto main
; éxécute des aller/retours de 0 à 180°
call _0degres_servo1
nop
call tempo2s4 ; tempo
call tempo2s4 ; tempo
nop
call _90degres_servo1
nop
call tempo2s4 ; tempo
call tempo2s4 ; tempo
nop
call _180degres_servo1
nop
call tempo2s4 ; tempo
call tempo2s4 ; tempo
nop
call _90degres_servo1
nop
call tempo2s4 ; tempo
call tempo2s4 ; tempo
nop
goto main
#include <Routines.asm>
#include <Tempos servo.asm>
END
Fichier routines:
Code : Tout sélectionner
_0degres_servo1
movlw cycle
movwf ptr
p1 bsf servo1
call tempo0.2ms4
bcf servo1
call tempo19.8ms4
decfsz ptr
goto p1
return
_90degres_servo1
movlw cycle
movwf ptr
p2 bsf servo1
call tempo1ms4
bcf servo1
call tempo19ms4
decfsz ptr
goto p2
return
_180degres_servo1
movlw cycle
movwf ptr
p3 bsf servo1
call tempo2ms4
bcf servo1
call tempo18ms4
decfsz ptr
goto p3
return
Fichier tempos:
Code : Tout sélectionner
; ----------------- 0° avec xtal 4MHz
tempo0.2ms4
; Délai 200 Cycles de la machine
; Durée du délai 0.2 millisecond
; Fréquence de l'oscillateur 4 MHZ
movlw .66
movwf Reg_1
decfsz Reg_1,F
goto $-1
nop
return
tempo19.8ms4
; Délai 19 800 Cycles de la machine
; Durée du délai 19.8 millisecond
; Fréquence de l'oscillateur 4 MHZ
movlw .181
movwf Reg_1
movlw .26
movwf Reg_2
decfsz Reg_1,F
goto $-1
decfsz Reg_2,F
goto $-3
nop
nop
return
; ----------------- 90° avec xtal 4MHz
tempo1ms4
; Délai 1 000 Cycles de la machine
; Durée du délai 1 millisecond
; Fréquence de l'oscillateur 4 MHZ
movlw .75
movwf Reg_1
movlw .2
movwf Reg_2
decfsz Reg_1,F
goto $-1
decfsz Reg_2,F
goto $-3
return
tempo19ms4
; Délai 19 000 Cycles de la machine
; Durée du délai 19 millisecond
; Fréquence de l'oscillateur 4 MHZ
movlw .171
movwf Reg_1
movlw .25
movwf Reg_2
decfsz Reg_1,F
goto $-1
decfsz Reg_2,F
goto $-3
nop
nop
return
tempo1.5ms4
; Délai 1 500 Cycles de la machine
; Durée du délai 1.5 millisecond
; Fréquence de l'oscillateur 4 MHZ
movlw .241
movwf Reg_1
movlw .2
movwf Reg_2
decfsz Reg_1,F
goto $-1
decfsz Reg_2,F
goto $-3
nop
nop
return
tempo18.5ms4
; Délai 18 500 Cycles de la machine
; Durée du délai 18.5 millisecond
; Fréquence de l'oscillateur 4 MHZ
movlw .5
movwf Reg_1
movlw .25
movwf Reg_2
decfsz Reg_1,F
goto $-1
decfsz Reg_2,F
goto $-3
return
; ----------------- 180° avec xtal 4MHz
tempo2ms4
; Délai 2 000 Cycles de la machine
; Durée du délai 2 millisecond
; Fréquence de l'oscillateur 4 MHZ
movlw .151
movwf Reg_1
movlw .3
movwf Reg_2
decfsz Reg_1,F
goto $-1
decfsz Reg_2,F
goto $-3
nop
nop
return
tempo18ms4
; Délai 18 000 Cycles de la machine
; Durée du délai 18 millisecond
; Fréquence de l'oscillateur 4 MHZ
movlw .95
movwf Reg_1
movlw .24
movwf Reg_2
decfsz Reg_1,F
goto $-1
decfsz Reg_2,F
goto $-3
return
tempo1.8ms4
; Délai 1 800 Cycles de la machine
; Durée du délai 1.8 millisecond
; Fréquence de l'oscillateur 4 MHZ
movlw .85
movwf Reg_1
movlw .3
movwf Reg_2
decfsz Reg_1,F
goto $-1
decfsz Reg_2,F
goto $-3
return
tempo18.2ms4
; Délai 18 200 Cycles de la machine
; Durée du délai 18.2 millisecond
; Fréquence de l'oscillateur 4 MHZ
movlw .161
movwf Reg_1
movlw .24
movwf Reg_2
decfsz Reg_1,F
goto $-1
decfsz Reg_2,F
goto $-3
nop
nop
return
; ---------------------------------------------------
tempo2s4
; Délai 2 000 000 Cycles de la machine
; Durée du délai 2000 millisecond
; Fréquence de l'oscillateur 4 MHZ
movlw .93
movwf Reg_1
movlw .38
movwf Reg_2
movlw .11
movwf Reg_3
decfsz Reg_1,F
goto $-1
decfsz Reg_2,F
goto $-3
decfsz Reg_3,F
goto $-5
nop
nop
return
Retourner vers « Recueil de mini programmes »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité
