發表文章

目前顯示的是有「單晶片」標籤的文章

[單晶片]NEO-6M-0001透過U-center設定簡介

圖片
以下將介紹如何讓NEO-6M和U-center連接,並進行設定改動 1.將Neo-6m-0001開發版的TX RX接好後 連線電腦 2.下載U-Center軟體 3.開啟U-Center軟體 4.選取正確的COM Port,並調整Badurate 5.從View->Statistic View中來確認是否有成功連接,有的話視窗內會有許多數字在跳動 6.利用View->Configuration View 來進行設定 7.設定範例:設定Baudrate 7-1首先進入RMX中設定,將Save configuration打勾,才會將資料送入感測器中,並儲存,打勾後按下左下角的Send 7-2之後移動到PRT設定需要的數值之後,按下左下角的Send 7-3離開始會顯示視窗問你是否儲存,按下Yes,之後關閉U-center並且重新將NEO-6M上電,便完成設定。

[單晶片] - Keil C使用PCA 功能介紹 + Capture HC-SR04感測資料

此晶片使用MPC82G516 這裡介紹PCA的使用方法 PCA 主要有四種不同的應用方法 16-bit Software Timer Mode                                          Capture Mode  High Speed Output Mode PWM Mode 有以上四種不同的模式。 第一種模式 16-bit Software Timer Mode 可以將此當成額外的計數器,並且擁有16bit的大小 觸發中斷方式為,內部計數器CH CL 和設定值 CCAPnH CCAPnL 相同時 特別之處是本身計數器會不停往上數 因此目標的值也需要不停增加 以下為範例 製造P10腳位輸出周期2ms 方波 long PCA0T = 1843; //PCA0 目標值 //設定 因石英震盪體為22.1184 /12 = 1843200 /s 1843約=1ms int PAC0Internal =1843;//設定每一次間隔的大小 1843=1ms CCAP0L=0xff&(PCA0T); //設定首次要追的目標,將值丟入暫存 CCAP0H=0xff&(PCA0T>>8); CCAPM0=0x49; //開啟Comparator 和 中斷 和 MATn CL=0x00; //歸零 CH=0x00; AUXIE = 0x04; //PCA interrupt CCON=0x40; //開啟PCA計數 void PCATimer(void) interrupt 10 { if(CCF0) { PCA0T =PCA0T+PAC0Internal ; if(PCA0T>65536) PCA0T-=65536; //數字超過就減去65536...

[單晶片]-使用keil c 變數的範圍和可能產生錯誤

以下紀錄來提醒自己: 在Keil C的開發中,使用變數需要特別小心。 如果遇到數值狀態產生怪異變化,或是利用UART傳值發現數值為-1。 有可能是變數的範圍產生OVERFLOW。 變數 範圍 char -128~ 127 unsigned char 0 ~ 255 int -32768 ~ 32767 unsigned int 是 0 ~ 65536 long , float , double 範圍都很大 理論上是夠用,但較占空間 使用不同的數值的時候,做數值的位移 >>  ,  <<  會導致數值有不同變化。 ex: 用 unsigned char位移後  如果位移後的值非unsigned 就會造成數值錯誤。 原因: 二進位的負數表示法,會把第一個當作成1,然後使用補數。 詳細可參考二進位的補數, 維基百科 。 範例   變數 範圍 long value = 0; unsigned char shiftvalue = 0xff; value = shiftvalue< 應該變為 0xff00 數值轉換為 65280 輸出value 卻等於 -256 原因就是long 非 unsigned 會透過第一個位元去判斷是否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; //因為ad...