mirror of
https://github.com/RobTillaart/Arduino.git
synced 2024-10-03 18:09:02 -04:00
0.1.5 TCA9548
This commit is contained in:
parent
3d42b11e80
commit
b5e840a6d3
@ -6,6 +6,15 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/)
|
||||
and this project adheres to [Semantic Versioning](http://semver.org/).
|
||||
|
||||
|
||||
## [0.1.5] - 2023-02-12
|
||||
- fix #8 ambiguity
|
||||
- update keywords.txt
|
||||
- add example **tca9548_search_device.ino**
|
||||
- update readme.md
|
||||
- prepare error handling (constants)
|
||||
- some minor edits.
|
||||
|
||||
|
||||
## [0.1.4] - 2023-01-23
|
||||
- update GitHub actions
|
||||
- update license 2023
|
||||
@ -15,12 +24,11 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
|
||||
- all channel functions return bool, true on success.
|
||||
- minor edits
|
||||
|
||||
|
||||
## [0.1.3] - 2022-11-26
|
||||
- Add RP2040 support to build-CI.
|
||||
- Add CHANGELOG.md
|
||||
- update readme.md
|
||||
- move code to .cpp
|
||||
- move code to .cpp
|
||||
|
||||
## [0.1.2] - 2021-12-28
|
||||
- update license
|
||||
|
@ -40,7 +40,7 @@ This library is expected to work for the PCA9548(a) too as the TCA is pin compat
|
||||
| PCA9548a | n |
|
||||
|
||||
|
||||
There are however small differences, check the datasheets to see the details.
|
||||
There are however small differences, check the data sheets to see the details.
|
||||
- [difference TCA PCA](https://e2e.ti.com/support/interface-group/interface/f/interface-forum/815758/faq-what-is-the-difference-between-an-i2c-device-with-the-family-name-pca-and-tca)
|
||||
- https://electronics.stackexchange.com/questions/209616/is-nxps-pca9548a-compatible-with-tis-tca9548a
|
||||
- https://www.nxp.com/docs/en/application-note/AN262.pdf
|
||||
@ -100,32 +100,42 @@ Note that writes are only optimized if the channels are already set.
|
||||
|
||||
- **void setForced(bool forced = false)** set forced write, slower but more robust.
|
||||
- forced == false == fast mode (default).
|
||||
- forced == true == robust mode.
|
||||
- forced == true == slower, robust mode.
|
||||
- **bool getForced()** returns set flag.
|
||||
|
||||
|
||||
## Error Codes
|
||||
|
||||
Not implemented yet, preparation for 0.2.0.
|
||||
|
||||
| name | value | description |
|
||||
|:------------------------|:-------:|:------------------------|
|
||||
| TCA9548_OK | 00 | no error |
|
||||
| TCA9548_ERROR_I2C | -10 | detected an I2C error |
|
||||
| TCA9548_ERROR_CHANNEL | -20 | channel out of range |
|
||||
|
||||
|
||||
## Future
|
||||
|
||||
#### Must
|
||||
|
||||
- improve documentation.
|
||||
- improve error handling
|
||||
|
||||
- improve error handling.
|
||||
|
||||
#### Should
|
||||
|
||||
- add examples
|
||||
- test test and test
|
||||
- write unit test
|
||||
- create derived classes for compatible devices
|
||||
|
||||
- add examples.
|
||||
- test test and test.
|
||||
- write unit test.
|
||||
- create derived classes for compatible devices (0.2.0).
|
||||
- see above PCA9548 and PCA9548a.
|
||||
- **bool isConnected(channel, address)** (0.2.0)
|
||||
- keep previous mask?
|
||||
|
||||
#### Could
|
||||
|
||||
- set an "always enabled" mask (have to investigate the consequences)
|
||||
- verify channel in range
|
||||
- e.g. **bool enableChannel(uint8_t channel)**, disable(), select()
|
||||
|
||||
- set an "always enabled" mask.
|
||||
- investigate the consequences!
|
||||
|
||||
#### Wont
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
//
|
||||
// FILE: TCA9548.cpp
|
||||
// AUTHOR: Rob Tillaart
|
||||
// VERSION: 0.1.4
|
||||
// VERSION: 0.1.5
|
||||
// DATE: 2021-03-16
|
||||
// PURPOSE: Library for TCA9548 I2C multiplexer
|
||||
|
||||
@ -16,7 +16,7 @@ TCA9548::TCA9548(const uint8_t deviceAddress, TwoWire *wire)
|
||||
_mask = 0x00;
|
||||
_resetPin = -1;
|
||||
_forced = false;
|
||||
_error = 0;
|
||||
_error = TCA9548_OK;
|
||||
}
|
||||
|
||||
|
||||
@ -118,7 +118,7 @@ uint8_t TCA9548::getChannelMask()
|
||||
{
|
||||
if (_forced) // read from device.
|
||||
{
|
||||
_wire->requestFrom(_address, 1);
|
||||
_wire->requestFrom(_address, (uint8_t)1);
|
||||
_mask = _wire->read();
|
||||
}
|
||||
return _mask;
|
||||
@ -156,7 +156,7 @@ bool TCA9548::getForced()
|
||||
int TCA9548::getError()
|
||||
{
|
||||
int error = _error;
|
||||
_error = 0;
|
||||
_error = TCA9548_OK;
|
||||
return error;
|
||||
}
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
//
|
||||
// FILE: TCA9548.h
|
||||
// AUTHOR: Rob Tillaart
|
||||
// VERSION: 0.1.4
|
||||
// VERSION: 0.1.5
|
||||
// DATE: 2021-03-16
|
||||
// PURPOSE: Library for TCA9548 I2C multiplexer
|
||||
// URL: https://github.com/RobTillaart/TCA9548
|
||||
@ -12,7 +12,14 @@
|
||||
#include "Wire.h"
|
||||
|
||||
|
||||
#define TCA9548_LIB_VERSION (F("0.1.4"))
|
||||
#define TCA9548_LIB_VERSION (F("0.1.5"))
|
||||
|
||||
|
||||
// ERROR CODES (to be elaborated)
|
||||
#define TCA9548_OK 0
|
||||
#define TCA9548_ERROR_I2C -10 // not used yet
|
||||
#define TCA9548_ERROR_CHANNEL -20 // not used yet
|
||||
|
||||
|
||||
|
||||
class TCA9548
|
||||
@ -54,7 +61,7 @@ public:
|
||||
private:
|
||||
uint8_t _address;
|
||||
TwoWire* _wire;
|
||||
uint8_t _mask; // caching mask = status of channels
|
||||
uint8_t _mask; // caching mask = status of channels
|
||||
uint8_t _resetPin; // default not set == -1 (255)
|
||||
bool _forced;
|
||||
int _error;
|
||||
|
@ -0,0 +1,49 @@
|
||||
//
|
||||
// FILE: tca9548_search_device.ino
|
||||
// AUTHOR: Rob Tillaart
|
||||
// PURPOSE: demo TCA9548 I2C multiplexer
|
||||
// URL: https://github.com/RobTillaart/TCA9548
|
||||
|
||||
|
||||
#include "TCA9548.h"
|
||||
|
||||
TCA9548 MP(0x70);
|
||||
|
||||
uint8_t searchAddress = 0x38; // dummy, adjust to your needs.
|
||||
|
||||
|
||||
void setup()
|
||||
{
|
||||
Serial.begin(115200);
|
||||
Serial.println(__FILE__);
|
||||
Serial.println();
|
||||
|
||||
Wire.begin();
|
||||
if (MP.begin() == false)
|
||||
{
|
||||
Serial.println("Could not connect to TCA9548 multiplexer.");
|
||||
}
|
||||
|
||||
Serial.println("\nScan the channels of the multiplexer for searchAddress.\n");
|
||||
for (int chan = 0; chan < 8; chan++)
|
||||
{
|
||||
MP.selectChannel(chan);
|
||||
bool b = MP.isConnected(searchAddress);
|
||||
Serial.print("CHAN: ");
|
||||
Serial.print(chan);
|
||||
Serial.print("\t");
|
||||
Serial.print( b ? "found!" : "x");
|
||||
}
|
||||
Serial.println();
|
||||
|
||||
Serial.println("done...");
|
||||
}
|
||||
|
||||
|
||||
void loop()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
// -- END OF FILE --
|
||||
|
@ -12,6 +12,7 @@ enableChannel KEYWORD2
|
||||
disableChannel KEYWORD2
|
||||
selectChannel KEYWORD2
|
||||
isEnabled KEYWORD2
|
||||
disableAllChannels KEYWORD2
|
||||
|
||||
setChannelMask KEYWORD2
|
||||
getChannelMask KEYWORD2
|
||||
@ -28,3 +29,4 @@ getError KEYWORD2
|
||||
# Constants (LITERAL1)
|
||||
TCA9548_LIB_VERSION LITERAL1
|
||||
|
||||
TCA9548_OK LITERAL1
|
||||
|
@ -15,7 +15,7 @@
|
||||
"type": "git",
|
||||
"url": "https://github.com/RobTillaart/TCA9548"
|
||||
},
|
||||
"version": "0.1.4",
|
||||
"version": "0.1.5",
|
||||
"license": "MIT",
|
||||
"frameworks": "arduino",
|
||||
"platforms": "*",
|
||||
|
@ -1,5 +1,5 @@
|
||||
name=TCA9548
|
||||
version=0.1.4
|
||||
version=0.1.5
|
||||
author=Rob Tillaart <rob.tillaart@gmail.com>
|
||||
maintainer=Rob Tillaart <rob.tillaart@gmail.com>
|
||||
sentence=Arduino Library for TCA9548 I2C multiplexer.
|
||||
@ -7,5 +7,5 @@ paragraph=TCA9548, TCA9548a, PCA9548, PCA9548a
|
||||
category=Signal Input/Output
|
||||
url=https://github.com/RobTillaart/TCA9548
|
||||
architectures=*
|
||||
includes=TCA9548.h
|
||||
includes=TCA9548.h
|
||||
depends=
|
||||
|
@ -61,6 +61,14 @@ unittest_teardown()
|
||||
}
|
||||
|
||||
|
||||
unittest(test_constants)
|
||||
{
|
||||
assertEqual(0, TCA9548_OK);
|
||||
assertEqual(-10, TCA9548_ERROR_I2C);
|
||||
assertEqual(-20, TCA9548_ERROR_CHANNEL);
|
||||
}
|
||||
|
||||
|
||||
unittest(test_begin)
|
||||
{
|
||||
TCA9548 tca(0x70);
|
||||
@ -69,7 +77,6 @@ unittest(test_begin)
|
||||
assertEqual(b, true);
|
||||
|
||||
assertTrue(tca.isConnected());
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -113,4 +120,6 @@ unittest(test_select)
|
||||
|
||||
unittest_main()
|
||||
|
||||
// -- END OF FILE --
|
||||
|
||||
// -- END OF FILE --
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user