Welcome to our site! EDAboard.com is an international Electronic Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.
I think that FX614 by CML is the easily mode for make a modem, with a pic you can make an encoder, but if you want a decoder you must make an frontend circuit with operational for amplifier and square the level (FX614 or 604 decode at 50mVpp), for filtering the band. At the end is more complicate and expensive than dedicated chip
If you are really trying to do an FSK decode in software on a PIC, with A/D input and DSP style noise bandwidth, you could base it on:
"A Dual-Tone Multifrequency Receiver Using Synchronous Additions and
Subtractions" by Y.Tadokoro and Y. Haneda published in IEEE
Transactions on Communications, Vol. COM-35, No. 4, April 1987.
As far as I know, this is not available on the net. The IEEE has a
service by which it can be orderred for $12 (more if you are not a member) by calling 800-949-4333 in the USA, or you can probably find
it in print at a university engineering library.
The algorithm requires sampling at 4x the center frequency of each tone
to be detected (for the simplest case). The algorithm given is in the
form of buffering these samples for a fixed interval, then processing the
buffer. The processing step is of the form:
(New sample)-(accumulator) =>accumulator
for the entire buffer.
I converted this into a continuous, sliding form in a previous life as:
(New sample)-(accumulator)-(oldest sample)=> accumulator
with a FIFO sample buffer of a length evenly divisible by 4.
The buffer length has an effect similar to filter Q.
Sorry, but I do not have the code at this time.
did this some years ago with a dsPIC30F3013 simulating a baudot modem where 0 is 1.8KHz and 1 is 1.4Khz. Used an ADC with a digital filter to acquire the input and a MCP41010 digital pot to generate the output.