Menu

Adskeeper - header widge

728x90

Search This Blog

468x60

Navbar

AdsKeeper - IAB Display Standard Ad Unit

Wednesday, October 14, 2026

dsPIC30F2010 I2C and PCF8574 Interfacing using MikroC

Introduction

The dsPIC30F2010 is a 16-bit micro-controller. It means that its internal data bus is 16-bit wide. Additionally its I/O data is also 16-bit wide. However a small foot-print 16-bit MCU like the dsPIC30F2010 has only 28 pins including supply voltage pins, ADC voltage pins, clock pins ,etc. So we can get a full 16-bit input output from its pins.

 

dsPIC30F2010 I2C and PCF8574 Interfacing
Pin Diagrams

 

To get a full 8-bit or 16-bit external I/O, we need to add any I/O expansion chips. These chips implement the SPI or I2C interface. Here I use the PCF8574 I2C I/O expansion chip. This chip an 8-bit bidirectional micro-processor expansion chip. 

 

The PCF8574 Series 

The device features an 8-bit quasi-bidirectional I/O port (P0–P7), including latched outputs with high current drive capability for directly driving LEDs. Each quasi-bidirectional I/O can be used as an input or output without the use of a data-direction control signal. At power on, the I/Os are high. In this mode, only a current source to VCC is active.

This chip is suitable for,

  • Telecom Shelters: Filter Units
  • Servers
  • Routers (Telecom Switching Equipment)
  • Personal Computers
  • Personal Electronics
  • Industrial Automation
  • Products with GPIO-Limited Processors 
dsPIC30F2010 I2C and PCF8574 Interfacing using MikroC
PCF8574 Interfacing Diagram


dsPIC30F2010 I2C and PCF8574 Interfacing using MikroC
PCF8574AP DIP-16

We can event use this chip for a 4x4 matrix keypad, or driving an HD44780-base character LCD.

 

dsPIC30F2010 I2C and PCF8574 Interfacing using MikroC
Pin Configuration and Functions

This device has various package types. A PDIP-16 or a SOIC-16 are common for most of electronics hobbyists.

 

dsPIC30F2010 I2C and PCF8574 Interfacing using MikroC
Simplified Block Diagram of Device


This device has an 8-bit customizable slave address with R/W bit.


dsPIC30F2010 I2C and PCF8574 Interfacing using MikroC
PCF8574 Interface Definition
 

We can custom its optional slave address via A2...A0 bits. Its default write address when A2...A0 are wired to GND is 0x40.

 

dsPIC30F2010 I2C and PCF8574 Interfacing using MikroC
Address Reference

 

The Master I2C device need to write device slave address followed by output port data twice.


dsPIC30F2010 I2C and PCF8574 Interfacing using MikroC
PCF8574 Write Mode

To read from this I2C slave device, the microprocessor need to write device read address (eg. 0x41), followed by I2C in read mode.


dsPIC30F2010 I2C and PCF8574 Interfacing using MikroC
PCF8574 Read Mode
 

We can use various I/O devices with this chip.

 

dsPIC30F2010 I2C and PCF8574 Interfacing using MikroC
PCF8574 Typical Application

 Interrupt Output (INT) pin is optional.
 

dsPIC30F2010 I2C Programming using MikroC

MikroC for dsPIC offer a build-in dedicated and software I2C libraries. Both of them are stable and reliable for most of applications. It excepts that the software I2C operates at lower clock frequency.

Here I use its dedicated I2C module. Most of dsPIC30F MCUs have more than one I2C module. 

Important :

  • I²C library routines require you to specify the module you want to use. To select the desired I²C module, simply change the letter x in the routine prototype for a number from 1 to 3.
  • Number of I²C modules per MCU differs from chip to chip. Please, read the appropriate datasheet before utilizing this library.

These are its library routines:

Library Routines

Generic Routines

 For more information about using the I2C module, please see this page.

PCF8574AP Output LEDs Example

For an introductory example, the dsPIC30F2010 send an 8-bit data to this chip. The 8-bit output of PCF8574AP connect individual LED.

 

Schematic:

