1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
第一次用ADT7420,然后用的是之前就已经做好的模拟I2C的程序,之后也是按照数据手册的读写时序来做的。但是根本联不通,I2C两个引脚都是10K上拉,芯片17也接地了。
不知道是哪里的问题,就换成了官方历程的I2C时序,但是还是,我来贴出我的代码,望指正。
#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¹Ü½Å
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个回答
|
||||||||||||||||
|
|
|
|
只有小组成员才能发言,加入小组>>
990 浏览 2 评论
给ADUM4223 增加信号驱动15V电压就不正常, 波动很大会被烧是什么情况?
1384 浏览 2 评论
ADP5092 SYS端口为2.09V,但是REG_OUT为0是什么原因?
1938 浏览 1 评论
ad7193差分输入ain1与ain2差是正值时,读到电压与实际值误差小,但为负值值,误差就变的很大
4269 浏览 2 评论
9060 浏览 1 评论
ADC3442采集,分析数据出现有规则毛刺,请问是哪方面的问题啊?
1520浏览 3评论
AD7190状态寄存器一直是0x80,连续转换模式下RDY不拉低
1692浏览 2评论
990浏览 2评论
1666浏览 2评论
给ADUM4223 增加信号驱动15V电压就不正常, 波动很大会被烧是什么情况?
1384浏览 2评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 19:47 , Processed in 0.721348 second(s), Total 75, Slave 59 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号