PIC18F4321

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

Puede que también te guste...

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *