找回密码
 注册
LabVIEW+单片机学习套件全套教程资料下载[免费]LabVIEW论坛精华列表贴USB0816数据采集卡《LabVIEW宝典》
LabWindows/CVI论坛精华贴NET0816以太网数据采集卡RC0210远程设备授权系统 关闭关停锁定打开设备 户外分布式数据采集
NET1624低速高精度以太网数据采集卡WIFI0824SD无线WIFI网络数据采集卡脱机运行 SD存储 小尺寸微型 串口采集远程采集 安卓 手持移动采集 纪录仪
查看: 1999|回复: 22

用TLC2543,LV程序修改了第二版资料中的例子7,看不到采集的0--5V电压?

[复制链接]
发表于 2008-7-25 17:30:47 | 显示全部楼层 |阅读模式
大家好!
我用12位AD芯片TLC2543采集0--5V电压数据,单片机程序是没有问题的,因为我用串口调试工具可以看到PC机收到正确的数据:


其中,“09”是TLC2543采集结果的高8位,“86"是TLC2543采集结果的低8位,所以12位数据是:0x986,转成十进制是:2438,对应的电压是:2438/4096 * 5 = 2.976V,和实际电压相符。
但我修改了第二版资料中的例子7的LV程序,却不能正常显示电压波形。修改后的LV程序如下:


我的单片机波特率是:115200,而且每次单片机只发两个字节的数据。不知为什么,修改后的LV程序不能显示0--5V电压。

请帮忙看一下,非常感谢!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
发表于 2008-7-25 21:03:20 | 显示全部楼层
回复 顶

使用道具 举报

发表于 2008-7-25 21:04:28 | 显示全部楼层
因为您的CPU程序和我们的有所不同,所以造成这个OFFSET也不同!
回复 顶

使用道具 举报

发表于 2008-7-25 21:06:12 | 显示全部楼层
兄弟再试试这个,就改了二个数字,一个原来是1现在改为0,一个原来是2现在改为1,因为跟您的CPU程序有关的原因!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 顶

使用道具 举报

 楼主| 发表于 2008-7-25 22:17:19 | 显示全部楼层
初学labview,困难重重.还是不行啊
我的MCU主程序如下:
void main(void)
{
  EA = 1;                 //开总中断
  ES = 1;                 //开串口中断
  CS = 1;                 //设置TLC2543片选为高      
  
  SCON = 0x50;            //串口方式1工作,8位数据位,1位停止位,无奇偶校验,允许接收
  TMOD = 0x21;            //定时器1定时方式2(8位自动重装计数器);定时器0工作于定时方式1(TH0+TL0共16位全部参加计数)
  PCON = 0x80;                   //波特率加倍控制,SMOD位
  TH1 = 0xff;             //定时器/计数器T1置初值     波特率115200
    TL1 = 0xff;             //定时器/计数器T1置重装数
  TR1 = 1;                //启动定时器T1        
       
    pc_command = 0;
       
    while(1)
   {
     while(pc_command != 0x11);                                //等待PC发送开始传送指令
   pc_command = 0;
    read2543(0x30);     //第一次读A/D无效
    delay_10us();
    read2543(0x30);    //
    delay_10us();        //A/D转换时间
  ES = 0;                                                                                                    
    SBUF = ah;              //        转换结果的高4位                                                       
    while(TI == 0);
    TI = 0;
    SBUF = al;            //转换结果的低8位                                               
    while(TI == 0);
    TI = 0;
    ES = 1;
  }
}
回复 顶

使用道具 举报

 楼主| 发表于 2008-7-25 22:19:38 | 显示全部楼层
VISA是装了的,因为我运行其他LV串口程序,是可以看到接收的数据的
回复 顶

使用道具 举报

 楼主| 发表于 2008-7-26 11:01:06 | 显示全部楼层
把MCU程序修改成和例子7差不多的,主要程序如下:

