Vai al contenuto
PLC Forum


Controlo potenziometro digitale - Potenziometro digitale e PIC


tecnocoating

Messaggi consigliati

tecnocoating

Ciao a tutti,

con un pic18f452 dovrei gestire 5 potenziometri digitali .Qualche anno fà avevo implementato una routine per la gestione di un singolo potenziometro digitale incrementale per l'st7 in asm che pareva funzionare.Vorrei sottoporlo al vostro giudizio per poi in caso possa andare lo tradurrei per il pic. Oppure in caso contrario fatemi sapere se c'è un sistema migliore.

Grazie

;**********************************************************************************************

; ROUTINE LETTURA POTENZIOMETRO DIGITALE TENSIONE " .ckpotv "

;**********************************************************************************************

;**************************** INIZZIALIZZAZIONE REGISTRI

.ckpotv

ld A,#$00

ld direct,A

ld pulse,A

ld A,pot

ld PBDR,A

ld A,#$03

ld encv,A

ld encvn,A

;**************************** LETTURA NUOVO VALORE

.chkenv ld A,encvn ; sposto il nuovo valore nel registro che così diventa il vecchio

ld encv,A ; "

ld A,PADR ; leggo nuovo encoder e faccio l'AND per tenere solo PADR0 e PADR1

and A,#$03 ; "

ld encvn,A ; salvo dato in encvn

call delay

ld A,PADR ; torno a leggere nuovo dato per verificare uguaglianza con vecchio

and A,#$03 ; se uguale proseguo altrimenti torno a ripetere ciclo

cp A,encvn ; "

jrne chkenv ; "

;

;**************************** VERIFICA ROTAZIONE ( HA RUOTATO ?)

cp A,encv ; verifico se l'encoder si è mosso

jrne incp ; si è mosso ,vado a increment."pulse"

cp A,#$03 ; non si è mosso,verifico se i bit PA0 e PA1 sono 11 o 00

jreq expotv ;se sono 11 posso uscire

jp chkenv ;altrimenti torno a leggere

.incp ld A,pulse ; si è mosso quindi incremento pulse

inc A ; "

ld pulse,A ; "

cp A,#$04 ; verifico che i rimbalzi non abbiano caricato maggiormente il registro

jrugt ckpotv ; SI : troppi impulsi,allora ricomincio da capo

jreq sxdxv ; PULSE HA REGISTRATO 4 TRANSITORI QUINDI VADO A VEDERE IL SENSO

jp chkenv ; se non ha ancora raggiunto 4 impulsi torno a leggere

;

;**************************** DETERMINAZIONE SENSO DI ROTAZIONE

.sxdxv ld A,encv ; ha girato a sx o dx

sra A ; "

xor A,encvn ; "

and A,#$01 ; "

cp A,#$00 ; "

jreq dirdxv ; Ha girato a DX

cp A,#$01 ;

jreq dirsxv ; Ha girato a SX

;

.dirsxv ld A,potv

dec A

ld potv,A

ld PBDR,A

ld A,#$00

ld direct,A

jp expotv

;

.dirdxv ld A,potv

inc A

ld potv,A

ld PBDR,A

.expotv ld A,#$00

ld direct,A

ret

;

;********************************************************************************************

; ROUTINE DI RITARDO

;********************************************************************************************

.delay ld Y,A

.D50MS ld X,#$09

.D50M1 ld A,#$0ff

.D50M2

dec A

cp A,#$00

jrc D50M2

DEC X

LD A,X

cp A,#$00

jrc D50M1

ld A,Y

ret

Link al commento
Condividi su altri siti


Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...