ADI 技术
直播中

周勇

7年用户 186经验值
私信 关注
[问答]

请教关于ADT7420调试的问题

第一次用ADT7420,然后用的是之前就已经做好的模拟I2C的程序,之后也是按照数据手册的读写时序来做的。但是根本联不通,I2C两个引脚都是10K上拉,芯片17也接地了。
不知道是哪里的问题,就换成了官方历程的I2C时序,但是还是,我来贴出我的代码,望指正。

#define    ADT7420_ADDR         0x48         // Æ÷¼þ´ÓµØÖ·  A1:A0Ϊ 00   
//#define    ADT7420_ADDR         0x49         // Æ÷¼þ´ÓµØÖ·  A1:A0Ϊ 01
//#define    ADT7420_ADDR         0x4A         // Æ÷¼þ´ÓµØÖ·  A1:A0Ϊ 10
//#define    ADT7420_ADDR         0x4B         // Æ÷¼þ´ÓµØÖ·  A1:A0Ϊ 11


#define ADT7420_I2C_IO_SDA           (1 << 4)          //  ADT7420_I2C_IO_SDA  P0.4¹Ü½Å
#define ADT7420_I2C_IO_SCL           (1 << 0)         //   ADT7420_I2C_IO_SCL  P0.0¹Ü½Å




#define  ADT7420_I2C_SDA_HIGH()     LPC_GPIO_PORT->PIN[0] |=  ADT7420_I2C_IO_SDA//MCU824 -> SDA   ¸ß
#define  ADT7420_I2C_SDA_LOW()     LPC_GPIO_PORT->PIN[0] &= ~ADT7420_I2C_IO_SDA  //MCU824 -> SDA   µÍ
#define  ADT7420_I2C_SCL_HIGH()     LPC_GPIO_PORT->PIN[0] |=  ADT7420_I2C_IO_SCL//MCU824 -> SCL   ¸ß
#define  ADT7420_I2C_SCL_LOW()     LPC_GPIO_PORT->PIN[0] &= ~ADT7420_I2C_IO_SCL//MCU824 -> SCL   µÍ



#defineADT7420_I2C_SDA_V()             ((LPC_GPIO_PORT->PIN[0] & ADT7420_I2C_IO_SDA) >>4)   //SDAÖµ

                                   
#define ADT7420_I2C_SDA_IN()             LPC_GPIO_PORT->DIR[0] &=  ~ADT7420_I2C_IO_SDA;// SDA¸ÄIN
#define ADT7420_I2C_SDA_OUT()            LPC_GPIO_PORT->DIR[0] |=   ADT7420_I2C_IO_SDA;// SDA¸ÄOUT
#define ADT7420_I2C_SCL_OUT()            LPC_GPIO_PORT->DIR[0] |=   ADT7420_I2C_IO_SCL;// SCL¸ÄOUT

void ADT7420_I2C_Start (void)   
{
  
// ADT7420_I2C_SDA_OUT();
// ADT7420_I2C_SCL_OUT();
  ADT7420_I2C_SDA_HIGH();
  Delay_10us(5);
  ADT7420_I2C_SCL_HIGH();
  Delay_10us(5);
  ADT7420_I2C_SDA_LOW();   //¿ªÊ¼Ìõ¼þ

}


/******************************************************
**º¯Êý£ºADT7420_I2C_StopCondition(void)         
**      I2C½áÊøÌõ¼þ
**      SCLΪ¸ßʱ£¬SDAÓɵ͵½¸ßÌø±ä
*******************************************************/


void ADT7420_I2C_Stop (void)
{
// ADT7420_I2C_SDA_OUT();
// ADT7420_I2C_SCL_OUT();

  ADT7420_I2C_SDA_LOW();
  Delay_10us(5);
  ADT7420_I2C_SCL_HIGH();
  Delay_10us(5);
  ADT7420_I2C_SDA_HIGH();  //ÖÕÖ¹Ìõ¼þ
}


/***********************************************************************************
º¯Êý£º void ADT7420_I2C_Send_ACK ( int ack )
¹¦ÄÜ£º I2C ·¢³öACKÐźţ¨¶ÁÊý¾ÝʱʹÓã©          -----
SCL
      -----      -----
SDA
      -----
***********************************************************************************/


