發表文章

目前顯示的是 1月, 2015的文章

初學c語言觀念摘要

放置在讀"初學c語言"電子書時認為重點之部分 RAM (Random Access Memory) 斷電時記憶消除 ROM (Read Only Memory) 成本高可以斷電時保持 Flash ROM 可重複寫入 程式語言由高至低分為 高階語言  低階語言  機械語言 機械語言 ------- 即是全都為0,1分別拚揍出來的指令 低階語言 ------- 利用淺顯易懂的英文拼湊,用來對應相關的機械語言指令 高階語言 ------- 需要透過編譯器(Compiler)或是直譯器(Interpreter) 使用函式轉換資料型態 (stdlib.h) 將字串轉換為double  ------ atof(char *string) 將字串轉換為int ------------ atoi(char *string) 將字串轉換為long ---------- atol(char *string) 如果字串中有文字,只會轉換數字 ex: 1234set  --->  1234 將整數轉回字串     *_itoa(int value,char *string,int radix)  ,  radix:數值的基底,必須是2~36 將浮點數轉為字串 *_fcvt(double value,int count,int *dec,int *sign) count:小數點後的位數   dec:小數點所在的位置   sign:正負號 ,0代表正,1代表負

[單晶片]-寫I2C通訊(MPU6050為範例)

圖片
因為使用到MPU6050因此自己寫了I2C的架構 主要參考網路上許多範例 在此把學習到的東西寫下 I2C架構 主要是利用兩條線 SCL     // I2C 的CLK SDA    // I2C 的DATA線 每次要傳送1Byte資料的時候前後都得加上開始和結束訊號 每個晶片通訊都有自己特殊的規範,可以參考晶片的datasheet 以下介紹為一般I2C的架構,地址等函式設定則針對MPU6050做優化 一般而言需要開始信號和結束信號才代表一次的command傳遞完成 上圖代表著開始訊號和結束訊號 開始訊號是由SDA和SCL拉HIGH後,之後SDA拉到LOW 結束訊號是由SCL為高位時,將SDA從LOW拉到HIGH 開始訊號程式碼範例: delay一段時間讓晶片確認收到 SDA=1 SCL=1; delay(20); SDA=0; delay(20); SCL=0; 結束訊號程式碼範例: delay(20); SDA=0; delay(20); SCL=1; delay(20); SDA=1; delay(20); 之後我們必須做一個寫資料和讀資料的動作 資料的輸出和輸入都是從最前面的BIT開始 當SCL=0時 SDA資料是混亂的,因此改變SDA的值 當SCL=1時 SDA資料是穩定的,因此接收SDA的值 利用此方式寫下讀取和寫入 另外需要注意的是I2C傳送中確認是否收到資料 會利用ACK或是NACK來確認 ACK為將SDA拉到HIGH後 晶片會將腳位拉回LOW 表示成功接收資料 NACK為 傳送資料完畢後,將SDA拉到HIGH表示成功傳送資料 WRITE_BYTE的範例程式碼 void i2c_write_byte(char address,int mode) { int count=0; //計數用 char temp=0,ACK; //因為address 只有7bit+1biy(R