FSK detection using Microcontroller - precise clock required

Status
Not open for further replies.

Yasserbn

New Member
I am receiving an FSK signal to a microcontroller and I need to demodulate this signal.

The signal I am receiving is similar to the orange one depicted in my figure but it is a sine wave not a square wave.
View attachment 68637

I need to convert this signal to zeros and ones. I know a basic method that measures the period using a zero crossing comparator and then calculate the frequency. That's fine.

I know that the high frequency is 15Khz and low frequency is 10khz and data rate is 1KHZ. My question is when should I sample the signal?

A clear answer is every 1ms. I can use a timer and for every 1ms I have to measure the period. but what if the timer has an error, let's say +-1us, then after 1000 bits, I may have an error. My timer (clock) may have an accumulated error and I might read faster or slower than it should be?

What can I do to adjust my timer (clock)?
 
My question is when should I sample the signal?
Does your micro have a capture/compare function? Or an interrupt-on-change function? What is the micro clock frequency?
 
I am using an AVR Atmega8 and this micro has a compare function and an interrupt-on-change.
The frequency of the micro clock is 1MHZ.

But I did not understand what to do with them. Do you suggest to reset the timer (clock) when there is a change from 1 to 0 or from 0 to 1. What if there is a big chain of zeros or ones.
 
But I did not understand what to do with them
Carefully read the datasheet for your particular micro. It will explain the operation of the capture/compare and interrupt functions. Then look for code examples relating to those functions on the web.
 
I know what the capture/compare and interrupt functions are.
But what is the answer for my question. When should I sample the signal to measure the period. If I use a timer to measure the period every 1ms, after a while (1000 samples), the timer has errors and it may read values faster or slower than it should be, right? Is my question clear.
 
I know what the capture/compare and interrupt functions are.
But what is the answer for my question. When should I sample the signal to measure the period. If I use a timer to measure the period every 1ms, after a while (1000 samples), the timer has errors and it may read values faster or slower than it should be, right? Is my question clear.
 
Use the interrupt-on-change function to detect successive zero-crossings. In the interrupt handler note the count of a counter clocked at 1MHz and determine the difference between that count and a previous count. The difference has a resolution of 1us.
 
Status
Not open for further replies.
Cookies are required to use this site. You must accept them to continue using the site. Learn more…