You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
108 lines
3.3 KiB
C++
108 lines
3.3 KiB
C++
/*!
|
|
** Modified by Scitech Korea Inc., Changwoo Park
|
|
* @file DFRobot_GP8403.h
|
|
* @brief This is a method description file for the DAC module
|
|
* @copyright Copyright (c) 2021 DFRobot Co.Ltd (http://www.dfrobot.com)
|
|
* @license The MIT License (MIT)
|
|
* @author [TangJie](jie.tang@dfrobot.com)
|
|
* @version V1.0
|
|
* @date 2022-03-07
|
|
* @url https://github.com/DFRobot/DFRobot_Microphone
|
|
*/
|
|
#ifndef _DFROBOT_GP8403_H_
|
|
#define _DFROBOT_GP8403_H
|
|
|
|
#ifndef TwoWire_h
|
|
#include "Wire.h"
|
|
#endif
|
|
|
|
#define GP8302_STORE_TIMING_HEAD 0x02 ///< Store function timing start head
|
|
#define GP8302_STORE_TIMING_ADDR 0x10 ///< The first address for entering store timing
|
|
#define GP8302_STORE_TIMING_CMD1 0x03 ///< The command 1 to enter store timing
|
|
#define GP8302_STORE_TIMING_CMD2 0x00 ///< The command 2 to enter store timing
|
|
#define GP8302_STORE_TIMING_DELAY 10 ///< Store procedure interval delay time: 10ms, more than 7ms
|
|
#define GP8302_STORE_TIMING_DELAY 10 ///< Store procedure interval delay time: 10ms, more than 7ms
|
|
#define I2C_CYCLE_TOTAL 5 ///< Total I2C communication cycle
|
|
#define I2C_CYCLE_BEFORE 1 ///< The first half cycle 2 of the total I2C communication cycle
|
|
#define I2C_CYCLE_AFTER 2 ///< The second half cycle 3 of the total I2C communication cycle
|
|
|
|
|
|
//#define ENABLE_DBG //!< Open the macro and you can see the detailed procedure of the program
|
|
#ifdef ENABLE_DBG
|
|
#define DBG(...) {Serial.print("[");Serial.print(__FUNCTION__); Serial.print("(): "); Serial.print(__LINE__); Serial.print(" ] "); Serial.println(__VA_ARGS__);}
|
|
#else
|
|
#define DBG(...)
|
|
#endif
|
|
#define GP8302_CONFIG_CURRENT_REG 0x02
|
|
#define OUTPUT_RANGE 0X01
|
|
class DFRobot_GP8403
|
|
{
|
|
public:
|
|
/**
|
|
* @enum eOutPutRange_t
|
|
* @brief Analog voltage output range select
|
|
*/
|
|
typedef enum{
|
|
eOutputRange5V = 0X00,
|
|
eOutputRange10V = 0X11,
|
|
}eOutPutRange_t;
|
|
/**
|
|
* @brief DFRobot_GP8403 constructor
|
|
* @param pWire I2C object
|
|
* @param addr I2C address
|
|
*/
|
|
DFRobot_GP8403(TwoWire *pWire = &Wire,uint8_t addr = 0x58);
|
|
/**
|
|
* @fn begin
|
|
* @brief Initialize the module
|
|
*/
|
|
uint8_t begin(void);
|
|
|
|
/**
|
|
* @fn setDACOutRange
|
|
* @brief Set DAC output range
|
|
* @param range DAC output range
|
|
* @return NONE
|
|
*/
|
|
void setDACOutRange(eOutPutRange_t range);
|
|
|
|
/**
|
|
* @fn setDACOutVoltage
|
|
* @brief Set output DAC voltage of different channels
|
|
* @param data The voltage value to be output
|
|
* @param channel Output channel. 0: channel 0; 1: channel 1; 2: all the channels
|
|
* @return NONE
|
|
*/
|
|
void setDACOutVoltage(uint16_t data,uint8_t channel);
|
|
/**
|
|
* @brief Save the set voltage in the chip
|
|
*/
|
|
void store(void);
|
|
|
|
protected:
|
|
void startSignal(void);
|
|
void stopSignal(void);
|
|
uint8_t recvAck(uint8_t ack);
|
|
uint8_t sendByte(uint8_t data, uint8_t ack = 0, uint8_t bits = 8, bool flag = true);
|
|
|
|
private:
|
|
/**
|
|
* @fn writeReg
|
|
* @brief Write register value through IIC bus
|
|
* @param reg Register address 8bits
|
|
* @param pBuf Storage cache to write data in
|
|
* @param size The length of data to be written
|
|
*/
|
|
void writeReg(uint8_t reg, void *pBuf, size_t size);
|
|
TwoWire *_pWire;
|
|
uint8_t _addr;
|
|
uint16_t voltage = 0;
|
|
int _scl= SCL;
|
|
int _sda = SDA;
|
|
void sendData(uint16_t data, uint8_t channel);
|
|
};
|
|
|
|
|
|
|
|
#endif
|