The text of the Arduino reference is licensed under aĬreative Commons Attribution-ShareAlike 3.0 License. shift the value one bit to the right), yielding an address between 0 and 127.Ĭorrections, suggestions, and new documentation should be posted to the Forum. If you have a datasheet or sample code that uses 8 bit address, you'll want to drop the low bit (i.e. The Wire library uses 7 bit addresses throughout. 7 bits identify the device, and the eighth bit determines if it's being written to or read from. There are both 7- and 8-bit versions of I2C addresses. Because of this, send() and receive() have been replaced with read() and write(). On the Arduino Mega, SDA is digital pin 20 and SCL is 21.Īs of Arduino 1.0, the library inherits from the Stream functions, making it consistent with other read/write libraries. On most Arduino boards, SDA (data line) is on analog input pin 4, and SCL (clock line) is on analog input pin 5. This library allows you to communicate with I2C / TWI devices. Serial.Reference Language | Libraries | Comparison | Changes Serial.printf("Register value: %04x\r\n", _builtin_bswap16(buf)) įor an explanation on why we need _builtin_bswap16(), see How to print 16-bit uint16_t as four hex digits in Arduino Option 2: Reading the register into an uint8_t array const uint8_t SLAVE_I2C_ADDRESS = 0b1010 Wire.requestFrom(SLAVE_I2C_ADDRESS, 2) // This register is 16 bits = 2 bytes longĭelay(5) // Wait for data to be available Option 1: Reading the register into an uint16_t (recommended) const uint8_t SLAVE_I2C_ADDRESS = 0b1010 Ĭonst uint16_t SLAVE_I2C_REGISTER_ADDRESS = 0x50 We will provide a full example with error handling in a followup post. This is a minimal example so it creates minimal confusion for the reader. Additionally, we wait for data using delay() instead of Wire.available(). Note that this code does not implement error handling for the sake of simplicity. In my opinion, it’s most efficient to just try out the standard way of reading a register and start from there. Note that some devices like the LAN9303 have a slightly different addressing scheme or other peculiarities. It will work with almost all I2C devices like EEPROMs, ADCs and others, provided you have the correct. The following code demonstrates how to read a register that is 2 bytes (16 bits) long over I2C.
0 Comments
Leave a Reply. |
Details
AuthorWrite something about yourself. No need to be fancy, just an overview. ArchivesCategories |