Libraries and Example of mbed parallel bus using I2C port expanders

Dependencies:   HDSP253X mbed PCF8574_Bus

Committer:
wim
Date:
Sun Jan 25 17:30:47 2015 +0000
Revision:
6:aaefa04f06be
Parent:
2:1dab1089c332
Converted code for HDSP253X into Lib.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wim 2:1dab1089c332 1 /* PCF8574_DataBus - Use the PCF8574 I2C Port Extender for controlling the Data Bus
wim 2:1dab1089c332 2 * Copyright (c) 2011 Wim Huiskamp
wim 2:1dab1089c332 3 *
wim 2:1dab1089c332 4 * Released under the MIT License: http://mbed.org/license/mit
wim 2:1dab1089c332 5 *
wim 2:1dab1089c332 6 * version 0.2 Initial Release
wim 2:1dab1089c332 7 */
wim 2:1dab1089c332 8 #include "mbed.h"
wim 2:1dab1089c332 9 #include "PCF8574_DataBus.h"
wim 2:1dab1089c332 10
wim 2:1dab1089c332 11 /** Create an PCF8574_DataBus object connected to the specified I2C object and using the specified deviceAddress
wim 2:1dab1089c332 12 *
wim 2:1dab1089c332 13 * @param I2C &i2c the I2C port to connect to
wim 2:1dab1089c332 14 * @param char deviceAddress the address of the PCF8574
wim 2:1dab1089c332 15 */
wim 2:1dab1089c332 16 PCF8574_DataBus::PCF8574_DataBus(I2C &i2c, char deviceAddress) : _i2c(i2c) {
wim 2:1dab1089c332 17 _writeOpcode = deviceAddress & 0xFE; // low order bit = 0 for write
wim 2:1dab1089c332 18 _readOpcode = deviceAddress | 0x01; // low order bit = 1 for read
wim 2:1dab1089c332 19 _init();
wim 2:1dab1089c332 20 }
wim 2:1dab1089c332 21
wim 2:1dab1089c332 22 /** Optimised DataBus write operation.
wim 2:1dab1089c332 23 * @param byte the datavalue to output on the bus
wim 2:1dab1089c332 24 */
wim 2:1dab1089c332 25 void PCF8574_DataBus::write(char byte) {
wim 2:1dab1089c332 26 char data[1];
wim 2:1dab1089c332 27
wim 2:1dab1089c332 28 data[0] = byte;
wim 2:1dab1089c332 29 _i2c.write(_writeOpcode, data, 1); // Write datavalue to bus
wim 2:1dab1089c332 30 }
wim 2:1dab1089c332 31
wim 2:1dab1089c332 32 /** Optimised DataBus read operation.
wim 2:1dab1089c332 33 *
wim 2:1dab1089c332 34 * @returns current data from Databus
wim 2:1dab1089c332 35 */
wim 2:1dab1089c332 36 char PCF8574_DataBus::read() {
wim 2:1dab1089c332 37 char data[1];
wim 2:1dab1089c332 38
wim 2:1dab1089c332 39 //Make sure that databus is enabled for Read
wim 2:1dab1089c332 40 // data[0] = 0xFF; // Init Port for datainput by Writing 0xFF
wim 2:1dab1089c332 41 // _i2c.write(_writeOpcode, data, 1); // Write to bus
wim 2:1dab1089c332 42
wim 2:1dab1089c332 43 _i2c.read(_readOpcode, data, 1); // Read data from bus
wim 2:1dab1089c332 44
wim 2:1dab1089c332 45 return data[0];
wim 2:1dab1089c332 46 }
wim 2:1dab1089c332 47
wim 2:1dab1089c332 48
wim 2:1dab1089c332 49 /** Enable databus for Write or Read
wim 2:1dab1089c332 50 *
wim 2:1dab1089c332 51 * @param Bus_Dir bus_dir
wim 2:1dab1089c332 52 */
wim 2:1dab1089c332 53 void PCF8574_DataBus::busdir (Bus_Dir bus_dir) {
wim 2:1dab1089c332 54
wim 2:1dab1089c332 55 if (bus_dir == READ) {
wim 2:1dab1089c332 56 // Make sure that databus is enabled for READ
wim 2:1dab1089c332 57 write(0xFF); // Init Port as input by Writing 0xFF
wim 2:1dab1089c332 58
wim 2:1dab1089c332 59 }
wim 2:1dab1089c332 60 else {
wim 2:1dab1089c332 61 // Make sure that databus is enabled for WRITE
wim 2:1dab1089c332 62 write(0xFF); // Not really needed, just Init Port to safe settings
wim 2:1dab1089c332 63 }
wim 2:1dab1089c332 64 }
wim 2:1dab1089c332 65
wim 2:1dab1089c332 66
wim 2:1dab1089c332 67
wim 2:1dab1089c332 68 /** Init PCF8574_DataBus
wim 2:1dab1089c332 69 * @param
wim 2:1dab1089c332 70 * @returns
wim 2:1dab1089c332 71 */
wim 2:1dab1089c332 72 void PCF8574_DataBus::_init() {
wim 2:1dab1089c332 73
wim 2:1dab1089c332 74 busdir(WRITE); // Init Port as output
wim 2:1dab1089c332 75 }