3175|4

67

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

TLC2543检测不准的问题。求大侠们救命!! [复制链接]

我自己做了一个用TLC2543AD转换的东东,然后再用LCD显示出来,但是数据就是不对。都快十天了,快崩溃,快疯了,希望你能帮忙。这是程序,麻烦你了!!

/****************************************
   D7D6D5D4: address of A/D port;
   D3D2: length of data ,01:8b its;
                         11:16 bits
                                                 *0:12 bits
   D1:0-> high bit first
      1-> low bit first
   D0:0-> bin
      1-> Complementary Code


******************************************/
#include"reg52.h"
#include"LCD1602.h"
#define AD_PORT P1


sbit CLOCK=P1^0;
sbit AD_IN=P1^1;
sbit AD_OUT=P1^2;
sbit CS=P1^3;
sbit EOC=P1^4;



#define        Channal0  0x00
#define Check_P_V  0xD0         //检测正的基准电压
#define Check_N_V  0xC0         //检测负的基准电压
#define Check_NP_V 0xB0

uchar AD_Result_Char[8];


void TLC2543_Delay(int time)
{
        int i;
        for(i=0;i        
                ;
       
}

uint AD_Conver(uchar AD_In_Data)
{
      uchar i,AD_Temp;
      uint ad_value = 0;
          
          AD_PORT=0x00;

                        CLOCK=0;
                       CS=1;
                       TLC2543_Delay(5);
                       CS= 0;

            for (i=0;i<12;i++)         
                       {                                 
                         
                         
                                AD_Temp=AD_PORT&0x04;
                                AD_Temp>>=2;
                                ad_value=ad_value|AD_Temp;


                                AD_IN=(bit)(AD_In_Data&0x80);
                          TLC2543_Delay(10);  
                                CLOCK=1;                       
                          TLC2543_Delay(10);                 
                          CLOCK=0;                     
                                AD_In_Data<<=1;
                          ad_value<<=1;
                          }

                          TLC2543_Delay(10);
                         CLOCK=1;
                         ad_value>>=1;
                          return ad_value;
       


}




float AD_Float(uint input)
{
        float output;

        output=4.4*input/4095.0;

        return output;


}

void Float_TO_Char(float AD_Result_Float)
{                                  
        int AD_Temp;
        float AD_Float;

        if(AD_Result_Float>=0)
                {
                   AD_Result_Char[0]='+';
                }
        else
                {       
                        AD_Result_Char[0]='-';
                        AD_Result_Float=-1*AD_Result_Float;
                }
               
    AD_Temp=(int)AD_Result_Float;
       

        AD_Result_Char[1]=(AD_Temp-AD_Temp%10)/10+48;
        AD_Result_Char[2]=AD_Temp%10+48;       
           AD_Result_Char[3]='.';
        AD_Float=AD_Result_Float-AD_Temp;
        AD_Result_Char[4]=(int)(AD_Float*10)+48;
    AD_Result_Char[5]=(int)(AD_Float*100)%10+48;
       
}


                                                 
main()
{        uint AD_Result;       
        int i,j;
        float AD_Result_Float;

        LCD_INI();

        for(i=0;i<8;i++)
                AD_Result_Char=' ';

        AD_Result_Char[6]='m';
        AD_Result_Char[7]='A';          
  

        while(1)
        {       
                //CLOCK=1;

                //TLC2543_Delay(50);
                //CLOCK=0;

                TLC2543_Delay(50);
                  AD_Result=AD_Conver(Check_P_V);           //检测正的基准电压
                while(!EOC)
                        ;

            AD_Result_Float=AD_Float(AD_Result);

                Float_TO_Char(AD_Result_Float);
                for(j=0;j<8;j++)
                        LCD_Display_Char(0,j,AD_Result_Char[j]);
               
                 TLC2543_Delay(100);
               
                AD_Result=AD_Conver(Check_N_V);           //检测正的基准电压

                while(!EOC)
                        ;

            AD_Result_Float=AD_Float(AD_Result);

                Float_TO_Char(AD_Result_Float);
                for(j=0;j<8;j++)
                        LCD_Display_Char(1,j,AD_Result_Char[j]);

          
                       
          }
   

}
                                                          

最新回复

第一个问题搞定了, 很简单,没有想到,第二次送入的是,并输出的是第一次检测的结果; 但是第二个问题没有解决,为什么检测电源(v+ + V-)/2会是00?? 哪位大侠知道,告知!! 大侠都去冬眠了么??  详情 回复 发表于 2009-4-3 07:49
点赞 关注

回复
举报

80

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
而且出现一个很有意思的现象:
1、要是我单独检测正的基准电压,正常显示在LCD的第一行,单独检测负的基准电压,也能正常显示再LCD的第二行;
但是我要是想第一排显示正的基准电压,第二排显示负的基准电压,结果恰好相反!
2、要是检测(正+负)/2,结果要么是0;

3、程序中关于字符显示和数据类型转换的没有问题,现在就是怀疑AD转换程序
甚至我怀疑是不是我的ad片坏了。

帮忙啊,救命啊!!
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
把你的板子送一块给我玩玩吧
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

4
 
等来好心人,还能接受我的板子。
没问题,什么时候发给你,留个地址吧,关键是我先的把它搞定
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

5
 
第一个问题搞定了,
很简单,没有想到,第二次送入的是,并输出的是第一次检测的结果;
但是第二个问题没有解决,为什么检测电源(v+ + V-)/2会是00??
哪位大侠知道,告知!!
大侠都去冬眠了么??
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表