I decided I wanted a frequency counter. I guess it was for a future project (inverter) that never came to pass, but I thought it would be a cool thing to do anyhow, so I set to work. My criteria were 1) no microprocessor, no Arduino, etc., 2) with a digital display, not an analog meter and 3) simple but accurate. I looked around on the web first to see what other folks had come up with.
Of course I found a whole slew of projects. Discarding the half that were μprocessor-based, I found that most of them used a 555 as the timing element (the timing window). This I did not like, as that isn't all that accurate. I figured since I was going to be in the digital realm, why not make it dead-accurate?
Well, long story somewhat shorter: I came up with that I though (still think) is a fairly clever scheme. The idea is to generate a very accurate 1-second interval, measuring the frequency with counters during that interval. Here's what I came up with:

What I did was run the 1MHz crystal oscillator through 2 4040 counters. Then I scratched my head a while, scribbled on some paper, and figured out this scheme:
1 megahertz = 1,000,000 cycles. That number is
F4240in hexadecimal, or
1111 0100 0010 0100 0000in binary. Counting ones, there are 7. Hmm, maybe I could use an 8-input AND gate? Sure enough, that's what I ended up using. When the count hits exactly 1 million, those 7 outputs of the 4040s (plus one wired high) will set the 4068 NAND low, stopping the counters.
Ackshooly, I first tried using the 4068 as an AND, but it didn't work. Very frustrating: I thought I had defective chips, thought the stupid breadboard was causing problems. But then I figured out that the problem was that the (high) pulse from the AND gate wasn't long enough to reset my flip-flop (4013). So that's why there's a 555 here, as a "pulse stretcher" (one-shot). Since it requires a negative-going pulse, I used the 4068 as a NAND instead.
The rest of it is pretty obvious.
I will say that if I had this to do over again, I would't do things this way. There are, of course, many ways to skin this particular cat. It was really more of a self-teaching experience for me, as I'm just really getting into things digital. But it works, and it works well; dead accurate. The (theoretical) range is up to 9.9999 MHz, but I haven't tested it up that high; it does work accurately up to 1MHz.
I should say a couple things: while I came up with this idea on my own, I did have some help along the way, from my friend (the one who's a friend of Paul Horowitz). And after I finished this I found
this circuit on the web that uses my same clever scheme with a 4068; I guess you could say that great sometimes run in the same gutter.
Anyhow, you can pick this apart all you want: I don't really care, as it's done and as I say, it works well. So knock it all you want. (Constructive criticism welcome, though.)
Oh, and this joins my other projects using the tin-as-a-project-case form factor:

