3546|5

58

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

哪位用过ADS1112啊?我在调的过程中发现只能单步调,不能全速运行! [复制链接]

我用PIC18F4685 的I/O口仿真I2C连接ADS1112,4M晶振. 14位
调的过程中发现单步能调通,但是不能全速运行

各位高手,帮帮忙,提个建议 !

最新回复

用PIC的片子,我从来没有享受过在线仿真的感觉 555555555555555555555 更多的是得静下心来根据协议掐时序....  详情 回复 发表于 2007-6-4 09:04
点赞 关注

回复
举报

57

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
这种情况大多是时序不匹配,程序全速时跑得太快了,仔细看Datasheet,在关键点加延时。
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
继续 追问.谢谢!
问题怎么解决呢?
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(高级)

4
 
你把你的程序贴出来我再看吧!!
ad转换那部分
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

5
 
原程序是用I/O口模拟的I2C代码如下:
在应用调用的时候使用:double angle_process(unsigned char command)其中command是对应的指令值.我使用44来采集第一通道,64来采集第二通道.
代码:

#define P1         0.000641667                        //P1=2.048/8192*(3+4.7)/3=0.000641667采用14位

/*
////////////////////////////////////////////////////////////////////////////////////////////
函数功能:I2C起动,注意起动前,保证scl=1,data=1,data =>out(i/o输出)
*/
void     ads1112_start(void)
{  
        scl        =        1;                                //scl为高电平
        io_data        =        0;                        //数据线设置为输出
        out_data        =        1;
        time_delay_us(2);
        out_data        =        0;   
        time_delay_us(2);
        scl        =        0;
        time_delay_us(2);
}
/*
////////////////////////////////////////////////////////////////////////////////////////////
函数功能:I2C停止
*/
void     ads1112_stop(void)
{               
  io_data        =        0;                        //数据线设置为输出
  out_data=0;
  time_delay_us(2);        
  scl=1;
  time_delay_us(2);
  out_data=1;
  time_delay_us(2);
}
/*
////////////////////////////////////////////////////////////////////////////////////////////
函数功能:i2c从器件(ads1100) 应答
*/
BYTE    ackby_ads1112(void)
{                        
        UCHAR times=0;

        out_data        =        1;
        io_data        =        1;                        //数据线设置为输入
        time_delay_us(2);         
        scl=1;  
        while((out_data==1)&&(times<100))           //wait for ads ack   data=0
        {
                times++;
        }
        scl=0;                  //ready for next
        time_delay_us(2);                              
        if(times>100)
                return 0;         
        else
                return 1;
}
/*
////////////////////////////////////////////////////////////////////////////////////////////
函数功能:主机应答
////////////////////////////////////////////////////////////////////////////////////////////
*/   
void     ackby_master(void)
{

        scl=0;
        io_data        =        0;                        //数据线设置为输出
        out_data=0;
        time_delay_us(2);         
        scl=1;         //wait for ads1112 receive
        time_delay_us(2);                  
        scl=0;     //ready for next
        time_delay_us(2);           
}      

/*========================================================================================
函数功能:向I2C从器件发送一帧(8bit)
=========================================================================================*/
void  send_frame(UCHAR framedata)
{
        unsigned char i;   

        scl=0;
        io_data        =        0;                        //数据线设置为输出
        time_delay_us(2);
  
  for(i=0;i<8;i++)
  {  
     scl=0;            
     if(  ( (framedata << i) & 0x80) ==0 )
     {
         out_data=0;
     }            
     else
     {
         out_data=1;
     }      
    time_delay_us(1);      //稳定数据   
     scl=1;         
     time_delay_us(1);            
  }                                                   
  scl=0;           
}  
/*===============================================================
函数功能:向I2C从器件读取一帧(8bit)
===============================================================*/
BYTE    read_frame(void)
{  
        unsigned char data=0,i;

        scl=0;
        io_data        =        1;                        //数据线设置为输入   
        time_delay_us(1);            //wait for ads ready data

        for(i=0;i<8;i++)
        {
                 scl=1;
                 data=data<<1;            //bit0=0
                 time_delay_us(1);       //等待数据稳定
                 if(out_data==1)
                 {
                        data=data+1;
                 }
                 scl=0;               
                time_delay_us(1);         //wait for ads ready data
        }                 
        return data;
}
/*
////////////////////////////////////////////////////////////////////////////////////////////
函数功能:写一个命令码到ADS1112
*/
void     ads1100_write(unsigned char addr,unsigned char command)
{
        //addr=0x90;                          //1001(固定) 000(器件编号) 0(写)
        ads1112_start();
        send_frame(addr);
        ackby_ads1112();
        send_frame(command);       
        ackby_ads1112();
        ads1112_stop();
}


/*
////////////////////////////////////////////////////////////////////////////////////////////
函数功能:读写一次转换数据从ADS1112
参数说明:addr器件地址
////////////////////////////////////////////////////////////////////////////////////////////
*/
unsigned int     ads1100_read(unsigned char addr)
{
        UINT  data;
        BYTE datah,datal,datac;

//        addr=0x91;                          //1001(固定) 000(器件编号) 1(读)           
        ads1112_start();   
        send_frame(addr);
        ackby_ads1112();

        datah=read_frame();
        ackby_master();

        datal=read_frame();
        ackby_master();

        datac=read_frame();  
        ackby_master();

        ads1112_stop();

        data=(((UINT)datah)<<8) +(UINT)datal;
        return data;
}
/*
////////////////////////////////////////////////////////////////////////////////////////////
函数功能:进行一次角度转换处理,对角度传感器分别顺序采集AIN0,AIN1通道,然后进行电压转角度处理,
*/
double angle_process(unsigned char command)
{
        UINT  codetmp;
        double adcount;

        TRISEbits.TRISE0        =        0;
        PORTEbits.RE0        =        1;//启动ad
        time_delay_us(10);
        ads1100_write(0x90,command);        //准备处理AIN0或AIN1通道
        codetmp        =        ads1100_read(0x91);//读一次AD转换
        adcount        =        (double)(codetmp*P1);//(double)P);
        return(adcount);
}

 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

6
 
用PIC的片子,我从来没有享受过在线仿真的感觉


555555555555555555555

更多的是得静下心来根据协议掐时序....
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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