打印
[AVR单片机]

求助:TLV5636 DA输出出问题 给点建议啊

[复制链接]
2041|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
shami0315|  楼主 | 2008-7-31 18:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要问题: 通过spi串口传入命令和数据后,出现的现象是,每输入两个值才能有一个输出值.如我程序所示:
//ICC-AVR application builder 
// Target : AT90USB1287
// Crystal: 8.000Mhz

#include <ioUSB1287v.h>
#include <macros.h>

#define uchar unsigned char 
#define unint unsigned int

void SPI_MasterInit(void)
{
   DDRC = 0xff;         //PC7 PC6 PC5
                        // 1   0   1                           用于片选  CS            
   DDRE = 0xff;         //                              pe7控制   FS  同步
   PORTE&=~BIT(PE7);    //DA FS
   
   DDRB = (1<<PB0)|(1<<PB1)|(1<<PB2);//0x07;
   PORTB = BIT(PB0); 
   SPCR = (1<<SPE)|(1<<MSTR)|(0<<SPR1)|(0<<SPR0)|(1<<CPHA);
}

void SPI_MasterTransmit(uchar cData)
{
   SPDR = cData;
   while(!(SPSR & (1<<SPIF)))
   ;
}
////////////////////////////////////////////////////////

void WriteDA(unint cDate)
{   
   uchar H_date,L_date;
   
   L_date = cDate;
   H_date = cDate>>8;
   
   
   PORTE = BIT(PE7);            
   PORTC = 0xa0;                  //CS低  
   PORTE&=~BIT(PE7);              //FS低

   SPI_MasterTransmit(H_date);    //spi传输高字节
   SPI_MasterTransmit(L_date);    //spi传输低字节

   PORTE = BIT(PE7);              //FS高 
   PORTC = 0x00;                  //CS高  
}

////////////////////////////////////////////////////////

void main(void)
{
    SPI_MasterInit();
    WriteDA(0xd002);                //写入命令
    for(;;)
    {   //写入数
        WriteDA(0x4fee);        //运行的结果显示4fee的变换电压值
        asm("nop");
        WriteDA(0x4e00);        //得不到其对应的电压值
        asm("nop");
        WriteDA(0x4500);        //显示4500的电压值
        asm("nop");
        WriteDA(0x4a00);        //得不到 
        asm("nop");        
    }
}

时序是根据手册上写的,通过示波器看时序没有错误,写入的数据也没有错误. 但是得到的输出只能是两个.写多个也是一样,只能两个得一个.
参考电压2.048v正常

不知道哪里出了问题了,请大家帮帮忙 谢谢

相关帖子

沙发
jt4117| | 2008-8-7 09:04 | 只看该作者

我用TLV5606也是这样,要写两次才行。

不知道哪里时序没搞对。

使用特权

评论回复
板凳
caisingbo| | 2008-8-7 09:54 | 只看该作者

两年前用过这个片

两年前用过这个片子,好像是要在第16个时钟脉冲的上升沿才能将当前值更新,请看数据手册,应该是这个问题,所以你程序里面加入一个脉冲就可以了,(我没看你的程序,)估计是这样的,呵呵,错了不要拍我

使用特权

评论回复
地板
game99433| | 2008-8-7 15:47 | 只看该作者

回复:TLV5636  DA输出出问题

 在SPI_MasterInit(void)中加一句
 SPSR = 0x00; 
试一下。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

49

主题

56

帖子

1

粉丝