TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: kain589 en 08 de Junio de 2013, 21:48:10

Título: Vref en comparador analogico ¿Posible bug?
Publicado por: kain589 en 08 de Junio de 2013, 21:48:10
Hola, estoy empezador a usar los comparadores y me iba mas o menos bien, haya que he tenido problemas al establecer la tension interna de referencia. Para ello la establezo a nivel bajo y cargo el valor 12 en VR3-0, con lo que CVREF = (VR<3:0>/24) × VDD, asi la Vref sera la mitad de la alimentacion. Use las instrucciones de Ccs:

Código: C
  1. #include <12f683.h>
  2. #fuses INTRC_IO,NOWDT, PUT, NOBROWNOUT, NOCPD,NOMCLR, NOPROTECT
  3. #use delay(clock=4000000)
  4. //Se usa comparador analogico y si vin+>Vin- activa gp4
  5. //Se hara por interrupcion
  6.  
  7. #INT_COMP
  8. void compara(){
  9.       if (C1out){
  10.          output_high(pin_a4);
  11.          }
  12.       else{
  13.          output_low(pin_a4);
  14.          }
  15.    }
  16.  
  17.  
  18. void main()
  19. {
  20.  
  21.    setup_adc_ports(NO_ANALOGS|VSS_VDD);
  22.    setup_adc(ADC_OFF);
  23.    setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
  24.    setup_timer_1(T1_DISABLED);
  25.    setup_timer_2(T2_DISABLED,0,1);
  26.    //Arranca el oscilador
  27.    setup_oscillator(OSC_4MHZ|OSC_INTRC);
  28.    //Puerto¿Como configurrar entradas comparador?
  29.    //set_tris_a(000011);            //porta como salida, excepto a0ya1 comparador
  30.    setup_comparator(A1_VR);         //Entrada en a1 y Vreferencia interna
  31.    setup_vref(VREF_LOW||12);        //Vref rango bajo y 12 en VR3-0 = 1/2 Vdd
  32.    //Interrupciones
  33.    enable_interrupts(INT_COMP);
  34.    enable_interrupts(GLOBAL);      //todas las interrupciones desactivadas
  35.    //Programa
  36.    do{
  37.  
  38.    }while(TRUE);               //bucle infinito
  39.    // TODO: USER CODE!!
  40.  
  41. }

Al mover el potenciometro practicamente el comparador se activaba al pasar de 3-4mV. He pasado a configurar el registro VRCON manuealmente para ello se define el byte que es, en mi caso del 12f683 el 0x99, y a continuacion le cargo el valor que mirando el datasheet y los bits de VRCON seria 0b10101100

Código: C
  1. #byte VRCON = 0x99
  2. VRCON = 0b10101100;//Activa, low y 12

Y ahora va perfecto, lo coloco por aqui por si alguien mas tiene el mismo problema.

Edito-> Me he dado cuenta donde tenia el error en
Código: C
  1. setup_vref(VREF_LOW||12);
  2. //Me sobraba un | es
  3. setup_vref(VREF_LOW|12);
Título: Re: Vref en comparador analogico ¿Posible bug?
Publicado por: MGLSOFT en 09 de Junio de 2013, 12:47:20
Muy buen aporte. (((:-))) (((:-)))
A mi me paso algo parecido, y con el apuro nunca lo explique asi, para que sirva para otros...
Título: Re: Vref en comparador analogico ¿Posible bug?
Publicado por: neronpic en 25 de Junio de 2013, 17:42:25
Muchisimas gracias