Autor Tema: cuenta adelante y atras de un encoder  (Leído 2794 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado alogic.on

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 772
cuenta adelante y atras de un encoder
« en: 13 de Noviembre de 2007, 10:23:34 »
Hola
estoy inmerso en mi proyecto midiScratch y probando que tal va. pero tengo un problemilla con el que no habia contado. os pongo en escena la parte del programa que me esta dando problemas
el programa cuando detecta un pulso alto en pb0 salta la interrupción hace la rutina para verificar tipo de interrupcionn bal bla bla.... una vez esta en la de pb0 reconoce en que direccion esta girando el encoder si va hacia adelante no tiene ningun problema un contador asciende hasta 6 pulsos cuando llega a seis salta lo pone a cero y suma al segundo contador 1 si llega a 127 este segundo suma uno a un tercero poniendo a cero los dos anteriores, esta es la rutina
Código: [Seleccionar]
PB0_ADELANTE
                        INCF SUMA ;INCREMENTA SUMA
MOVLW .6
BCF STATUS,Z
SUBWF SUMA,w ;RESTA W CON SUMA
BTFSS STATUS,Z ;SI ES IGUAL SALTA
RETURN ;SI NO ES IGUAL VA A LA SALIDA
CLRF SUMA ;SI FUE IGUAL PONE A CERO SUMA

;DIRECCION DE STEP
INCF STEP ;INCREMENTA 1 EN STEP
BCF STATUS,Z
MOVLW .128
SUBWF STEP,w ;RESTA 128 A STEP
BTFSS STATUS,Z ;SI SON IGUALES SALTA
RETURN ;SI NO VA A LA SALIDA
CLRF STEP ;PONE A CERO STEP

;DIRECCION DEL REGISTRO PHRASE
INCF PHRASE ;INCREMENTA 1 EN PHRASE
RETURN ;VA A LA SALIDA
pero contando hacia atras ya es otra historía por que si los contadores estan a cero se ponen a 256 o cosas raras he probado mil maneras que se me han ocurrido con poco exito, solo si ya ha andado algún paso hacia adelante descuenta como es debido, hasta llegar a 000-000-0 que se vuelve loco, esta es la rutina a la que llama el prog cada vez que detecta un pulso hacia atras
Código: [Seleccionar]
PB0_ATRAS
BCF STATUS,RP0 ;PAGE 0
;--------------------------------
MOVF SUMA,W               
ADDWF STEP,W
ADDWF SUMA,W
MOVWF RESTA
CLRW
SUBWF RESTA
BTFSC STATUS,Z                 ;0+0+0=return
RETURN
;--------------------------------
BCF LECTOR,0 ;PONE A CERO PARA INDICAR QUE ESTE PASO ANDO HACIA ATRAS
BSF LECTOR,1
DECFSZ SUMA
RETURN

MOVLW .6
MOVWF SUMA
DECFSZ STEP
RETURN
CLRF SUMA
CLRF STEP
CLRF PHRASE

DECFSZ PHRASE
RETURN
CLRF SUMA
MOVLW .127
MOVWF STEP
CLRF PHRASE
RETURN
teneis alguna idea de como hacerlo  :shock: :shock: como vereis al principio de la rutina hay una suma de los tres registro si es cero deberia return al programa pero....  :? :? no funciona muy bien
si quereis descargaros la simulacion en isis y el asm esta aquí que si no me he explicado bien, podeis ver lo que sucede haciendo que los pasos del encoder en la simulacion vayan hacia atras, cualquier indicacion de como plantearlo será bien recibida

gracias y un saludo
« Última modificación: 13 de Noviembre de 2007, 10:27:06 por alogic.on »

Desconectado stk500

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4919
Re: cuenta adelante y atras de un encoder
« Respuesta #1 en: 13 de Noviembre de 2007, 10:40:53 »
Hola Alogic
 pero dame detalle lo que tu quiere hacer y ver si yo pillo el hilo :D
un saludo Alogic
 :mrgreen:

Desconectado alogic.on

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 772
Re: cuenta adelante y atras de un encoder
« Respuesta #2 en: 13 de Noviembre de 2007, 12:20:01 »
mmmm mas detalles.... hasta que se me acabe el habla¡¡¡(y las llemas de los dedos)

esto es el SPP sirve para indicar a un secuenciador esclavo la posicion donde tiene que comenzar una secuencia. es el byte de estatus + msb + lsb entonces el contador esta compuesto de tres registros 127+127+6 porque:
MIDI proporciona un medio simple para sincronizar dos dispositivos  Reloj MIDI. Este reloj produce unos pulsos a razón de 24 por cada cuarto de nota (un cuarto de nota se llama también una negra). El único requisito es que los dispositivos sean compatibles con el reloj MIDI (casi todos lo son) y que se le ordene a cada uno actuar, bien como master, bien como esclavo.
y como cada reloj midi se hace cada 24 pulsos , el contador incrementa SUMA si llega a seis lo pone a cero y aumenta LSB y si este llega a 127 pone a cero SUMA y LSB sumando uno a MSB hasta 127 el problema llega a la hora de descontar que se vuelve loco dando valores fuera de lo que necesito cuando esta en 000+000+0 y el encoder gira hacia atras :? :?

hablando de encoders yo para conocer la direccion de giro del encoder utilizo la interrupción externa, pero como se hace testeando el estado de las salidas del encoder__xx__xx
            _xx__xx_
un saludo y gracias

Desconectado alogic.on

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 772
Re: cuenta adelante y atras de un encoder
« Respuesta #3 en: 13 de Noviembre de 2007, 14:26:40 »
no puede ser tres dias comiendome la cabeza con esto, me decido a preguntar, pues no daba con la solución aun siendo una chorrada, y me voy a contestar a mi mismo que he encontrado la solucion el mismo dia que pregunto
lo he solucionado asi
Código: [Seleccionar]

;CONTADOR DESCENDENTE DE TRES BYTES 127-127-6
;CADA VEZ QUE SE LLAMA A PB0_ATRAS SE DESCUENTA UNA UNIDAD AL CONTADOR HASTA LLEGAR A CERO
PB0_ATRAS
BCF STATUS,RP0 ;PAGE 0
BCF LECTOR,0 ;PONE A CERO PARA INDICAR QUE ESTE PASO ANDO HACIA ATRAS
BSF LECTOR,1

;--------------------------------
;--------------------------------
CLRW
SUBWF SUMA,W
BTFSC STATUS,Z
GOTO PB_STEP
DECFSZ SUMA
RETURN
PB_STEP
CLRW
SUBWF STEP,W
BTFSC STATUS,Z
GOTO PB_PHRASE
MOVLW .6
MOVWF SUMA
DECFSZ STEP
RETURN
PB_PHRASE
CLRW
SUBWF PHRASE,W
BTFSC STATUS,Z
RETURN
DECF PHRASE
MOVLW .6
MOVWF SUMA
MOVLW .127
MOVWF STEP
RETURN

cuando todo esta a cero se queda a cero al contar hacia atras, si conocen otra manera de plantearlo estaría encantado de conocerlo

gracias y un saludo

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: cuenta adelante y atras de un encoder
« Respuesta #4 en: 13 de Noviembre de 2007, 18:36:13 »
Hola!

Acá te planteo una posibilidad para dar la vuelta "infinita".

Si, los contadores valen 0 0 0 y ocurre un paso hacia atras, los contadores valdran 6 127 127

Código: [Seleccionar]
;CONTADOR DESCENDENTE DE TRES BYTES 127-127-6
;CADA VEZ QUE SE LLAMA A PB0_ATRAS SE DESCUENTA UNA UNIDAD AL CONTADOR HASTA LLEGAR A CERO
PB0_ATRAS
BCF STATUS,RP0 ;PAGE 0
BCF LECTOR,0 ;PONE A CERO PARA INDICAR QUE ESTE PASO ANDO HACIA ATRAS
BSF LECTOR,1

;--------------------------------
;--------------------------------
DECF SUMA,F
BTFSS SUMA,7
RETURN

MOVLW .6
MOVWF SUMA


PB_STEP DECF STEP,F
BTFSS STEP,7
RETURN

MOVLW .127
MOVWF STEP


PB_PHRASE DECF PHRASE,F
BTFSS PHRASE,7
RETURN

MOVLW .127
MOWF PHRASE
RETURN

No se si eso era lo que estabas buscando o una variante para poner todo a cero :D
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado alogic.on

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 772
Re: cuenta adelante y atras de un encoder
« Respuesta #5 en: 14 de Noviembre de 2007, 05:52:11 »
OIOIOOI munchsas gracias. a mi no se me hubiese ocurrrido  :( es mas me ha costado tres dias resolverlo. pero casi que mejor asi, que cuente hacia atras al llegar a cero cero, de esa forma no se pierden pasos del encoder.

un saludo y gracias

 

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: cuenta adelante y atras de un encoder
« Respuesta #6 en: 14 de Noviembre de 2007, 15:36:41 »
De nada!

Hay veces en la que uno está demasiado sumergido en el problema y ni logra ver la solución, por más fácil que resulte una vez encontrada. Nos sucede a todos. Así que fué una buena idea pedir opinión aquí en el foro en este caso.

Saludos!
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado microcom

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 568
Re: cuenta adelante y atras de un encoder
« Respuesta #7 en: 17 de Noviembre de 2007, 17:34:32 »
[sumergido en el problema y ni logra ver la solución, por más fácil que resulte una vez encontrada. Nos sucede a todos. Así que fué una buena idea pedir opinión aquí en el foro en este caso.

Saludos!
[/quote]
 
BrunoF todo bien---- boy a echarle un aestudiada e este caso

gracias


 

anything