Autor Tema: Vref en comparador analogico ¿Posible bug?  (Leído 1259 veces)

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

Desconectado kain589

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 324
Vref en comparador analogico ¿Posible bug?
« 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);
« Última modificación: 08 de Junio de 2013, 21:52:05 por kain589 »
Saludos desde Córdoba, españa

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Vref en comparador analogico ¿Posible bug?
« Respuesta #1 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...
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado neronpic

  • PIC10
  • *
  • Mensajes: 4
Re: Vref en comparador analogico ¿Posible bug?
« Respuesta #2 en: 25 de Junio de 2013, 17:42:25 »
Muchisimas gracias


 

anything