已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也

今天经过测试,前面那份程序终于调通了一个字节的读写。

连续读取还没整明白。

上程序:

#define CapDacvalue  4.97

#define SCL 21

#define SDA 20



byte SCLState = LOW;     


byte IIC_Flag=0;

byte interval = 1;

int previousMillis = 0; 


void IIC_Init(void)     

{

  /*                                             

        GPIO_InitTypeDef GPIO_InitStructure;

        

        RCC_APB2PeriphClockCmd(        RCC_APB2Periph_GPIOC, ENABLE );       

          

        GPIO_XXXXXXXXXXXXXXXXIO_Pin = GPIO_Pin_12|GPIO_Pin_11;

        GPIO_XXXXXXXXXXXXXXXXIO_Mode = GPIO_Mode_Out_PP ;   

        GPIO_XXXXXXXXXXXXXXXXIO_Speed = GPIO_Speed_50MHz;

        GPIO_Init(GPIOC, &GPIO_InitStructure);

  */

        digitalWrite(SCL,1);//IIC_SCL=1;

        digitalWrite(SDA,1);//IIC_SDA=1;

}


void IIC_Start(void)

{   

        pinMode(SDA, OUTPUT);

        digitalWrite(SDA,1);//IIC_SDA=1;

        digitalWrite(SCL,1);//IIC_SCL=1;

        delayMicroseconds(40);//uS

        digitalWrite(SDA,0);//IIC_SDA=0;

        delayMicroseconds(40);

        digitalWrite(SCL,0);//IIC_SCL=0;

}          


void IIC_Stop(void)

{

        pinMode(SDA, OUTPUT);

        digitalWrite(SCL,0);//IIC_SCL=0;

        digitalWrite(SDA,0);//IIC_SDA=0;

        delayMicroseconds(40);//uS

        digitalWrite(SCL,1);

        digitalWrite(SDA,1);

        delayMicroseconds(40);//uS                                                                 

}


byte IIC_Wait_Ack(void)

{

        byte ucErrTime=0;

        pinMode(SDA, OUTPUT);    

        digitalWrite(SDA,1);

        delayMicroseconds(10);//uS        

        digitalWrite(SCL,1);

        delayMicroseconds(10);//uS   

        pinMode(SDA, INPUT); 

        digitalWrite(SDA,1);      

        while(digitalRead(SDA))

        {

                ucErrTime++;

                delayMicroseconds(10);//uS   

                if(ucErrTime>250)

                {

                        IIC_Stop();

                        //XXXXXXXXXintln("No ACK");

                        return 1;

                }

        }

        digitalWrite(SCL,0);//IIC_SCL=0;

        return 0;  

}


void IIC_Ack(void)

{

        digitalWrite(SCL,0);//IIC_SCL=0;

        pinMode(SDA, OUTPUT);//SDA_OUT();

        digitalWrite(SDA,0);//IIC_SDA=0;

        delayMicroseconds(20);//uS    

        digitalWrite(SCL,1);

        delayMicroseconds(20);//uS    

        digitalWrite(SCL,0);

}

              

void IIC_NAck(void)

{

        digitalWrite(SCL,0);//IIC_SCL=0;

        pinMode(SDA, OUTPUT);//SDA_OUT();

        digitalWrite(SDA,1);//IIC_SDA=1;

        delayMicroseconds(20);//uS 

        digitalWrite(SCL,1);//IIC_SCL=1;

        delayMicroseconds(20);//uS 

        digitalWrite(SCL,0);//IIC_SCL=0;

}                                                                              

                    

void IIC_Send_Byte(byte txd)

{                        

    byte t;   

    pinMode(SDA, OUTPUT);//SDA_OUT();           

    digitalWrite(SCL,0);//IIC_SCL=0;

    for(t=0;t<8;t++)

    {              

        digitalWrite(SDA,(txd&0x80)>>7);//IIC_SDA=(txd&0x80)>>7;

        txd<<=1;           

                delayMicroseconds(20);//uS  

                digitalWrite(SCL,1);//IIC_SCL=1;

                delayMicroseconds(20);//uS 

                digitalWrite(SCL,0);//IIC_SCL=0;     

                delayMicroseconds(20);//uS 

    }         

}             


unsigned char IIC_Read_Byte(unsigned char ack)

{

    unsigned char i,receive=0;

    pinMode(SDA, INPUT);

    digitalWrite(SCL,0);//IIC_SCL=0;

    digitalWrite(SDA,1);//IIC_SDA=1;

    // XXXXXXXXXintln("IIC Reading Byte");

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

        {

        digitalWrite(SCL,0);//IIC_SCL=0

        delayMicroseconds(20);//uS 

        digitalWrite(SCL,1);//IIC_SCL=1;

        receive<<=1;

        //XXXXXXXXXintln(receive,HEX);

        if(digitalRead(SDA))

        receive++;   

        delayMicroseconds(10);//delay_us(1);

    }                                         

    if (!ack)

        IIC_NAck();

    else

        IIC_Ack(); 

    return(receive);

}

