【赚周年币】技术贴-----(9)Fireduino 的I2C接口学习
#线上活动
2584 人阅读
|
6 人回复
|
2016-12-13
TA的每日心情 | 奋斗 2020-5-27 15:41 |
|---|
签到天数: 868 天 连续签到: 1 天 [LV.10]以坛为家III
进士
- 积分
- 2900
    

|
|
本帖最后由 wambob 于 2016-12-13 20:40 编辑
I2C是一种多向控制总线,也就是说多个芯片可以连接到同一总线结构下,同时每个芯片都可以作为实时数据传输的控制源。
I2C串行总线一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL。所有接到I2C总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。任何设备都可以作为主设备,也可以作为从设备,主要看发起传输的是哪一个设备。由于I2C有寻址、起始、应答、结束等等机制,所以很容易区分主从设备。
Fireduino 有2个I2C接口,只支持Master 模式。一个用来读取板上的RTC时钟芯片,一个引出到Arduino接口。
NXP生产的LM75数字温度传感器,是一款内置带隙温度传感器和∑-Δ模数转换功能的温度数字转换器,它也是温度检测器,可提供过热输出功能。详情见
。
I2C地址由三位管脚逻辑电平决定,在I2C总线上最多可以使用相同的器件8个。
典型的应用电路:
读取温度时序图:
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:- void begin();
- void end();
- void beginTransmission(uint8_t);
- void beginTransmission(int);
- uint8_t endTransmission(void);
- uint8_t endTransmission(uint8_t);
- uint8_t requestFrom(uint8_t, uint8_t);
- uint8_t requestFrom(uint8_t, uint8_t, uint8_t);
- uint8_t requestFrom(uint8_t, uint8_t, uint32_t, uint8_t, uint8_t);
- uint8_t requestFrom(int, int);
- uint8_t requestFrom(int, int, int);
复制代码 打开1.6.8的IDE例程ADXL345,编辑代码- #include <Wire.h> //璋冪敤arduino鑷甫鐨??C??
- int LM75_address = 0x90>>1; //LM75的7位地址??float L75_Temp;
- float L75_Temp;
- void LM75A_Temp(void)
- {
- uint8_t Temp_Data[2]={0};
- uint16_t Temp;
- Wire.beginTransmission(LM75_address);
- Wire.write(0x00);
- Wire.endTransmission();
- Wire.requestFrom(LM75_address,2);
- if(Wire.available()<=2);
- {
- Temp_Data[0]= Wire.read();
- Temp_Data[1] = Wire.read();
- }
- Temp=(uint16_t)Temp_Data[0];
- Temp=(Temp<<8|Temp_Data[1])>>5;
- if(!(Temp_Data[0]&0x80))
- {
- L75_Temp=Temp*0.125;
- Serial.println(L75_Temp);
- }
- else
- {
- L75_Temp=(0x800-Temp)*0.125;
- Serial.println(L75_Temp);
- }
- }
- void setup()
- {
- Serial.begin(9600);
- delay(100);
- Serial.println("setup");
- Wire.begin(); //鍒濆鍖??C
- delay(100);
- Wire.beginTransmission(LM75_address);
- Wire.write(0x00);
- Wire.endTransmission();
- }
-
- void loop()
- {
- LM75A_Temp();
- delay(1000);
- }
复制代码
测试的室内温度是9点多度,用打火机火焰靠近传感器,温度上升。
|
评分
-
查看全部评分
|
|
|
|
|
|
|
|
TA的每日心情 | 衰 2025-9-24 08:50 |
|---|
签到天数: 1493 天 连续签到: 1 天 [LV.10]以坛为家III
翰林
- 积分
- 13489
  
|
沙发
wudianjun2001
发表于 2016-12-14 08:30:57
|
只看该作者
|
|
|
|
|
|
|
|
TA的每日心情 | 擦汗 2017-10-15 13:21 |
|---|
签到天数: 183 天 连续签到: 1 天 [LV.7]常住居民III
进士
- 积分
- 1300
|
板凳
jackten
发表于 2016-12-14 09:27:38
|
只看该作者
|
|
|
|
|
|
|
|
TA的每日心情 | 开心 2021-12-10 15:56 |
|---|
签到天数: 2675 天 连续签到: 1 天 [LV.Master]伴坛终老
翰林
- 积分
- 19429
   
|
地板
slotg
发表于 2016-12-14 11:21:50
|
只看该作者
|
|
|
|
|
|
|
|
TA的每日心情 | 开心 2018-6-12 14:05 |
|---|
签到天数: 76 天 连续签到: 1 天 [LV.6]常住居民II
举人
- 积分
- 994
|
5#
baicaiaichibaicai
发表于 2016-12-14 11:39:49
|
只看该作者
|
|
|
|
|
|
|
|
TA的每日心情 | 开心 21 秒前 |
|---|
签到天数: 4273 天 连续签到: 2 天 [LV.Master]伴坛终老
司徒
- 积分
- 49099
    

|
6#
toofree
发表于 2016-12-14 13:05:39
|
只看该作者
|
|
|
|
|
|
|
|
TA的每日心情 | 奋斗 2020-5-27 15:41 |
|---|
签到天数: 868 天 连续签到: 1 天 [LV.10]以坛为家III
进士
- 积分
- 2900
    

|
7#
wambob
发表于 2016-12-14 14:06:51
|
只看该作者
toofree 发表于 2016-12-14 13:05 ![]()
Wire.h 是个好东西
的确好,封装了的I2C协议,省事 |
|
|
|
|
|
|
|
|