• Domingo 22 de Diciembre de 2024, 02:39

Autor Tema:  ¿como Hacer Una Comparacion?  (Leído 2689 veces)

Pegasux

  • Miembro MUY activo
  • ***
  • Mensajes: 130
    • Ver Perfil
¿como Hacer Una Comparacion?
« en: Viernes 23 de Febrero de 2007, 15:31 »
0
Muy buenas. Me gustaria hacer un programa que moviese un motor PAP a una determinada posicion en funcion del valor de la entrada analogica que controlo con un potenciómetro. Lo realizo con un 16F876. El asunto es que realizo la conversión de la entrada analogica y necesito ver si el valor es mayor al que habia antes o menor para saber si he de mover el motor en un sentido o en sentido contrario hasta llegar a la posicion indicada por el valor de la entrada analogica. ¿Alguien tiene alguna idea?
Un saludo.

pic-man

  • Miembro activo
  • **
  • Mensajes: 54
    • Ver Perfil
    • http://micropic.wordpress.com
Re: ¿como Hacer Una Comparacion?
« Respuesta #1 en: Viernes 23 de Febrero de 2007, 15:56 »
0
si programas en ensamblador puedes utilizar la instruccion subwf para realizar la comparacion, esta operacion resta el contenido de W a algun registro f, si el resultado es mayor a 0 (es decir f es mayor que W) la bandera de carry se pone a 1 y la de zero a 0, si el resultado es igual a 0 ambas banderas (carry y zero) se ponen a 1 (f es igual a W) y por ultimo si el resultado es menor que 0 (W es mayor que f) las banderas de carry y zero se ponen a 0, asi que realizando la comparacion y despues checando banderas con btfss o btfsc puedes saber si el valor es mayor o menor al que ya tenias antes

© Jonathan ©

  • Moderador
  • ******
  • Mensajes: 1671
  • Nacionalidad: ar
    • Ver Perfil
    • http://www.einstec.com.ar
Re: ¿como Hacer Una Comparacion?
« Respuesta #2 en: Viernes 23 de Febrero de 2007, 17:32 »
0
Código: Text
  1.  
  2. ADC_COMP          
  3.   bsf    ADCON0,GO_DONE&#59; Inicia la conversion
  4. ;ADC_ESP
  5.   btfsc  ADCON0,GO_DONE &#59; Finalizo la conversion???
  6.   goto  $ - 1         &#59; No, Esperar a que finalice
  7.   Banco_1        &#59; Banco 1
  8.   movf  ADRESL,0  &#59; Guardo Adresl en W
  9.   Banco_0        &#59; Banco 0
  10.   movwf  DATOL    &#59; Almaceno resultado del ADC en registros para trabajos
  11.   movf  ADRESH,0  &#59; Guardo Adresl en W
  12.   movwf  DATOH    &#59; Almaceno resultado del ADC en registros para trabajos
  13.   movf  DATOL,0    &#59; Paso a W, el valor del Set Elegido
  14.   subwf  DATO_L,0  &#59; Resto Valor (W = DATOL - W)
  15.   btfss  STATUS,C  &#59; Miro Carry de STATUS
  16.   call  SUPERIOR    &#59; El valor aumento
  17.   ..
  18.         ...                                    &#59; De lo contrario es menor
  19.  
  20.  

Esto es un pedazo de codigo de un programa que hice una ves, se puede mejorar para saber si el valor sigue siendo igual, osea si no vario, pero no necesitaba mas que esto en su momento, lo que hace es leerme el ADC y saltar a superior si el valor es superior al valor anterior almacenado, te lo dejo para que le des forma a la idea que te dio pic-man. De hecho esta hecho tal como el dijo. Saludos :)
EINSTEC Tecnología «La única fuente del conocimiento es la experiencia.»

«Lo importante es no dejar de hacerse preguntas.»

Pegasux

  • Miembro MUY activo
  • ***
  • Mensajes: 130
    • Ver Perfil
Re: ¿como Hacer Una Comparacion?
« Respuesta #3 en: Viernes 23 de Febrero de 2007, 20:00 »
0
Muchas gracias a los dos, no habia reparado en esa instruccion. Voy a examinarlo detenidamente para adaptarlo.
Otra cosilla, pensaba que el bit go_done se escribia en ensamblador solo como "go", viene asi en un ejemplo de un libro que tengo. ¿funciona de las dos formas?

Un saludo.

© Jonathan ©

  • Moderador
  • ******
  • Mensajes: 1671
  • Nacionalidad: ar
    • Ver Perfil
    • http://www.einstec.com.ar
Re: ¿como Hacer Una Comparacion?
« Respuesta #4 en: Viernes 23 de Febrero de 2007, 20:46 »
0
Eso es indiferente, se usa como este definido en el include del micro a utilizar, yo reforme esa palabra y puse go_done para mantener la claridad del codigo fuente. Sobre gustos.. :whistling: . Saludos
EINSTEC Tecnología «La única fuente del conocimiento es la experiencia.»

«Lo importante es no dejar de hacerse preguntas.»

allisap

  • Miembro MUY activo
  • ***
  • Mensajes: 259
  • Nacionalidad: mx
    • Ver Perfil
Re: ¿como Hacer Una Comparacion?
« Respuesta #5 en: Viernes 23 de Febrero de 2007, 22:14 »
0
Citar
Me gustaria hacer un programa que moviese un motor PAP a una determinada posicion en funcion del valor de la entrada analogica que controlo con un potenciómetro.

Eso que quieres hacer es un circuito maestro-esclavo..
si lo unico que quieres es que el motor siga al potenciometro la version analogica es mejor la puedes hacer con un  opamp y unos transistores para manejar un motor de DC (no PAP)  B)

si necesitas hacerlo con un motor a pasos creo que debes definir un rango de ventana cercano al valor analogo medido del pot donde el motor no se mueva, porque de lo contrario el motor estaria girando en una u otra direccion y no se quedaria quieto (por la resolucion propia del motor) :)


saludos

Pegasux

  • Miembro MUY activo
  • ***
  • Mensajes: 130
    • Ver Perfil
Re: ¿como Hacer Una Comparacion?
« Respuesta #6 en: Sábado 24 de Febrero de 2007, 00:43 »
0
Hola de nuevo. Cierto, voy a definir unas constantes que son el mínimo y el máximo, y una variable que es la posición del motor. Pongamos por ejemplo que el motor se va a mover 16 posiciones, de 0000 a 1111, cogeré los 4 bits de más peso del ADRESH para tener una equivalencia directa entre la posición del motor y la del potenciómetro en sus valores máximo y mínimo de recorrido. Si el valor del potenciometro es mayor mueve el motor un paso adelante, si es menor, un paso atras, y si es igual pues se queda como está. Para que lo entendais mejor os dire que lo quiero para implementar electronicamente el acelerador de un coche/moto/segadora.... En vez de llevar un cable metalico del pedal al carburador, lleva un potenciometro, un pic y un motor PAP.
Un saludo y gracias de nuevo.