|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- #include "Port_PCA9655E.h"
-
- /* beginProtocol() is called from Scanner_IOE::begin(). Initiates I2C bus.
-
- PCA9655E supports I2C SCL Clock Frequencies: 100 kHz, 400 kHz, 1000 kHz (Datasheet page 1 & 6)
- The electrical limitation to bus speed is bus capacitance and the length of the wires involved.
- Longer wires require lower clock speeds.
- http://playground.arduino.cc/Main/WireLibraryDetailedReference > Wire.setclock()
- */
- void Port_PCA9655E::beginProtocol()
- {
- Wire.begin(); //initiate I2C bus to 100 kHz
- //Wire.setClock(400000L); //set I2C bus to 400 kHz (have not tested 400 kHz)
- }
-
- /* begin() is called from Scanner_IOE::begin().
- Configures read pins to input.
- activeState is not used because PCA9655E has no internal pull-up resistors.
- */
- void Port_PCA9655E::begin(const uint8_t activeState)
- {
- Wire.beginTransmission(deviceAddr);
- Wire.write(portNum + 6); //configure direction
- Wire.write(readPins); //0=output (for strobe and LED), 1=input (for read)
- Wire.endTransmission();
- }
-
- /* writeLow() sets pin output LOW.
- pin is bit pattern, where pin being set is 1.
- */
- void Port_PCA9655E::writeLow(const uint8_t pin)
- {
- outputVal &= ~pin; //set pin output to low
-
- Wire.beginTransmission(deviceAddr);
- Wire.write(portNum + 2); //output Byte command
- Wire.write(outputVal);
- Wire.endTransmission();
- }
-
- /* writeHigh() sets pin output HIGH.
- pin is bit pattern, where pin being set is 1.
- */
- void Port_PCA9655E::writeHigh(const uint8_t pin)
- {
- outputVal |= pin; //set pin output to high
-
- Wire.beginTransmission(deviceAddr);
- Wire.write(portNum + 2); //output Byte command
- Wire.write(outputVal);
- Wire.endTransmission();
- }
-
- /* read() returns portState.
- Only portState bits of readPins are valid.
- */
- uint8_t Port_PCA9655E::read()
- {
- Wire.beginTransmission(deviceAddr);
- Wire.write(portNum); //input byte command
- Wire.endTransmission(false); //PCA9655E needs false to send a restart
-
- Wire.requestFrom(deviceAddr, 1u); //request one byte from input port
-
- return Wire.read();
- }
|