Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics 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.

OOK RF Module USART transmission and MCU ADC as noise rejection algorithm

Status
Not open for further replies.

trastikata

Member level 1
Joined
Apr 28, 2007
Messages
36
Helped
1
Reputation
2
Reaction score
1
Trophy points
1,288
Activity points
1,631
USART transmission through OOK RF Module and MCU ADC as noise rejection filter

Hi,

Just wanted to share my project and solution for coping with the noise in OOK RF modules. Not sure if this was discussed before and certainly someone thought of this long before me
but I couldn't find much of information on-line, so it still might be useful to someone.

I had a project that needed an RF transmission (1000 bps) through an OOK module. What I found out is that the receiving modules adjust their gain too fast and start picking noise
when the carrier is off for transmitting two or more consecutive 0s. Where 1s are being received without problem as long as there isn't another transmitter in the immediate proximity.

So instead of reading in the middle of the transmitted bit I coupled the module output to the 12 bit ADC input of the MCU and I read approximately 80% -90% of the bit length. With 5 uSec
acquisition time I can average 16 readings per bit for 1000 bps transmission. So I give an arbitrary threshold value where everything less than it is considered 0s and more than that as 1s.
Since false positive in a "0" is much more probable than a false negative in a "1" you should calculate the value closer to the "1".

In my case this is 780 bits (I invert the module output through a MOSFET for voltage conversion) as it corresponds to 2.5 false negative readings for every "1" transmitted and 13.5 false positive
readings for each "0" in a 12bit ADC.

This of course will require higher speed MCU and better timing synchronization but it is easily achievable with modern MCUs.
In my project I used Lynx Technologies OOK module and PIC MCU.

Tips:
- The subroutines for this are quite fast - and don't require much of a processing time. To avoid division simply accumulate 2n ADC readings and right shift n bits.
- Don't use faster ADC times and/or higher number of ADC readings but spread the readings through the entire bit length so you can have better chance to catch the noise.
- An appropriate preamble and MCU hardware timers give excellent timing
- Instead of an ADC port you can use any digital port and check the state several times but with an ADC port and longer acquisition times you have better chance to pick up
level transitions, hence better chance for noise rejection.

Hope this helps in your projects.

Regards
 
Last edited:

NP but it seems that I am not allowed to use this function yet. I will post it as soon as I can.
 


Thank you wp100.

I am aware of the advantages of Manchester Encoding. However these receiving modules have very short recovery time and adjust the gain too fast.

I've tried Manchester Encoding but the noise starts to interfere too fast. At 9600 bps I pick up noise in the 0s, at 1000 bps more than the last 2/3rd of each 0 is noisy,
so it is hard to get reliable transitions. In my trials the above mentioned method proved to have much better noise resistance because of its logic. The main "disadvantage"
is that you can't recover the clock.

Probably a combination of both methods (didn't think of it until now) would give the bests noise resistance. I will modify my code and make more
tests in the next day.
 
Last edited:

Status
Not open for further replies.

Similar threads

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top