查看: 199|回复: 6

[技术] 【赚周年币】技术贴-----(9)Fireduino 的I2C接口学习

[复制链接]

56

主题

1

好友

2087

积分

进士

Rank: 5Rank: 5

  • TA的每日心情
    慵懒
    昨天 08:12
  • 签到天数: 636 天

    [LV.9]以坛为家II

    爱板会员勋章 活跃会员勋章 发帖机器勋章 在线达人勋章

    发表于 2016-12-13 20:03:13 |显示全部楼层
    本帖最后由 wambob 于 2016-12-13 20:40 编辑

            I2C是一种多向控制总线,也就是说多个芯片可以连接到同一总线结构下,同时每个芯片都可以作为实时数据传输的控制源。
           I2C串行总线一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL。所有接到I2C总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。任何设备都可以作为主设备,也可以作为从设备,主要看发起传输的是哪一个设备。由于I2C有寻址、起始、应答、结束等等机制,所以很容易区分主从设备。
          Fireduino 有2个I2C接口,只支持Master 模式。一个用来读取板上的RTC时钟芯片,一个引出到Arduino接口。
    3.JPG
    2.JPG

         NXP生产的LM75数字温度传感器,是一款内置带隙温度传感器和∑-Δ模数转换功能的温度数字转换器,它也是温度检测器,可提供过热输出功能。详情见 LM75A.pdf (137.07 KB, 下载次数: 0)
        I2C地址由三位管脚逻辑电平决定,在I2C总线上最多可以使用相同的器件8个。
    4.JPG

    典型的应用电路:
    6.JPG

    读取温度时序图:
    7.JPG


         Fireduino I2C / TWI 设备库允许Fireduino通过I2C 接口与外设备通信。
         Fireduino wire 库的路径:D:\arduino-1.6.8\portable\packages\Firefly\hardware\arm\1.3.0\libraries\Wire
          Fireduino wire API:
    1. void begin();
    2.     void end();
    3.     void beginTransmission(uint8_t);
    4.     void beginTransmission(int);
    5.     uint8_t endTransmission(void);
    6.     uint8_t endTransmission(uint8_t);
    7.     uint8_t requestFrom(uint8_t, uint8_t);
    8.     uint8_t requestFrom(uint8_t, uint8_t, uint8_t);
    9.         uint8_t requestFrom(uint8_t, uint8_t, uint32_t, uint8_t, uint8_t);
    10.     uint8_t requestFrom(int, int);
    11.     uint8_t requestFrom(int, int, int);
    复制代码
    打开1.6.8的IDE例程ADXL345,编辑代码
    1. #include <Wire.h>  //璋冪敤arduino鑷甫鐨�?C�?
    2. int LM75_address = 0x90>>1;  //LM75的7位地址�?float L75_Temp;
    3. float L75_Temp;
    4. void LM75A_Temp(void)
    5. {  
    6.   uint8_t Temp_Data[2]={0};
    7.   uint16_t Temp;
    8.   Wire.beginTransmission(LM75_address);  
    9.   Wire.write(0x00);  
    10.   Wire.endTransmission();
    11.   Wire.requestFrom(LM75_address,2);
    12.   if(Wire.available()<=2);
    13.   {
    14.     Temp_Data[0]= Wire.read();
    15.     Temp_Data[1] = Wire.read();   
    16.   }  
    17.   Temp=(uint16_t)Temp_Data[0];
    18.   Temp=(Temp<<8|Temp_Data[1])>>5;
    19.   if(!(Temp_Data[0]&0x80))
    20.   {      
    21.       L75_Temp=Temp*0.125;
    22.       Serial.println(L75_Temp);
    23.   }
    24.   else
    25.   {      
    26.       L75_Temp=(0x800-Temp)*0.125;
    27.      Serial.println(L75_Temp);
    28.   }
    29. }
    30. void setup()
    31. {
    32.   Serial.begin(9600);
    33.   delay(100);
    34.   Serial.println("setup");  
    35.   Wire.begin();  //鍒濆鍖�?C
    36.   delay(100);
    37.   Wire.beginTransmission(LM75_address);
    38.   Wire.write(0x00);  
    39.   Wire.endTransmission();
    40. }

    41. void loop()
    42. {
    43.   LM75A_Temp();  
    44.   delay(1000);   
    45. }
    复制代码
    1.JPG

    测试的室内温度是9点多度,用打火机火焰靠近传感器,温度上升。
    已有 1 人评分 收起 理由
    loveeeboard + 20

    总评分:  + 20   查看全部评分

    回复

    使用道具 举报

    1552

    主题

    25

    好友

    9888

    积分

    状元

    Rank: 6Rank: 6

  • TA的每日心情
    奋斗
    昨天 08:29
  • 签到天数: 905 天

    [LV.10]以坛为家III

    活跃会员勋章 发帖机器勋章 在线之王勋章

    发表于 2016-12-14 08:30:57 |显示全部楼层
    不错不错,写的很详细
    回复

    使用道具 举报

    5

    主题

    1

    好友

    993

    积分

    举人

    Rank: 4

  • TA的每日心情
    开心
    1 小时前
  • 签到天数: 105 天

    [LV.6]常住居民II

    发表于 2016-12-14 09:27:38 |显示全部楼层
    谢谢分享                     
    回复

    使用道具 举报

    35

    主题

    3

    好友

    4758

    积分

    状元

    Rank: 6Rank: 6

  • TA的每日心情
    开心
    昨天 00:00
  • 签到天数: 1406 天

    [LV.10]以坛为家III

    爱板会员勋章 活跃会员勋章 在线达人勋章 在线之王勋章

    发表于 2016-12-14 11:21:50 |显示全部楼层
    很详细,感谢分享。
    回复

    使用道具 举报

    28

    主题

    1

    好友

    646

    积分

    举人

    Rank: 4

  • TA的每日心情
    开心
    昨天 11:00
  • 签到天数: 42 天

    [LV.5]常住居民I

    发表于 2016-12-14 11:39:49 |显示全部楼层
    这个写得很详细
    回复

    使用道具 举报

    23

    主题

    0

    好友

    3527

    积分

    状元

    Rank: 6Rank: 6

  • TA的每日心情
    开心
    昨天 00:02
  • 签到天数: 1223 天

    [LV.10]以坛为家III

    爱板会员勋章 活跃会员勋章 发帖机器勋章 在线达人勋章

    发表于 2016-12-14 13:05:39 |显示全部楼层
    Wire.h 是个好东西
    回复

    使用道具 举报

    56

    主题

    1

    好友

    2087

    积分

    进士

    Rank: 5Rank: 5

  • TA的每日心情
    慵懒
    昨天 08:12
  • 签到天数: 636 天

    [LV.9]以坛为家II

    爱板会员勋章 活跃会员勋章 发帖机器勋章 在线达人勋章

    发表于 2016-12-14 14:06:51 |显示全部楼层
    toofree 发表于 2016-12-14 13:05
    Wire.h 是个好东西

    的确好,封装了的I2C协议,省事
    回复

    使用道具 举报

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

    关闭

    站长推荐上一条 /1 下一条

    手机版|爱板网 |网站地图  

    GMT+8, 2017-3-30 01:30 , Processed in 0.220530 second(s), 17 queries , Memcache On.

    苏公网安备 32059002001056号

    Powered by Discuz!

    回顶部