TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: zagoaristides en 02 de Julio de 2011, 17:48:24
-
Buenas gente. El tema es esta, quiero usar en un PCI 16F917 los dos comparadores para detectar cualquier cambio en cualquiera de sus entradas (un 1 lógico en realidad). Según la hoja de datos el modo de 2 comparadores con 4 entradas multiplexadas y un voltaje de referencia sería lo que necesito, pero no puedo lograr simularlo.
Mi código es algo como:
setup_vref(VREF_HIGH|0); //1.25 volts
setup_comparator(A0_A3_A1_A2);
Necesito un voltaje de referencia distinto de 0 ya que la señal viene desde unos sensores, ahora me queda la duda si el voltaje de referencia funcionará como yo así y sino como puedo configurarlo para tener 4 entradas que se activen ante un cambio de 0 a 1 lógico.
-
Buenas gente. El tema es esta, quiero usar en un PCI 16F917 los dos comparadores para detectar cualquier cambio en cualquiera de sus entradas (un 1 lógico en realidad). Según la hoja de datos el modo de 2 comparadores con 4 entradas multiplexadas y un voltaje de referencia sería lo que necesito, pero no puedo lograr simularlo.
Mi código es algo como:
setup_vref(VREF_HIGH|0); //1.25 volts
setup_comparator(A0_A3_A1_A2);
Necesito un voltaje de referencia distinto de 0 ya que la señal viene desde unos sensores, ahora me queda la duda si el voltaje de referencia funcionará como yo así y sino como puedo configurarlo para tener 4 entradas que se activen ante un cambio de 0 a 1 lógico.
Me respondo solo, viendo y viendo, hay 2 formas.
La primera para lograr la multiplexión es mediante un código propio cambiar de estado el bit 3 del registro CMCON0 (direccion 0x97). Pasarlo de 1 a 0 y viceversa cada X período de tiempo (en mi caso Timer 1 en 32 ms). La otra forma es (en mi caso) en el Timer 1 chequeo una variable y la niego contra ella misma y en cada intervalo del reloj cambio la configuración del comparador de esta manera:
if (var_decrementa_delay_multiplex_comparador == 0)
flag_multiplex_comparador = !flag_multiplex_comparador;
if (flag_multiplex_comparador == 0)
setup_comparator(A0_VR_A1_VR);
if (flag_multiplex_comparador == 1)
setup_comparator(A3_VR_A2_VR);
Un abrazo para todos y espero le sirva