EmbeddedArtists AB
/
lpc812_exp_solution_i2c
Solutions for the I2C experiments for LPC812 MAX
PCA9672.cpp@0:9aab4157fdae, 2013-11-24 (annotated)
- Committer:
- embeddedartists
- Date:
- Sun Nov 24 12:34:47 2013 +0000
- Revision:
- 0:9aab4157fdae
First version
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
embeddedartists | 0:9aab4157fdae | 1 | #include "PCA9672.h" |
embeddedartists | 0:9aab4157fdae | 2 | |
embeddedartists | 0:9aab4157fdae | 3 | PCA9672::PCA9672(PinName sda, PinName scl) : _i2c(sda, scl) |
embeddedartists | 0:9aab4157fdae | 4 | { |
embeddedartists | 0:9aab4157fdae | 5 | // Software Reset |
embeddedartists | 0:9aab4157fdae | 6 | _i2c.start(); |
embeddedartists | 0:9aab4157fdae | 7 | while(_i2c.write(0x00) !=1); |
embeddedartists | 0:9aab4157fdae | 8 | while(_i2c.write(0x06) !=1); |
embeddedartists | 0:9aab4157fdae | 9 | _i2c.stop(); |
embeddedartists | 0:9aab4157fdae | 10 | |
embeddedartists | 0:9aab4157fdae | 11 | /* Software reset is not required. But, gives an |
embeddedartists | 0:9aab4157fdae | 12 | indication if the selected I2C bus frequency works */ |
embeddedartists | 0:9aab4157fdae | 13 | } |
embeddedartists | 0:9aab4157fdae | 14 | |
embeddedartists | 0:9aab4157fdae | 15 | void PCA9672::frequency(int hz) |
embeddedartists | 0:9aab4157fdae | 16 | { |
embeddedartists | 0:9aab4157fdae | 17 | _i2c.frequency(hz); |
embeddedartists | 0:9aab4157fdae | 18 | } |
embeddedartists | 0:9aab4157fdae | 19 | |
embeddedartists | 0:9aab4157fdae | 20 | void PCA9672::direction(uint8_t inputs) |
embeddedartists | 0:9aab4157fdae | 21 | { |
embeddedartists | 0:9aab4157fdae | 22 | _pins = inputs & 0xff; |
embeddedartists | 0:9aab4157fdae | 23 | } |
embeddedartists | 0:9aab4157fdae | 24 | |
embeddedartists | 0:9aab4157fdae | 25 | void PCA9672::write(char value) |
embeddedartists | 0:9aab4157fdae | 26 | { |
embeddedartists | 0:9aab4157fdae | 27 | if (_pins > 0) |
embeddedartists | 0:9aab4157fdae | 28 | { |
embeddedartists | 0:9aab4157fdae | 29 | _i2c.start(); |
embeddedartists | 0:9aab4157fdae | 30 | _i2c.write(PCA9672_ADDR); |
embeddedartists | 0:9aab4157fdae | 31 | _i2c.write(value | _pins); // all input pins must have a logic 1 as value |
embeddedartists | 0:9aab4157fdae | 32 | _i2c.stop(); |
embeddedartists | 0:9aab4157fdae | 33 | } |
embeddedartists | 0:9aab4157fdae | 34 | } |
embeddedartists | 0:9aab4157fdae | 35 | |
embeddedartists | 0:9aab4157fdae | 36 | int PCA9672::read(void) |
embeddedartists | 0:9aab4157fdae | 37 | { |
embeddedartists | 0:9aab4157fdae | 38 | _i2c.start(); |
embeddedartists | 0:9aab4157fdae | 39 | _i2c.write(PCA9672_ADDR | 1); |
embeddedartists | 0:9aab4157fdae | 40 | uint8_t val = _i2c.read(0); // expect NACK |
embeddedartists | 0:9aab4157fdae | 41 | _i2c.stop(); |
embeddedartists | 0:9aab4157fdae | 42 | return val; |
embeddedartists | 0:9aab4157fdae | 43 | } |
embeddedartists | 0:9aab4157fdae | 44 | |
embeddedartists | 0:9aab4157fdae | 45 | PCA9672::~PCA9672() |
embeddedartists | 0:9aab4157fdae | 46 | { |
embeddedartists | 0:9aab4157fdae | 47 | |
embeddedartists | 0:9aab4157fdae | 48 | } |