搜索
bottom↓
回复: 15

利用ICL7135的BUSY怎样读取A/D转换结果?

[复制链接]

出0入0汤圆

发表于 2007-4-25 19:19:37 | 显示全部楼层 |阅读模式
busy”输出端(ICL7135的21脚)高电平的

宽度等于积分和反积分时间之和。ICL7135内部规定积分时间固

定为10001个时钟脉冲时间,反积分时间长度与被测电压的大小

成比例。如果利用单片机内部的计数器对ICL7135的时钟脉冲计

数,利用“busy”作为计数器门控信号,控制计数器只能在bus

y为高电平时计数,将这段busy高电平时间内计数器的内容减去

10001,其余数便等于被测电压的数值。



我是想用T3的输入捕获ICP3来计算时钟脉冲个数,但结果都是0,

ATMEL128 8M



#define BUSY          PINE&0x80

unsigned int SampleConvert(unsigned int Num0,char Bit)                  //采样转换函数

{

  unsigned int Sample3,count,j;

  unsigned int  i,Sample1;

  TCNT3H = 0x00;     //T3

  TCNT3L = 0x00;

  TCCR3B =0x00;

  while(BUSY!=0);  

  while(BUSY==1)

  {  

  TCCR3B = 0x43;

  }

  //while(ETIFR&(1<<ICF3)==1);

  TCCR3B =0x00;

  count=ICR3H*256+ICR3L-10001;

  Num0=count;

   for (i=0 ; i<bit ; i++)  //送LCD显示

    {

    LCD_Buff = CHR[Num0%10];

    Num0 = Num0/10;

    }

   for (i=0 ; i<Bit ; i++)

    {

      Lcd_Command(0xC0);   

      Lcd_Write(LCD_Buff[4]);

      Lcd_Command(0xC1);   

      Lcd_Write(LCD_Buff[3]);

      Lcd_Command(0xC2);   

      Lcd_Write(LCD_Buff[2]);

      Lcd_Command(0xC3);  

      Lcd_Write(LCD_Buff[1]);

      Lcd_Command(0xC4);  

      Lcd_Write(LCD_Buff[0]);

    }



}



刚用7135,希望各位大虾指点,谢谢!

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

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2007-4-26 01:31:41 | 显示全部楼层
方法没错,但是程序好像有问题,你自己多查查看

出0入0汤圆

发表于 2007-4-26 09:47:35 | 显示全部楼层
这个方法是可行的。但你怎么知道7135的振荡频率?我是用一个时钟输出,然后由另外一个时钟捕捉,很好用的。

出0入0汤圆

发表于 2007-4-26 13:34:43 | 显示全部楼层
何必费那个事呢?以前想这种办法是因为它便宜没办法的办法.现在还这么用就不值得了.现在高分辨率(16BIT甚至24BIT的,内部甚至还带放大器)高性能的ADC价格便宜的有很多型号可选,干吗还要费劲用这种片子呢?而且你不觉得它的块头太大了点么?

出0入0汤圆

发表于 2007-4-26 20:45:26 | 显示全部楼层
楼上能否推荐几种?但7135有它自己的优点,采用双积分电路能够抗干扰,体积是够大的了。另外精度也是一般片子达不到的。可以看一下参数。

请楼上推荐几个高分辨率的片子,以后要用到的。

出0入0汤圆

 楼主| 发表于 2007-4-27 22:41:01 | 显示全部楼层
7135有它很多他自己的优点,块头是大了点,可是性价比好啊,做一些便宜又有精度要求的东西很有好处,7135的时钟外部输入250KHz,  ssyniuej ,后来我用捕获中断还是不行,请问能不能发一份你的程序给我参考,谢谢 邮箱scpd@163.com

void timer3_init(void)

{

TCCR3B = 0x00; //stop

  TCCR3A = 0x00;

  TCCR3B = 0x47; //start Timer

}

#pragma interrupt_handler timer3_capt_isr:26

void timer3_capt_isr(void)

{

if(BUSY)

{

rising_edge=ICR3;

TCCR3B=TCCR3B&0XBF;

}

else

{

falling_edge=ICR3;

TCCR3B=TCCR3B|0X40;

  }

count=falling_edge-rising_edge-10001;

}

出0入0汤圆

发表于 2007-4-28 08:58:31 | 显示全部楼层
这个频率好象有点高吧?另外你的时钟频率要和硬件配起来才行,否则会发现数据到一个数后就不再动了(积分饱和了)我用的是M88,下面是我的程序,这个是已经实际使用的程序了。

        TCCR1A=0x00;

        TCCR1B=0x82;//8倍分频 125KHz,这里要配合下面的定时器2,要求两个的时钟要相同。

        TCNT1=0;

        ICR1=0;

        OCR1A=sysdata.cs.clock;

        OCR1B=0;

        TIFR1 = 0XFF;



        // Timer/Counter 2 initialization

        // Clock source: System Clock

        // Clock value: 1000.000 kHz

        // Mode: CTC top=OCR0A

        // OC2A output: Disconnected

        // OC2B output: Toggle on compare match

        ASSR=0x00;

        TCCR2A=0x12;//这个定时器做为外部ADC的时钟源

        TCCR2B=0x01;//采用了CTC工作方式,时钟不分频

        TCNT2=0x00;

        OCR2A=0x03;//实际分频为2×1×(1+3)=8,也就是说实际工作频率为125KHz

        OCR2B=0x00;//这样实际的数据每秒钟更新三次。

