La verdad que no veo ese problema, ya que lees el valor A/D y si es menor a Xv determinás que ha caido la tensión debajo del nivel critico fijado, solo necesitás 1 pin A/D pues la referencia es el 0V de masa. lo interesante de este sistema es que podés variar el punto sin programar de nuevo.
Disculpame pero estas equivocado. La lectura del ADC se basa en 2 referencias, en VREF+ y VREF-, si usas VCC como VREF+ y este varia. Es como un "porcentaje" de lo que hay entre esos dos valores. Tu medida no tendrá el efecto deseado.
Te doy un ejemplo mas practico.
Si usas 5V de referencia positiva, respecto a los 0V de VSS los cuales se usan de referencia negativa una lectura de 8 bits 0xFF significa 5V a la entrada de tu ADC
Si usas 3.3V de referencia positiva, respecto a los 0V de VSS los cuales se usan de referencia negativa una lectura de 8 bits 0xFF significa 3.3V a la entrada de tu ADC
Tu medida no varió, ahora pensa que esa referencia es tu VDD, que va bajando y vos queres medir.... Pero seguís leyendo 0xFF.
Si... podes variarlo.
¿Tiene sentido?¿En que caso lo aplicarías?
Hardware:
Estas midiendo el valor de una fuente, que supuestamente esta regulada ya. Nunca vas a jugar con una diferencia de 0.1V, obviamente. Esta fuente tiene un voltaje dentro de todo "conocido", creas un divisor resistivo y listo, para que detecte una caída de 1V de la fuente. En que otro momento vas a cambiarle el voltaje a la fuente sin cambiar todo el circuito? Ya que no creo que tu circuito que funcionaba con una fuente de 5VDC de golpe le puedas poner 12VDC. Seguramente tengas que incluir algún que otro regulador extra, etc. Y ahí también cambias el valor del divisor resistivo.
Software:
Con el comparador. Es absolutamente NADA que hacer. lo seteas y listo. Creas la función de interrupción que es grabar la EEPROM y que no salga hasta que se reestablezca el voltaje.
Con el ADC, leer continuamente la entrada... Ya que supongamos que lo haces cada 1ms, entonces tenes que tener un capacitor que te aguante el milisegundo. Esto quita tiempo de ejecución sin sentido a otras cosas.
--------------------------------------
Otras soluciones que puedes usar el autor del post.
- Si tenes un RTC, usar uno que posea algunos datos de RAM que los mantenga la batería.
- Utilizar alguna memoria mas grande (externa), e implementar un algoritmo de uso de la EEPROM para que su uso sea parejo a lo largo de la misma.
Ver si esto es factible, ya que si supongamos se apaga la maquina 3 veces al día, tenes suficiente por un par de años.
- Otra opción es que el botón de apagado sea controlado por el micro, de esa forma siempre que se apague normalmente es el micro quien lo apaga al sistema. Desconectando un relé que alimenta a los circuitos que mas consumen por ejemplo. Y solo quedando alimentado el PIC en SLEEP esperando el flanco en RB0. Esta situacion excluye el corte del suministro.