TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: RALF2 en 08 de Octubre de 2009, 19:44:31

Título: Comparadores analogicos
Publicado por: RALF2 en 08 de Octubre de 2009, 19:44:31
Que tal amigos!
Estoy un poco retirado del foro por lo de la universidad, pero espero pronto volver de nuevo al la faena  :mrgreen:
Lo que me trae por aqui es  unas dudas sobre la configuracion de los comparadores analogicos con el ccs y un pic16f877a.
Estuve revizando el archivo 16f877a.h y alli me parecen una configuracion para los comparadores que no logro entenderla se las coloco:

Citar
// Comparator Variables: C1OUT, C2OUT
// Constants used in setup_comparator() are:
#define A0_A3_A1_A3  0xfff04
#define A0_A3_A1_A2_OUT_ON_A4_A5  0xfcf03
#define A0_A3_A1_A3_OUT_ON_A4_A5  0xbcf05
#define NC_NC_NC_NC  0x0ff07
#define A0_A3_A1_A2  0xfff02
#define A0_A3_NC_NC_OUT_ON_A4  0x9ef01
#define A0_VR_A1_VR 0x3ff06
#define A3_VR_A2_VR 0xcff0e
#define CP1_INVERT  0x0000010
#define CP2_INVERT  0x0000020

#bit C1OUT = 0x9c.6     
#bit C2OUT = 0x9c.7
En cada una de las lineas se observa que hay mas de 2 bytes  :shock: cuando deberian ser dos byte que es el tamaño de los registros del pic   :?
ahora bien como se leen entonces esos parametros o es que hay algun error?
Como configuraria el programa para trabajar con un solo comparador y una salida al exterior?

Bueno espero que alguna alma caritativa me ilumine un poco en el camino con el CCS   :mrgreen:

Saludos
Título: Re: Comparadores analogicos
Publicado por: fidodido18 en 08 de Octubre de 2009, 20:52:38
Que tal amigos!
Estoy un poco retirado del foro por lo de la universidad, pero espero pronto volver de nuevo al la faena  :mrgreen:
Lo que me trae por aqui es  unas dudas sobre la configuracion de los comparadores analogicos con el ccs y un pic16f877a.
Estuve revizando el archivo 16f877a.h y alli me parecen una configuracion para los comparadores que no logro entenderla se las coloco:

Citar
// Comparator Variables: C1OUT, C2OUT
// Constants used in setup_comparator() are:
#define A0_A3_A1_A3  0xfff04
#define A0_A3_A1_A2_OUT_ON_A4_A5  0xfcf03
#define A0_A3_A1_A3_OUT_ON_A4_A5  0xbcf05
#define NC_NC_NC_NC  0x0ff07
#define A0_A3_A1_A2  0xfff02
#define A0_A3_NC_NC_OUT_ON_A4  0x9ef01
#define A0_VR_A1_VR 0x3ff06
#define A3_VR_A2_VR 0xcff0e
#define CP1_INVERT  0x0000010
#define CP2_INVERT  0x0000020

#bit C1OUT = 0x9c.6     
#bit C2OUT = 0x9c.7
En cada una de las lineas se observa que hay mas de 2 bytes  :shock: cuando deberian ser dos byte que es el tamaño de los registros del pic   :?
ahora bien como se leen entonces esos parametros o es que hay algun error?
Como configuraria el programa para trabajar con un solo comparador y una salida al exterior?

Bueno espero que alguna alma caritativa me ilumine un poco en el camino con el CCS   :mrgreen:

Saludos

la verdad no he trabajado con el comparador, pero con el wizar de CCS puedes configurarlo muy facilmente...
Título: Re: Comparadores analogicos
Publicado por: Cryn en 09 de Octubre de 2009, 12:45:20
si parece raro que tenga más de 2 bytes, pero seguramente el ccs sabrá bien como manejarlo, si no sin dudo hay un error por allá o provoque algún error, no he trabajado mucho con comparadores analógicos, pero lo que te recomiendo es que lo configures como lo necesites, deberás hacer:

setup_comparator(A0_A3_A1_A3);   //si quieres que todos los comparadores estén activos
ó alguna otra configuración si quieres salvar pines por ahí, y probablemente debas usar:

setup_comparator(A3_VR_A2_VR | CP1_INVERT);  //para colocar más de una configuración cuando es posible.

Aunque experimente con A0_A3_NC_NC_OUT_ON_A4, por decirlo nada más, con otro micro pensando que los que se configuran como NC deberían ser simples salidas o entradas digitales, pero no cumplen esta función o es que llevo algún concepto errado o el CCS está trabajando un poco mal??

saludos!
Título: Re: Comparadores analogicos
Publicado por: bigluis en 09 de Octubre de 2009, 13:10:51
Aun no se como utilizar ccs pero pueden entrar a este tema que trabaja con mikroc

