mirror of
https://github.com/RobTillaart/Arduino.git
synced 2024-10-03 18:09:02 -04:00
0.3.0 MCP23S08
This commit is contained in:
parent
555c57ab3a
commit
0f3f025e13
@ -6,11 +6,17 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/)
|
||||
and this project adheres to [Semantic Versioning](http://semver.org/).
|
||||
|
||||
|
||||
## [0.3.0] - 2023-12-01
|
||||
- refactor constructor interface - breaking changes.
|
||||
- minimize conditional code. -- create SPI_CLASS macro to solve it.
|
||||
- update readme.md
|
||||
- update examples
|
||||
|
||||
|
||||
## [0.2.1] - 2023-11-13
|
||||
- update readme.md
|
||||
- update keywords.txt
|
||||
|
||||
|
||||
## [0.2.0] - 2023-08-19
|
||||
- add ESP32 support
|
||||
- sync with MCP23S17
|
||||
|
@ -1,7 +1,7 @@
|
||||
//
|
||||
// FILE: MCP23S08.cpp
|
||||
// AUTHOR: Rob Tillaart
|
||||
// VERSION: 0.2.1
|
||||
// VERSION: 0.3.0
|
||||
// PURPOSE: Arduino library for SPI MCP23S08 8 channel port expander
|
||||
// DATE: 2022-01-10
|
||||
// URL: https://github.com/RobTillaart/MCP23S08
|
||||
@ -24,14 +24,14 @@ MCP23S08::MCP23S08(uint8_t select, uint8_t dataIn, uint8_t dataOut, uint8_t cloc
|
||||
|
||||
|
||||
// HARDWARE SPI
|
||||
MCP23S08::MCP23S08(uint8_t select, SPIClass* spi)
|
||||
MCP23S08::MCP23S08(uint8_t select, __SPI_CLASS__ * spi)
|
||||
{
|
||||
MCP23S08(select, 0x00, spi);
|
||||
}
|
||||
|
||||
|
||||
// HARDWARE SPI
|
||||
MCP23S08::MCP23S08(uint8_t select, uint8_t address, SPIClass* spi)
|
||||
MCP23S08::MCP23S08(uint8_t select, uint8_t address, __SPI_CLASS__ * spi)
|
||||
{
|
||||
_address = (address << 1);
|
||||
_select = select;
|
||||
@ -51,24 +51,8 @@ bool MCP23S08::begin()
|
||||
|
||||
if (_hwSPI)
|
||||
{
|
||||
#if defined(ESP32)
|
||||
if (_useHSPI) // HSPI
|
||||
{
|
||||
_mySPI = new SPIClass(HSPI);
|
||||
_mySPI->end();
|
||||
_mySPI->begin(14, 12, 13, _select); // CLK=14 MISO=12 MOSI=13
|
||||
}
|
||||
else // VSPI
|
||||
{
|
||||
_mySPI = new SPIClass(VSPI);
|
||||
_mySPI->end();
|
||||
_mySPI->begin(18, 19, 23, _select); // CLK=18 MISO=19 MOSI=23
|
||||
}
|
||||
#else // generic hardware SPI
|
||||
_mySPI = &SPI;
|
||||
_mySPI->end();
|
||||
_mySPI->begin();
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -432,50 +416,6 @@ void MCP23S08::disableHardwareAddress()
|
||||
}
|
||||
|
||||
|
||||
#if defined(ESP32)
|
||||
|
||||
void MCP23S08::selectHSPI()
|
||||
{
|
||||
_useHSPI = true;
|
||||
}
|
||||
|
||||
|
||||
void MCP23S08::selectVSPI()
|
||||
{
|
||||
_useHSPI = false;
|
||||
}
|
||||
|
||||
|
||||
bool MCP23S08::usesHSPI()
|
||||
{
|
||||
return _useHSPI;
|
||||
}
|
||||
|
||||
|
||||
bool MCP23S08::usesVSPI()
|
||||
{
|
||||
return !_useHSPI;
|
||||
}
|
||||
|
||||
|
||||
void MCP23S08::setGPIOpins(uint8_t clk, uint8_t miso, uint8_t mosi, uint8_t select)
|
||||
{
|
||||
_clock = clk;
|
||||
_dataOut = mosi;
|
||||
_dataIn = miso;
|
||||
_select = select;
|
||||
pinMode(_select, OUTPUT);
|
||||
digitalWrite(_select, HIGH);
|
||||
|
||||
_mySPI->end(); // disable old SPI
|
||||
|
||||
_mySPI->begin(clk, miso, mosi, select); // enable new pins
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
////////////////////////////////////////////////////
|
||||
//
|
||||
// PRIVATE
|
||||
|
@ -2,7 +2,7 @@
|
||||
//
|
||||
// FILE: MCP23S08.h
|
||||
// AUTHOR: Rob Tillaart
|
||||
// VERSION: 0.2.1
|
||||
// VERSION: 0.3.0
|
||||
// PURPOSE: Arduino library for SPI MCP23S08 8 channel port expander
|
||||
// DATE: 2022-01-10
|
||||
// URL: https://github.com/RobTillaart/MCP23S08
|
||||
@ -13,7 +13,7 @@
|
||||
#include "MCP23S08_registers.h"
|
||||
|
||||
|
||||
#define MCP23S08_LIB_VERSION (F("0.2.1"))
|
||||
#define MCP23S08_LIB_VERSION (F("0.3.0"))
|
||||
|
||||
// ERROR CODES
|
||||
#define MCP23S08_OK 0x00
|
||||
@ -26,6 +26,15 @@
|
||||
#define MCP23S08_INVALID_READ -100
|
||||
|
||||
|
||||
#ifndef __SPI_CLASS__
|
||||
#if defined(ARDUINO_ARCH_RP2040)
|
||||
#define __SPI_CLASS__ SPIClassRP2040
|
||||
#else
|
||||
#define __SPI_CLASS__ SPIClass
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
const uint32_t MCP23S08_TYP_SPI_SPEED = 8000000;
|
||||
const uint32_t MCP23S08_MAX_SPI_SPEED = 10000000;
|
||||
|
||||
@ -37,8 +46,8 @@ public:
|
||||
// SOFTWARE SPI
|
||||
MCP23S08(uint8_t select, uint8_t dataIn, uint8_t dataOut, uint8_t clock, uint8_t address = 0x00);
|
||||
// HARDWARE SPI
|
||||
MCP23S08(uint8_t select, SPIClass* spi);
|
||||
MCP23S08(uint8_t select, uint8_t address = 0x00, SPIClass* spi = &SPI);
|
||||
MCP23S08(uint8_t select, __SPI_CLASS__* spi);
|
||||
MCP23S08(uint8_t select, uint8_t address = 0x00, __SPI_CLASS__* spi = &SPI);
|
||||
|
||||
bool begin();
|
||||
bool isConnected();
|
||||
@ -83,19 +92,6 @@ public:
|
||||
void enableHardwareAddress();
|
||||
void disableHardwareAddress();
|
||||
|
||||
// ESP32 specific
|
||||
#if defined(ESP32)
|
||||
|
||||
void selectHSPI();
|
||||
void selectVSPI();
|
||||
bool usesHSPI();
|
||||
bool usesVSPI();
|
||||
|
||||
// to overrule the ESP32s default hardware pins
|
||||
void setGPIOpins(uint8_t clk, uint8_t miso, uint8_t mosi, uint8_t select);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
private:
|
||||
// access to low level registers (just make these two functions public).
|
||||
@ -113,15 +109,11 @@ private:
|
||||
bool _hwSPI = false;
|
||||
|
||||
// 10 MHz is maximum, 8 is a better clock divider on AVR.
|
||||
uint32_t _SPIspeed = MCP23S08_TYP_SPI_SPEED;
|
||||
SPIClass * _mySPI;
|
||||
SPISettings _spi_settings;
|
||||
uint32_t _SPIspeed = MCP23S08_TYP_SPI_SPEED;
|
||||
__SPI_CLASS__ * _mySPI;
|
||||
SPISettings _spi_settings;
|
||||
|
||||
uint8_t swSPI_transfer(uint8_t val);
|
||||
|
||||
#if defined(ESP32)
|
||||
bool _useHSPI = true;
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
|
@ -25,6 +25,14 @@ Since 0.1.1 the **digitalWrite(pin, value)** is optimized.
|
||||
If a pin is not changed it will not be written again to save time.
|
||||
|
||||
|
||||
#### 0.3.0 Breaking change
|
||||
|
||||
The version 0.3.0 has breaking changes in the interface.
|
||||
The essence is removal of ESP32 specific code from the library.
|
||||
This makes it possible to support the ESP32-S3 and other processors in the future.
|
||||
Also it makes the library a bit simpler to maintain.
|
||||
|
||||
|
||||
#### Related
|
||||
|
||||
16 bit port expanders
|
||||
@ -50,7 +58,9 @@ If a pin is not changed it will not be written again to save time.
|
||||
### Constructor
|
||||
|
||||
- **MCP23S08(uint8_t select, uint8_t dataIn, uint8_t dataOut, uint8_t clock, uint8_t address = 0x00)** constructor SOFTWARE SPI.
|
||||
- **MCP23S08(uint8_t select, SPIClassRP2040\* spi)** constructor HARDWARE SPI with explicit SPI interface selected.
|
||||
- **MCP23S08(uint8_t select, SPIClass\* spi)** constructor HARDWARE SPI with explicit SPI interface selected.
|
||||
- **MCP23S08(uint8_t select, uint8_t address = 0x00, SPIClassRP2040\* spi = &SPI)** constructor HARDWARE SPI with optional address pins and SPI interface.
|
||||
- **MCP23S08(uint8_t select, uint8_t address = 0x00, SPIClass\* spi = &SPI)** constructor HARDWARE SPI with optional address pins and SPI interface.
|
||||
- **bool begin()** returns true if successful.
|
||||
- **bool isConnected()** returns true if connected, false otherwise. (dummy for compatibility reasons)
|
||||
@ -147,17 +157,6 @@ Since 0.2.0
|
||||
- **void disableHardwareAddress()** specific for HAEN field.
|
||||
|
||||
|
||||
### ESP32
|
||||
|
||||
Since 0.2.0
|
||||
|
||||
- **void selectHSPI()** idem
|
||||
- **void selectVSPI()** idem
|
||||
- **bool usesHSPI()** idem
|
||||
- **bool usesVSPI()** idem
|
||||
- **void setGPIOpins(uint8_t clk, uint8_t miso, uint8_t mosi, uint8_t select)** overrule the ESP32s default hardware pins.
|
||||
|
||||
|
||||
### Error codes
|
||||
|
||||
If one of the above functions return false, there might be an error.
|
||||
|
@ -8,7 +8,7 @@
|
||||
#include "MCP23S08.h"
|
||||
#include "SPI.h"
|
||||
|
||||
MCP23S08 MCP(10, 5, 6, 7); // SW SPI address 0x00
|
||||
MCP23S08 MCP(10, 5, 6, 7); // SW SPI address 0x00
|
||||
|
||||
|
||||
void setup()
|
||||
|
@ -39,12 +39,6 @@ disableControlRegister KEYWORD2
|
||||
enableHardwareAddress KEYWORD2
|
||||
disableHardwareAddress KEYWORD2
|
||||
|
||||
selectHSPI KEYWORD2
|
||||
selectVSPI KEYWORD2
|
||||
usesHSPI KEYWORD2
|
||||
usesVSPI KEYWORD2
|
||||
setGPIOpins KEYWORD2
|
||||
|
||||
|
||||
# Instances (KEYWORD2)
|
||||
|
||||
|
@ -15,7 +15,7 @@
|
||||
"type": "git",
|
||||
"url": "https://github.com/RobTillaart/MCP23S08.git"
|
||||
},
|
||||
"version": "0.2.1",
|
||||
"version": "0.3.0",
|
||||
"license": "MIT",
|
||||
"frameworks": "*",
|
||||
"platforms": "*",
|
||||
|
@ -1,5 +1,5 @@
|
||||
name=MCP23S08
|
||||
version=0.2.1
|
||||
version=0.3.0
|
||||
author=Rob Tillaart <rob.tillaart@gmail.com>
|
||||
maintainer=Rob Tillaart <rob.tillaart@gmail.com>
|
||||
sentence=Arduino library for SPI MCP23S08 8 channel port expander 8 IO-lines
|
||||
|
Loading…
Reference in New Issue
Block a user