搜索
bottom↓
回复: 14

求救!!TLC5618无法实现DA转换,不知问题出在哪儿??

[复制链接]

出0入0汤圆

发表于 2007-8-25 17:49:05 | 显示全部楼层 |阅读模式
用mega64L的SPI口,将数据发送到TLC5618的DIN口, SPI使能,高位在先,主机模式,CPOL为1,CPHA为0。

TLC5618的3线串行接口要一次接收16位数据,而SPI一次只能发送8位,所以我分2次发送,自己控制CS线的电平。

下面是程序,第一句是把CS置低,接着发送前8位,把寄存器清空,再发后8位,把寄存器清空,最后一句把CS置高。

PORT_SPI&=~(1<<BIT_SS);



SPDR=highdin;

while(!(SPSR&0x80))

;

clear=SPSR;

clear=SPDR;



SPDR=lowdin;

while(!(SPSR&0x80))

;

clear=SPSR;

clear=SPDR;



PORT_SPI|=(1<<BIT_SS);



基准电压是5V,前面的程序没有问题,可是TLC5618的输出口始终没有电平。

请问是怎么回事呢?

谢谢!

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2007-8-25 18:11:04 | 显示全部楼层
我用过TLC5618,挺好用的,基准要接2.5V,输出能到2倍的Vref



void SPI_Init(void)

{

  DDRB=0x0BF;//MISO:INPUT  OTHER:OUTPUT

  PORTB=0x0BF;

  SPCR=0x54;

  SPSR=0x01;//SPI2X Enable

}

void SPI_Send(uchar u)

{

  SPDR=u;

  while(!(SPSR&0x80));

}

void main(void)

{

  SPI_Init();

  PORTB&=0xFE;     //CS置低,使能

  SPI_Send(0x85);  //发送高八位

  SPI_Send(0x50);  //发送低八位

  SPI_Send(0x00);  //清空

  SPI_Send(0x00);  //清空

  PORTB|=0xFF;     //CS置高

}

出0入4汤圆

发表于 2007-8-25 18:20:34 | 显示全部楼层
先用软件模拟spi

出0入0汤圆

 楼主| 发表于 2007-8-25 19:15:12 | 显示全部楼层
dyptnt,这位大哥,照您说的做了后,输出端口有电平,但明显不对,我怀疑硬件是否接对,还有您的程序我有一个问题:为什么要倍速SPI?   能跟您QQ联系吗?  谢谢,我的QQ:83254823。  急切盼望! 谢谢!

出0入0汤圆

发表于 2007-8-25 20:05:08 | 显示全部楼层
我时钟给的是16M, 倍速SPI,能达到8M,TLV5618的最大时钟是20M

出0入0汤圆

发表于 2007-8-31 10:34:51 | 显示全部楼层
{

  SPI_Init();

  PORTB&=0xFE;     //CS置低,使能

  SPI_Send(0x85);  //发送高八位

  SPI_Send(0x50);  //发送低八位

  SPI_Send(0x00);  //清空

  SPI_Send(0x00);  //清空

  PORTB|=0xFF;     //CS置高

}

发了高八,和低八!

后面为什么还要再发两次SPI作清空啊??

出0入0汤圆

发表于 2007-8-31 14:39:56 | 显示全部楼层
/////////////////////////////////////////////////////////////////

//模出芯片TLC5618,SCK在闲置时是高电平(时序图上有一根SCK为高时持平的线),由于模出芯片在下降沿锁存数据,

//由于CPOL=1,因此CPHA=0

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

void TLC5618_SPI_Init(void)

{

        SPCR = (1<<SPE) | (1<<MSTR) | (1<<CPOL) | (0<<CPHA) | (0 <<SPR1) | (1<<SPR0);

        SPSR = (1<<SPI2X);

}





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

//操作步骤:

//        1.写重叠缓冲区锁存器

//        2.把串行接口寄存器的数据写入锁存器A并用缓冲区锁存数据更新锁存器B

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

void SPI_TLC5618(unsigned int cha_data,unsigned int chb_data)

{

        unsigned char i;

        unsigned char SPI_Lo;

        unsigned char SPI_Hi;

        unsigned int cha_COMMAND = cha_data | 0x8000;

        unsigned int chb_COMMAND = chb_data | 0x1000;



        TLC5618_SPI_Init();

        TLC_CS0_1();                                                        //        选择模出芯片

        TLC_CS1_0();

        SPI_Lo = chb_COMMAND & 0xff;

        SPI_Hi = chb_COMMAND >> 8;

        SPDR = SPI_Hi;

        for (i = 0 ; i < 200 ; i++)        if (SPSR & 0x80) break;

        SPDR = SPI_Lo;

        for (i = 0 ; i < 200 ; i++)        if (SPSR & 0x80) break;

        TLC_CS0_1();

        TLC_CS1_1();

         

        TLC_CS0_1();                                                        //        选择模出芯片

        TLC_CS1_0();

        SPI_Lo = cha_COMMAND & 0xff;

        SPI_Hi = cha_COMMAND >> 8;

        SPDR = SPI_Hi;

        for (i = 0 ; i < 200 ; i++)        if (SPSR & 0x80) break;

        SPDR = SPI_Lo;

        for (i = 0 ; i < 200 ; i++)        if (SPSR & 0x80) break;

        TLC_CS0_1();

        TLC_CS1_1();

}

出0入0汤圆

发表于 2008-4-15 17:56:22 | 显示全部楼层
SPI_Send(0x00);  //清空  
  SPI_Send(0x00);  //清空  

为什么要两次清空?我也没看懂

出0入10汤圆

发表于 2008-8-19 11:18:31 | 显示全部楼层
问一下,参考电压芯片用什么好?

出0入0汤圆

发表于 2008-8-19 13:37:15 | 显示全部楼层
sbit TLC5618_DIN=P1^4;
sbit TLC5618_CLK=P1^5;
sbit TLC5618_cs =P1^6;
//------------------------------------------------------------------------------
void DA_TLC5618(unsigned int data)
{               

unsigned int nc;
unsigned char i;

nc=0x8000|data;           //如果用没有|就DACB输出

TLC5618_CLK=1;
TLC5618_cs=0;
  for(i=0;i<16;i++)
  {TLC5618_CLK=1;
   if(nc&0x8000)TLC5618_DIN=1;
   else TLC5618_DIN=0;
   TLC5618_CLK=0;
   nc<<=1;
  }
  TLC5618_cs=1;
  TLC5618_CLK=1;
}

出0入0汤圆

发表于 2010-3-17 14:43:31 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-8-22 20:23:27 | 显示全部楼层
回复【6楼】ba_wang_mao  

/////////////////////////////////////////////////////////////////
//模出芯片tlc5618,sck在闲置时是高电平(时序图上有一根sck为高时持平的线),由于模出芯片在下降沿锁存数据,
//由于cpol=1,因此cpha=0
/////////////////////////////////////////////////////////////////
void tlc5618_spi_init(void)
{
        spcr = (1&lt;&lt;spe) | (1&lt;&lt;mstr) | (1&lt;&lt;cpol) | (0&lt;&lt;cpha) | (0 &lt;&lt;spr1) | (1&lt;&lt;spr0);
        spsr = (1&lt;&lt;spi2x);
}
cpol = 1,cpha=1;

出0入0汤圆

发表于 2011-12-31 11:34:24 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-11-8 21:07:40 | 显示全部楼层
路过,正在调TLV5618

出0入0汤圆

发表于 2013-12-17 17:04:43 | 显示全部楼层
mark,5615正在调试,
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 23:40

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表