SERVO DRIVER       Torna indietro
© by Vittorio Crapella

Lo schema qui sotto raffigurato é nato per risolvere il seguente problema:

servo.gif

Argomenti sui Radiocomandi        Altro schema per servocontrolli

Da una richiesta via E-Mail:

"..Mi servirebbe un circuito che mi indica con 2 led il senso di direzione di un servocomando (quelli per automodellismo), il circuito deve essere alimentato a 5 V..."

POSSIBILE SOLUZIONE

PROGRAMMA:             Per prelevare SERVO.ZIP

	.title  "SERVO"		;indicatore di direzione per servo
	.vers   "ST62T10"  	
	;       8 Mhz		; 24/07/2000 by Vittorio Crapella

lsb1	.def    084h 		;valore di servo a riposo
msb1	.def    085h 
lsb	.def    086h 		;valore di servo in movimento
msb	.def    087h 

	.org    0880h

;***  Setta la porta B
        ldi     port_b,00000000b  	;TUTTI INPUT
	ldi     pdir_b,00000000b
	ldi     popt_b,00000000b

;***  Setta la porta A
	ldi     port_a,00000000b 	;3 out
        ldi     pdir_a,00000111b 
        ldi     popt_a,00000111b 


;PROGRAMMA PRINCIPALE
main
	ldi	wdog,255
	call	delay
	clr	x
	clr	y
iniz	ldi	wdog,255
	jrr	0,port_b,iniz	;resta qui fino ad inizio impulso positivo
cont	ldi	wdog,255
	jrr	0,port_b,fine	;se ingresso va a zero salta
	inc	x		;altrimenti valuta tempo alto servo
	jrnz	cont
	inc	y
	jrnz	cont
fine	ld	a,x		;mette valori servo default
	ld	lsb1,a
	ld	a,y
	ld	msb1,a
ctrl	ldi	wdog,255 	  ;aspetta che l'impulso vada alto
	jrr	0,port_b,ctrl
	clr	x
	clr	y
misura	ldi	wdog,255
	jrr	0,port_b,zero	;se ingresso va a zero salta
	inc	x		;altrimenti valuta tempo alto servo
	jrnz	misura
	inc	y
	jrnz	misura
zero	ld	a,y
	cp	a,msb1		;msb1 contiene partenza defoult servo
	jrz	verx		;se permane uguale verifica x
	jp	verall		;altrimenti deve valutare dove si muove
verx	ld	a,x
	cp	a,lsb1
	jrnz	vax		;essendo diverso valuta di quanto
	jp	nill		;non si muove dalla partenza e tiene spento
vax	jrnc	suba		;a é > di x pertanto va  a sottrarre
	jp	menx		;altrimenti x > di a 
suba	sub	a,lsb1
cpia	cpi	a,1		;verifica se é diverso alemeno di 1
	jrc	nill		;é praticamnete uguale e salta
	jp	verall		;é oltre 1 pertanto va valutato se on/off
nill	ldi	a,00000100b 	;spegne rosso e giallo, accende verde
	ld	port_a,a
	jp	rita
menx	ld	a,lsb1
	sub	a,x
	jp	cpia
verall	ld	a,y
	cp	a,msb
	jrz	oltre		;=
	jrnc	piu_		;>
	jp	meno		;<
piu_	jp	piu
oltre	ld	a,x
	cp	a,lsb1
	jrnz	vai2
	jp	ctrl
vai2	jrc	min
	sub	a,lsb1
	cpi	a,2
	jrnc	piu
	jp	rita
piu	ldi	a,00000001b	;accende giallo
	ld	port_a,a
	jp	aspet
min	ld	a,lsb1
	sub	a,x
	cpi	a,2
	jrnc	meno
	jp	rita
meno	ldi	a,00000010b	;accende rosso
	ld	port_a,a
aspet	ld	a,y
	ld	msb,a
	ld	a,x
	ld	lsb,a
rita	call	delay
	jp	ctrl
	
delay   ldi	x,2		;perde tempo circa 20 mS
ldiy	ldi	wdog,255
	ldi	y,255
decy	dec	y
	jrnz	decy
	dec	x
	jrnz	ldiy
	ret	
        
[ Elettronica ]        Torna indietro