主题中讨论的其他器件:DAC81416
您好!
我是否可以通过映射 DACtransfer 来设置特定电压?我无法在 Vref 为5V、VDD=5V 且 VSS=-5V 的情况下扫描 DAC 输出
此致、
Samarth Jain
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好!
我是否可以通过映射 DACtransfer 来设置特定电压?我无法在 Vref 为5V、VDD=5V 且 VSS=-5V 的情况下扫描 DAC 输出
此致、
Samarth Jain
我尝试了以下针对 teensy 4.1的代码来将所有通道切换为+5V、DAC81416为-5V、但它不起作用。我仍然读取所有通道0。
/*在错误检查禁用访问周期(24位长)中,SDI 的第一个字节输入是
*将请求标识为读取或写入命令的指令周期和
*要访问的6位地址。周期中的最后16位构成数据周期。
*
#include
#define NUM_Bytes 3 // SPI 帧中的字节数
const int slaveSelectPin = 2;
SPI 设置设置 A (2000000、MSBFIRST、SPI_MODE1);
void setup(){
uint8_t initTx0[NUM_bytes];
int8_t ret;
uint8_t * initPtr;
Serial.begin(9600);
serial.print ("启动 DAC81416示例");
SPI.begin();
PinMode (slaveSelectPin、输出);//将 PD2配置为 CLR
digitalWrite (slaveSelectPin、HIGH);//默认将 CLR 设置为高电平
//范围:+/- 5V
initTx0[0]= 0x0A;
initTx0[1]= 0x99;
initTx0[2]= 0x99;
initPtr =&initTx0[0];
RET = DACtransfer ((uint8_t*) initPtr、(uint8_t) NUM_bytes);// 0 1 010000 00110011001100110011
//WITE DAC6、带001100110011
/*位 字段描述
23 RW 将通信标识为地址寄存器的读取或写入命令。R/W= 0设置写入操作。R/W= 1设置读取操作
22 x 注意事项位
21-16 A[5:0] 寄存器地址。指定在读取或写入操作期间要访问的寄存器
15-0 DI[15:0] 数据周期位。 如果是写命令、则数据周期位是要写入地址 A[5:0]的寄存器的值。
如果是 readcommand、则数据周期位无关值
*
//范围:+/- 5V
initTx0[0]= 0x0B;//address
initTx0[1]= 0x99;//data
initTx0[2]= 0x99;//data
initPtr =&initTx0[0];
RET = DACtransfer ((uint8_t*) initPtr、(uint8_t) NUM_bytes);
//范围:+/- 5V
initTx0[0]= 0x0C;
initTx0[1]= 0x99;
initTx0[2]= 0x99;
initPtr =&initTx0[0];
RET = DACtransfer ((uint8_t*) initPtr、(uint8_t) NUM_bytes);
//范围:+/- 5V
initTx0[0]= 0x0D;
initTx0[1]= 0x99;
initTx0[2]= 0x99;
initPtr =&initTx0[0];
RET = DACtransfer ((uint8_t*) initPtr、(uint8_t) NUM_bytes);
//加电设备
initTx0[0]= 0x03;
initTx0[1]= 0x0A;
initTx0[2]= 0x84;
initPtr =&initTx0[0];
RET = DACtransfer ((uint8_t*) initPtr、(uint8_t) NUM_bytes);
//为所有通道加电
initTx0[0]= 0x09;
initTx0[1]= 0x00;
initTx0[2]= 0x00;
initPtr =&initTx0[0];
RET = DACtransfer ((uint8_t*) initPtr、(uint8_t) NUM_bytes);
//为所有通道启用广播
initTx0[0]= 0x05;
initTx0[1]= 0xFF;
initTx0[2]= 0xFF;
initPtr =&initTx0[0];
RET = DACtransfer ((uint8_t*) initPtr、(uint8_t) NUM_bytes);
//将代码写入所有通道
initTx0[0]= 0x0F;
initTx0[1]= 0xFF;
initTx0[2]= 0xFF;
initPtr =&initTx0[0];
RET = DACtransfer ((uint8_t*) initPtr、(uint8_t) NUM_bytes);
}
void loop(){
SPI.beginTransaction(settingsA);
int8_t rv;
uint8_t *txPtr;
uint8_t spiTx0[NUM_bytes];
//编写中间代码
spiTx0[0]= 0x0F;
spiTx0[1]= 0xFF;
spiTx0[2]= 0xFF;
txPtr =&spiTx0[0];
RV = DACtransfer ((uint8_t*) txPtr、(uint8_t)(NUM_bytes);
延迟(100);
//编写完整代码
spiTx0[0]= 0x0F;
spiTx0[1]= 0x00;
spiTx0[2]= 0x00;
txPtr =&spiTx0[0];
RV = DACtransfer ((uint8_t*) txPtr、(uint8_t)(NUM_bytes);
延迟(100);
}
//添加到 SPI.cpp
unsigned long rxtxData[3];
int8_t DACtransfer (uint8_t* datapeinter、uint8_t numBytes){
if (datapeinter =NULL){
返回-1;
}
for (int byteCount=0;byteCount < numBytes;byteCount++){
rxtxData[byteCount]=数据使码[byteCount];
}
digitalWrite (slaveSelectPin、low);
for (int byteCount=0;byteCount < numBytes;byteCount++){
spi.transfer ((uint8_t) rxtxData[byteCount]);
}
digitalWrite (slaveSelectPin、HIGH);
返回(INT8_t) 0;
}