ciao marcosinati..
come in oggetto ci sono riuscito , attualmente il servo extends lavora su un 25, 30% di escursione in più ..
quello che ho ottenuto , come volevo è un semplice algoritmo, che non facesse uso dei timer, per motivi di didattica, devo spiegare a dei ragazzi di 3 industriale, che ne pensi?
Il cuore dell'algoritmo è la seguente formula
HALF = 118 + (ATTESA/2)
DOVE ATTESA E IL TEMPO TRASCORSO DA DOPO IL PRIMO MILLISECONDO DAL SEGNALE IN INGRESSO,
ATTESA VARIA DA circa 34 A 201 CIRCA, HO USATO UN HITEC OPTIMA7 2,4 GHz
quindi da un estremo half vale 135... dall'altro 228, mentre il tempo medio si sa è di 178
se hai un idea migliore fammi sapere.. anche perchè questa soluzione non offre un parametro tale che se applicato si può aumentare o diminuire l'escursione.
ecco il sorgernte
;-----------------------------------------------------
; EXTENDS.ASM - Dimostrativo di semplice estensione escursione servocomando
;
; created by Fausto Giudice
;
www.openflight.it
;-----------------------------------------------------
PROCESSOR 16F628
RADIX DEC
INCLUDE "P16F628.INC"
__CONFIG 11110100010000B
ATTESA EQU 32
CL EQU 33
HALF EQU 34
H_COUNT EQU 35
L_COUNT EQU 36
#DEFINE PULSEIN PORTB,5
#DEFINE PULSEOUT PORTB,0
ORG 0
BSF STATUS,RP0 ; ** GO TO BANK 1
MOVLW b'00000000'
MOVWF TRISA
movlw b'11110010'
movwf TRISB
BCF STATUS,RP0 ; ** RETURN BANK 0
;
; _________________________________________
;
; START PROGRAM
; ------------------------------------
;
LOOP BTFSS PULSEIN ; FINCHE NON LEGGE 1 RIMANE QUI
GOTO $-1
CALL PP ; ATTENTE UN MILLI SECONO
YY BTFSS PULSEIN ;
GOTO SHOW
INCF ATTESA,F ; INCREMENTA COUNT
GOTO YY
SHOW MOVF ATTESA,W
MOVWF HALF
BCF STATUS,C
RRF HALF,F
MOVLW 118
ADDWF HALF,F
CALL PULSE_OUT ; ATTESA
CALL DELAY_20 ; IMPULSO ESTESO
CLRF ATTESA ; RESETTA COUNT
GOTO LOOP ; TORNA A LEGGERE DALLA PORTA DI INGRESSO
; _________________________________________
;
; END PROGRAM
; ------------------------------------
; _________________________________________
;
; GENERA UN IMPULSO PIU ESTESO SU PORTA1 RISPETTO A QUELLO ENTRANTE IN PORTA0
; ------------------------------------
;
; 900 + 5 * ATTESA = da 900uS se ATTESA è = 0 , a max 2000uS se ATTESA = 200
PULSE_OUT BSF PULSEOUT
movf HALF,W ; 1uS |
movwf CL ; 1uS | 4uS
goto $+1 ; 2uS |
goto $+1 ; 2uS |
decfsz CL,F ; 1uS | 5uS * (178 - 1) = 885uS
goto $-2 ; 2uS |
nop ; 1uS
movf ATTESA,W ; 1uS
movwf CL ; 1uS
btfsc STATUS,Z ; 1uS nel caso in cui ATTESA = 0 allora salta alla fine
RETURN ; 2uS
goto $+1 ; 2uS
goto $+1 ; 2uS |
decfsz CL,F ; 1uS | 5uS * (ATTESA - 1) =
goto $-2 ; 2uS |
BCF PULSEOUT
RETURN
;
; _________________________________________
;
; GENERA UN RITARDO DI 1 mS
; ------------------------------------
;
PP MOVLW 178 ; 1uS |
MOVWF CL ; 1uS | 4uS
GOTO $+1 ; 2uS | ****** ATTESA DI 0.9 mS ******
GOTO $+1 ; 2uS |
DECFSZ CL,F ; 1uS | 5uS * (177 - 1) = 885uS + 4 + 2 = 891 uS circa
GOTO $-2 ; 2uS |
RETURN
;
; _________________________________________
;
; GENERA UN RITARDO DI 20 mS
; ------------------------------------
;
DELAY_20 movlw 20
movwf H_COUNT
movlw 10
movwf L_COUNT
decfsz L_COUNT,F
goto $-1
decfsz H_COUNT,F
goto $-3
RETURN
END
Citazione:
Originalmente inviato da marcosinatti Nooo
L'impedenza non c'entra niente, il problema è sulle soglie di tensione e basta.
Poi sicuramente avranno anche impedenze diverse, ma comunque talmente alte che non influiscono di certo sulla tensione dei segnali provenienti dalla rx. |