Showing posts with label PCF8574. Show all posts
Showing posts with label PCF8574. Show all posts

2014/08/09

Schematic and Photo Of Arduino PCF8574 I2C LCD Keypad Shield

  My PCF8574 I2C LCD Keypad Shield has been completed. The benefit of I2C LCD Keypad Shield over LCD Keypad Shield is that it free up 6 digital I/O used by LCD Keypad Shield for other use.
  The schematic used is version 1.1 other than the version 1.0 posted on Feb. 28, 2014. The difference between version 1.1 and version 1.0 is that the version 1.1 has a 4-pins I2C connector as shown on the bottom-left corner of the shield on the photo to act a either a shield or a breakout. When the shield serves as a breakout, the 5-way button cannot function. The sketch runs is same as the one posted on Feb. 28, 2014.

  When the shield is stacked directly upon the Arduino Uno, it should be noticed avoiding the pins of PCF8574 touching the shield of USB type B connector of Arduino. A insulated stick is a simple way. It is recommend to use Arduino boards with mini or micro USB connector such as Leonardo or stack on any other shield.


Schematic
Photo

2014/02/28

Schematic For PCF8574 I2C LCD Keypad Shield Using LiquidCrystal_I2C.h Library

By using PCF8574 I2C port extender, the LCD Keypad Shield can be released 6 digital I/O ports used to control HD44780 compatible LCD by using only SDA and SCL (Arduino A4 and A5). Part of the following schematic is implemented on breadboard to show result on LCD module, run the example sketch of LiquidCrystal_I2C.h library by changing the address to 0x20, the result is showed on the following photo.


Schematic

Photo

Sketch

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

#define BACKLIGHT_PIN     13

LiquidCrystal_I2C lcd(0x20);  // Set the LCD I2C address

//LiquidCrystal_I2C lcd(0x38, BACKLIGHT_PIN, POSITIVE);  // Set the LCD I2C address

// Creat a set of new characters
const uint8_t charBitmap[][8] = {
   { 0xc, 0x12, 0x12, 0xc, 0, 0, 0, 0 },
   { 0x6, 0x9, 0x9, 0x6, 0, 0, 0, 0 },
   { 0x0, 0x6, 0x9, 0x9, 0x6, 0, 0, 0x0 },
   { 0x0, 0xc, 0x12, 0x12, 0xc, 0, 0, 0x0 },
   { 0x0, 0x0, 0xc, 0x12, 0x12, 0xc, 0, 0x0 },
   { 0x0, 0x0, 0x6, 0x9, 0x9, 0x6, 0, 0x0 },
   { 0x0, 0x0, 0x0, 0x6, 0x9, 0x9, 0x6, 0x0 },
   { 0x0, 0x0, 0x0, 0xc, 0x12, 0x12, 0xc, 0x0 }  
};

void setup()
{
   int charBitmapSize = (sizeof(charBitmap ) / sizeof (charBitmap[0]));

  // Switch on the backlight
  pinMode ( BACKLIGHT_PIN, OUTPUT );
  digitalWrite ( BACKLIGHT_PIN, HIGH );
  
  lcd.begin(16,2);               // initialize the lcd 

   for ( int i = 0; i < charBitmapSize; i++ )
   {
      lcd.createChar ( i, (uint8_t *)charBitmap[i] );
   }

  lcd.home ();                   // go home
  lcd.print("Hello, ARDUINO ");  
  lcd.setCursor ( 0, 1 );        // go to the next line
  lcd.print (" FORUM - fm   ");
  delay ( 1000 );
}

void loop()
{
   lcd.home ();
   // Do a little animation by writing to the same location
   for ( int i = 0; i < 2; i++ )
   {
      for ( int j = 0; j < 16; j++ )
      {
         lcd.print (char(random(7)));
      }
      lcd.setCursor ( 0, 1 );
   }
   delay (200);
}