拜托各位专家和大神给我指点下迷津 我用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:
for 循环的 i = 12 不是 6 贴过来的时候弄错了 不好意思
Triton Zhang:
回复 Andy Chi:
TLC5615的数据手册上写的很清楚,在时序图的注释C Sixteenth SCLK falling edge,
你的代码只有12个循环,这样咋个可能正确了.
编程之前一定要仔细看数据手册啊。
Andy Chi:
回复 Triton Zhang:
不是有有两种方式么 一种12个时钟 一种16个时钟 我用的十二个时钟 10个数据位 + 2位填充位
Andy Chi:
回复 Triton Zhang:
不是有有两种方式么 一种12个时钟 一种16个时钟 我用的十二个时钟 10个数据位 + 2位填充位