dsPIC30F2010 I2C and PCF8574 Interfacing using MikroC
Schematic

 MikroC Source Code:

 



  1. const char PCF8574_W=0x40;
  2. const char PCF8574_R=0x41;
  3. const char PCF8574A_W=0x70;
  4. const char PCF8574A_R=0x71;

  5. void pcf8574_write(char device, char _data){
  6. I2C1_Start(); // issue I2C start signal
  7. I2C1_Write(device); // send byte via I2C (device address + W)
  8. I2C1_Write(_data); // send byte (data address)
  9. I2C1_Stop(); // issue I2C stop signal
  10. }

  11. void blink(unsigned int duration, unsigned int counts){
  12. while(counts>0){
  13. pcf8574_write(PCF8574A_W,0x00);
  14. Vdelay_ms(duration);
  15. pcf8574_write(PCF8574A_W,0xFF);
  16. Vdelay_ms(duration);
  17. counts--;
  18. }
  19. pcf8574_write(PCF8574A_W,0x00);
  20. }
  21. void main(){
  22. char temp = 0, i = 0;
  23. I2C1_Init(100000); // initialize I2C communication
  24. Delay_ms(10);
  25. pcf8574_write(PCF8574A_W,0x00);
  26. blink(100,100);
  27. while(1){
  28. pcf8574_write(PCF8574A_W,temp);
  29. temp+=(1<<i);
  30. i++;
  31. if(i > 8) i = temp = 0;
  32. Delay_ms(200);
  33. }
  34. }

 

 I tested this code on my DIY dsPIC30F2010 Prototype Board.

 

dsPIC30F2010 I2C and PCF8574 Interfacing using MikroC
 I tested this code on my DIY dsPIC30F2010 Prototype Board.

dsPIC30F2010 I2C and PCF8574 Interfacing using MikroC
 I tested this code on my DIY dsPIC30F2010 Prototype Board.

dsPIC30F2010 I2C and PCF8574 Interfacing using MikroC
 I tested this code on my DIY dsPIC30F2010 Prototype Board.

dsPIC30F2010 I2C and PCF8574 Interfacing using MikroC
 I tested this code on my DIY dsPIC30F2010 Prototype Board.

 For a full I2C devices interfacing example using the ATMega644P chip see this post.

 

 

 

No comments:

Post a Comment

Adskeep- Standard Ads

336x280

DIY Electronic Projects And Instruments

AdsKeeper - 2091654

Labels

23K256 (1) 24C16B (2) 25AA010A (2) 8051 (7) 93AA46B (1) ADC (40) Analog Comparator (1) Arduino (16) ARM (32) AT89C52 (7) ATMega32 (59) ATMega644P (27) AVR (88) AVR PCB (2) Bootloader (1) CCS PICC (31) Change Notify Interrupt (CNI) (2) DAC (2) DHT11 (5) Display (156) Distance Sensor (3) dot matrix (1) ds1307 (10) DS18B20 (6) ds3231 (1) ds3232 (2) dsPIC (15) dsPIC30F1010 (3) dsPIC30F2010 (15) EEPROM (5) Environment Sensor (6) ESP32 (1) esp8266 (1) Graphical LCD (3) HD44780 (11) I2C (40) ILI9341 (1) Input/Output (83) Interrupt (22) IoT PCB (1) Keil (5) Keypad (16) KS0108 (3) LCD (86) LM35 (4) Master/Slave (2) MAX7221 (1) MCP23017 (8) MCP23S17 (7) MCP4921 (1) MCP4922 (2) Meter (3) MikroC (2) MikroC ARM (1) MikroC dsPIC (10) Module PCB (2) Motor (15) MPLABX (73) Nokia 5110 LCD (5) OLED (2) One-Wire (7) Oscillator (8) PCB (13) PCD8544 (3) PCF8574 (12) PIC (119) PIC12F (3) PIC16 (105) PIC16F628A (3) PIC16F630 (2) PIC16F716 (4) PIC16F818 (11) PIC16F818/819 (3) PIC16F84A (16) PIC16F876A (2) PIC16F877A (9) PIC16F88 (2) PIC16F887 (60) PIC18 (19) PIC18F1220 (5) PIC18F2550 (5) PIC18F4550 (12) PICKit2 (1) PICMicro PCB (4) Pin Change Interrupt (1) PWM (12) RTC (12) SBN0064G (1) Sensor (15) SH1106 (3) Shift Register (15) Shift Registers (19) SN74HC595N (9) Software SPI (1) Software TWI (2) SPI (44) sprinf (3) ST7735 (1) STM32 (29) STM32 Black Pill (1) STM32 Blue Pill (12) STM32 HAL (23) STM32CubeIDE (32) STM32F103C8T6 (9) STM32F103R6 (18) STM32F401CCU6 (1) SysTick (7) temperature sensor (15) TFT (1) TG12864A (1) Thermometer (22) Timer/Counter (32) TM1637 (2) twi (10) UART (11) Ultrasonic (4) Voltmeter (7) WDT (1) XC16 (2) XC8 (96)