5424|4

81

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

ADS1110 程序调试问题 [复制链接]

ADS1110是IIC接口的AD芯片,我用430单片机控制,采用模拟IIC时序的方式,但只能得到第一个输出数据,第二个和第三个都是FF,请高手指导!
void ads_write(unsigned char write_data)
// 在指定地址addr处写入数据write_data
{  
start();
shout(0x94);
clock_ads();
shout(write_data);
clock_ads();
stop();

}



void ads_read(void)
// 读转换数据
{
start();
shout(0x95);
clock_ads();
ads1110_data[0] = shin();
ads1110_data[1] = shin();
ads1110_data[2] = shin();
stop();
}
其他程序肯定没有问题,希望指导指导!谢谢!

最新回复

问题解决了 谢谢苹果  详情 回复 发表于 2010-1-18 20:19
点赞 关注

回复
举报

85

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
// This module is ADS1110 Driver
#include
#include "430i2c.h"



void InitI2cPort(void)
{
        P2DIR |=SCL;//Set SDA and SCL to output mode
        P1DIR |=SDA;
        P2OUT |=SCL;//SDA=1,SCL=1.
        P1OUT |=SDA;
}
void I2C_delay(void)
{ unsigned char i;
        for (i=0;i<2;i++);
}
void i2c_clock(void)
{
        P2OUT &=~SCL;//SCL=0
        I2C_delay();
        P2OUT |=SCL;//SCL=1
        I2C_delay();
        P2OUT &=~SCL;//SCL=0
}
/* Generate a ACK */
/* The Master Send  a ACK to device*/
void ack(void)
{
        P2OUT &=~SCL;//SCL=0
        I2C_delay();
        SDA_OUT;//SDA output mode               
        P1OUT &=~SDA;//SDA=0;
        I2C_delay();
        P2OUT |=SCL;// SCL=1
        I2C_delay();
        P2OUT &=~SCL;//SCL=0
        SDA_IN;// SDA input mode
}
/*Receive device sending a ack*/
void RcvAck(void)
{
    SDA_IN;
    I2C_delay();
    P2OUT |=SCL;
    I2C_delay();
    P2OUT &=~SCL;
    SDA_IN;
}
   
/* The Master send a NACK to device*/
/* Generate a NACK */
void nack(void)
{
        SDA_OUT;
      P2OUT |=SDA;//SDA=1
      I2C_delay();
      P2OUT |=SCL;//SCL=1
      I2C_delay();
      P2OUT &=~SCL;//SCL=0
      SDA_IN;
}
//Waiting for a ACK from device
void wait_ack(void)
{
        unsigned char i;
        SDA_IN;
        I2C_delay();
        P2OUT |=SCL;//SCL=1
        I2C_delay();
        i=0x0FF;
        do
        {
        }
        while(--i!=0);
        P2OUT &=~SCL;//SCL=0;
        SDA_OUT;
}
/*Start I2C BUS */
void start_i2c(void)
{
        SDA_OUT;
      P1OUT |=SDA;//SDA=1
      P2OUT |=SCL;// SCL=1
        I2C_delay();
      P1OUT &=~SDA;//SDA=0
      I2C_delay();
      P2OUT &=~SCL;// SCL=0;
}
/* Stop I2C BUS*/
void stop_i2c(void)
{
        SDA_OUT;
      P1OUT &=~SDA;//SDA=0
      I2C_delay();
      P2OUT |=SCL;//SCL=1
      I2C_delay();
      P1OUT |=SDA;//SDA=1
}
/* Send one unsigned char data to I2C Bus */
/* Inport: unsigned char data*/
/* Return : none*/
void outbyt(uchar i2c_data)
{
    unsigned char i;
            SDA_OUT;
      for(i=0;i<8;i++)
      {
                if(i2c_data&0x80)
                 {       
                         P1OUT |=SDA;//SDA=1
                 }
                   else
                   {
                           P1OUT &=~SDA;//SDA=0
                   }       
         i2c_clock();
         i2c_data <<=1;
      }
}
/* Read a byte Data from I2c device*/
uchar inbyt(void)
{
   unsigned char i,i2c_data,TmpIn;
           SDA_IN;//SDA turn to input mode
      i2c_data=0;
      i=8;
      while(i--)
      {
                 i2c_data<<=1;
                P2OUT &=~SCL;//SCL=0
                 I2C_delay();
                 P2OUT |=SCL;//SCL=1
                 TmpIn=P1IN;
                 TmpIn &=SDA;
                 TmpIn >>=2;
                 i2c_data|=TmpIn;
                 I2C_delay();
     }
     P2OUT &=~SCL;//SCL=0
       return(i2c_data);
}
/*Write ADS1110 Configuration Register*/
// Inport: Value of Configuration Register
// Return :none
void WriteCfgReg(uchar CfgData)
{
        start_i2c();
        outbyt(I2C_WRITE);
        wait_ack();
        outbyt(CfgData);
        wait_ack();
        stop_i2c();
}
// Read data from ADS1110 Data register
uint ReadDataCfgReg(uchar ReadType )
{
        uint Tmp,Tmp1;
        start_i2c();
        outbyt(I2C_READ);
        RcvAck();
        Tmp=inbyt()*0x100;
        ack();
        Tmp+=(inbyt());
        ack();
        Tmp1=inbyt();
        ack();
        stop_i2c();
        if(ReadType==READ_DATA)
        {
            if(Tmp >0x7FFF)
            {
                Tmp=0x0000;
                return(Tmp);
            }
            else
            {
                return(Tmp);
            }
               
        }
        else
        {
                return(Tmp1);
        }
}
先给个参考
 
 

回复

56

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
MARK啦, 苹果牛啊;全面!
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

4
 
mark!呵呵!
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(中级)

5
 
问题解决了 谢谢苹果
 
 
 

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

随便看看
查找数据手册?

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
快速回复 返回顶部 返回列表