0.5.4 MCP23S17

This commit is contained in:
Rob Tillaart 2024-07-06 11:12:42 +02:00
parent d0056c7e5f
commit 9e38675e8a
6 changed files with 35 additions and 22 deletions

View File

@ -6,6 +6,9 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/)
and this project adheres to [Semantic Versioning](http://semver.org/). and this project adheres to [Semantic Versioning](http://semver.org/).
## [0.5.4] - 2024-07-04
- fix #45, documentation bug
## [0.5.3] - 2024-06-12 ## [0.5.3] - 2024-06-12
- #43 optimize read/write16, kudos to Olkal - #43 optimize read/write16, kudos to Olkal
- add performance test output 0.5.2, 0.5.3 - add performance test output 0.5.2, 0.5.3

View File

@ -1,7 +1,7 @@
// //
// FILE: MCP23S17.cpp // FILE: MCP23S17.cpp
// AUTHOR: Rob Tillaart // AUTHOR: Rob Tillaart
// VERSION: 0.5.3 // VERSION: 0.5.4
// PURPOSE: Arduino library for SPI MCP23S17 16 channel port expander // PURPOSE: Arduino library for SPI MCP23S17 16 channel port expander
// DATE: 2021-12-30 // DATE: 2021-12-30
// URL: https://github.com/RobTillaart/MCP23S17 // URL: https://github.com/RobTillaart/MCP23S17
@ -107,6 +107,7 @@ uint8_t MCP23S17::getAddress()
// //
// pin = 0..15 // pin = 0..15
// mode = INPUT, OUTPUT, INPUT_PULLUP (= same as INPUT) // mode = INPUT, OUTPUT, INPUT_PULLUP (= same as INPUT)
// do NOT use 0 or 1 for mode.
bool MCP23S17::pinMode1(uint8_t pin, uint8_t mode) bool MCP23S17::pinMode1(uint8_t pin, uint8_t mode)
{ {
if (pin > 15) if (pin > 15)
@ -358,16 +359,17 @@ void MCP23S17::setSPIspeed(uint32_t speed)
// //
// whole register at once // whole register at once
// port = 0..1 // port = 0..1
// value = 0..0xFF bit pattern // mask = 0x00..0xFF bit pattern
bool MCP23S17::pinMode8(uint8_t port, uint8_t value) // bit 0 = output mode, bit 1 = input mode
bool MCP23S17::pinMode8(uint8_t port, uint8_t mask)
{ {
if (port > 1) if (port > 1)
{ {
_error = MCP23S17_PORT_ERROR; _error = MCP23S17_PORT_ERROR;
return false; return false;
} }
if (port == 0) writeReg(MCP23x17_DDR_A, value); if (port == 0) writeReg(MCP23x17_DDR_A, mask);
if (port == 1) writeReg(MCP23x17_DDR_B, value); if (port == 1) writeReg(MCP23x17_DDR_B, mask);
_error = MCP23S17_OK; _error = MCP23S17_OK;
return true; return true;
} }
@ -477,11 +479,12 @@ bool MCP23S17::getPullup8(uint8_t port, uint8_t &mask)
// //
// 16 pins interface // 16 pins interface
// //
// two register at once // two registers at once
// value = 0x0000..0xFFFF bit pattern // mask = 0x0000..0xFFFF bit pattern
bool MCP23S17::pinMode16(uint16_t value) // bit 0 = output mode, bit 1 = input mode
bool MCP23S17::pinMode16(uint16_t mask)
{ {
writeReg16(MCP23x17_DDR_A, value); writeReg16(MCP23x17_DDR_A, mask);
_error = MCP23S17_OK; _error = MCP23S17_OK;
return true; return true;
} }

View File

@ -2,7 +2,7 @@
// //
// FILE: MCP23S17.h // FILE: MCP23S17.h
// AUTHOR: Rob Tillaart // AUTHOR: Rob Tillaart
// VERSION: 0.5.3 // VERSION: 0.5.4
// PURPOSE: Arduino library for SPI MCP23S17 16 channel port expander // PURPOSE: Arduino library for SPI MCP23S17 16 channel port expander
// DATE: 2021-12-30 // DATE: 2021-12-30
// URL: https://github.com/RobTillaart/MCP23S17 // URL: https://github.com/RobTillaart/MCP23S17
@ -13,7 +13,7 @@
#include "MCP23x17_registers.h" #include "MCP23x17_registers.h"
#define MCP23S17_LIB_VERSION (F("0.5.3")) #define MCP23S17_LIB_VERSION (F("0.5.4"))
// ERROR CODES // ERROR CODES
#define MCP23S17_OK 0x00 #define MCP23S17_OK 0x00
@ -56,7 +56,8 @@ public:
// single pin interface // single pin interface
// mode: 0 = OUTPUT, 1 = INPUT, 1 = INPUT_PULLUP (==INPUT) // mode = INPUT, OUTPUT, INPUT_PULLUP (= same as INPUT)
// do not use 0, 1 for mode.
bool pinMode1(uint8_t pin, uint8_t mode); bool pinMode1(uint8_t pin, uint8_t mode);
bool write1(uint8_t pin, uint8_t value); bool write1(uint8_t pin, uint8_t value);
uint8_t read1(uint8_t pin); uint8_t read1(uint8_t pin);
@ -69,8 +70,10 @@ public:
// 8 pins interface // 8 pins interface
// port = 0..1 // port = 0..1
// value = bit pattern // mask = 0x00..0xFF bit pattern,
bool pinMode8(uint8_t port, uint8_t value); // bit 0 = output mode, bit 1 = input mode
// value = bit pattern.
bool pinMode8(uint8_t port, uint8_t mask);
bool write8(uint8_t port, uint8_t value); bool write8(uint8_t port, uint8_t value);
int read8(uint8_t port); int read8(uint8_t port);
@ -81,8 +84,10 @@ public:
// 16 pins interface // 16 pins interface
// value = bit pattern // mask = 0x0000..0xFFFF bit pattern
bool pinMode16(uint16_t value); // bit 0 = output mode, bit 1 = input mode
// value = bit pattern.
bool pinMode16(uint16_t mask);
bool write16(uint16_t value); bool write16(uint16_t value);
uint16_t read16(); uint16_t read16();

View File

@ -137,7 +137,9 @@ See also **IO Control Register** section below.
### Single pin interface ### Single pin interface
- **bool pinMode1(uint8_t pin, uint8_t mode)** pin = 0..15, mode = INPUT, OUTPUT. Returns true if successful. - **bool pinMode1(uint8_t pin, uint8_t mode)** pin = 0..15, mode = INPUT, OUTPUT or INPUT_PULLUP.
Do NOT use 0, 1 for mode as the 3 constants are (possibly) defined differently.
Returns true if successful.
- **bool write1(uint8_t pin, uint8_t value)** pin = 0..15, value = LOW(0) HIGH (!0). Returns true if successful. - **bool write1(uint8_t pin, uint8_t value)** pin = 0..15, value = LOW(0) HIGH (!0). Returns true if successful.
- **uint8_t read1(uint8_t pin)** pin = 0..15, returns LOW or HIGH, might set the lastError(); - **uint8_t read1(uint8_t pin)** pin = 0..15, returns LOW or HIGH, might set the lastError();
- **bool setPolarity(uint8_t pin, bool reversed)** pin = 0..15, set reversed flag. Returns true if successful. - **bool setPolarity(uint8_t pin, bool reversed)** pin = 0..15, set reversed flag. Returns true if successful.
@ -148,7 +150,7 @@ See also **IO Control Register** section below.
### 8 pins interface ### 8 pins interface
- **bool pinMode8(uint8_t port, uint8_t value)** port = 0..1, value = 0..255. Returns true if successful. - **bool pinMode8(uint8_t port, uint8_t mask)** port = 0..1, mask = 0..255. Returns true if successful.
- **bool write8(uint8_t port, uint8_t value)** port = 0..1, value = 0..255. Returns true if successful. - **bool write8(uint8_t port, uint8_t value)** port = 0..1, value = 0..255. Returns true if successful.
- **uint8_t read8(uint8_t port)** port = 0..1, reads 8 pins into one byte. - **uint8_t read8(uint8_t port)** port = 0..1, reads 8 pins into one byte.
- **bool setPolarity8(uint8_t port, uint8_t mask)** port = 0..1, sets polarity for 8 channels at once. - **bool setPolarity8(uint8_t port, uint8_t mask)** port = 0..1, sets polarity for 8 channels at once.
@ -163,7 +165,7 @@ Returns true if successful.
### 16 pins interface ### 16 pins interface
- **bool pinMode16(uint16_t value)** value = 0..0xFFFF, returns true if successful. - **bool pinMode16(uint16_t mask)** mask = 0..0xFFFF, returns true if successful.
- **bool write16(uint16_t value)** value = 0..0xFFFF, returns true if successful. - **bool write16(uint16_t value)** value = 0..0xFFFF, returns true if successful.
- **uint16_t read16()** reads 16 pins into an uint16_t. - **uint16_t read16()** reads 16 pins into an uint16_t.
- **bool setPolarity16(uint16_t mask)** sets polarity for 16 channels. - **bool setPolarity16(uint16_t mask)** sets polarity for 16 channels.

View File

@ -15,7 +15,7 @@
"type": "git", "type": "git",
"url": "https://github.com/RobTillaart/MCP23S17.git" "url": "https://github.com/RobTillaart/MCP23S17.git"
}, },
"version": "0.5.3", "version": "0.5.4",
"license": "MIT", "license": "MIT",
"frameworks": "*", "frameworks": "*",
"platforms": "*", "platforms": "*",

View File

@ -1,5 +1,5 @@
name=MCP23S17 name=MCP23S17
version=0.5.3 version=0.5.4
author=Rob Tillaart <rob.tillaart@gmail.com> author=Rob Tillaart <rob.tillaart@gmail.com>
maintainer=Rob Tillaart <rob.tillaart@gmail.com> maintainer=Rob Tillaart <rob.tillaart@gmail.com>
sentence=Arduino library for SPI MCP23S17 16 channel port expander 16 IO-lines sentence=Arduino library for SPI MCP23S17 16 channel port expander 16 IO-lines