Cliff notes of the post: My rfm12B boards only send and receive signals when powered by 5V (actually it turn out to require >3.6V). No signals were sent and the chip “freezes” when powered by 3.3V. I would like to power the board with a lower voltage more around 3V. Does anyone know what the cause might be?
I know that the datasheet for the rfm12B says that the rfm12B can be run on anywhere from 2.2-3.8v, and that it specifically says, don’t run the rfm12B on 5V. The problem I am having is I cannot get signals to be sent unless my rfm12B is being powered by 5V. Therefore, I think something wrong and I was wondering if someone could help me better understand my problem.
So first some background on my setup. I am driving one rfm12B-S2 rev4 with my ardunio Uno R3. I am powering the rfm12B from the 5v pin. My other rfm12B-s2 rev4 is attached to a breadboard arduino (atmega328-PU). It is being powered with an LM317 adjusted to 5V. Both are running the rfm12_demo sketch from JeeLabs.
When I used the serial monitor window on the arduino IDE I see the standard startup dialog where I can change the node ID, frequency and node group. When plugged into 5V I can easily change these features on the board attached to my computer(via USB). When I power the rfm12 with the 3.3V I get the normal startup dialog. However, when I try to change a setting or send a packet the output from the arduino board “freezes”. I noticed that if I remove the wire from digital pin 2 on my arduino board I am able to change the settings. However when I replug the wire the output “freezes” on the next command. Until I reset the board the serial interface is not responsive to further commands.
In my latest round of diagnostics I hooked my LM317 up to a pot allowing me the ability to adjust the output voltage. I hooked the output to both the rfm12B boards. I found that the rfm12B boards required a minimum of 3.6V to operate. Below that voltage the RMF12Bs were unable to send signals back and forth and the atmega chip seems to “freeze”.
Over the past few weeks I have probably plugged the arduino/rfm12B up in nearly every wrong configuration possible. I don’t think I blew anything up since the boards do work, but it is possible.
Now to my question, knowing that I am an amature are there any suggestions or ideas from anyone to why my boards seem to only transmit/receive when I have them plugged into >3.6V for a power supply? In my final application I would like to use 2AAA batteries as power so I would like to be able to power the board on less than 3.6V. I would also like to be able to power the boards on the 3.3V rail because 3.3V is readily available off the arduino Uno.
This is my first post so please let me know if I need to add more information about my setup or problem.
I know that the datasheet for the rfm12B says that the rfm12B can be run on anywhere from 2.2-3.8v, and that it specifically says, don’t run the rfm12B on 5V.
Here is the datasheet for the RFM12B. http://www.hoperf.com/rf/fsk/21.htm
Looking back I see that the datasheet does not say not to use 5V only that the RFM can be powered by 2.2.-3.8V. However, I have seen a number of different websites that claim you should not run the model on 5V without a voltage divider to drop the voltage to 3.3V.
My current hypothesis of my problem is that the low voltage detector of the rfm12 is set too high. Now I just have to figure out how to change the voltage threshold within the code. This post seems to be like a good place to start: http://jeelabs.org/2012/05/07/how-low-can-it-go/#comments
But I need to figure out where to call "rf12_control: 0xC040"
Are you Sure you have RFM12B' AND NOT RFM12? The RFM12 IS a 5V tolerant board, The RFM12B IS Not. There are other differences but minor to the 3V3/5V Vcc Differences.
I agree with you that the board should not require 5V to operate, and in my remote monitoring station I would like it to operate around 3V. However I am observing the board to require more than 3.6V to operate properly
A quick update on my troubleshooting: I switched to using the library from Low power labs:http://lowpowerlab.com/blog/2012/12/28/rfm12b-arduino-library/. I with that library I tried to change the initialization of the radio to require a 2.25V threshold, but it did not work. So either I did not properly configure the radio or it did not help. I am not really sure how to test either scenario. Unfortunately I do not have a scope so I can only probe around with my multimeter.
I have seen a number of different websites that claim you should not run the model on 5V without a voltage divider to drop the voltage to 3.3V.
What this is referring to is that you need voltage-dividers on the SPI pin signals going from
the 5V Arduino pins to the 3.3V RFM12 pins, ie SCLK,MOSI,SS --> RFM12.
5V divided down to 3.3V, eg 2.4K feeding onto 4.7K, etc. You don't put voltage dividers
on the Vcc "power" to the chip, you put a solid 3.3V there.
I have run these RFM12B from the 3v from the arduino supply, but they take quite a surge of current momentarily when transmitting, so I fitted a 4700MFD capacitor to the supplypins, and they ran fine.
Boffin1:
I have run these RFM12B from the 3v from the arduino supply, but they take quite a surge of current momentarily when transmitting, so I fitted a 4700MFD capacitor to the supplypins, and they ran fine.
Ummm, I thought this was with the RFM22 modules and not the RFM12. No? There is a
difference of about 10X current draw between the two. Also, I think your problem with current
surges may have been because the v.reg on your board couldn't provide adequate current.
BTW, I've finally gotten my RFM22s wired up and running properly last week, and not had any
current surge problems, although I'm using a nice 3.3V regulator rated at 1A too.
Given his comments, I think OP has things wired up wrong. On one project, I use my RFM12s
at 3.3V with no problem, I just have proper voltage dividers between the Arduinos and the
RFM12s. You have to pay attention to what the datasheets say. 5V - not.
Thanks Boffin1 and oric_dan. I combined your two suggestions and everything is now up and running with very few dropped transmissions. I looked at the circuit diagrams what seems like hundred of times, however I ignored the voltage dividers because I was going to run from 3.3V. I'll be more careful next time.
Thats great biojerm, I missed that you said rfm12b and not 22b.
And Oric-Dan, yes the cap was a reservoir to supply the short surge that the arduinos regulator couldnt. I scoped the voltage and you could not really see any drop, so it did its job.
I am glad you got yours going OK, what mode are you using ? I have a massive backlog of things to catch up on, but intend digging them out again when I get a moment.
So far, mainly testing. I wrote a menuing program so I could select different modem
modes, frequencies, and transmit powers. Am also testing a packet transfer program,
where a packet is sent, then echoed back by the receiver for verification. I've tried up
to 125 Kbaud and 50 mW xmit power.
In contrast to what you mentioned in the past, I've gotten up to 1700-foot range, at least
on the receive end. That was using 434 Mhz, 50mW, 2000 bps FSK, and as far as I could
walk down the street and still be LOS, so it'll probably go longer. At 125 KBps, I got about
700-feet 1-way, but only about half that distance for packets to be echoed back properly.
This is preliminary - still need more testing [time is being co-opted on other matters].
I think your low range measurements in the past were maybe because the "default" mode
of the library rf_init() function is only 8 dBm [6.3 mW = minimal xmit power], unless
you had patched the function. If so, then I don't know.
Also, supposedly the RFM22B has a top xmit power of 100 mW, but so far that hasn't
seemed to work for me, so ???
That looks pretty good, the project I have been battling with at the moment, I made 6 months ago, and has one 2.4Ghz link, one 443 Mhz, and one 443.8 Mhz link ( not simultaneously ) and it worked fine then
.
I got it back to make some mods to the data logging, and have been battling to get it going even as it was then !
It uses the RFD21733 2.5Ghz transceivers which they claim up to 1700m range with proper antennas.
They have a nifty looking software to control the various modes, and I think use an NRF module.
I will also have another look at them when I get a break !
One of these days I hope to get back to finishing the RFM22 project. So far, I am very
pleased with the range, as it's a lot longer than anything else I've tried: XBee Pros [100m
outdoors LOS], nRF2401+ [< 10m], and RFM12, although I have to say the RFM12s are
not bad for low power, about 5 mW, as I got about 120' LOS range at 433 Mhz with them.
In any case, the RFM22s should be good for my 4WD robot, one day destined to run
around the fields nearby - maybe this summer :-).
I ran into this same problem a while ago. When i had my rfm12b's plugged into the uno's 3.3v, it ran just fine. When i moved them to my breadboard arduino, the onboard 3.3V regulator of the breakout board did not work. I then tried to use a voltage divider, but that also did not work. Eventually i found that just plugging it straight into the 5V from the 7805 regulator worked just fine, and that's how I've had it for several weeks now with no issues.
just plugging it straight into the 5V from the 7805 regulator worked just fine, and that's how I've had it for several weeks now with no issues.
Thats a bit like crossing the road without looking left or right, you can get away with it for a while
You can put 3 x 1N4007s in series to knock the supply down to approx 3v3, ( with a cap after them ) but you will need resistors for the data lines to the module.
Does make one wonder, however. People keep saying they put 5V on 3.3V devices, and they
work just fine. Maybe the manufacturers are all playing a big hoax on us.
It actually sounds fishier that the 3.3V regulator on the breakout board didn't work. How
hard is it to get one going, after all? And the RFM12s only draw 30 mA ro so, so any old
v.reg will handle that with no problems.
And why on earth do so many people keep saying "I then tried to use a voltage divider, but
that also did not work"? Sheesh.
but you will need resistors for the data lines to the module.
Yep, got that. I'm using a breakout board designed for the digispark (because it's cheap!), with some custom wiring for the Vin and ground. http://digistump.com/products/31
It actually sounds fishier that the 3.3V regulator on the breakout board didn't work.
I'm not sure why the regulator on the BoB didn't work. I checked the voltage and it was around 3.3v. I even went and got a variable regulator, set it to 3.3v, and still no dice. That's when i got pissed and plugged it into the 5V and all of a sudden the Serial Monitor started spitting out data. Anyway, it works now like that on both of the transceivers (RC Car!).
I wonder of its similar to the problem that has wasted a lot of my time this week.
I often use resistors feeding data to a 3 v device, and feed the data back straight to the arduino pin - it supposed to be 3volts which should be a logic 1.
But it didnt work when I tried it this week for some reason, when I scoped it it was slightly under 3v pp. I had to put a 2 transistor level shifter in, now it works.
Boffin1:
I wonder of its similar to the problem that has wasted a lot of my time this week.
I often use resistors feeding data to a 3 v device, and feed the data back straight to the arduino pin - it supposed to be 3volts which should be a logic 1.
But it didnt work when I tried it this week for some reason, when I scoped it it was slightly under 3v pp. I had to put a 2 transistor level shifter in, now it works.
Table 29-2 in the ATmega328 d/s indicates that the minimum allowable logic "1" input
voltage for Vcc=5V to be 0.6*Vcc = 3V. So, the 3.3V signals people commonly connect have
a bit of noise margin, but 3V does not.
I'm not sure why the regulator on the BoB didn't work. I checked the voltage and it was around 3.3v.
Either bad ckt design, wrong part, parts inserted wrong, incorrect wiring, or inadequate
power supply feeding the v.reg. There aren't too many other alternatives.