Libraries and Example of mbed parallel bus using I2C port expanders
Dependencies: HDSP253X mbed PCF8574_Bus
PCF8574_DataBus.cpp@6:aaefa04f06be, 2015-01-25 (annotated)
- 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?
User | Revision | Line number | New 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 | } |