拜托各位专家和大神给我指点下迷津 我用430单片机控制一款德仪公司的TLC5615串行数据DAC10芯片 参照官方资料以及一些网上资料写了一段程序 却怎么也输出不了电压 我参考电压用的2.02V 下面是我的程序
#include <msp430g2452.h>
/****************定义IO口**************/
/****P2.3 CS**P2.4 SCLK**P2.5 DIN****/
/*参考电压接3.6V VCC,再经比例放大电路放大至10V**/
#define CS_SET BIT3
#define CS_CLR ~BIT3
#define SCLK_SET BIT4
#define SCLK_CLR ~BIT4
#define DIN_SET BIT5
#define DIN_CLR ~BIT5
int data = 2044; //初始化 输出电压为 5V
void Key_UD(void);
void main(void)
{
//BCSCTL1 &= ~XT2OFF; //开启XT2时钟
//BCSCTL2 |= SELM_2 + SELS; //MCLK = SCLK = XT2 = 32768Hz
while(BCSCTL2 & XT2OF); //判断是否起振 未起振则等待
P2DIR |= BIT3 + BIT4 + BIT5; //设置 P2.3 P2.4 P2.5 为输出模式
// P2OUT |= BIT3 + BIT4 + BIT5; //上拉电阻
// P2REN |= BIT3 + BIT4 + BIT5;
P2OUT |= BIT3; //CS置位
while(1)
{
Key_UD();
P1OUT |= BIT3;
P1REN |= BIT3;
while(P1IN & BIT3);
unsigned int i;
unsigned j = 0x8000;
P2OUT &= ~BIT4; //SCLK复位
P2OUT &= ~BIT3; //CS复位
for(i = 6;i > 0;i–)
{
if(data & j)
P2OUT |= BIT5; //DIN = 1
else
P2OUT &= ~BIT5; //DIN = 0
_NOP();
P2OUT |= BIT4; //SCLK置位
_NOP();
P2OUT &= ~BIT4; //SLCK复位
j >>= 1;
}
P2OUT |= BIT3; //CS置位 数据写入DA寄存器
_NOP();
P2OUT &= ~BIT3;
}
//for(i = 1000;i > 0;i–)
}
void Key_UD(void)
{
P1OUT |= BIT4 + BIT3;
P1REN |= BIT4 + BIT3;
if(!(P1IN & BIT4)) //这里假设 P1.4为 UP独立键
{
data += 400; //步进1V
if(data > 4096)
data = 0;
}
if(!(P1IN & BIT3)) //假设 P1.5为DOWN独立键
{
data -= 400;
if(data < 0)
data = 4096;
}
}
Andy Chi:
上面都 i是等于12 不是6 贴程序的时候弄错了 不好意思
Decapton Wang:
代码看不懂,不过可以给你两个建议,一是看看从DOUT能不能把你写进去的数字输入读出来,看看读出来的值是否正确;二是按照图1给的时序写一组最简单的SPI时序,SDI写进去一个直流值就行,然后看看输出是不是对应的直流电压。