Your numbers look exactly right to me. The grid really does wander about like that. I built basically the same thing a few years back, transformer into an optocoupler into a micro, and logged it for months. A day over here in the UK looks like a slow random walk between roughly 49.9 and 50.1, sitting at 50.00 only when the operators have it balanced nicely. Your 49.96 to 50.03 drift is completely normal. The frequency moves whenever generation and load fall out of balance, even slightly. Millions of kettles, motors and chargers all doing their own thing means it never truly sits still. And yes, the kettle dip is real. A big resistive load suddenly switching in drags the frequency down for a few seconds until the generators respond. You can sometimes see it recover and overshoot a touch afterwards. On the averaging question, ten cycles is a good move and you are not hiding anything important. The real wiggle happens over seconds and minutes, not between individual cycles. If anything, single-cycle readings will show jitter from waveform distortion, because household mains is never a clean sine, and that noise lands right on your zero crossing timing. Averaging over a second or so gives you a number much closer to what the grid operator actually sees. If you want to sanity check your circuit, compare your reading against a cheap plug-in energy meter or a multimeter with a frequency range. They shold agree to within a couple of hundredths. The fun part is watching it over a full day. You will notice it sag during evening peak when everyone is cooking, then drift slightly high overnight as demand drops. The operators also nudge it back on target through the day to make up lost time, which is why a mains-driven wall clock can be minutes off in the afternoon but catch up by morning. Logging frequency and plotting it is half the fun of the build, so consider adding a timestamp to your display.