Autor Tema: Problemas con Vref y comparadores, con 16F627A  (Leído 5700 veces)

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

Desconectado arcachofo

  • PIC16
  • ***
  • Mensajes: 126
    • Foro para usuarios Linux.
Problemas con Vref y comparadores, con 16F627A
« en: 23 de Septiembre de 2008, 02:30:50 »
Hola a todos... trato de utilizar los comparadores con Vref interna, los comparadores los he usado con las entradas desde fuera y van ok, el problema lo tengo cuando intento habilitar la generación interna de Vref, el caso es que mi editor muestra colores distintos segun sea una instruccon, un registro, un valor, etc.. pero cuando escribo VRCON se queda en negro.. como si no fuera un registro válido,... en el datasheet viene como VRCON y los ejemplos tambien, no sé que puede estar fallando...
Seguramente será cualquier tontería, pero estoy empezando con esto de los pics, le he dado mil vueltas y creo que todo está bien, ya no sé donde mirar; este es el código asm donde trato de habilitar comparadores con Vref:

Código: [Seleccionar]
; --------------------- Configura Comparadores --------------------------
; -----------------------------------------------------------------------
movlw b'00000010' ;Activar comparadores con Vref interna
movwf CMCON
bsf STATUS,5 ;Banco 1
movlw b'10101111' ;Activar Vref = 3.125v (umbral sobrecarga motores)
movwf VRCON
bcf STATUS,5


Desconectado AKENAFAB

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3227
Re: Problemas con Vref y comparadores, con 16F627A
« Respuesta #1 en: 23 de Septiembre de 2008, 04:34:34 »
Revisa el archivo include


Ahi vienen las definiciones, en caso de que no sirva la definicon por algun motivo , definela en tu programa o usa la direccion.


Código: ASM
  1. MOVLW   2
  2.                 MOVWF   CMCON                   ; COMPARADOR MODO 2
  3.                                                                 ;RA0-RA1 = INPUTS
  4.                                                                
  5.  
  6.                 BANK1
  7.  
  8.                 MOVLW   0X03
  9.                 MOVWF   TRISA
  10.                 CLRF    TRISB
  11.                
  12.                 BANKSEL VRCON
  13.  
  14.                 MOVLW   B'10100100'             ;ANALOG Vref ENABLE, NO CONECT TO RA2,
  15.                 MOVWF   VRCON                   ;LOW RANGE;  9 --> VR VALUES = 1.875v
  16.  
  17.                 BANKSEL CMCON
  18.  
  19.                 CLRF    PORTB
  20.  
  21. COMPARA
  22.                 BCF     STATUS,C
  23.  
  24.                 MOVF    CMCON,W
  25.                 ANDLW   0XC0   
  26.  
  27.                 MOVWF   CM_TEMP
  28.                 RRF             CM_TEMP,F
  29.                 RRF             CM_TEMP,F
  30.                 SWAPF   CM_TEMP,W

VRCON <--> 0x9F                    <--------- Este es el registro y esta en el banco 1

Debe haber algun problemilla raro porque veo bien tu programa!


Supongo que trabajas en MPLAB

Saludos!





Desconectado arcachofo

  • PIC16
  • ***
  • Mensajes: 126
    • Foro para usuarios Linux.
Re: Problemas con Vref y comparadores, con 16F627A
« Respuesta #2 en: 23 de Septiembre de 2008, 08:16:50 »
Gracias por la información... lo de BANKSEL nunca lo había utilizado, pero parece más facil que andar con el status... supongo que se puede hacer con cualquier registro del sistema.. no?.. por ejemplo BANKSEL TRISA... por cierto lo de BANK1 será una macro o algo por el estilo.. no?

Ahora que me fijo... en tu código tambien te aparece VRCON en negro, no como CMCON, TRISA..etc que aparecen en color... es posible que el fallo lo tubiera en otra parte, aunque tambien probé a configurar Vref para que saliera por RA2 y al medir con el tester tenía 0v, por eso supuse que había algo mál en como configuraba Vref... nosé...

