Hi,

16F72 has portb.0 interrupt which can be used to detect zero crossing easily. Since the current zero cross would be normally close to the voltage zero cross. It may be detected right within the ISR. However entirely depends on the capacity of the UPS and power factor. You can also use the PORTB.7-PORTB.4 Interuupt on change. Here however you need to decide in the ISR whether it is volt/current zero cross or overload. You can use four different signals here.

I assume that you are in India from your name. So the nominal line frequency would be 50Hz. That means you should get interrupts after every 10mS. Add to that a range of +/- 5 Hz so your window becomes 45Hz to 55Hz wide. Thus you know when your interrupts are too-late or too-early. This is a definite detection of blackout/brownout. But power sags are cannot be detected by this methods.

So you can start a AD sampling cycle from each zero cross and continue sampling the input (unfiltered). At the end of the cycle you can detect even the RMS voltage through calculations. But this takes a whole cycle (10mS) which may be too much. So the alternative is to compare each sample with known values. Use a lookup table +/- constants for allowed deviation range. This has its own pros and cons. Almost fail proof mains detection but sometimes false detects too.

However it entirely depends on the equipment in use. All of the offline UPS in the marker under Rs.1500.00 (USD $36 approx) state that they offer a transfer less than 2ms. Not always. In fact the relays which comes for Rs. 6.00 (USD $0.15) exhibits transfer time more than 7mS themselves. Datasheets lie for chinese products. If the supply is to a PC then the PC SMPS itself withstands 20mS sags. That's why the low cost UPS actually seem to work.

When I started working on the project (I normally try to get industrial applications) I was frustrated achieving goals. Realized the limitations later that a reduced BOM price achieves less.