中科之旅------開發PIC16F18855過程中遇到的困難以及解決方案
一來讓自己可以回顧開發歷程,二來幫助後來者快速上手,知識總是需要共享才有價值。
1.遇到了無法解析識別符號
解決方法:我的專案之前建立在c盤admin下面,後來換到D盤全英文目錄下就沒有報錯可以正常通過編譯了。
2.SSP1CON2 = SSP1CON2 | bit0;這個語句編譯的時候遇到warming:
mian.c:205: warning: (373) implicit signed to unsigned conversion
3.使用MPLAB® Xpress EVALUATION BOARD 的pickit3介面,出錯log如下
PICkit3報錯
Connectingto MPLAB PICkit 3...
Currentlyloaded firmware on PICkit 3
FirmwareSuite Version.....01.51.08
Firmwaretype..............Enhanced Midrange
Targetdevice was not found (could not detect target voltage VDD). You must connect toa target device to use PICkit 3.
程式介面報錯
Loadingcode from D:/MPLABXProjects/BreathingLED/Breathing_LED.X/dist/free/production/Breathing_LED.X.production.hex...
Loadingcompleted
Connectingto programmer...
Programmingtarget...
Theprogrammer could not be started: Failed to program the target device
原來是vdd虛焊,所以pickit3麼有檢測到
之前報錯如圖
:
可以參考原因是需要呼叫指定的PICKIT3韌體,在專案屬性中點選PICkit 3中的Option categories: Firmware,取消Use LatestFirmware前面的勾選,在下方Firmware File中選擇安裝路徑中的PICKIT3.jar,以MPLAB X IDE v3.35及windows 7 x86環境為例,位置在C:\Program Files/Microchip/MPLABX/v3.35/mplab_ide/mplablibs/modules/ext/PICKIT3.jar/PK3FW_014335.jam。斷開目標板,重啟編譯環境----我當時是隻找到了C:\Program Files (x86)\Microchip\MPLABX\v4.15\mplab_ide\mplablibs\modules\ext\PICKIT3.jar
4.microchip官網上有很多關於開發板的開發例子,我先驗證了i2c的,但是發現每次都沒有成功,後來發現由於emc1001是用的smbus,而不是通用i2c,smbus的頻率推薦20k-100k,而例子中的是200k的i2c scl,改成100k,通訊成功讀出來manufacture ID。
5.官網的開發板例子匯入到自己的板子上,i2c有資料但是無應答,後來測量波形才發現,開發板的scl和sda沒有按照資料手冊來設定,是反的,而我們自己的板子是正常的,所以出錯了,還有不同的板子i2c連線到一起的時候要共地才行。
6.spi用示波器讀取的資料發現是反的?
結果是自己的示波器有個測量腳被反向了。。。
7.eeprom無法讀取資料?
由於我用的24lc64,100 kHz and 400 kHz clock compatibility,而我的i2c是40k所以不符合要求,改成100k即可
8.如果用mplabx的時候,點選暫停按鍵,但是游標卻沒有停留在某行程式碼上,那麼就是你的檔案的路徑中包含中文導致的。
9.make[2]: *** [dist/free/production/Temperature_Sensor_Output.X.production.hex] Error 1
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2
:0: error: (1347) can't find 0x9C400 words (0x9c400 withtotal) for psect "stringtext1" in class "STRCODE" (largest unused contiguous range 0x1800)
(908) exit status = 1
本來想把SPI flash的內容用一個數組放在程式中,結果發現太大了,因為
Memory
• Up to 14 KB Flash Program Memory
• Up to 1 KB Data SRAM
• 256B of EEPROM
• Direct, Indirect and Relative Addressing modes
而我的內容是64kbyte。只能用串列埠分批往下刷
10. conflicting declarations for variable "_strlen" (main.c:286)
原因是沒有include “string.h”
11.ADC轉換中,第一次讀的ADC的值是不對的,要從第二次開始才對
12.設定外部管腳下降沿中斷時,剛開機會發生一次中斷,要注意避免