mirror of
https://github.com/arendst/Tasmota.git
synced 2025-07-21 17:56:31 +00:00
Shelly Pro 4PM reduce number of SPI updates
This commit is contained in:
parent
4ad6807d7e
commit
dbffcac195
@ -88,7 +88,10 @@ enum SP4MCP23X17GPIORegisters {
|
|||||||
uint8_t sp4_mcp23s17_olata = 0;
|
uint8_t sp4_mcp23s17_olata = 0;
|
||||||
uint8_t sp4_mcp23s17_olatb = 0;
|
uint8_t sp4_mcp23s17_olatb = 0;
|
||||||
|
|
||||||
|
bool sp4_spi_busy;
|
||||||
|
|
||||||
void SP4Mcp23S17Enable(void) {
|
void SP4Mcp23S17Enable(void) {
|
||||||
|
sp4_spi_busy = true;
|
||||||
SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE0));
|
SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE0));
|
||||||
digitalWrite(SPro.pin_register_cs, 0);
|
digitalWrite(SPro.pin_register_cs, 0);
|
||||||
}
|
}
|
||||||
@ -96,6 +99,7 @@ void SP4Mcp23S17Enable(void) {
|
|||||||
void SP4Mcp23S17Disable(void) {
|
void SP4Mcp23S17Disable(void) {
|
||||||
SPI.endTransaction();
|
SPI.endTransaction();
|
||||||
digitalWrite(SPro.pin_register_cs, 1);
|
digitalWrite(SPro.pin_register_cs, 1);
|
||||||
|
sp4_spi_busy = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t SP4Mcp23S17Read16(uint8_t reg) {
|
uint32_t SP4Mcp23S17Read16(uint8_t reg) {
|
||||||
@ -408,11 +412,21 @@ void ShellyProPower(void) {
|
|||||||
// AddLog(LOG_LEVEL_DEBUG, PSTR("SHP: Set Power 0x%08X"), XdrvMailbox.index);
|
// AddLog(LOG_LEVEL_DEBUG, PSTR("SHP: Set Power 0x%08X"), XdrvMailbox.index);
|
||||||
|
|
||||||
power_t rpower = XdrvMailbox.index;
|
power_t rpower = XdrvMailbox.index;
|
||||||
|
/*
|
||||||
for (uint32_t i = 0; i < 4; i++) {
|
for (uint32_t i = 0; i < 4; i++) {
|
||||||
power_t state = rpower &1;
|
power_t state = rpower &1;
|
||||||
SP4Mcp23S17DigitalWrite(sp4_relay_pin[i], state);
|
SP4Mcp23S17DigitalWrite(sp4_relay_pin[i], state); // 4 SPI writes
|
||||||
rpower >>= 1; // Select next power
|
rpower >>= 1; // Select next power
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
for (uint32_t i = 0; i < 4; i++) {
|
||||||
|
power_t state = rpower &1;
|
||||||
|
uint32_t bit = sp4_relay_pin[i] -8; // Adjust by 8 bits
|
||||||
|
bitWrite(sp4_mcp23s17_olatb, bit, state);
|
||||||
|
rpower >>= 1; // Select next power
|
||||||
|
}
|
||||||
|
SP4Mcp23S17Write(SP4_MCP23S17_OLATB, sp4_mcp23s17_olatb); // 1 SPI write
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user