EmbeddedArtists AB
/
lpc812_exp_solution_i2c
Solutions for the I2C experiments for LPC812 MAX
Diff: PCA9672.cpp
- Revision:
- 0:9aab4157fdae
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PCA9672.cpp Sun Nov 24 12:34:47 2013 +0000 @@ -0,0 +1,48 @@ +#include "PCA9672.h" + +PCA9672::PCA9672(PinName sda, PinName scl) : _i2c(sda, scl) +{ + // Software Reset + _i2c.start(); + while(_i2c.write(0x00) !=1); + while(_i2c.write(0x06) !=1); + _i2c.stop(); + + /* Software reset is not required. But, gives an + indication if the selected I2C bus frequency works */ +} + +void PCA9672::frequency(int hz) +{ + _i2c.frequency(hz); +} + +void PCA9672::direction(uint8_t inputs) +{ + _pins = inputs & 0xff; +} + +void PCA9672::write(char value) +{ + if (_pins > 0) + { + _i2c.start(); + _i2c.write(PCA9672_ADDR); + _i2c.write(value | _pins); // all input pins must have a logic 1 as value + _i2c.stop(); + } +} + +int PCA9672::read(void) +{ + _i2c.start(); + _i2c.write(PCA9672_ADDR | 1); + uint8_t val = _i2c.read(0); // expect NACK + _i2c.stop(); + return val; +} + +PCA9672::~PCA9672() +{ + +} \ No newline at end of file