salve a tutti,
volevo realizzare un sontrollo servo oscillante con una velocità maggiore, la realizzazione è piuttosto semplice, c'è pure esplicitamente suggerita negli appunti del tanzilli:
PIC appunti di utilizzo
... solo che piuttosto che incrementare di un unità alla volta volevo muovermi a passi di 10 sia in senso crescente che decrescente:
in sostanza le istruzioni di INCF e DECF le ho sostituite con...
MOVF AL,W
ADDLW 10
e
MOVLW 10
SUBLW AL
Il problema è che il servo fa un avanti e un indietro e poi si blocca, come se la seconda GOTO MAINLOOP non venisse mai eseguita.
;-----------------------------------------------------
; SERVO.ASM - Dimostrativo pilotaggio servocomando
;-----------------------------------------------------
PROCESSOR 16F84A
RADIX DEC
INCLUDE "P16F84A.INC"
__CONFIG 11110100010001B
AL EQU 32 ;angolo
DL EQU 33 ;direzione
CL EQU 34 ;contatore ritardo
ORG 0
BSF STATUS,RP0 ;Attiva banco 1
CLRF TRISA ;Rende PORTA un'uscita
CLRF TRISB ;Rende PORTA un'uscita
BCF OPTION_REG,PSA ;prescaler a tmr0
BCF OPTION_REG,T0CS ;clock interno
BCF OPTION_REG,1 ;Prescaler /64
BCF STATUS,RP0 ;Ritorna al banco 0
MOVLW 120 ;angolo iniziale 1,5mS
MOVWF AL
CLRF DL
MAINLOOP
BTFSS INTCON,T0IF
GOTO $-1 ;attende overflow timer
CALL SERVO ;emette singolo impulso
BTFSC DL,0 ;controlla se direz=0
GOTO MAIN2
MOVF AL,W
ADDLW 10
MOVWF AL
XORLW 220 ;controlla se =220
BTFSC STATUS,Z
BSF DL,0 ;se si cambia direzione
MOVLW 0
movwf TMR0
BCF INTCON,T0IF ;resetta bit overflow
GOTO MAINLOOP ;e torna a mainloop
MAIN2
MOVLW 10
SUBLW AL
MOVWF AL
XORLW 20 ;controlla se =20
BTFSC STATUS,Z
BCF DL,0 ;se si cambia direzione
MOVLW 0
movwf TMR0
BCF INTCON,T0IF ;resetta bit overflow
GOTO MAINLOOP ;e torna a mainloop
;-----------------------------------------------------
; Genera impulso di comando per un servocomando
; standard (per clock 4MHz e PIC 12F/16F).
; Input: AL da 0 a 255 ( uS = 900 + 5*AL )
; Usa: AL,CL ( AL = (uS-900)/5 )
; Output: pin RA0 (Impulso da 900 a 2175 uS)
;-----------------------------------------------------
SERVO BSF PORTB,1
MOVLW 178
MOVWF CL
GOTO $+1
GOTO $+1
DECFSZ CL,F
GOTO $-2
NOP
MOVF AL,W
MOVWF CL
BTFSC STATUS,Z
GOTO $+5
GOTO $+1
GOTO $+1
DECFSZ CL,F
GOTO $-2
BCF PORTB,1
RETURN
END