Autor Tema: Duda comparador CCS 4 Entradas  (Leído 1829 veces)

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

Desconectado zagoaristides

  • PIC12
  • **
  • Mensajes: 99
    • deportes de contacto y fitness
Duda comparador CCS 4 Entradas
« 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.
Nadie nació sabiendo...Que genio ese Nadie!!!

Desconectado zagoaristides

  • PIC12
  • **
  • Mensajes: 99
    • deportes de contacto y fitness
Re: Duda comparador CCS 4 Entradas
« Respuesta #1 en: 02 de Julio de 2011, 21:08:00 »
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:

Código: [Seleccionar]
   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
Nadie nació sabiendo...Que genio ese Nadie!!!