The I²C full master
MSSP module is
available with a number of PIC MCU models. mikroC PRO for PIC provides library
which supports the master I²C mode.
Important :
- Some MCUs have multiple I²C modules. In order to use the
desired I²C library routine,
simply change the number
1
in the prototype with the appropriate module number, i.e.I2C2_Init(100000);
Library Routines
- I2C1_Init
- I2C1_Start
- I2C1_Repeated_Start
- I2C1_Is_Idle
- I2C1_Rd
- I2C1_Wr
- I2C1_Stop
I2C1_Init
Prototype | void I2C1_Init(const unsigned long clock); |
---|---|
Returns | Nothing. |
Description |
Initializes I²C with
desired clock (refer to device data sheet for correct values in
respect with Fosc). Needs to be called before using other functions of
I²C Library.You don’t need to configure ports manually for using the module; library will take care of the initialization. |
Requires |
Library requires MSSP module.![]() |
Example | I2C1_Init(100000); |
I2C1_Start
Prototype | unsigned short I2C1_Start(void); |
---|---|
Returns | If there is no error, function returns 0. |
Description | Determines if I²C bus is free and issues START signal. |
Requires | I²C must be configured before using this function. |
Example | I2C1_Start(); |
I2C1_Repeated_Start
Prototype | void I2C1_Repeated_Start(void); |
---|---|
Returns | Nothing. |
Description | Issues repeated START signal. |
Requires | I²C must be configured before using this function. |
Example | I2C1_Repeated_Start(); |
I2C1_Is_Idle
Prototype | unsigned short I2C1_Is_Idle(void); |
---|---|
Returns | Returns 1 if I²C bus is free, otherwise returns 0. |
Description | Tests if I²C bus is free. |
Requires | I²C must be configured before using this function. |
Example | if (I2C1_Is_Idle()) {...} |
I2C1_Rd
Prototype | unsigned short I2C1_Rd(unsigned short ack); |
---|---|
Returns | Returns one byte from the slave. |
Description |
Reads one byte from the slave, and sends not acknowledge signal if
parameter ack is 0, otherwise it sends
acknowledge. |
Requires |
I²C must be configured
before using this function. Also, START signal needs to be issued in order to use this function. |
Example |
Read data and send not acknowledge signal:unsigned short take; ... take = I2C1_Rd(0); |
I2C1_Wr
Prototype | unsigned short I2C1_Wr(unsigned short data_); |
---|---|
Returns | Returns 0 if there were no errors. |
Description |
Sends data byte (parameter data ) via I²C bus. |
Requires |
I²C must be configured
before using this function. Also, START signal needs to be issued in order to use this function. |
Example | I2C1_Write(0xA3); |
I2C1_Stop
Prototype | void I2C1_Stop(void); |
---|---|
Returns | Nothing. |
Description | Issues STOP signal. |
Requires | I²C must be configured before using this function. |
Example | I2C1_Stop(); |
Code Example
This code demonstrates use of I²C library. PIC MCU is connected
(SCL, SDA pins) to 24c02 EEPROM.
Program sends data to EEPROM
(data is written at address 2). Then, we read data via I²C from EEPROM and send
its value to PORTB, to check if the cycle was successful (see the figure below
how to interface 24c02 to PIC).
void main(){
ANSEL = 0; // Configure AN pins as digital I/O
ANSELH = 0;
PORTB = 0;
TRISB = 0; // Configure PORTB as output
I2C1_Init(100000); // initialize I2C communication
I2C1_Start(); // issue I2C start signal
I2C1_Wr(0xA2); // send byte via I2C (device address + W)
I2C1_Wr(2); // send byte (address of EEPROM location)
I2C1_Wr(0xAA); // send data (data to be written)
I2C1_Stop(); // issue I2C stop signal
Delay_100ms();
I2C1_Start(); // issue I2C start signal
I2C1_Wr(0xA2); // send byte via I2C (device address + W)
I2C1_Wr(2); // send byte (data address)
I2C1_Repeated_Start(); // issue I2C signal repeated start
I2C1_Wr(0xA3); // send byte (device address + R)
PORTB = I2C1_Rd(0u); // Read the data (NO acknowledge)
I2C1_Stop(); // issue I2C stop signal
}
No comments:
Post a Comment