Arduino Duemilanove logic levels

I am using Arduino Duemilanove to communicate with a WiFi Module.

The WiFi Module has a 3.3V TTL interface with RX and TX pins. I am trying to feed the imcoming data (seen on the serial TX pin of the WiFi Module) into the serial RX of my Arduino. My Arduino does not seem to acquire any incoming data. My concern is that Arduino needs to have 5V levels fed onto its RX pin. Should Arduino be able to understand 3.3V levels or do I need to convert the level to something higher?

Thanks for assistance.

Here is a forum post on Should help.

The forum on SF has similar findings to what I have seen, namely that the minimum value for detecting a logic high is VDD*0.6 = 3V. So since I have a 3.2-3.3 V signal, my Arduino should be detecting this right?

Is there any other reason this is not working?

Do you know there are signals actually on the line? Have you seen them on a scope?

Yes, I have used a scope to ensure that the desired signal is present on the line. When setting the WiFi module to run at 3.3V, I saw a high level of about 3.18V and when setting to 3.45V (the max recommended value), I achieve a high level of about 3.3V.

These both seem to be within spec so I am not sure how else to debug the issue. I have also used my Arduino (without anything attached), to run with serial monitor via USB. Doing so, I am able to type and send similar packets to verify the correct functionality of my Sketch.

If anyone has any ideas on how to debug this, I would greatly appreciate them.


So if you know there is a 3v3 it should recognise it as a logic one as the minimum is 0.6 * supply voltage = 3V.

If you do not see the voltages on the arduino then there must be something else wrong. 1) Is there a common ground between the sending device and the receiving device? 2) Is the logic zero going low enough? 3) Test this by using a normal input and seeing if you can detect high and low values by say routing the input to an LED driving output. 4) Does your software recognise an input on this input. That is have you a software problem.

Thanks for the help and the great suggestions! I was able to detect the High and Low levels by feeding the data into another input pin and then printing the values to serial monitor. That assured me that the levels are detected properly.

I made the two devices share a ground and everything worked! Is the "ground sharing" only a big deal because I am working with a signal that is only slightly above the proper range?

Thanks again.

Is the "ground sharing" only a big deal because I am working with a signal that is only slightly above the proper range?

No. It is always required.