Software I²C Library
The mikroBasic PRO for FT90x provides routines for implementing Software I²C communication. These routines are hardware independent and can be used with any MCU. The Software I²C library enables you to use MCU as Master in I²C communication. Multi-master mode is not supported.

- This library implements time-based activities, so interrupts need to be disabled when using Software I²C.
- All Software I²C Library functions are blocking-call functions (they are waiting for I²C clock line to become logical one).
- The pins used for the Software I²C communication should be connected to the pull-up resistors. Turning off the LEDs connected to these pins may also be required.
- Every Software I²C library routine has its own counterpart in Hardware I²C library, except
I2C_Repeated_Start
.Soft_I2C_Start
is used instead ofI2C_Repeated_Start
. - Working clock frequency of the Software I²C is 20kHz.
External dependencies of Software I²C Library
The following variables must be defined in all projects using Software I²C Library: | Description : | Example : |
---|---|---|
dim Soft_I2C_Scl as sbit sfr external |
Soft I²C Clock line. | dim Soft_I2C_Scl as sbit at GPIO_PIN26_bit |
dim Soft_I2C_Sda as sbit sfr external |
Soft I²C Data line. | dim Soft_I2C_Sda as sbit at GPIO_PIN25_bit |
Library Routines
Soft_I2C_Init
Prototype |
sub procedure Soft_I2C_Init() |
---|---|
Description |
Configures the software I²C module. |
Parameters |
None. |
Returns |
Nothing. |
Requires |
External dependencies of the library from the top of the page must be defined before using this function. |
Example |
' Software I2C connections dim Soft_I2C_Scl as sbit at GPIO_PIN26_bit dim Soft_I2C_Sda as sbit at GPIO_PIN25_bit ' End Software I2C connections .. Soft_I2C_Init() ' Initialize Soft I2C communication |
Notes |
None. |
Soft_I2C_Start
Prototype |
sub procedure Soft_I2C_Start() |
---|---|
Description |
Determines if the I²C bus is free and issues START signal. |
Parameters |
None. |
Returns |
Nothing. |
Requires |
Software I²C must be configured before using this function. See Soft_I2C_Init routine. |
Example |
' Issue START signal Soft_I2C_Start() |
Notes |
None. |
Soft_I2C_Read
Prototype |
sub function Soft_I2C_Read(dim ack as word) as byte |
---|---|
Description |
Reads one byte from the slave. |
Parameters |
|
Returns |
One byte from the Slave. |
Requires |
Soft I²C must be configured before using this function. See Soft_I2C_Init routine. Also, START signal needs to be issued in order to use this function. See Soft_I2C_Start routine. |
Example |
dim take as byte ... ' Read data and send the not_acknowledge signal take = Soft_I2C_Read(0) |
Notes |
None. |
Soft_I2C_Write
Prototype |
sub function Soft_I2C_Write(dim data_ as byte) as byte |
---|---|
Description |
Sends data byte via the I²C bus. |
Parameters |
|
Returns |
|
Requires |
Soft I²C must be configured before using this function. See Soft_I2C_Init routine. Also, START signal needs to be issued in order to use this function. See Soft_I2C_Start routine. |
Example |
dim data_, error as byte ... error = Soft_I2C_Write(data_) error = Soft_I2C_Write($A3) |
Notes |
None. |
Soft_I2C_Stop
Prototype |
sub procedure Soft_I2C_Stop() |
---|---|
Description |
Issues STOP signal. |
Parameters |
None. |
Returns |
Nothing. |
Requires |
Soft I²C must be configured before using this function. See Soft_I2C_Init routine. |
Example |
' Issue STOP signal Soft_I2C_Stop() |
Notes |
None. |
Soft_I2C_Break
Prototype |
sub procedure Soft_I2C_Break() |
---|---|
Description |
All Software I²C Library functions can block the program flow (see note at the top of this page). Calling this routine from interrupt will unblock the program execution. This mechanism is similar to WDT. |
Parameters |
None. |
Returns |
Nothing. |
Requires | Nothing. |
Example |
|
Notes |
Interrupts should be disabled before using Software I²C routines again (see note at the top of this page). |
What do you think about this topic ? Send us feedback!