Arduino Logic Levels over SPI

Hi, I've made my own Ethernet shield using the ENC28J60,but havent employed any kind of level shifting mechanism,since I've read somewhere that the Atmega328P can take both 3.3 and 5v logic level.

However,with our Arduino(I have the Serial Arduino) as i understand it,the logic levels are controlled by the input voltage to the micrcontroller,correct? logic levels on the arduino cant be 3.3,since the microcontroller is driven by a 7805.

So,if the above conclusion is positive,then to use the ENC28J60, I have 2 options: 1.Employ a Level Converter Mechanism my atmega at 3.3,so that all logic levels are at 3.3

Am I thinking correctly?

Please clear this out :)

And If I am talking level conversion,which is the simplest way?

If you read the datasheet for the ENC28J60, it says "5V Tolerant Inputs." So it doesn't matter what voltage outputs your microcontroller is putting out.

yes,thats ok,..But it(ENC28J60) shall output only at 3.3v,rite? Which I dont guess the atmega can recognize,since its Vcc is 5v,hence the logic level is 5v and not 3.3...

Am i correct with that argument?

The simplest solution, in my opinion would be to drop the Arduino supply voltage to 3.3V. Sure, not all ATMega328 chips can run at 20MHz under that voltage, but most of them would run without any issues.

but i dont think thats possible on the serial arduino board..supplying your own Vcc or so...

(I dont wanna mess up the board with my sad soldering skills :P )


But it(ENC28J60) shall output only at 3.3v,rite?

From the data sheet: With ATmega Vcc greater than 2.5 Volts, the minimum high voltage for logic '1' is 0.6 times Vcc. (This is the lowest voltage for which the pin is guaranteed to read as high.)

Therefore, with the CPU operating at 5 Volts, inputs greater than 3 Volts will be seen to be logic '1'.



Thanks @ all ^ for clearing the confusion i had :)