unsigned char IICWatask2(void)  ///????,master wait for the ack, 

{

     unsigned char i=0;

     unsigned char flag=0x01;

     pinMode(SDA, OUTPUT);

     digitalWrite(SCL,0);//IIC_SCL=0;

     delayMicroseconds(20);//uS 

     digitalWrite(SDA,1);//IIC_SDA=1;

     digitalWrite(SCL,1);//IIC_SCL=1;

     delayMicroseconds(60);//delay_us(6);

     pinMode(SDA, INPUT);

     while(digitalRead(SDA)&&(i<250))///????while((IIC_SDA==1)&&(i<250)) could just use a delay?

      {

        i++;

        delayMicroseconds(20);//uS 

      }

      flag=digitalRead(SDA);//flag=IIC_SDA;

      digitalWrite(SCL,0);//IIC_SCL=0;

     return(flag);// 如果flag返回为0,主机没动过SDA电平,那只能是总线上有从机动了SDA意味着有反馈信号。

}


void IICSendask(void)

{

  pinMode(SDA, OUTPUT);

  digitalWrite(SDA,0);//IIC_SDA=0;

  delayMicroseconds(30);//delay_us(3);

  digitalWrite(SCL,1);//IIC_SCL=1;

  delayMicroseconds(60);//delay_us(6);

  delayMicroseconds(20);//delay_us(2);

  digitalWrite(SCL,0);//IIC_SCL=0;

  digitalWrite(SDA,1);//IIC_SDA=1;

  delayMicroseconds(30);//delay_us(3);

}         

unsigned char IICRECVbyte(void)

{

  unsigned char i;

  unsigned char temp=0;

  pinMode(SDA, OUTPUT);

  digitalWrite(SCL,0);//IIC_SCL=0;

  digitalWrite(SDA,1);//IIC_SDA=1;

  pinMode(SDA, INPUT);

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

    {

      digitalWrite(SCL,1);//IIC_SCL=1;

      delayMicroseconds(50);//delay_us(5);

      temp=temp<<1;

      if(digitalRead(SDA)==1)//IIC_SDA==1

      {

          temp=temp|0x01;

          XXXXXXXXXintln(temp);

      }

      else

      {

          temp=temp&0xfe;

          XXXXXXXXXintln(temp);

      }

      digitalWrite(SCL,0);//IIC_SCL=0;

     }

    return(temp);

}



void AD7745_RESET(void)

{

  IIC_Start();

  IIC_Send_Byte(0xBF); // accroding to the reset method

  IIC_Stop();

}


unsigned char SETUP_7745(unsigned char addr,unsigned char value)   

{

unsigned char flag;

flag=0x01;

IIC_Start();

IIC_Send_Byte(0x90);

if(IIC_Wait_Ack()!=0)//(IICWatask2()!=0)

    {

      flag=1;

      //XXXXXXXXXint("NoAck");

      return(flag);

    }

else

    {

      flag=0;

      //XXXXXXXXXint("Acked");

    }

IIC_Send_Byte(addr);

if(IIC_Wait_Ack()!=0)

    {

      flag=1;

      //XXXXXXXXXint("NoAck");

      return(flag);

    }

else

    {

      flag=0;

      //XXXXXXXXXint("Acked");

    }

IIC_Send_Byte(value);

if(IIC_Wait_Ack()!=0)

    {

      flag=1;

      //XXXXXXXXXint("NoAck");

      return(flag);

    }

else

    {

      flag=0;

      //XXXXXXXXXint("Acked");

    }

IIC_Stop();

return(flag);

}


void GET7745value(unsigned char *p,unsigned char addr,unsigned char n)// get a series of value

  unsigned char i;

  unsigned char flagw;

  IIC_Start();

  IIC_Send_Byte(0x90);  

  flagw=IIC_Wait_Ack();

  if(flagw==1)return 0;

  else XXXXXXXXXint(flagw);

  IIC_Send_Byte(addr); //从 Cap Data H开始读取0x01, addr 自定义开始读取的寄存器地址

  flagw=IIC_Wait_Ack();

  if(flagw==1)return 0;

  else XXXXXXXXXint(flagw);

  IIC_Start();

  IIC_Send_Byte(0x91); 

  flagw==IIC_Wait_Ack();

  if(flagw==1)return 0;

  else XXXXXXXXXint(flagw);

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

    { 

       *p=IIC_Read_Byte(1);//指针指向buffer

       if(i!=n-1)

          IICSendask();

       else

          IICSendask();

       p++;

     }

   IIC_Stop();

}



