主题中讨论的其他器件: ADS8678
大家好
我想为 DAC80501创建代码、但我不清楚我必须发送的数据包。
我似乎已经了解数据包总共24位、但我仍然无法将信息集中在一起。
和字节为8位、但随后讨论4的命令位和 make 12。
我应该将另一个16位放在哪里?
非常感谢
ms
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.
Massimo、
我将承认、数据表有点令人困惑。 编写该文档是为了展示 I2C 和 SPI 与数据和命令结构的通信。
如果您使用的是 SPI 通信、则不使用表2的地址。 DACx0501地址字节(在8.5.1.2.2.1中进行了说明)部分用于 I2C 地址。 为了与 DACx0501通信、您使用了与芯片选择引脚相似的/SYNC 引脚。
使用 SPI 通信、您只需要24位传输即可获得图58中的有效写入序列:
之后、您将命令字节用于24位传输的前8位、如表4中所示:
然后使用表5中的数据字节进行跟踪(请注意、命令字节中的 B19-B16显示在下表中):
表4和表5中的位总共为24位、这些位与图58中的有效写入中看到的24位一致。
如果使用 I2C 通信、则需要使用表2中的值中的 I2C 地址。 然后、您逐字节跟踪 I2C 通信。 首先发送命令字节、然后是 MSB 数据字节、最后是 LSB 数据字节。
吴约瑟
大家好、在再次寻求帮助之前、我进行了一些测试。
我准备了3个字节0x08h 80h 和00h、然后我更改了最后的位以读取 DAC 输出上的任何电压。
我没有紧张。
我想知道还有另外两个3字节组用于配置 DAC。
借助数据表表、我构建了这组9个字节、我在网上找到了这些字节。
我没有解决任何问题。
在示波器上看起来是正确的。
我出什么问题了?
非常感谢您的回复
ms
CS、SCL、SDIN
1) 0x05 00 0A //软复位延迟200ms
2) 0x04 01 00 // RefDiv 2、增益1 -> 1.25V max 输出
3) 3) 0x08 43 21 //一些 DAC 代码、~ 328mV
Massimo、
我认为您选择发送到器件的通信没有任何问题。 命令应按照所述设置器件。 我假设您在默认的异步模式下使用器件?
对于示波器快照、在四通道示波器上查看所有示波器会更容易、因此您可以在同一屏幕上看到/SYNC、SCLK 和 SDIN、并看到信号已对齐且时序正确。 转至数据表、检查所有时序是否与列出的相匹配。 验证 SCLK 频率、并且数据不会在 SCLK 的下降沿发生变化。
您还可以使用示波器放大、并检查所有数字线路是否干净、信号中没有其他干扰。
您能否为电路板提供原理图以显示与器件的所有连接? 我将验证与器件的所有连接是否正确。 检查数字线路是否全部连接到正确的引脚、以及是否在器件引脚上接收到这些数字线路。 我还将检查基准电压、电源和接地是否都从微控制器连接到器件。 我还会确保微控制器器件和 DAC 具有相同的电源。 如果微控制器以3.3V 电压运行、DAC 以5V 电压运行、则数字输出高电平可能不足以作为高电平接收。 在这种情况下、您可能需要以较低的电压运行器件、或添加用于通信的电平转换器。
吴约瑟
谢谢。
为方便起见、我使用 mikroE 简易图7中的卡
以及同一家公司的 DAC9模块、该模块连接到 mikroBUS 插座。
它具有连接 SPI 和3.3V 的电桥
我可以告诉您链接是:RE0 = CS、SCLK = RC3、SDI = RC5。
我把它们签出了、它们看起来很好。
该微控制器是一个由5V 电压供电的 Pic18f45k22。
我向您发送了所有内容的原理图、但考虑到它是一个开发板。
我在尝试修复时立即损坏了4轨示波器。
我不明白发送3组3个字节是否正确、以及是否应始终使用该序列发送。
再次感谢你
mse2e.ti.com/.../IMG_5F00_20210127_5F00_202918_5F00_resized_5F00_20210127_5F00_082957012.rar
Massimo、
您显示的原始帖子不正确、因为每组3个字节应由/SYNC 脉冲隔开。 根据原始图、这就是它们的外观(插入的/SYNC 脉冲)。
但是、您最近的帖子显示您正确地将三个字节中的每一个字节与/SYNC 脉冲分开(尽管您只显示两个不同的3字节通信)。
那么、这是您在示波器上看到的结果吗? 您要发送的内容类似于 TINA 仿真、而不是实际示波器图或数字分析器输出。 您能否从四通道示波器或逻辑分析仪获得实际读取?
我已经获取了您的原理图、现在我将对其进行查看。 这里有很多东西要看、可能需要一些时间来查看。
吴约瑟
您好 Joseph
如果您愿意、我将为您提供简化的连接图。
理论上、开发板应该透明
DAC80501的引脚通过以下方式连接到 PIC 18f45k22的引脚:RE0 = CS、SCLK = RC3、SDI = RC5。
我有工业用的 Tina 12和 Tina Lab2测量结果是真实的、但我不知道测量结果有多可靠。
我将向您发送我编写的代码行、以便使用 mikroC pro 进行测试、如果它有用的话。
再次感谢您的帮助。
ms
/*DAC 16位转换器 DAC80501 Quarzo 8MHz PIC 18f45k22 *///SPI sbit Chip_Select AT RE0_BIT;//CS selezione 芯片 sbit TRISE0_bit Chip_Select_Direction; void Init()//DAC80501 { //初始化变量 //初始化 SPI SPI1_Init_Advanced (_SPI_MASTER_OSC_DIV64、 //将 PIC 初始化为主设备 _spi_data_sample_middle、 //_spi_data_sample_middle、 _SPI_CLK_IDLE_LOW、 _SPI_HIGH_2_LOW); Chip_Select_Direction=0; // ClearBit (TRISC、0) Chip_Select= 1; // SetBit (PORTC、0) //******** void main (){ ANSELC=0; Init(); DO{ Chip_Select=1; Chip_Select=0; SPI1_Write (0x05); SPI1_Write (0x00); SPI1_Write (0x0A); Chip_Select= 1; Chip_Select= 0; SPI1_Write (0x04); SPI1_Write (0x01); SPI1_Write (0x00); Chip_Select= 1; Chip_Select= 0; SPI1_Write (0x08); SPI1_Write (0x43); SPI1_Write (0x21); Chip_Select= 1; } while (1); }
您好 Joseph
我还尝试了一个新的相同卡、但我只能看到2.48V 的基准电压。
我尝试更改各种配置、但它仍然固定在2.48V、输出为0V。
然而、代码中必须存在错误、但我不明白它在哪里。
我使 C 语言中的代码行变得非常简单、我可以看到它是否起作用、但什么也不起作用。
从我发送给您的图表中、信号看起来是正确的。
我已经检查了连接、它们似乎没有外部负载、并且连接正确。
我现在不知道还有什么其他测试要做。
我想使用这些 IC 执行一些项目、但他们似乎不同意。
我将再次向您发送代码、看看我选择位是否出错。
给您带来的不便、我深表歉意、感谢您的参与。
/*DAC 16位转换器 DAC80501
Quozo 8MHz PIC 18f45k22 *
//SPI
在 RE0_BIT 上的 sbit Chip_Select;//CS selezione 芯片
TRISE0_BIT 上的 sbit Chip_Select_Direction;
void Init()//DAC80501
{
//初始化变量
//初始化 SPI
SPI1_Init_Advanced (_SPI_MASTER_OSC_DIV64、//将 PIC 初始化为主器件
_spi_data_sample_middle、//_spi_data_sample_middle、
_SPI_CLK_IDLE_LOW、
_spi_high_2_low);
chip_Select_Direction= 0;// ClearBit (TRISC、0)
CHIP_Select= 1;// SetBit (PORTC、0)
}//*********
void main (){
ANSELC=0;
init();
执行{
CHIP_Select= 1;
CHIP_Select= 0;
SPI1_Write (0x05);
SPI1_Write (0x00);
SPI1_Write (0x0A);
CHIP_Select= 1;
CHIP_Select= 0;
SPI1_Write (0x04);
SPI1_Write (0x01);
SPI1_Write (0x00);
CHIP_Select= 1;
CHIP_Select= 0;
SPI1_Write (0x08);
SPI1_Write (0x43);
SPI1_Write (0x21);
CHIP_Select= 1;
}
while (1);
您好 Joseph
使用此序列、我可以在输出端读取1V 电压、但基准电压保持2.48V。
/*DAC 16位转换器 DAC80501
Quozo 8MHz PIC 18f45k22 *
//SPI
在 RE0_BIT 上的 sbit Chip_Select;//CS selezione 芯片
TRISE0_BIT 上的 sbit Chip_Select_Direction;
void Init()//DAC80501
{
//初始化变量
//初始化 SPI
SPI1_Init_Advanced (_SPI_MASTER_OSC_DIV64、//将 PIC 初始化为主器件
_spi_data_sample_middle、//_spi_data_sample_middle、
_SPI_CLK_IDLE_LOW、
_spi_high_2_low);
chip_Select_Direction= 0;// ClearBit (TRISC、0)
CHIP_Select= 1;// SetBit (PORTC、0)
}//*********
void main (){
ANSELC=0;
init();
执行{
CHIP_Select= 1;
CHIP_Select= 0;
SPI1_Write (0x05);
SPI1_Write (0x00);
SPI1_Write (0x0A);
CHIP_Select= 1;
CHIP_Select= 0;
SPI1_Write (0x03);
SPI1_Write (0x01);
SPI1_Write (0x00);
CHIP_Select= 1;
CHIP_Select= 0;
SPI1_Write (0x04);
SPI1_Write (0x01);
SPI1_Write (0x01);
CHIP_Select= 1;
CHIP_Select= 0;
SPI1_Write (0x07);
SPI1_Write (0x00);
SPI1_Write (0x01);
CHIP_Select= 1;
CHIP_Select= 0;
SPI1_Write (0x08);
SPI1_Write (0xff);
SPI1_Write (0xff);
CHIP_Select= 1;
}
while (1);
}
您好 Joseph
通过将转换器中的电源更改为5V 而不进行除法和使用缓冲器 X2、我可以在输出端获得3.9V 电压。
更改 Div 位和 Buffer 位我会得到一些更改、但值很奇怪。
通过改变 refPWDWN 位、基准引脚保持在2.5V。
我尝试添加一些延迟、但所有延迟都保持在3.9V。
我在数据表中读出、如果基准电压没有要乘以的空间、那么芯片有一个警报将输出发送到0、我尝试以5V 电压为其供电、但我达到了3.9VMax。
我尝试使用其他代码禁用此警报、但没有任何变化。
这是我使用的代码。
/*DAC 16位转换器 DAC80501
Quozo 8MHz PIC 18f45k22 *
//SPI
在 RE0_BIT 上的 sbit Chip_Select;//CS selezione 芯片
TRISE0_BIT 上的 sbit Chip_Select_Direction;
void Init()//DAC80501
{
//初始化变量
//初始化 SPI
SPI1_Init_Advanced (_SPI_MASTER_OSC_DIV64、//将 PIC 初始化为主器件
_spi_data_sample_middle、//_spi_data_sample_middle、
_SPI_CLK_IDLE_LOW、
_spi_high_2_low);
chip_Select_Direction= 0;// ClearBit (TRISC、0)
CHIP_Select= 1;// SetBit (PORTC、0)
}//*********
void main (){
ANSELC=0;
init();
执行{
CHIP_Select= 1;
CHIP_Select= 0;
SPI1_Write (0x05);
SPI1_Write (0x00);
SPI1_Write (0x0A);
CHIP_Select= 1;
CHIP_Select= 0;
SPI1_Write (0x04);
SPI1_Write (0x00);
SPI1_Write (0x01);
CHIP_Select= 1;
CHIP_Select= 0;
SPI1_Write (0x08);
SPI1_Write (0xff);
SPI1_Write (0xff);
CHIP_Select= 1;
}
while (1);
}
Massimo、
如果基准打开、则基准将始终读取2.5V。 如果 REF-DIV 位被设定为1、基准被内部分频、它不会显示为1.25V。 查看通信是否正在执行某项操作的最佳方法是禁用基准以查看其是否已关闭。 但是、如果您能够发送器件位并且器件更改输出、则很可能是数字连接正确。
但是、输出端的输出电压仍然不正确。 此时、我仍然不知道是什么问题。 使用 EVM、我可以使器件正确设置输出电压。 我会尝试原始序列、但添加一些内容。
您能否添加一些延迟(线路之间的几秒钟)以查看器件输出中代码的每次新变化? 当代码运行缓慢时、这可能有助于查看更改。
对于该序列、我仍然会像在开头执行的一样运行、但添加几行代码。
从复位开始:0x05 00 0A
然后设置 REF-DIV:0x04 01 00
如果按照我的想法设置器件、您应该会看到中量程复位器件的输出设置为0.625V、基准电压设置为2.5V。 由于输出上没有任何内容(或错误)、我会尝试添加以下内容。
禁用基准和输出:0x03 01
这应将输出和基准设置为下降至零。
然后启用基准和输出:0x03 00 00
这应将输出复位为0.625V、并将基准电压复位为2.5V。
然后将输出设置为新值:0x08 43 21
输出应设置为0.328V。 如果 REF-DIV 设置出现电源基准电压过高的问题、输出电压将被禁用。 我想测试 DAC 输出在使用0x03 00 00设置重新启用时是否返回。
我想指出的一点是、0x07状态寄存器仅用于状态。 它不是可写寄存器。 在之前的一篇文章中、您曾尝试对其进行写操作。
吴约瑟
Ciao Joseph, la lingua non semprea aiuta。
Voglio della definees se ad esempio ho un convertitore adc a 12 bit per fare il calcolo della defineione corro 5000mV/4096 = 1.2… MV。
ora sto reizzando un 可编程控制器例程 a con molde 例程 ea secondea del numero di 例程 cambia il calcolo Che devo impostare nel a 编程。
Adesempio、affinch é il calcolo SIA corretto devo 票价5000mV/4025。
è 一个正常的错误?
斯托·法多·夸夸夸斯·迪斯巴格利亚托?
disponibilità Ringrazio 根据 LA tua S Ü D 的要求进行了预先认证。
SM
您好、Joseph、语言并不总是有用。
我的意思是,例如,如果我有一个12位 ADC 转换器来计算定义,那么我运行5000mV/4096 = 1.2.... MV。
现在、我正在制作一个包含许多例程的程序、并且根据程序更改中必须设置的计算例程数量而定。
例如、为了使计算正确、我必须执行5000mV/4025。
这是正常现象还是错误?
我有什么问题吗?
我一如既往地感谢您的参与。
ms
Massimo、
我不确定问题是什么、但我可以考虑两个问题。 首先、我将测量参考值、以查看它是否处于正确的级别。 也许加载了电压、输出电压低于预期。 第二、我要将输出设置为一系列代码、并查看输出是否在该范围内仍然是线性的。 首先将输出代码设置为1000、2000、然后继续整个范围到 F000、最后是 FFFF。 检查输出是否与这些代码呈线性关系。 您可能会添加一个过于接近接地或电源电压的代码。
吴约瑟
再次感谢 Joseph
在结束已解决的主题之前、我想征求建议。
由于我很好地与您相处、我在 AD 8678 ADC 上设置了自己的目标。
如果我有 Tina 12 pro、最好有 SPICE 模型或只是符号库、但我知道它们不在那里。
我应该使用 AD 8678来读取某些7段显示器中的电压、并想知道它是否适合在实验室仪表中使用。
此组件没有 C 代码示例。
如您所知、我最近开始在设备中实施数字技术、但我仍然不知道如何正确选择合适的组件。
使用8位 PIC 18f46k20。
如果问题不适合本主题、我将在新主题中向您提出一个问题。
再次感谢。
ms