創作內容

12 GP

Arduino I2C 功能實作

作者:貓貓風 ฅ●ω●ฅ│2017-10-19 23:25:43│巴幣:24│人氣:4588
.















I2C 簡介

I2C 念作 I-squared-C  普遍被念作 I Two C 因此將錯就錯就用這種念法

傳輸為半雙工,只需兩條線 SDA 和 SCL

SCL : Serial Clock Line ,在傳輸或接收資料時Clock的震盪為Low

SDA: Serial Data Line,用來傳輸 / 接收 資料,以 Shift的方式來進行傳遞

一次只能傳一個byte



傳輸的前7 Byte 為 Address 接著為 1 byte的 Read / Write

緊接著為 I2C Ack 如果為0表示設定成功

之後為要傳輸的資料 共 8 byte ,如下圖所示




簡單來說就是

Master發起通訊開始

SCL = HIGH   SDA = LOW

在SCL為Low時可以改變資料

然後在 SCL為HIGH時不可改變資料,讓Slave讀取該資料

在全部都傳輸完後  SCL = HIGH   SDA = HIGH


最後為功能實作  ,  原理如上面所敘述

隨意拿一個 I2C Device作通訊測試


  1. #include <Wire.h>  
  2.   
  3. void setup(void){  
  4.       Serial.begin(9600);  
  5.       Serial.println("I2C Test");  
  6.       Wire.begin();  
  7.         
  8.       //write reg  
  9.       I2C_Write(0x10, 0xF1);  
  10.       Serial.print("register 0x10 is ");  
  11.       // print Write Data  
  12.       Serial.println(I2C_Read(0x10), BIN);               
  13.         
  14. }  
  15.   
  16. void loop(void){  
  17.   
  18. }  
  19.   
  20. uint8_t I2C_Read(uint8_t reg)  
  21. {  
  22.       uint8_t chr = 0;  
  23.       Wire.beginTransmission(0x48);  //device address     
  24.       Wire.write(reg);  // read register  
  25.       Wire.endTransmission(false);   
  26.       Wire.requestFrom(0x48, 1, true);    //address, quantity, stop      
  27.       if(Wire.available()){  
  28.             chr = Wire.read();           //data                       
  29.       }
  30.        return  chr ;
  31. }  
  32.   
  33. uint8_t I2C_Write(uint8_t reg, uint8_t data)  
  34. {  
  35.      Wire.beginTransmission(0x48);           //device address    
  36.      Wire.write(reg);                                        // REG  
  37.      Wire.write(data);                                       // DATA  
  38.      Wire.endTransmission(true); // generate stop condition  // STOP  
  39.   
  40. }  

執行結果






引用網址:https://home.gamer.com.tw/TrackBack.php?sn=3760910
All rights reserved. 版權所有,保留一切權利

相關創作

同標籤作品搜尋:涼涼風|arduino

留言共 14 篇留言

珀伽索斯(Ama)
哇!好久沒看你發這個了,這次也很專業呢!
印象中大學有學過,不過多久沒用已有點忘了XD[e34]

10-19 23:30

貓貓風 ฅ●ω●ฅ
[e19]10-19 23:32
花花⋈
貓貓很專業呢!
但是我都看不懂就是了wwwww

10-20 01:10

貓貓風 ฅ●ω●ฅ
不過還是感謝花花來看看哦^^10-20 07:56
無名氏
I2C_Read()那邊是不是少了return?

10-20 03:37

貓貓風 ฅ●ω●ฅ
對也,漏了,感謝告知10-20 07:56
小忍
看...不懂

太專業了XDDD

10-20 07:56

貓貓風 ฅ●ω●ฅ
小忍出沒,好久不見>< 10-20 07:57
小忍
好久不見>< 好久沒聊惹~ 該上班了www

10-20 08:00

貓貓風 ฅ●ω●ฅ
是的,時間差不多了><10-20 08:28
Arthur
厲害的貓貓風 [e34]

10-20 08:12

貓貓風 ฅ●ω●ฅ
3Q10-20 08:28
至上大天神超星宿及月
看不懂

10-20 23:04

貓貓風 ฅ●ω●ฅ
這是單晶片程式 比較低階 小月有興趣可以稍微研究看看~ 不懂可以問我10-21 00:46
小伊
休假剛好看到貓貓有新創作,給個支持^^
以前在學資處的課程就讓我覺得很困難了
但每次看到貓貓的日誌就覺得更艱深呢ˊwˋ

10-22 01:18

貓貓風 ฅ●ω●ฅ
謝謝小伊在百忙之中還抽空來看我的文章喔
其實我最近也都比較忙所以繪圖就耽擱了><
日誌算是分享 也算是筆記 ˊwˋ10-22 22:26
初阿兔
果然要讓專業的來
阿兔完全黑人問號[e5]

10-22 22:51

貓貓風 ฅ●ω●ฅ
其實也沒有很專業>< 兔兔過獎惹10-23 21:06
阿吉
很有幫助,能幫忙解決問題嗎。。。感謝

07-02 22:15

kgame
>>一次只能傳一個byte
>>傳輸的前7 Byte 為 Address 接著為 1 byte的 Read / Write
Byte (X)
Bit (O)

07-24 21:56

貓貓風 ฅ●ω●ฅ
被抓語病 有空來改@@07-24 22:02
幸運
不好意思能不能請教您有關微控制器方面的事。

09-24 19:24

貓貓風 ฅ●ω●ฅ
問看看吧 10-01 08:47
幸運
請問如果master要向slave端請求byte資料跟int資料該怎麼寫比較好,因為我不知道該怎麼讓他判斷兩個事件。

11-18 16:30

貓貓風 ฅ●ω●ฅ
Slave端只會回 byte型別的資料 要int 收到後你自己轉11-19 00:35

我還以為要進去寫HIGH LOW

06-06 10:36

我要留言提醒:您尚未登入,請先登入再留言

12喜歡★s1234567 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:誓將人類滅絕 - 拳皇 ... 後一篇:Arduino 燒錄器設...

追蹤私訊切換新版閱覽

作品資料夾

hyzgdivina喜歡虹咲的LLer
我的小屋裡有很多又香又甜的Hoenn繪師虹咲漫畫翻譯喔!歡迎LoveLiver來我的小屋裡坐坐~看更多我要大聲說昨天23:17


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】