//        #define CapDacvalue  4.

//        capdacreg=(int)((CapDacvalue*0x7F)/17

//  capdacreg=0x80|capdacre

//  AD7745_RESET(

//  SETUP_7745(0x07,0x80

//  SETUP_7745(0x09,0x2B

//  SETUP_7745(0x0A,0xA1

//  SETUP_7745(0x0B,capdacreg); 

//        GET7745value(MRD,3);    


void setup() {

  XXXXXXXXXgin(9600);

  // initialize digital pin  as an output.

  pinMode(SCL, OUTPUT);

  AD7745_RESET();

  delay(1000);

  XXXXXXXXXintln("Reset");

  SETUP_7745(0x07,0x80);

  SETUP_7745(0x08,0x00);

  SETUP_7745(0x09,0x2B);

  SETUP_7745(0x0A,0xA2);

  //int capdacreg=(int)((CapDacvalue*0x7F)/17);

  //capdacreg=0x80|capdacreg;

  //SETUP_7745(0x0B,capdacreg); 

  SETUP_7745(0x0B,0x7E); 

  SETUP_7745(0x0C,0x7F);

  SETUP_7745(0x0D,0x80);

  SETUP_7745(0x0E,0x00);

  //SETUP_7745(0x0F,0x00);// factory calibrated capacitive gain calibration high byte

  //SETUP_7745(0x10,0x00);// factory calibrated capacitive gain calibration low byte

  //SETUP_7745(0x11,0x00);// factory calibrated votage gain calibration high byte 

  //SETUP_7745(0x12,0x00);// factory calibrated votage gain calibration low byte 

  XXXXXXXXXintln("Setup done");

}

// the loop function runs over and over again forever

void loop() {

   byte n=1;//先取1个字节试试

   byte buff[0];//*p指向的缓存区,准备1个字节的空间

   for(byte j=0;j<n;j++)

   {

    buff[j]=0;//清洗缓存区,以免干扰

   }

   unsigned char addr;

   addr=0x01;

   //SETUP_7745(0x0B,0x11);

   GET7745value(buff,addr,n);

   for(byte j=0;j<n;j++)

   {

    XXXXXXXXXint(addr,HEX);//从地址开始的位置为0

    XXXXXXXXXint("   ");

    XXXXXXXXXintln(buff[j],HEX);

    addr++;

   }

   delay(500000);

}

免打字版本:

attachment icon IIC-try3.ino 8.93KB INO 48次下载

18.png

电压给到5V才动起来的,之前给3.3V,总是不对


文号 / 867991

十步芳草
名片发私信
学术分 0
总主题 7 帖总回复 175 楼拥有证书:进士 机友 笔友
注册于 2019-11-04 16:53最后登录 2023-07-25 20:31
主体类型:个人
所属领域:无
认证方式:手机号
IP归属地:浙江

个人简介

自制YBCO中

文件下载
加载中...
{{errorInfo}}
{{downloadWarning}}
你在 {{downloadTime}} 下载过当前文件。
文件名称:{{resource.defaultFile.name}}
下载次数:{{resource.hits}}
上传用户:{{uploader.username}}
所需积分:{{costScores}},{{holdScores}}下载当前附件免费{{description}}
积分不足,去充值
文件已丢失

当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}
视频暂不能访问,请登录试试
仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。
音频暂不能访问,请登录试试
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

插入资源
全部
图片
视频
音频
附件
全部
未使用
已使用
正在上传
空空如也~
上传中..{{f.progress}}%
处理中..
上传失败,点击重试
等待中...
{{f.name}}
空空如也~
(视频){{r.oname}}
{{selectedResourcesId.indexOf(r.rid) + 1}}
处理中..
处理失败
插入表情
我的表情
共享表情
Emoji
上传
注意事项
最大尺寸100px,超过会被压缩。为保证效果,建议上传前自行处理。
建议上传自己DIY的表情,严禁上传侵权内容。
点击重试等待上传{{s.progress}}%处理中...已上传,正在处理中
空空如也~
处理中...
处理失败
加载中...
草稿箱
加载中...
此处只插入正文,如果要使用草稿中的其余内容,请点击继续创作。
{{fromNow(d.toc)}}
{{getDraftInfo(d)}}
标题:{{d.t}}
内容:{{d.c}}
继续创作
删除插入插入
插入公式
评论控制
加载中...
文号:{{pid}}
加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}
ID: {{user.uid}}