tecnocoating Inserito: 1 marzo 2009 Segnala Inserito: 1 marzo 2009 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
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora