Main Content

writeRegister

Write to register on I2C device

Add-On Required: This feature requires the MATLAB Support Package for Raspberry Pi Hardware add-on.

Description

writeRegister(myi2cdevice,register,value,dataPrecision) writes a hexadecimal value to a register on an I2C device. Optionally, you can match the data precision to the size of the register on the device.

The writeRegister method stops when it finishes writing the specified data to the register, or when the timeout period elapses.

example

Examples

collapse all

You can connect and exchange data with a pair of I2C devices.

Create a connection from the MATLAB® software to the Raspberry Pi® board.

mypi = raspi
mypi = 

  Raspi with Properties:

           DeviceAddress: 'raspberrypi-hysdu8X38o'
                    Port: 18725
               BoardName: 'Raspberry Pi Model B Rev 2'
           AvailableLEDs: {'led0'}
    AvailableDigitalPins: [4 7 8 9 10 11 14 15 17 18 22 23 24 25 27 30 31]
    AvailableSPIChannels: {}
      AvailableI2CBuses:  {'i2c-0'  'i2c-1'}
             I2CBusSpeed: 100000

  Supported peripherals

Redisplay AvailableI2CBuses and I2CBusSpeed.

mypi.AvailableI2CBuses
mypi.I2CBusSpeed      
ans =

  1×2 cell array 

    {'i2c-0'}    {'i2c-1'}

ans =

      100000

Show the location of the I2C pins.

showPins(mypi)

The pin map shows that, for this model and revision of the board, the i2c-1 bus is available on the GPIO header pins I2C1_SDA (GPIO 2) and I2C1_SCL (GPIO 3).

After physically connecting your I2C device to the I2C pins, get the addresses of I2C devices attached to the I2C bus, 'i2c-1'.

scanI2CBus(mypi,'i2c-1')
ans =

  1×2 cell array  

     {'0x55'}    {'0x20'}

Create a connection, i2csensor, from the MATLAB software to the I2C sensor at '0x20'.

i2csensor = i2cdev(mypi,'i2c-1','0x20')
i2csensor = 

I2Cdev with properties:

        Bus: 'i2c-1'
    Address: 32

Read two uint8 numbers from the sensor.

output1 = read(i2csensor,2)

Read the value of register 14 from the sensor.

output2 = readRegister(i2csensor,14)

Create a connection, i2cdisplay, from the MATLAB software to the I2C LED display at '0x55'.

i2cdisplay = i2cdev(mypi,'i2c-1','0x55')
i2cdisplay = 

I2Cdev with properties:

        Bus: 'i2c-1'
    Address: 85

Write characters to the display.

write(i2cdisplay,[hex2dec('20') hex2dec('51')])

Write a scalar hexadecimal value, hex2dec('08'), to register 3 on an I2C device.

writeRegister(i2cdisplay,3,hex2dec('08'),'uint8')

If you are not using I2C, disable I2C using the Hardware Setup Screen to free additional GPIO pins. Before using I2C again, enable I2C and change the I2C bus speed using the Hardware Setup screen. In this example the bus speed is set to 400000 bits/s.

mypi.I2CBusSpeed
ans =

       400000

Input Arguments

collapse all

Connection to I2C device, specified as a i2cdev object.

Example: myi2cdevice

I2C register number, specified as a scalar. This number is available from the device data sheet.

Example: 14

Data Types: double

Numeric value to write to register, specified as a scalar. (Does not accept arrays.)

Example: hex2dec('08')

Data Types: int8 | int16 | uint8 | uint16

Note

If the data written is bigger than uint8, the data is in little-endian format.

Data precision, specified as a string. Match the data precision to the size of the register on the device. Optional.

Example: 'int16'

Data Types: char

Extended Capabilities