/*******************************************************************/
/*                                                                 */
/* 单片机在串口接收1字节                                           */
/* 说明:串口接收中断                                              */
/*                                                                 */
/*******************************************************************/
void serial_int(void) interrupt 4
{
   if (RI)
  {
     ES = 0;         
     pc_command = SBUF;
     RI = 0;
     ES = 1;   
  }
}

void data_convert(uint data_to_convert)               //把数据折开成四字节,为了方便发送
{
  data_conver[0] = 0;
  data_conver[1] = (uchar)((data_to_convert & 0x0f00) >> 8);
  data_conver[2] = (uchar)((data_to_convert & 0x00f0) >> 4);
  data_conver[3] = (uchar)(data_to_convert & 0x000f);        
}
        
void main(void)
{
    uchar i;
  EA = 1;                 //开总中断
  ES = 1;                 //开串口中断
  
    SCON = 0x50;            //串口方式1工作,8位数据位,1位停止位,无奇偶校验,允许接收
  TMOD = 0x20;            //定时器1定时方式2(8位自动重装计数器
  PCON = 0x80;                   //波特率加倍控制,SMOD位
  TH1 = 0xff;             //定时器/计数器T1置初值     波特率115200
    TL1 = 0xff;             //定时器/计数器T1置重装数
  TR1 = 1;                //启动定时器T1         
        
while(1)
{
    while(pc_command != 0x11);                //等待PC发送开始传送指令
  pc_command = 0;
    read2543(0x30);
    delay_10us();
    read2543(0x30);  
    data_convert(ad);               //ad是uint类型,
    for(i = 0;i < 4;i++)          //循环4次,即是发送四次,每次发送一个字节
  {
       SBUF = data_conver;              //发送变换后的4字节数据
    while(TI==0);                      //等待发送完毕
    TI = 0;                                                        //发送完毕以后清除发送完标志位
  }  
  }
}



还是不行,前面板显示如下:


用其它串口工具却可以看到4个字节的数据:


实在是太郁闷了.

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 顶

使用道具 举报

发表于 2008-7-26 11:04:15 | 显示全部楼层
不用改CPU的程序,按上面的我传的,我试过将您第一个图中的数据进行转换,得到的值确实是您所说的那个2.9几伏的!

您看一下那个COM的下拉能下拉下来吗?
回复 顶

使用道具 举报

发表于 2008-7-26 11:04:53 | 显示全部楼层
是不是串口被占用了呢?有没有关闭其他串口部分,兄弟高亮后面板程序试试看有没有错误码!
回复 顶

使用道具 举报

发表于 2008-7-26 11:05:17 | 显示全部楼层
回复 顶

使用道具 举报

发表于 2008-7-26 11:05:34 | 显示全部楼层
如果需要自由度高点的,可以看例8会更方便些的!
回复 顶

使用道具 举报

发表于 2008-7-26 11:07:52 | 显示全部楼层
刚发现问题了,兄弟您的单片机波特率是115200的话,上位机LABVIEW程序默认是9600,改一下波特率,应该就可以了!
回复 顶

使用道具 举报

 楼主| 发表于 2008-7-26 11:33:28 | 显示全部楼层
高亮后如下:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 顶

使用道具 举报

 楼主| 发表于 2008-7-26 11:37:46 | 显示全部楼层
波特率我修改如下,运行后还是不行:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 顶

使用道具 举报

 楼主| 发表于 2008-7-26 11:44:08 | 显示全部楼层
还有一个问题一直想不清楚:

在MCU程序中,单片机发送给PC机的数据是实际的TLC2543采集的数据,不是对应的ASCII码.但串口上跑的却是ASCII码,难道RS232协议会自动把准备发到串口线路上的数据,自动转换成对应的ASCII码吗?

因为看了PC机这边的LV程序,要对从串口来的ASCII码转成16进制数据,所以对这个问题还是想不通.
回复 顶

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|cpubbs论坛. ( 粤ICP备09171248号 )

GMT+8, 2026-9-30 04:05 , Processed in 0.059153 second(s), 12 queries , Gzip On, File On.

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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