Por cierto no uso Mplab, sino Piklab que es el equivalente en Linux, en vez de Mpasm, usa Gpasm de Gputils, que se supone es totalmente compatible.

Desconectado AKENAFAB

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3227
Re: Problemas con Vref y comparadores, con 16F627A
« Respuesta #3 en: 23 de Septiembre de 2008, 13:49:08 »
Correcto todo lo que dices


Bank1 es un macro

BANKSEL son propias del compilador, que lo que hacen es seleccionar el banco del registro que se le indique.

VRCON , solo queda que hagas el #Define , o escribas la direccion .


Puedes probar ese programa, ha funcionado en una pequeña aplicacion  de un botcito.

Entradas Analagocas al comparador RA0 - RA1




Cuelgo el asm completo para que lo pruebes.


Desconectado arcachofo

  • PIC16
  • ***
  • Mensajes: 126
    • Foro para usuarios Linux.
Re: Problemas con Vref y comparadores, con 16F627A
« Respuesta #4 en: 02 de Octubre de 2008, 09:10:20 »
Había dejado de lado lo del Vref hasta solucionar otras cosas y ahora vuelvo a ello...
Seguramente el fallo lo tenía en otra parte, y al probar a sacar Vref por RA2 cometía otro fallo: aunque parezca una contradicción para sacar Vref por RA2 hay que poner RA2 como entrada, no como salida digital.
Ahora he comprobado que Vref funciona según le digo, midiendo la tensión que saca por RA2, de todas formas me extraña que en el código VRCON salga en negro y no en color como CMCON, TRISA, etc.

Gracias por el programita, es muy parecido a lo que trato de hacer, aunque hay una parte que no entiendo
Código: [Seleccionar]
COMPARA

BCF STATUS,C

MOVF CMCON,W
ANDLW 0XC0
MOVWF CM_TEMP
RRF CM_TEMP,F
RRF CM_TEMP,F
SWAPF CM_TEMP,W


SENSORES


                ADDWF PCL,F

GOTO ADELANTE
GOTO IZQUIERDA
GOTO DERECHA
GOTO ALTO
No entiendo nada del manejo de pasar CMCON a W , luego mover a CM_TEMP, rotar, vuelta a W y todo eso... pero sobre todo no entiendo el "AND" que haces con 0XC0... ahí se supone que no hay nada...no?
Tambien me parece muy extraño eso de añadir W al PCL, para seleccionar la acción... supongo que en W queda un número dependiendo de las salidas de los comparadores y hace que PCL salte a la linea adecuada, pero todo esto es muy "abstracto" para mí... si me pudieras explicar por encima como funciona esto te lo agradecería mucho.
Ten en cuenta que estoy empezando con esto, lo más que llego a hacer es comprobar el bit 6 y 7 del comparador y a partir de ahí ir a alguna subrrutina.
« Última modificación: 02 de Octubre de 2008, 09:25:36 por arcachofo »

Desconectado AKENAFAB

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3227
Re: Problemas con Vref y comparadores, con 16F627A
« Respuesta #5 en: 02 de Octubre de 2008, 14:30:13 »
Hola!

Mira , pego el programa completo para que te des una idea.

Es para un robotcillo muy sencillo , un siguelineas con 3 sensores .

