IOREF

Hi, I'm not sure if it's the right forum so if it's not just tell me to where I need to go.
Can somebody explain me please what does the IOREF pin do?
thanks a lot,
Roi

1 Like

It is to let a shield know what voltage levels to expect on the IO pins from the underlying Arduino.
3.3V or 5V. I don't know of any shields that take advantage of that yet.

1 Like

Thank you very much!

The stuff I've been working on used it, I'll link a schematic (it is a new version not built at the time of writing) that uses a 74LVC07A buffer to level shift so you can see how it is used.

There is a level shift of 3.3V from the Pi Zero SPI to the MCU board (e.g. Uno has 5V AVR). Also another level shift from the MCU board to the 3.3V RS-422 transceivers.

It seems to me that IOREF was already available on the SPI/ICSP plug (e.g. ICSP requres it) so it is on the board twice.

Update: My description was not very good, just take this as an example of how IOREF can be used on a shield. The idea is to make the shield interface with a range of boards e.g. a 3.3V Arm board or the more common 5V Uno board. Don't get confused by how the Pi Zero is powered, it is not for a USB connected board.

@CrossRoads

  1. For Arduino UNO System, the underlying board is the Arduino UNO Kit. Am I correct?

  2. For shield, the peripheral board that will be plugged-in on the top of Arduino UNO through
    one or more of the 4 female connectors of the Arduino UNO. Am I correct?

  3. I have physically checked that the IOREF-pin of Arduino UNO is solidly connected with 5V.

  4. The operating voltage of ATmega328 of Arduino UNO Kit is 5V. So, the logic levels of the
    IO pins of the Arduino UNO is expected to be within (0 to 5V) depending on loading conditions
    of the IO pins.

  5. In Arduino UNO Kit, the 3.3V is a seperate point which is solidly connected with the output
    of an on-board 3.3V regulator (IC6, Reference Design). The Arduino UNO has not used it.

  6. So, the meaning of your following sentence ofyour post is not clear. Would appreciate
    clarification with example:

It is to let a shield know what voltage levels to expect on the IO pins from the underlying Arduino.

GolamMostafa:
@CrossRoads

  1. For Arduino UNO System, the underlying board is the Arduino UNO Kit. Am I correct?

  2. For shield, the peripheral board that will be plugged-in on the top of Arduino UNO through
    one or more of the 4 female connectors of the Arduino UNO. Am I correct?

  3. I have physically checked that the IOREF-pin of Arduino UNO is solidly connected with 5V.

  4. The operating voltage of ATmega328 of Arduino UNO Kit is 5V. So, the logic levels of the
    IO pins of the Arduino UNO is expected to be within (0 to 5V) depending on loading conditions
    of the IO pins.

  5. In Arduino UNO Kit, the 3.3V is a seperate point which is solidly connected with the output
    of an on-board 3.3V regulator (IC6, Reference Design). The Arduino UNO has not used it.

  6. So, the meaning of your following sentence ofyour post is not clear. Would appreciate
    clarification with example:

It is to let a shield know what voltage levels to expect on the IO pins from the underlying Arduino.

There are many more kinds of Arduino than just an Uno. Some of them (mainly the AVR variants) use a 5V microcontroller, others (mainly the ARM variants) use a 3.3V microcontroller. These boards will still provide 5V and 3.3V power outputs.

On the boards with a 3.3V microcontroller (like a Due), IOREF is attached to the 3.3V regulator.

1 Like

Thanks for the clarification presented in a lucid style.

1 Like

HI, everybody.

Then, it is not possible to change the reference of the output pins to 3.3v on the arduino board UNO????

The pins go inside the microcontroller where they have ESD protection diodes to the power supply. That means applying a higher voltage (Supply+0.5 is about max) can damage it. There is also ESD diodes to ground which means the pin must not go much below ground.

If you supply 3.3V to the microcontroller then it needs to run slower, Sparkfun has this one for example.

But anything timing related turns into a job.

I have a Arduino MKRZERO and it doesnt have a IORef pin slot. The circuit im trying to emulate has wires going to that pin slot, is there another pin i can use instead but that would still get the job done?

dsm311:
I have a Arduino MKRZERO and it doesnt have a IORef pin slot. The circuit im trying to emulate has wires going to that pin slot, is there another pin i can use instead but that would still get the job done?

MKRZero is a 3.3v board, so IOREF should be 3.3v.

My MKRZERO has 5V,VIN, VCC, AREF.....no 3.3V

Vcc is generally the voltage the chip is running at, hence that's what IOREF should be connected to (on the MKRZero that's 3.3v)

thanks DrAzzy.