User Tools

Site Tools


the_i2c_bus

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
the_i2c_bus [2020/01/16 13:36] – [I²C Protocol] tellthe_i2c_bus [2022/02/03 09:06] (current) tell
Line 15: Line 15:
   * Each "slave" device has an address, and each slave on the bus must have a unique address.   * Each "slave" device has an address, and each slave on the bus must have a unique address.
   * Addresses are 7 bits long, therefore there are only 128 possible addresses.   * Addresses are 7 bits long, therefore there are only 128 possible addresses.
-  * Some devices have pins that can chose from several addresses.  Others are limited to one per bus because the address can't be changed.+  * Some devices have pins that can chose from several addresses.  Others are limited to one per bus because their address can't be changed. 
  
-{{ :i2c-protocol.png |}} 
 ====== I²C Protocol ====== ====== I²C Protocol ======
  
Line 28: Line 28:
 This figure shows the basic idea: start, write one byte, acknowledge, stop: This figure shows the basic idea: start, write one byte, acknowledge, stop:
  
-  {{ :i2c-protocol.png |}}+{{ :i2c-protocol.png |}}
  
 All transfers start as shown here, with the master sending one byte onto the bus containing the 7 bit address and one bit that indicates whether the next byte will be a write (master to slave) or a read (slave sends to master). All transfers start as shown here, with the master sending one byte onto the bus containing the 7 bit address and one bit that indicates whether the next byte will be a write (master to slave) or a read (slave sends to master).
Line 38: Line 38:
 ====== I²C in FRC ====== ====== I²C in FRC ======
 {{ :roborio-i2c.png|}} {{ :roborio-i2c.png|}}
-Since the introduction of the RoboRio, there has been an easy way to use I²C for FIRST robots.  The connector on the Rio looks like this.  The connector has four pins.  In addition to SCL and SDA, there is a pin for 3.3v power, and a pin for the common ground for signal and power.  This means that no external power source is needed or recommended for attaching an I2C device.+Since the introduction of the RoboRio, there has been an easy way to use I²C for FIRST robots.  The connector on the Rio looks like this.  The connector has four pins, but otherwise looks like the common "PWM" connectors. 
 +It uses the same housings and headers that hold pins on 0.1 inch centers. 
 + 
 +In addition to SCL and SDA, there is a pin for 3.3v power, and a pin for the common ground for signal and power.  This means that no external power source is needed or recommended for attaching an I2C device.
  
 Around 2018-2019 we started to see packaged color and distance sensors from Rev Robotics and others. Around 2018-2019 we started to see packaged color and distance sensors from Rev Robotics and others.
Line 52: Line 55:
 This is often the best place to find such examples.  Reading the sample code can help you understand the part's datasheet. This is often the best place to find such examples.  Reading the sample code can help you understand the part's datasheet.
  
- +By 2021 there appeared FRC Java libraries for some of the I²C sensors that we've used.  But going back to the Arduino C code is necessary for some of the interesting ones that are less common in FRC.
- +
- +
  
  
 ====== I²C in other maker/hobby wiring ====== ====== I²C in other maker/hobby wiring ======
 +
  
 ===== QWIIC ===== ===== QWIIC =====
Line 64: Line 65:
 [[http://sparkfun.com | Sparkfun]] has many sensor boards and controllers that use a tiny 4-pin connector they call [[http://sparkfun.com/qwiic|QWIIC]].  It carries the SDA and SCL signals, ground, and +3.3v power. [[http://sparkfun.com | Sparkfun]] has many sensor boards and controllers that use a tiny 4-pin connector they call [[http://sparkfun.com/qwiic|QWIIC]].  It carries the SDA and SCL signals, ground, and +3.3v power.
  
-(picture)+{{ :quicc-board-cable.png |}}
  
 Adafruit wants to call the same thing [[https://learn.adafruit.com/introducing-adafruit-stemma-qt|STEMMA-QT.]] Adafruit wants to call the same thing [[https://learn.adafruit.com/introducing-adafruit-stemma-qt|STEMMA-QT.]]
Line 70: Line 71:
 ===== Eastbots I2C Tester ===== ===== Eastbots I2C Tester =====
  
-In 2019 we had some flaky i2c operation, so built this wiring tester+In 2019 we had some flaky i2c operation, so we built this wiring tester
 [[testing_i2c_wiring]] [[testing_i2c_wiring]]
 +
 +
the_i2c_bus.1579199805.txt.gz · Last modified: 2020/01/16 13:36 by tell