In general, you'd probably be better off doing DFT (discrete transforms) for the short list of frequencies used in DTMF.. I think the processing overhead is going to be a lot lower, and the results a lot cleaner.. a DFT allows you to look for specific frequencies, while a FFT done this way basically gives a "power level" at each frequency band, and that's a rough estimate, really. You want specific frequencies, which are going to be resolved much more cleanly by a DFT.

I'm also reviewing an implementation I've found based upon Chan's mathematics packages, however it's an integer sampling/transform done from the ground up in ATMEL assembler.. it was originally written for the 168, so the 328 can handle it, with twice the memory.. it also allows for selectable data windows, which for audio would be best done with Hamm data window rather than the Rectangular the code in this posted lib.. Hamm does slightly better with resolving low frequencies. Accoring to the author, the code can perform a 128 sample (64 band) FFT, including both the sampling and tranform, as well as data normalizaton (scalars rather than real/imaginary pairs) for output in under 20ms. That's a crazy calc rate if that's real, but it seems like it may be.. and the code is well-documented. This lib, though functional, leaves a bit to be desired in terms of docs..

Just to let you all know, I knew next to nothing about Fourier Transformations (other than functionally what it does, not how it works or how to do it) before I decided to make that spectrum analyzer project. However, not knowing became aggravating.. I wanted know how this stuff works. If you choose to be self-abusive, start with the FFT link the playground for a good explanation and some usable code.. but the code there was too memory heavy for my use.. the TVout part takes a lot of SRAM for the video buffer. Also Wikipedia has a good breakdown of FFT vs DFT and that stuff.