DAC8760
DAC8760程序一直没调好,求应用程序,谢谢
网上搜搜嘛,老多的了
#include<msp430.h>
#include<DAC8760.h>
/***********************************
函数功能:
写数据
**
**
参数:
com
:前
8
位命令;
dat
:数据
**
***********************************/
void DAC8760_write_byte(unsigned char com, unsigned int dat)
{
unsigned char i=0;
DAC8760_LATCH_0_();
DAC8760_SCLK_0_();
for(i=0;i<8;i++)
{
DAC8760_SCLK_0_();
if(com&0x80)
{
DAC8760_DIN_1_();
}
else
{
DAC8760_DIN_0_();
}
delay_us(1);
DAC8760_SCLK_1_();
delay_us(1);
com<<=1;
}
for(i=0;i<16;i++)
{
DAC8760_SCLK_0_();
if(dat&0x8000)
{
DAC8760_DIN_1_();
}
else
{
DAC8760_DIN_0_();
}
delay_us(1);
DAC8760_SCLK_1_();
delay_us(1);
dat<<=1;
}
DAC8760_SCLK_0_();
//delay_us(3);
DAC8760_LATCH_1_();
DAC8760_DIN_1_();
//delay_us(3);
}
void DA_init()
{
CLk_clear;
DAC8760_write_byte(DACResetReg,0x0001);
DAC8760_write_byte(DACConfigurationReg,0x0088);
DAC8760_write_byte(DACControlReg,0x1006);
DAC8760_write_byte(DACDataReg,0xffff);
// DAC8760_delay(10);
}
以前写的,希望对您有帮助!
给你一点线路连接图


程序设计调试的时候,可以先用模拟SPI接口,先调出来;用硬件的SPI接口发的会快点,按照2M速率算的话,2uS左右吧
调完了,把程序改成硬件的SPI接口,要发24位数据,可以用硬件的SPI接口8位模式发送,发3次就可以了。
你程序自己先写吧,有问题了再讨论
给你一段仿SPI写数据的时序
void DACx876_Write(u32 dat)
{
u8 i;
for(i=23;i>0;i--)
{
SCK_0;
LOCK_0;
if(dat & (1<<i) != 0)
{
DIN_1;
}
else
{
DIN_0;
}
Delay(1);
SCK_1;
Delay(1);
}
SCK_1;
LOCK_1;
DIN_1;
}
测过是没有问题的
很多吗?能不能帮我搜搜,搜好后网址给我,我搜了很久都没搜出来
大哥,这代码怎么看起来那么眼熟啊,怎么跟我的代码一模一样?这个真的能用吗
输出为0,还是输出不正常呢?如果没有输出,首先检查一下硬件链接。如果输出不正常,可能是程序的问题。
输出一直为0
#include<msp430.h>
#include<DAC8760.h>
void DAC8760_delay(unsigned int j)
{
while(j--)
{
asm("NOP");
}
}
/***************************
**
开始工作信号
**
****************************/
void DAC8760_start()
{
// DAC8760_SCLK_0_();
DAC8760_LATCH_0_();
// DAC8760_delay(1);
// DAC8760_SCLK_1_();
// DAC8760_SCLK_0_();
DAC8760_LATCH_1_();
// DAC8760_delay(1);
DAC8760_LATCH_0_();
// DAC8760_delay(3);
}
/***********************************
函数功能:
写数据
**
**
参数:
com
:前
8
位命令;
dat
:数据
**
***********************************/
void DAC8760_write_byte(unsigned char com, unsigned int dat)
{
unsigned char i=0;
unsigned long data;
data=(((unsigned long)com)<<24)|(dat<<8);
DAC8760_LATCH_1_();
DAC8760_LATCH_0_();
DAC8760_SCLK_0_();
delay_us(5);
//DAC8760_con_write();
for(i=0;i<24;i++)
{
DAC8760_SCLK_0_();
if(data&0x80000000)
{
DAC8760_DIN_1_();
}
else
{
DAC8760_DIN_0_();
}
//delay_us(2);
DAC8760_SCLK_1_();
// delay_us(2);
data<<=1;
}
DAC8760_SCLK_0_();
delay_us(1);
DAC8760_LATCH_1_();
delay_us(5);
//DAC8760_DIN_1_();
}
/***************************
* 读字节
**************************/
uint DAC8760_read_byte(unsigned char com, unsigned int dat)
{
uint data=0;
uchar i;
DAC8760_write_byte(com,dat);
DAC8760_DIN_0_();
DAC8760_LATCH_0_();
DAC8760_SCLK_1_();
for(i=0;i<8;i++)
{
DAC8760_SCLK_1_();
DAC8760_SCLK_0_();
}
for(i=0;i<16;i++)
{
DAC8760_SCLK_1_();
if(DAC8760_SDO_())
{
data|=0x01;
}
DAC8760_SCLK_0_();
//DAC8760_delay(2);
data<<=1;
}
DAC8760_LATCH_1_();
return data;
}
void DA_init()
{
CLk_clear;
DAC8760_write_byte(DACResetReg,0x0001);
DAC8760_write_byte(DACConfigurationReg,0x0088);
DAC8760_write_byte(DACControlReg,0x1006);
DAC8760_write_byte(DACDataReg,0xffff);
}
这是我的程序。电路连接都是按照技术手册连的,除了没接隔离器。用读函数读出一直为0.。能否帮我看下程序,谢谢
