打印
[复制链接]
3390|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
huazhongwang|  楼主 | 2013-4-16 17:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近几个星期一直在调TI的ADC芯片,都跳了两个星期了,一直未有斩获,有中断产生,但是出来的数据一直都是全0,附代码
#include<stm32f10x.h>
#include"tlc3574.h"
u16 CHx_value=0;

void Tlc3574_delay_us(u8 t)                 //2us
{
    u8 i,j;
       
           for(j=t;j>0;j--)
      for(i=24;i>0;i--);
          
}         

void Write_Tlc3574(u16 CFR_command)                           //写命令
{
    char i;
        u16 tlc3574_temp;   

    for(i=0;i<16;i++)
    {
             tlc3574_temp = (CFR_command >> (15-i)) & 0x01;
             tlc3574_SCLK_1;
         
             if(tlc3574_temp ==1)
                 tlc3574_SDI_1;
             else
                 tlc3574_SDI_0;
                 Tlc3574_delay_us(5);
                 tlc3574_SCLK_0;
                 Tlc3574_delay_us(5);     
    }  
}

u16 Tlc3574_Read_FIFO()                               
{   
     u8 i;
         u16 tlc3574_Read_FIFO_value =0;
  //   tlc3574_CS_0;

         tlc3574_SCLK_0;        //  HOUJIADE
         for(i=0;i<14;i++)
         {
             tlc3574_SCLK_1;
                 Tlc3574_delay_us(5);
             tlc3574_Read_FIFO_value <<= 1;
             if(tlc3574_READdata == 1)
                 {
                     tlc3574_Read_FIFO_value += 1;         
                 }
                 tlc3574_SCLK_0;
                 Tlc3574_delay_us(10);
         }
         tlc3574_SCLK_1;                   //两个低位数据舍弃
          //  delay
           Tlc3574_delay_us(10);
         tlc3574_SCLK_0;
          //  delay
           Tlc3574_delay_us(10);
         tlc3574_SCLK_1;
          //  delay
           Tlc3574_delay_us(10);
         tlc3574_SCLK_0;
          Tlc3574_delay_us(10);
         return  tlc3574_Read_FIFO_value ;
}

void Tlc3574_Init()
{
//   tlc3574_CS_1;
//   tlc3574_SCLK_0;
//        Tlc3574_delay_us(10);

        tlc3574_CS_0;
        Write_Tlc3574(0xa000);                 //write SFR command ,write 000H
       
         Tlc3574_delay_us(10);
     tlc3574_CS_1;
         Tlc3574_delay_us(30);
         tlc3574_CS_0;
         Write_Tlc3574(0xae00);
         Tlc3574_delay_us(10);
         tlc3574_CS_1;
}

void Start_sampling()
{
    Tlc3574_delay_us(50);
    tlc3574_CS_0;
        Write_Tlc3574(0x0000);
        Tlc3574_delay_us(20);
        tlc3574_CS_1;
        while(tlc3574_INT);

//        Tlc3574_delay_us(100);
        // Tlc3574_delay_us(10);
    CHx_value=Tlc3574_Read_FIFO() /8192;
          
}

void Tlc3574_CONV()
{
    Tlc3574_Init();
        Start_sampling();
}

相关下载

相关帖子

沙发
huazhongwang|  楼主 | 2013-4-16 17:43 | 只看该作者
芯片是TI的TLC3574

使用特权

评论回复
板凳
airwill| | 2013-4-16 18:17 | 只看该作者
既然接收到了中断, 应该发送出命令了,问题应该不大。
tlc3574_READdata 是不是设置有问题
可以借助示波器看看通信中的波形,验证一下。

使用特权

评论回复
地板
huazhongwang|  楼主 | 2013-4-16 22:22 | 只看该作者
通讯的波形看过,单片机写时序应该没有问题,有想过读数据的问题,但是用示波器观看SDO的波形,输出的波形确实是全零。一度怀疑是写命令函数的时序出了问题,改了很多次,没什么效果,读数据的设置出问题,这个还没想过,我试试看

使用特权

评论回复
5
huazhongwang|  楼主 | 2013-4-16 22:32 | 只看该作者
我用的是最简单的一种,短采样,内部转换时钟,模式00。不用FIFO的那种,还请版主,说的详细一点

使用特权

评论回复
6
airwill| | 2013-4-17 09:17 | 只看该作者
1. STM32 的读 IO 口设置有没有问题? 确认一下
2. 我看了读时序, CS 还是要置0才能读的, 你的时序有没有问题?

使用特权

评论回复
7
hjf2001| | 2013-4-17 09:48 | 只看该作者
我建议还是将datasheet仔细读几遍,再加上硬件和示波器调试,估计也就没有问题了。

使用特权

评论回复
8
huazhongwang|  楼主 | 2013-4-17 10:26 | 只看该作者
airwill 发表于 2013-4-17 09:17
1. STM32 的读 IO 口设置有没有问题? 确认一下
2. 我看了读时序, CS 还是要置0才能读的, 你的时序有没有问 ...

我是用示波器在SDO口看波形,出来的数据都是零,STM32的设置不会有问题,之前用ADS1286也是这么设置的,可用。现在看的话估计是时序,和芯片的设置出了问题,资料没读明白,在仔细研读datasheet,之前用的都是单通道的AD,都不带fifo,这个芯片资料极少,除了datasheet,几乎没什么可以参考的,我再把时序调整下,再看看,多谢版主跟帖

使用特权

