MCP45HVX1测试
This commit is contained in:
193
src/MCP45HVX1.cpp
Normal file
193
src/MCP45HVX1.cpp
Normal file
@ -0,0 +1,193 @@
|
||||
/******************************************************
|
||||
Arduino library for MCP45HVX1 digital potentiometers
|
||||
|
||||
Author: Jonathan Dempsey JDWifWaf@gmail.com
|
||||
|
||||
Version: 1.0.1
|
||||
License: Apache 2.0
|
||||
*******************************************************/
|
||||
|
||||
#include "MCP45HVX1.h"
|
||||
|
||||
#define DEBUG 0
|
||||
|
||||
/* 7 Bit I2C Operation Components ......................................... */
|
||||
|
||||
/* TCON configuration.................. */
|
||||
#define TCON_R0HW (0x08) // Shutdown Resistor Force
|
||||
#define TCON_R0A (0x04) // Terminal A Connection
|
||||
#define TCON_R0W (0x02) // Wiper Connection
|
||||
#define TCON_R0B (0x01) // Terminal B Connection
|
||||
|
||||
#define GCALL_TCON (0x60)
|
||||
#define GCALL_WIPER (0x40)
|
||||
#define GCALL_WIPERUP (0x42)
|
||||
#define GCALL_WIPERDWN (0x44)
|
||||
#define GCALL_COM_WRITE (0x02)
|
||||
#define GCALL_COM_RWRITE (0x03)
|
||||
#define GCALL_COM_WIPERINC (0x42)
|
||||
#define GCALL_COM_WIPERDEC (0x44)
|
||||
|
||||
#define MEM_WIPER (0x00)
|
||||
#define MEM_TCON (0x40)
|
||||
|
||||
#define COM_WRITE (0x00)
|
||||
#define COM_READ (0x0C)
|
||||
#define COM_WIPERINC (0x04)
|
||||
#define COM_WIPERDEC (0x08)
|
||||
|
||||
/* Setup ............................................................... */
|
||||
MCP45HVX1::MCP45HVX1(uint8_t address) : _address(address) {};
|
||||
|
||||
void MCP45HVX1::begin(int sda, int scl, TwoWire &inWire) {
|
||||
MCPWire = &inWire; // 使用传递的 I2C 对象实例
|
||||
if (sda != -1 && scl != -1) {
|
||||
MCPWire->begin(sda, scl); // 自定义 SDA 和 SCL 引脚
|
||||
} else {
|
||||
MCPWire->begin(); // 默认 I2C 引脚初始化
|
||||
}
|
||||
MCPWire->setClock(MCPCSPEED); // 设置 I2C 时钟速度
|
||||
}
|
||||
|
||||
|
||||
/* Wiper Register..........................................................*/
|
||||
void MCP45HVX1::writeWiper(uint8_t wiperValue)
|
||||
{
|
||||
this->MCPWire->beginTransmission(_address);
|
||||
this->MCPWire->write(MEM_WIPER | COM_WRITE);
|
||||
this->MCPWire->write(wiperValue);
|
||||
this->MCPWire->endTransmission();
|
||||
}
|
||||
|
||||
uint8_t MCP45HVX1::readWiper()
|
||||
{
|
||||
uint8_t buff = 0;
|
||||
|
||||
this->MCPWire->beginTransmission(_address);
|
||||
this->MCPWire->write(MEM_WIPER | COM_READ);
|
||||
this->MCPWire->endTransmission(false);
|
||||
|
||||
this->MCPWire->requestFrom(_address, (uint8_t)2);
|
||||
if(this->MCPWire->available())
|
||||
{
|
||||
buff = this->MCPWire->read(); // First byte is 0x00
|
||||
#if DEBUG
|
||||
Serial.print("\nRead Wiper MSB: ");
|
||||
Serial.println(buff);
|
||||
#endif
|
||||
buff = this->MCPWire->read(); // Second byte contains the wiper value
|
||||
#if DEBUG
|
||||
Serial.print("Read Wiper LSB: ");
|
||||
Serial.println(buff);
|
||||
#endif
|
||||
}
|
||||
|
||||
return buff;
|
||||
}
|
||||
|
||||
void MCP45HVX1::incrementWiper(uint8_t incriments)
|
||||
{
|
||||
this->MCPWire->beginTransmission(_address);
|
||||
for(uint8_t x = 0; x < incriments; x++)
|
||||
{
|
||||
this->MCPWire->write(MEM_WIPER | COM_WIPERINC);
|
||||
}
|
||||
this->MCPWire->endTransmission();
|
||||
}
|
||||
|
||||
void MCP45HVX1::decrementWiper(uint8_t decriments)
|
||||
{
|
||||
this->MCPWire->beginTransmission(_address);
|
||||
for(uint8_t x = 0; x < decriments; x++)
|
||||
{
|
||||
this->MCPWire->write(MEM_WIPER | COM_WIPERDEC);
|
||||
}
|
||||
this->MCPWire->endTransmission();
|
||||
}
|
||||
|
||||
/* TCON Register...........................................................*/
|
||||
uint8_t MCP45HVX1::readTCON()
|
||||
{
|
||||
uint8_t buff = 0;
|
||||
|
||||
this->MCPWire->beginTransmission(_address);
|
||||
this->MCPWire->write(MEM_TCON | COM_READ);
|
||||
this->MCPWire->endTransmission(false);
|
||||
|
||||
this->MCPWire->requestFrom(_address, (uint8_t)2);
|
||||
if(this->MCPWire->available())
|
||||
{
|
||||
buff = this->MCPWire->read(); // First byte is always 0x00
|
||||
#if DEBUG
|
||||
Serial.print("\nRead TCON MSB: ");
|
||||
Serial.println(buff);
|
||||
#endif
|
||||
buff = this->MCPWire->read(); // Second byte contains the wiper value (for compatability)
|
||||
#if DEBUG
|
||||
Serial.print("Read TCON LSB: ");
|
||||
Serial.println(buff);
|
||||
#endif
|
||||
}
|
||||
|
||||
return buff;
|
||||
}
|
||||
|
||||
void MCP45HVX1::defaultTCON()
|
||||
{
|
||||
this->TCON_lib_reg.R0HW = true;
|
||||
this->TCON_lib_reg.R0A = true;
|
||||
this->TCON_lib_reg.R0B = true;
|
||||
this->TCON_lib_reg.R0W = true;
|
||||
|
||||
write_TCON_Register();
|
||||
}
|
||||
|
||||
void MCP45HVX1::writeTCON(TCON_Register *inReg)
|
||||
{
|
||||
memcpy(&this->TCON_lib_reg, inReg, sizeof(this->TCON_lib_reg));
|
||||
write_TCON_Register();
|
||||
}
|
||||
|
||||
void MCP45HVX1::write_TCON_R0HW(bool isOn)
|
||||
{
|
||||
this->TCON_lib_reg.R0HW = isOn;
|
||||
write_TCON_Register();
|
||||
}
|
||||
|
||||
void MCP45HVX1::write_TCON_R0A(bool isOn)
|
||||
{
|
||||
this->TCON_lib_reg.R0A = isOn;
|
||||
write_TCON_Register();
|
||||
}
|
||||
|
||||
void MCP45HVX1::write_TCON_R0W(bool isOn)
|
||||
{
|
||||
this->TCON_lib_reg.R0W = isOn;
|
||||
write_TCON_Register();
|
||||
}
|
||||
|
||||
void MCP45HVX1::write_TCON_R0B(bool isOn)
|
||||
{
|
||||
this->TCON_lib_reg.R0B = isOn;
|
||||
write_TCON_Register();
|
||||
}
|
||||
|
||||
void MCP45HVX1::write_TCON_Register()
|
||||
{
|
||||
uint8_t buff = 0xFF;
|
||||
|
||||
this->TCON_lib_reg.R0HW ? (buff |= TCON_R0HW) : (buff ^= TCON_R0HW);
|
||||
this->TCON_lib_reg.R0A ? (buff |= TCON_R0A) : (buff ^= TCON_R0A);
|
||||
this->TCON_lib_reg.R0B ? (buff |= TCON_R0B) : (buff ^= TCON_R0B);
|
||||
this->TCON_lib_reg.R0W ? (buff |= TCON_R0W) : (buff ^= TCON_R0W);
|
||||
|
||||
#if DEBUG
|
||||
Serial.print("Writing TCON: "); Serial.println(buff);
|
||||
#endif
|
||||
|
||||
this->MCPWire->beginTransmission(_address);
|
||||
this->MCPWire->write(MEM_TCON | COM_WRITE);
|
||||
this->MCPWire->write(buff);
|
||||
this->MCPWire->endTransmission();
|
||||
}
|
||||
|
||||
94
src/MCP45HVX1.h
Normal file
94
src/MCP45HVX1.h
Normal file
@ -0,0 +1,94 @@
|
||||
/******************************************************
|
||||
Arduino library for MCP45HVX1 digital potentiometers
|
||||
|
||||
Author: Jonathan Dempsey JDWifWaf@gmail.com
|
||||
|
||||
Version: 1.0.1
|
||||
License: Apache 2.0
|
||||
*******************************************************/
|
||||
|
||||
#ifndef _MCP45HVX1_H
|
||||
#define _MCP45HVX1_H
|
||||
|
||||
#include <Arduino.h>
|
||||
#include <Wire.h>
|
||||
|
||||
#define MCPCSPEED 100000 // I2C clock speed
|
||||
|
||||
class MCP45HVX1
|
||||
{
|
||||
public:
|
||||
|
||||
/* TCON Register Resistor Configuration ............................... */
|
||||
typedef struct
|
||||
{
|
||||
bool R0HW = true;
|
||||
bool R0A = true;
|
||||
bool R0B = true;
|
||||
bool R0W = true;
|
||||
}TCON_Register;
|
||||
|
||||
/* Setup ............................................................... */
|
||||
MCP45HVX1(uint8_t address = 0x3C);
|
||||
|
||||
void begin(int sda = -1, int scl = -1, TwoWire &inWire = Wire);
|
||||
|
||||
/* Wiper Register ...................................................... */
|
||||
uint8_t readWiper();
|
||||
void writeWiper(uint8_t wiperValue);
|
||||
void incrementWiper(uint8_t incriments = 1);
|
||||
void decrementWiper(uint8_t decriments = 1);
|
||||
|
||||
/* TCON Register ....................................................... */
|
||||
uint8_t readTCON();
|
||||
void writeTCON(TCON_Register *inReg);
|
||||
void defaultTCON();
|
||||
|
||||
void inline shutdown()
|
||||
{
|
||||
write_TCON_R0HW(false);
|
||||
};
|
||||
void inline startup()
|
||||
{
|
||||
write_TCON_R0HW(true);
|
||||
};
|
||||
void inline connectTerminalA()
|
||||
{
|
||||
write_TCON_R0A(true);
|
||||
};
|
||||
void inline disconnectTerminalA()
|
||||
{
|
||||
write_TCON_R0A(false);
|
||||
};
|
||||
void inline connectTerminalB()
|
||||
{
|
||||
write_TCON_R0B(true);
|
||||
};
|
||||
void inline disconnectTerminalB()
|
||||
{
|
||||
write_TCON_R0B(false);
|
||||
};
|
||||
void inline connectWiper()
|
||||
{
|
||||
write_TCON_R0W(true);
|
||||
};
|
||||
void inline disconnectWiper()
|
||||
{
|
||||
write_TCON_R0W(false);
|
||||
};
|
||||
|
||||
protected:
|
||||
private:
|
||||
uint8_t _address;
|
||||
|
||||
TwoWire* MCPWire;
|
||||
TCON_Register TCON_lib_reg;
|
||||
|
||||
void write_TCON_Register();
|
||||
void write_TCON_R0HW(bool state);
|
||||
void write_TCON_R0A(bool state);
|
||||
void write_TCON_R0W(bool state);
|
||||
void write_TCON_R0B(bool state);
|
||||
};
|
||||
|
||||
#endif
|
||||
78
src/main.cpp
78
src/main.cpp
@ -7,6 +7,9 @@
|
||||
#include <ESPAsyncWebServer.h>
|
||||
//#include "TCJ_Show.h"
|
||||
//#include "ESP32_WebServer.h"
|
||||
#include "MCP45HVX1.h"
|
||||
|
||||
MCP45HVX1 digiPot(0x3C);
|
||||
|
||||
AsyncWebServer server(80);
|
||||
|
||||
@ -14,7 +17,7 @@ const char* ssid = "SERVIRST-CT";
|
||||
const char* password = "servirst8888";
|
||||
|
||||
|
||||
#define ONE_WIRE_BUS 4
|
||||
#define ONE_WIRE_BUS 8
|
||||
OneWire oneWire(ONE_WIRE_BUS);
|
||||
DS18B20 sensor(&oneWire);
|
||||
|
||||
@ -121,6 +124,72 @@ void TJC_Show(void)
|
||||
TJC.print(str);
|
||||
}
|
||||
|
||||
void MCP45HVX1_Test(void) //MCP45HVX1测试
|
||||
{
|
||||
digiPot.begin(5,4);
|
||||
|
||||
Serial.println("....... Functionality Test Begin ..........");
|
||||
/* Wiper ........................... */
|
||||
digiPot.writeWiper(127); // Baseline Establish
|
||||
|
||||
Serial.println("\n----- Wiper Register ----");
|
||||
Serial.print("readWiper: ");
|
||||
Serial.println(digiPot.readWiper());
|
||||
|
||||
Serial.print("writeWiper: ");
|
||||
digiPot.writeWiper(200);
|
||||
Serial.println(digiPot.readWiper());
|
||||
|
||||
Serial.print("incrementWiper: ");
|
||||
digiPot.incrementWiper();
|
||||
Serial.println(digiPot.readWiper());
|
||||
|
||||
Serial.print("incrementWiper by 2: ");
|
||||
digiPot.incrementWiper(2);
|
||||
Serial.println(digiPot.readWiper());
|
||||
|
||||
Serial.print("decrementWiper: ");
|
||||
digiPot.decrementWiper();
|
||||
Serial.println(digiPot.readWiper());
|
||||
|
||||
Serial.print("decrementWiper by 2: ");
|
||||
digiPot.decrementWiper(2);
|
||||
Serial.println(digiPot.readWiper());
|
||||
|
||||
/* TCON .......................... */
|
||||
Serial.println("\n----- TCON Register ----");
|
||||
digiPot.disconnectTerminalA();
|
||||
Serial.print("disconnectTerminalA: ");
|
||||
Serial.println(digiPot.readTCON());
|
||||
digiPot.connectTerminalA();
|
||||
|
||||
digiPot.disconnectTerminalB();
|
||||
Serial.print("disconnectTerminalB: ");
|
||||
Serial.println(digiPot.readTCON());
|
||||
digiPot.connectTerminalB();
|
||||
|
||||
digiPot.disconnectWiper();
|
||||
Serial.print("disconnectWiper: ");
|
||||
Serial.println(digiPot.readTCON());
|
||||
digiPot.connectWiper();
|
||||
|
||||
digiPot.shutdown();
|
||||
Serial.print("shutdown: ");
|
||||
Serial.println(digiPot.readTCON());
|
||||
digiPot.startup();
|
||||
|
||||
digiPot.startup();
|
||||
Serial.print("startup: ");
|
||||
Serial.println(digiPot.readTCON());
|
||||
digiPot.startup();
|
||||
|
||||
digiPot.defaultTCON();
|
||||
Serial.print("default: ");
|
||||
Serial.println(digiPot.readTCON());
|
||||
|
||||
Serial.println("\n........ Functionality Test End ...........");
|
||||
}
|
||||
|
||||
void setup(void)
|
||||
{
|
||||
Serial.begin(115200);
|
||||
@ -132,9 +201,10 @@ void setup(void)
|
||||
//sensor.begin();
|
||||
|
||||
bh1750_init(bh1750_a, bh1750_b, 19, 18, 21, 20); //1750初始化。sda, scl
|
||||
Serial.println("BH1750 initialized");
|
||||
WebServer_Init(ssid, password);
|
||||
|
||||
|
||||
//WebServer_Init(ssid, password);
|
||||
|
||||
MCP45HVX1_Test();
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user