Entradas Comparadoras, MikroC y Proteus (http://www.todopic.com.ar/foros/index.php?topic=27711.0)

Espero que les sirva de algo
Título: Re: Comparadores analogicos
Publicado por: Suky en 09 de Octubre de 2009, 13:56:54
Aun no se como utilizar ccs pero pueden entrar a este tema que trabaja con mikroc

Entradas Comparadoras, MikroC y Proteus (http://www.todopic.com.ar/foros/index.php?topic=27711.0)

Espero que les sirva de algo
Tuviste experiencia en lo que indica Cryn? Osea si solo se usan 2 entradas a los comparadores con referencia interna, y los otros 2 pines desactivados, los pudiste usar como I/O digital?
Título: Re: Comparadores analogicos
Publicado por: RALF2 en 09 de Octubre de 2009, 17:27:17
Que tal amigos!
Gracias por su ayuda  :mrgreen:
Ayer con la ayuda del amigo palitroquez descubri por que son tres byte (5 hex), es porque van configurados asi en este orden:

TRISA -> CVRCOM ->CMCON  ese es el orden de mayor a menor.
La gente del CCs deberas que se la ingenia  :mrgreen:

Bueno pana esa configuracion que indicas, cryn, es la que voy a utilizar pero abra que probarlo en fisico para ver como opera.
Suki con lo que coloque arriba podras ver que si puedes utilizar salidas digitales estando utilizando el comparador con los pines que no se usan para tal fin.
Y deberia ser posible utilizar tambien entradas como digitales, pero eso es otra historia...  :D

Saludos
Título: Re: Comparadores analogicos
Publicado por: Cryn en 09 de Octubre de 2009, 18:19:30
particularmente a mi no me funcionó los NC como salidas digitales :(
Título: Re: Comparadores analogicos
Publicado por: Suky en 09 de Octubre de 2009, 20:04:05
Yo tengo el mismo problema  :?
Título: Re: Comparadores analogicos
Publicado por: Cryn en 09 de Octubre de 2009, 20:29:49
será un bug? o será que el micro funciona así?
Título: Re: Comparadores analogicos
Publicado por: RALF2 en 09 de Octubre de 2009, 21:48:50
Que tal amigos!
Las pruebas que estan haciendo con las salidas las estan simulando en el proteus? o estan probando en fisico?.
Si las pruebas la hacen en el proteus puede ser alli donde este el problema ahora bien ,ya que, segun entiendo algunas versiones del proteus no soportan a los comparadores.

Lo mejor seria probarlos en fisico a ver que tal.

Saludos
Título: Re: Comparadores analogicos
Publicado por: Suky en 09 de Octubre de 2009, 22:04:25
En lo físico probado en un 16F877A  :mrgreen: Me queda hacer un programita en asm y probarlo, pero me acuerdo en su momento haberlo programado en CCS y no logre el resultado previsto  :?
Título: Re: Comparadores analogicos
Publicado por: RALF2 en 09 de Octubre de 2009, 22:46:38
Que tal amigos!
Disculpenme pero tengo un pequeño error en lo que les escribi arriba  :(
Efectivamente como me han dicho no les va a trabajar porque la configuracion que les di arriba no es la correcta.
La correcion seria:
X->TRISA->CMCON  // Asi si les va a trabajar solo queda definir quien es la X la cual corresponde al primer hex que aparece en la palabra de configuracion.
Eso se los dejo como tarea  :D
Prueben esta combinacion en fisico a ver si les trabaja
Citar
#bit ra4 = 05.4
void main()
{
   setup_comparator(A0_A3_A1_A3_OUT_ON_A4_A5);
De ser asi me parece que hay un bug en el proteus de nuevo, porque en la simulacion no me anda bien  :shock:

Saludos
Título: Re: Comparadores analogicos
Publicado por: Cryn en 10 de Octubre de 2009, 12:19:03
y los A3_VR_A2_VR en VR se tiene voltajes de referencia?
Título: Re: Comparadores analogicos
Publicado por: RALF2 en 10 de Octubre de 2009, 15:58:53
Que tal amigo cryn!
Mira no lo creo,  :shock: 
Segun la simulacion hecha en el proteus, paso a paso, los pines del puerto A quedan como entradas, aunque dos de los pines ra4 y ra5, quedan como salidas al exterior. Es una cosa de veras extraña.
No se si es la simulacion en el proteus que falla, pero sino trabajan los pines como salida porque el comparador da una salida?   :(

N.P.I   :D
Título: Re: Comparadores analogicos
Publicado por: PalitroqueZ en 10 de Octubre de 2009, 16:14:26
según

http://www.labcenter.co.uk/products/comparison.cfm#

http://www.labcenter.co.uk/products/pic16.cfm#tabs-3

el modulo comparador si es soportado en el Virtual System Modelling del Proteus

Título: Re: Comparadores analogicos
Publicado por: RALF2 en 10 de Octubre de 2009, 17:48:24
Que tal amigos!
Bueno realizando pruebas en fisico y sopesando todo lo probado, he llegado a la conclucion de que; cuando se esta trabajando con el modulo comparador no es podsible utilizar el puerto A para mas nada  :shock:
Ya que los pines cuando se configuran para operar con el comparador, quedan como entradas o como salidas de este, unicamente.

Esa es mi conclucion  :mrgreen:
Título: Re: Comparadores analogicos
Publicado por: bigluis en 10 de Octubre de 2009, 19:09:36
Tuviste experiencia en lo que indica Cryn? Osea si solo se usan 2 entradas a los comparadores con referencia interna, y los otros 2 pines desactivados, los pudiste usar como I/O digital?

Si ya tuve la experiencia de utilizar las entradas comparadoras como dices, esto lo acabo de postear en la pagina que antes mencione, revisenla.

Supongo que este tema va contra las reglas del foro ya que lo hicieron sin consultar si habia otros temas similares posteados.

Título: Re: Comparadores analogicos
Publicado por: RALF2 en 10 de Octubre de 2009, 19:32:03
Que tal bigluis!
Exacto bigluis hice la modificacion que comentas aumentando los tiempo de subida y bajada de los pines de entrada y la simulacion me andubo fina  :mrgreen:

Citar
Supongo que este tema va contra las reglas del foro ya que lo hicieron sin consultar si habia otros temas similares posteados.

No entiendo el porque de ese comentario, para empesar no creo haber violado ninguna norma del foro  :x
Si lees el principio de mi post yo estaba preguntando hacerca del manejo de los comparadores con el compilador CCS no con el mkc, como tu lo haz hecho en el link que colocastes.
Luego lo que he escrito es haciendo siempre referencia a como configurar el comparador del pic usando para ello el CCS NO mkc, ya que, el problema que tenia en cuestion era con ese y no mkc.

De todas formas agradezco tu ayuda con el proteus.
 

 
Título: Re: Comparadores analogicos
Publicado por: PalitroqueZ en 10 de Octubre de 2009, 19:53:18
...
Supongo que este tema va contra las reglas del foro ya que lo hicieron sin consultar si habia otros temas similares posteados.



bigluis tampoco entiendo tu comentario, no creo que falte al reglamento. Aunque se trate de hablar del mismo modulo, hay un enfoque diferente en la forma que lo expresa RALF2, en parte porque se usa otro compilador, y además se discute la forma en que el ccs configura los registros relacionados al comparador analógico.

la forma en que tu la expresas en tu tema es tan válida como cualquiera quiera hablar sobre el mismo modulo, ¿cuantas dudas?, ¿cuantas formas de utilizar éste modulo hay?.

espero que no tomes a mal este comentario mio.

Título: Re: Comparadores analogicos
Publicado por: Suky en 10 de Octubre de 2009, 23:12:29
Arme el siguiente circuito con hard real:
(http://www.todopic.com.ar/foros/index.php?action=dlattach;topic=27876.0;attach=10286)

El código fue el siguiente:
Código: C
  1. #include <16F877A.h>
  2.  
  3. #FUSES NOWDT        //No Watch Dog Timer
  4. #FUSES HS           //High speed Osc (> 4mhz)
  5. #FUSES PUT          //Power Up Timer
  6. #FUSES NOPROTECT    //Code not protected from reading
  7. #FUSES NODEBUG      //No Debug mode for ICD
  8. #FUSES NOBROWNOUT   //No brownout reset
  9. #FUSES NOLVP        //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
  10. #FUSES NOCPD        //No EE protection
  11. #FUSES NOWRT        //Program memory not write protected
  12.  
  13. #use delay(clock=20000000)
  14.  
  15. #use fast_io(a)
  16. #use fast_io(d)
  17.  
  18. #int_COMP
  19. COMP_isr()
  20. {  
  21.    delay_ms(30);
  22.    
  23.    if(C1OUT==1){
  24.       output_toggle(PIN_A2);
  25.       output_toggle(PIN_D0);
  26.    }
  27.    if(C2OUT==1){
  28.       output_toggle(PIN_A3);
  29.       output_toggle(PIN_D1);
  30.    }
  31.  
  32. }
  33.  
  34.  
  35. void main()
  36. {
  37.    //set_tris_a(0b00000011);
  38.    set_tris_d(0b1111100);
  39.    setup_adc_ports(NO_ANALOGS);
  40.    
  41.    setup_psp(PSP_DISABLED);
  42.    setup_spi(FALSE);
  43.    
  44.    //Comparadores con Vref interna = 2.5V.-
  45.    setup_comparator(A0_VR_A1_VR);
  46.    setup_vref(VREF_LOW|8);
  47.    
  48.    set_tris_a(0b00000011);
  49.    
  50.    clear_interrupt(INT_COMP);
  51.    enable_interrupts(INT_COMP);
  52.    enable_interrupts(GLOBAL);
  53.    
  54.    while(1){
  55.    
  56.    }
  57. }

Los leds del puerto D actuaron correctamente, pero los leds del puerto A se alternaban. Acciono el pulsador de A0, enciende el led de A2 y D0. Vuelvo accionar se apaga D0 pero A2 no se ve afectado. Pero si acciono la tecla del pin A1, se apaga el led en A2 y se enciende el led de A3  :shock:

Cambie el orden de las configuraciones y el resultado fue el mismo  :?


Todo lo tratado es en CCS  :mrgreen:


Saludos!