评论回复
9
huazhongwang|  楼主 | 2013-4-18 13:52 | 只看该作者
还是自己太粗心,芯片资料没有完全看透,主要问题还是芯片时序图没看明白,往芯片SDI口写命令时,转换完成的数据会从SDO口出来,因此,写数据和读数据应该同时进行(Mode 00)。为方便后来人,把代码贴上
u16 Write_Channel_Getvalue(u16 channel)
{
    char i;
        u16 tlc3574_temp;   
        u16 tlc3574_value;

        tlc3574_CS_0;
    for(i=0;i<16;i++)
    {
             tlc3574_value <<= 1;
             tlc3574_temp = (channel >> (15-i)) & 0x01;
             tlc3574_SCLK_1;
         
             if(tlc3574_temp ==1)
                 tlc3574_SDI_1;
             else
                 tlc3574_SDI_0;
                 Tlc3574_delay_us(2);
                 tlc3574_SCLK_0;
                 Tlc3574_delay_us(2);
                 if(tlc3574_READdata == 1)
                      tlc3574_value += 1;
                 Tlc3574_delay_us(2);
    }
        Tlc3574_delay_us(2);
          tlc3574_CS_1;
          Tlc3574_delay_us(5);
          tlc3574_value >>= 2;
         // tlc3574_value = tlc3574_value * 10 / 8192 ;
        return tlc3574_value;
}
void Tlc3574_Init()
{
    tlc3574_CS_1;
    tlc3574_SCLK_0;
        Tlc3574_delay_us(5);


//Write_Channel_Getvalue(0xa000);       
Write_Channel_Getvalue(0xae00);

}


while(1)
        {
            // ads1286_Getvalue();
            // decimal_1632_Disp(84, 165,ads1286_value, 0xf800,0xffff);
        //        Tlc3574_CONV();
        for(i=0;i<25;i++)
        {
         Tlc3574_Init();
//         Write_Channel_Getvalue(0x0000);

     Tlc3574_Voltage_1 = Write_Channel_Getvalue(0x0000) * 10.0 / 8192;
         
            Tlc3574_sum += Tlc3574_Voltage_1;
               
                }
                Tlc3574_sum = Tlc3574_sum / 25 ;
    // Update_Data();
        decimal_1632_Disp(84, 165,Tlc3574_sum, 0xf800,0xffff);
//        paint_part(84,165,240,200,0xffff);
        }               



使用特权

评论回复
10
hjf2001| | 2013-4-18 20:24 | 只看该作者
谢谢分享!很不错!一个IC最好的解释估计就是datasheet和user guide了。

使用特权

评论回复
11
cjhk| | 2013-4-19 18:33 | 只看该作者
问题解决了就好   这样不断调试  终究是会出来的   电子工程师   磨得就是耐心

使用特权

评论回复
12
hawksabre| | 2013-4-20 19:56 | 只看该作者
谢谢楼主的共享    谢谢   顶一个   很好的资料   谢谢   有机会把自己的资料也共享一下

使用特权

评论回复
13
wyz526| | 2013-6-24 15:58 | 只看该作者
我最近也在调试TLC3574这款芯片,遇到一个蛋疼的问题:采用单通道模式,用芯片内部电压REFP与REFM测试时均能从SDO读出正常的数字转换值,但采用引入的外部电压进行转换时,得到的数字值随着电压增加会相应增加,但,很不准确,偏小很多。不知道是什么原因?向各位大神求教!!!!

使用特权

评论回复
14
wyz526| | 2013-6-24 15:59 | 只看该作者
huazhongwang 发表于 2013-4-17 10:26
我是用示波器在SDO口看波形,出来的数据都是零,STM32的设置不会有问题,之前用ADS1286也是这么设置的, ...


我最近也在调试TLC3574这款芯片,遇到一个蛋疼的问题:采用单通道模式,用芯片内部电压REFP与REFM测试时均能从SDO读出正常的数字转换值,但采用引入的外部电压进行转换时,得到的数字值随着电压增加会相应增加,但,很不准确,偏小很多。不知道是什么原因?向各位大神求教!!!!

使用特权

评论回复
15
gaoyang9992006| | 2013-6-25 10:30 | 只看该作者
非常好的楼主,谢谢分享成果啊。

使用特权

评论回复
16
gaoyang9992006| | 2013-6-25 10:31 | 只看该作者
wyz526 发表于 2013-6-24 15:59
我最近也在调试TLC3574这款芯片,遇到一个蛋疼的问题:采用单通道模式,用芯片内部电压REFP与REFM测试时 ...

你将采用频率降低试试看。

使用特权

评论回复
17
trumpxp| | 2013-6-25 19:02 | 只看该作者
频率降低了  不知道是否有效  

使用特权

评论回复
18
huazhongwang|  楼主 | 2013-8-4 12:06 | 只看该作者
wyz526 发表于 2013-6-24 15:58
我最近也在调试TLC3574这款芯片,遇到一个蛋疼的问题:采用单通道模式,用芯片内部电压REFP与REFM测试时均 ...

电压基准的问题,TLC3574用的基准是4V的

使用特权

评论回复
19
hkcj| | 2013-8-4 18:55 | 只看该作者
这个问题   没有遇到过   楼主   帮你顶一个   看看别人的意见   

使用特权

评论回复
20
85863077| | 2015-4-18 11:33 | 只看该作者
airwill 发表于 2013-4-16 18:17
既然接收到了中断, 应该发送出命令了,问题应该不大。
tlc3574_READdata 是不是设置有问题
可以借助示波器 ...

请问下这里的 tlc3574_READdata 是什么啊    if(tlc3574_READdata == 1) 是SDO的输出么?

使用特权

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

本版积分规则

个人签名:搞电子的,不解释

1

主题

118

帖子

0

粉丝