1. 程式人生 > >中科之旅------開發PIC16F18855過程中遇到的困難以及解決方案

中科之旅------開發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.設定外部管腳下降沿中斷時,剛開機會發生一次中斷,要注意避免