Lenguaje ASM
Programando el Servo Motor SG90 – PWM
Aqui hay un ejemplo de código para controlar un servo motor SG90 con un microcontrolador PIC18F4321 utilizando el módulo PWM. El código está escrito en lenguaje ensamblador (ASM) y utiliza la librería de configuración de periféricos (PPL) de Microchip para simplificar la configuración del módulo PWM. Aquí tienes el código:
; Configuración del oscilador interno
ORG 0x0000
GOTO Main
ORG 0x0008
RETFIE
; Rutina de interrupción
ISR:
; Aquí se pueden agregar instrucciones para manejar interrupciones
RETFIE
; Configuración del módulo PWM y del servo motor
Main:
; Configuración del oscilador interno a 8 MHz
MOVLW 0x70
MOVWF OSCCON
; Configuración del módulo PWM
MOVLW 0x07
MOVWF PR2
MOVLW 0x00
MOVWF CCP1CON
MOVLW 0x0C
MOVWF T2CON
; Configuración del pin de salida para el servo motor
BANKSEL TRISC
BCF TRISC, 2
BANKSEL ANSELH
BCF ANSELH, 0
; Configuración del valor inicial del ciclo de trabajo (1 ms)
MOVLW 0x1F
MOVWF CCPR1L
MOVLW 0x00
MOVWF CCPR1H
; Habilitar módulo PWM
BANKSEL PIR1
BCF PIR1, TMR2IF
BANKSEL T2CON
BSF T2CON, TMR2ON
BANKSEL CCP1CON
BSF CCP1CON, CCP1EN
; Ciclo principal del programa
LOOP:
; Ciclo de trabajo mínimo (1 ms)
MOVLW 0x1F
MOVWF CCPR1L
MOVLW 0x00
MOVWF CCPR1H
CALL WAIT_MS
; Ciclo de trabajo máximo (2 ms)
MOVLW 0x3E
MOVWF CCPR1L
MOVLW 0x00
MOVWF CCPR1H
CALL WAIT_MS
GOTO LOOP
; Rutina para esperar un tiempo determinado en milisegundos
WAIT_MS:
MOVLW D'10'
LOOP_MS:
MOVLW D'245'
LOOP_US:
NOP
DECFSZ WREG, F
GOTO LOOP_US
DECFSZ 0x20, F
GOTO LOOP_MS
RETURN
Este código configura el módulo PWM para generar una señal de 50 Hz con un ciclo de trabajo variable entre 1 ms y 2 ms para controlar la posición del servo motor SG90. El ciclo principal del programa repite continuamente dos ciclos de trabajo diferentes, lo que mueve el servo de una posición a otra.
Ten en cuenta que la función WAIT_MS utiliza un temporizador de software para esperar un tiempo determinado en milisegundos. La implementación exacta de esta función puede variar dependiendo de la velocidad del procesador y de cómo se ha configurado el osc