void ADT7420_I2C_Send_ACK ( uint8_t ack )
{
// ADT7420_I2C_SDA_OUT() ;
// ADT7420_I2C_SDA_LOW();
  ADT7420_I2C_SCL_LOW();
  if(ack)
  ADT7420_I2C_SDA_HIGH();
  else
  ADT7420_I2C_SDA_LOW();
  Delay_10us(5);
  ADT7420_I2C_SCL_HIGH();
  Delay_10us(5);
}


uint8_t ADT7420_I2C_Read_ACK (void)
{
  int i = 1 ;
  uint8_t ack;
  uint8_t error;
  ADT7420_I2C_SDA_IN();
  ADT7420_I2C_SCL_LOW();
  if(ADT7420_I2C_SDA_V())
    ack=1;
  else
  ack=0;
  while (( ADT7420_I2C_SDA_V() != 0 )  && ( i<= 50) )                 //   ACK УÑé   µÃ  i=1ʱ£¬¾Í¿ÉÌø³öÑ»·
  {
  i++ ;
  Delay_10us(1);
  if (i==50)
  error = ACK_ERROR ;
  }
  Delay_10us(5);
  ADT7420_I2C_SCL_HIGH();
  Delay_10us(5);

  ADT7420_I2C_SDA_OUT() ;

  return error ;
}


/*********************************************************************
º¯Êý£ºADT7420_I2C_WriteByte()                  
¹¦ÄÜ£ºÏòI2C×ÜÏßд1¸ö×Ö½ÚµÄÊý¾Ý
²ÎÊý£º
    dat£ºÒªÐ´µ½×ÜÏßÉϵÄÊý¾Ý
*********************************************************************/


void ADT7420_I2C_Send_byte ( uint8_t data )
{
  uint8_t i ;

  ADT7420_I2C_SDA_OUT() ;
  ADT7420_I2C_SCL_OUT() ;

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


  if((data & 0x80)==0x80)
  ADT7420_I2C_SDA_HIGH();
  else
  ADT7420_I2C_SDA_LOW();
  Delay_10us(2);


  ADT7420_I2C_SCL_HIGH();

  data = (data << 1);

  Delay_10us(5);
  }       //Êä³ö×Ö½Ú
}


/******************************************************************
º¯Êý£ºADT7420_I2C_ReadByte()              
¹¦ÄÜ£º´Ó´Ó»ú¶ÁÈ¡1¸ö×Ö½ÚµÄÊý¾Ý
·µ»Ø£º¶ÁÈ¡µÄÒ»¸ö×Ö½ÚÊý¾Ý
******************************************************************/


uint8_t ADT7420_I2C_Read_byte (void)
{
  uint8_t i;


  uint8_t data=0 ;
// ADT7420_I2C_SCL_OUT();
  ADT7420_I2C_SDA_IN();
  for(i=0;i<8;i++)
  {
  ADT7420_I2C_SCL_LOW();
  data = (data << 1);
  Delay_10us(5);
  if(ADT7420_I2C_SDA_V())
  {
  data |= 0x01;
  }
  else
  {
  data &= ~0x01;
  }


  ADT7420_I2C_SCL_HIGH();
  Delay_10us(5);
  }

  ADT7420_I2C_SDA_OUT();

  return data ;

}


unsigned char ReadFromADT7420ViaI2C(unsigned char Dads)
{
  unsigned char   i;
  unsigned char Value;


  ADT7420_I2C_Start();


  WriteToADT7420Byte(0x90);
  WriteToADT7420Byte(Dads);  //Êä³öоƬдµØÖ·ºÍ¼Ä´æÆ÷µØÖ·

  ADT7420_I2C_Start();

  WriteToADT7420Byte(0x91);  //Êä³öоƬ¶ÁµØÖ·

  Value=ADT7420_I2C_Read_byte();

  ADT7420_I2C_Send_ACK(0);

  ADT7420_I2C_Stop();


  return  Value;
}

回帖(1)

赵阳

2018-7-24 07:17:51
您好,ADTXXXX系列产品的应用问题请在咱们英文社区发帖提问
Data Converters | EngineerZone
举报

更多回帖

发帖
×
20
完善资料,
赚取积分