That is exactly what I'm doing right now. Although unfortunately the one I'm using, PIC18F45K22, only have a divide by 16 prescaler maximum but eh, external prescaler is not too hard to slap in combined with some multiplexing to choose what's the prescale I'm going to use.

Going back to prescaling, as I've mentioned in my previous post, one of the frequency I'm measuring is 256, and divided by 16 that's 16Hz.

F = 16 Hz, T = 1/16 = 62.5ms

given our minimum reference to be 16Mhz using the internal FOSC/4 of the PIC18F, we have :

Count = (1/16)/(1/16,000,000) = 1,000,000 counts.

Given a 16-bit timer, we'll find that if we reset properly (or even if we don't as long as we keep count) :

1,000,000 / 65536 = 15+ overflow.

Now, what about the resolution ? given that a spot on 16Hz counts 1,000,000 thus giving us x16 Frequency of 256 Hz,

We have :

Up count = 1,000,001 * 62.5ns = 62.5000625ms; F = 15.999984000015999984000015999984 Hz (yay for copy paste)

Let's cut that to 15.999984 (Although I'm kinda suspicious about the whole floating point operation)

Giving us x16 of : 255.999744

Down count = 999,999 * 62.5ns = 62.4999375ms; F = 16.000016000016000016000016000016 Hz

Cutting to 6 decimals we get 16.000016, giving us x16 of : 256.000256

On the up count, one miscount, or just generally a 'step' (btw, up count mean lower Frequency, which I'm sure you all know, just reminding) is equal to :

255.999744/256 = 0.999999 or a 99.9999% out from the supposed/assumed 256 Hz, giving us the resolution of 0.0001%

While on the down count we have :

256.000256/256 = 1.000001 or a 100.0001%, again a deviation of 0.0001%

Now all this would be pretty meaningless if we have an inaccurate Reference Frequency, or we do not properly handle the signal in external prescaling causing all sorts of stray inductance/capacitance affecting the reading, but that's par for the course.

</endrant>