Código: ASM
  1. CM_TEMP EQU     0X20                            ;       ALMACENA EL ESTADO DE LOS SENSORES
  2.  
  3.                
  4.  
  5.  
  6. BANK0   MACRO
  7.                 BCF             STATUS,5
  8.                 ENDM
  9.  
  10. BANK1   MACRO
  11.                 BSF             STATUS,5
  12.                 ENDM
  13.  
  14. main
  15.  
  16.  
  17.                 MOVLW   0X02
  18.                 MOVWF   CMCON                   ; COMPARADOR MODO 2
  19.                                                                 ;RA0-RA1 = INPUTS
  20.                                                                
  21.                 bsf            CMCON,C1INV
  22.                 bsf     CMCON,C2INV
  23.  
  24.                 BANK1
  25.  
  26.                 MOVLW   0X07
  27.                 MOVWF   TRISA     ;ra0,ra1,ra2 son entradas analogicas.
  28.                 CLRF    TRISB
  29.                
  30.        
  31.                
  32.                 BANKSEL VRCON
  33.  
  34.                 MOVLW   B'10100100'             ;ANALOG Vref ENABLE, NO CONECT TO RA2,
  35.                 MOVWF   VRCON                   ;LOW RANGE;  9 --> VR VALUES = 1.875v
  36.  
  37.                 BCF             STATUS,5
  38.  
  39.                 CLRF    PORTB
  40.  
  41. COMPARA
  42.                 NOP
  43.                 clrf    CM_TEMP          ;registro temporal para almacenar datoso del comparador
  44.                 CLRF    0X21
  45.  
  46.                 BCF             CMCON,CIS               ;;esto es multiplexion en el comparador ve el datasheet del modo 2.
  47.                 BCF             STATUS,C                ;       RA0 Y RA1
  48.  
  49.                 MOVF    CMCON,W                                  ;cargo en W el valor de la compraracion
  50.                 ANDLW   0XC0                                     ;HAgo una operacion logica and con 0xC0 que es lo mismo que b'11000000'
  51.                                                                                                  ;solo me deja pasar esos 2 bits , un enmascaramiento o filtro de datos , solo los que
  52.                                                                                                  ;me interesan,si no mal recuerdo son los bits resultado de la comparacion
  53.  
  54.                 MOVWF   CM_TEMP                                   ;muevo el resultado de la operacion a CM_TEMP
  55.                 RRF             CM_TEMP,F                ;el resultado lo roto a la derecha 2 veces , osea que me queda asi = 00110000 en caso
  56.                 RRF             CM_TEMP,F                ;de que tuveria en CM_CON =11000000
  57.                 SWAPF   CM_TEMP,F                                ;ahora hago swap y quedan asi 00000011.<-- Esto para manejar solo 4 conbinaciones
  58.  
  59.                 BSF             CMCON,CIS               ;       RA2   <---- Hago la multiplexion del pin para leer el 3er estado
  60.                 MOVF    CMCON,W
  61.                 ANDLW   0x80
  62.                 MOVWF   0X21
  63.                 RRF             0X21,F
  64.                 SWAPF   0X21,W                          ;lo roto 1 vez para que quede asi con los demas 0111 0000 ,luego swap 0000 0111 ya tengo 7
  65.                                                                                                 ;combinaciones posibles
  66.                
  67.                 ADDWF   CM_TEMP,W               ;       DATO COMPLETO
  68.  
  69.                 MOVWF   CM_TEMP
  70.  
  71.                 MOVF    CM_TEMP,W                              ;CArgo el valor del registro y me voy a ver de que se trata esto , que accion debo realizar
  72.                
  73.                                
  74. SENSORES                                                ;       DECICIONES
  75.  
  76.                 ADDWF   PCL,F                                       ;dependiendo el valor que tenga ,saltara a la instruccion , si tengo 0
  77.  
  78.                 GOTO    ALTO                                        ; quedara en esta linea e ira a etiqueta ALTO
  79.                 GOTO    DERECHA                                 ;1
  80.                 GOTO    ADELANTE                                ;2 y asi hasta el 7
  81.                 GOTO    DERECHA
  82.                 GOTO    IZQUIERDA
  83.                 GOTO    ALTO                    ; <<<NO FACTIBLE
  84.                 GOTO    IZQUIERDA
  85.                 GOTO    ALTO            ;<< CHEKAR ESTA COMBINACION ?????*//*
  86.  
  87.  
  88. ADELANTE
  89.                 MOVLW   b'1010'                 ;       < M1+- M2+- >
  90.                 MOVWF   PORTB
  91.                 NOP
  92.                 GOTO    COMPARA                                  ;regresa a programa principal
  93.  
  94. IZQUIERDA
  95.                
  96.                 ;CLRF   PORTB
  97.                 BSF             PORTB,3
  98.                 BCF             CMCON,CIS
  99.                
  100.                 BCF             PORTB,1
  101.                 nop
  102.                 nop    
  103.                 nop
  104.                 BSF             PORTB,1
  105.                
  106.                 BTFSS   CMCON,7
  107.                 GOTO    $-6
  108.                 bcf             PORTB,1
  109.                 GOTO    COMPARA
  110.                                
  111. DERECHA
  112.                
  113.                 ;CLRF   PORTB
  114.                 BSF             PORTB,1
  115.                 BCF             CMCON,CIS
  116.                
  117.  
  118.                 BCF             PORTB,3
  119.                 nop
  120.                 nop
  121.                 nop
  122.                 BSF             PORTB,3
  123.                
  124.                 BTFSS   CMCON,7
  125.                 GOTO    $-6
  126.                 bcf             PORTB,3
  127.                 GOTO    COMPARA
  128.  
  129. ALTO
  130.  
  131.                 ;CLRF   PORTB
  132.                 GOTO    COMPARA
  133.                
  134.  
  135.                 END


