I am trying to figure if SDA and SCL pins from Arduino Uno is a TTL or a CMOS technology. I am not able to find this info anywhere but regarding it is a I2C protocol it does make sense to be a TTL technology. Can someone kindly confirm this info, please?
2 Answers
It is CMOS in that the IO pins of the MCU use MOSFETs not BJTs.
However I2C is slightly different in that it is open-drain not push-pull, so it's not really either TTL or CMOS since it doesn't conform to either logic level standard (since there is no "high" voltage, only what is pulled up by the external resistor). That said, since the ATMega is normally CMOS when in input or push-pull mode the logic levels of the I2C should conform to CMOS not TTL in order for the Arduino to read them properly.
It's closer to RTL than TTL or CMOS.
-
Many thanks for the help. I am struggling in establishing an I2c communication between arduino and pic32mx, and it seems I have a prob here. As you said arduino is RTL and pic is a CMOS technology. Arduino is at 5V and PIC at 3.3V and I am facing many issues in order to release the bus line. Probably this is the reason why. Do you have a clue?– scubaApr 8, 2016 at 10:36
-
PIC is CMOS like the Arduino, just a different voltage. More strictly, it's LVCMOS - CMOS at 3.3V. CMOS itself is 5V normally. How are you dealing with the PIC32MX side of things?– MajenkoApr 8, 2016 at 10:39
-
I already started this conversation in this chatroom a few days ago chat.stackexchange.com/rooms/37934/… let me know if there's any problem in entering the room.– scubaApr 8, 2016 at 10:45
-
connect both SDA and SCL via a pullup resistor (about 4.7k-10k) to 3.3V– Cano64Apr 8, 2016 at 14:40
-
This app-note describes one way to mix voltages on a I2C bus simply: nxp.com/documents/application_note/AN10441.pdf Apr 8, 2016 at 14:45
Your question makes no sense. I²C uses open-drain/open-collector drivers which can even be discrete transistors or FETs although the inputs correspond to CMOS/TTL. These can be mixed - the Arduino uses MOS technology.
Of more significance is the supply voltage and the high/low trigger points (and of course the value of the mandatory pullup resistors which determine speed and/or range).
It is possible to use mixed 3.3V/5V levels. I use a Pi (3.3V) to communicate to Arduino (5V) which works (provided pullup is to 3.3V) although technically the Arduino input high levels are marginal.