以上是相关的初始化部分。

SIGNAL(SIG_INPUT_CAPTURE1)

{

// Place your code here

//此处准备执行外部AD转换数据检测,在此处要进行数据处理并且要对捕捉的变化沿进行处理。

        int adval;

        static uint adtmp = 0;

//        char adtm = adtmfp;

        if(chkices1)

        {   //上升沿被捕捉到,此时是开始进行转换

                clrices1;

                adtmp = ICR1 + 10001;

        }      

        else

        {//下降沿被捕捉到,此时是转换结束。

                setices1;

                adtmp = ICR1 - adtmp;

//                if(adtmp > 20000)

//                {

//                        adtmp = 20000;

//                }

                adval = adtmp;

                if(!(testpol))

                {

                        adval = -adval;

                }

//                if(adbak != adval)

                {

                        adbak = adval;

                        setbadchg;//这样在每次采样完成均会通知主程序进行一次检测判断

                }

        }

}

这里是真正的中断部分,这里会每次完成采样后通知主程序一次,由主程序来处理数据。

出0入0汤圆

发表于 2007-4-28 10:37:15 | 显示全部楼层
我推荐一个16位AD,ADS1100!只有6个引脚。

出0入0汤圆

发表于 2007-4-28 13:36:52 | 显示全部楼层
价格呢?精度能够达到多少?基准电源是多少的?外置还是内置?要不帮忙发个手册链接吧。这估计是个串行的AD转换器。

出0入0汤圆

 楼主| 发表于 2007-4-28 18:50:54 | 显示全部楼层
先谢谢ssyniuej,我再好好看看

出0入0汤圆

 楼主| 发表于 2007-4-28 20:48:26 | 显示全部楼层
250KHz时钟频率是想兼顾它的精度,每秒转换6次左右,ssyniuej你的注释已经很详细了,但是小弟还是有点不明白,希望能得到你的指点,

adtmp = ICR1 + 10001; 上升沿被捕捉到时,为什么还要+10001,而不是-10001呢?



setbadchg;//这样在每次采样完成均会通知主程序进行一次检测判断?不是很清楚

还有BUSY连接到ICP1脚的吧?

出0入0汤圆

发表于 2011-11-5 17:58:28 | 显示全部楼层
1. Auto-Zero Phase.
2. Signal Integrate Phase.
3. Deintegrate Phase.
4. Zero Integrator Phase. this phase requires 100 to 200
clock pulses. However, after an over-range conversion, 6200 pulses are required.

关键是上面的第4个

请教7135 AD一次所花费的周期数究竟是多少?文档上说是10001 + 10000 + 20001,但又说在量程内第四阶段100-200,如果超量程是6200个,所以如果把超量程情况考虑在内,是不是测一次最多的周期数是10001 + 10000 + 20001 +6200了?还是6200已经包括在20001里面了?

出0入0汤圆

发表于 2011-11-23 17:13:51 | 显示全部楼层
mark

出0入0汤圆

发表于 2017-12-29 19:38:50 | 显示全部楼层
测量一些内阻很高的微弱信号还是用积分式AD好!如测量管道电位等

出0入0汤圆

发表于 2018-5-2 12:05:32 | 显示全部楼层
void int0() interrupt 0 using 1                  //中断读ICL7135计数值
{  //unsigned char tmp;
   //RUN_HOLD =0;
   TR0=0;
  /* adc=TH0;
   ADC_ICL7135=adc*256+TL0;       
   */
   ((unsigned char *)&ADC_ICL7135)[1]=TL0;
   ((unsigned char *)&ADC_ICL7135)[0]=TH0;
   TL0=0X00;
   TH0=0X00;
  // RUN_HOLD =1;
adc_cbdv=(ADC_ICL7135-10001);    //转换BCD码  
}
51写的作参考

出0入0汤圆

发表于 2018-5-2 12:06:55 | 显示全部楼层
本帖最后由 gaobao_1 于 2018-5-2 12:08 编辑

主要是电路要搭对,好多书上有,网上也有电路
void  init(void)           //系统初始化
{//        CLK_DIV=0x01;    //时钟1/2分频 用lcm061a时用
    AUXR=0x40;//1T
        WAKE_CLKO=(WAKE_CLKO|0x02);//  启动p1.1输出
        TMOD=0x2d;  //        T1 8bit重装模式          T0为计数模式
        TL1=0XF4;         //0xf4=250khz
        TH1=0XF4;         //0XFA=500KHZ
        TR1=1;                        //启动T1
        TL0=0X00;
        TH0=0X00;
    EA=1;
    EX0=1;                  //
    IT0=1;             //下降沿触发
        TR0=1;
}
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-3-30 08:30

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

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