Espero haber ayudado

Mira voy de salida , cuando regreso posteo algo mejor y si siguen las dudas pues para eso estamos en lo que se pueda ayudar

Chao y le corro qu eme dejan  xD

Desconectado arcachofo

  • PIC16
  • ***
  • Mensajes: 126
    • Foro para usuarios Linux.
Re: Problemas con Vref y comparadores, con 16F627A
« Respuesta #6 en: 03 de Octubre de 2008, 05:19:58 »
Si... ya voy entendiendo, muy interesante lo de "enmascarar" y todos los malavarismos que haces con los bits... y sobre todo lo de usar PCL para saltar a la subrrutina correspondiente; me va a ser de gran ayuda todo esto... muchas gracias.

Aunque sigo teniendo algunas dudas:

-Porqué (o para qué) pones a 0  STATUS,C.
-En 0xC0 y 0x80 tendrían que estar las "mascaras"... no? ... pero no veo que las definas antes.
-Cuando añades W a PCL: el número de lineas que salta es el decimal equivalente al binario que hay en W??... osea 01=1, 10=2, 11=3....

Es curioso, el programa es muy parecido a lo que yo hago, incluso las salidas al motor por los mismos pines, pero yo lo uso para detectar cuando un motor se queda bloqueado, en ese caso la tensión a la salida del controlador de motor baja bastante y lo que trato es detectar esa bajada de tensión y actuar en consecuencia; otra diferencia es que trato de hacerlo por interrupciones, que creo que era lo que me fallaba en un principio.

Saludos.

Desconectado AKENAFAB

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3227
Re: Problemas con Vref y comparadores, con 16F627A
« Respuesta #7 en: 03 de Octubre de 2008, 06:37:18 »
Sip , primero hago con 0xC0 , luego con 0x80

como solo uso el comprador en modo 2 y esa configuracion tiene 3 entradas analogicas , 2 de ellas multiplexadas.

Primero b'1100 0000' <--- para los 2 primeros , digamos el izquiero y el del centro , luego haco el CIS , que es la multiplexion del pin,ahi solo hago con
b'1000 0000' =0x80 , no se si lo hice asi  o pregunte solo por ese bit.

Pongo a 0 del bit C del registro STATUS , porque luego tenia un dato ahi y se me filtraba basura, como roto el contenido por eso.

Solo por seguridad.

Cuando sumo W al PCL , es lo mismo, sea binario , octal,hexadecidal,decimal. ya sea 1=01=0x01 -- 15=b'00001111'=0x0F = W.

« Última modificación: 03 de Octubre de 2008, 23:04:35 por AKENAFAB »

Desconectado arcachofo

  • PIC16
  • ***
  • Mensajes: 126
    • Foro para usuarios Linux.
Re: Problemas con Vref y comparadores, con 16F627A
« Respuesta #8 en: 03 de Octubre de 2008, 14:49:22 »
Oye... muchas gracias por las explicaciones... me han sido de mucha utilidad... ahora se me ocurren nuevas cosas y nuevas maneras de hacer lo mismo pero más sencillo...
Saludos.


 

anything