在RX5808分集接收機制作的文章中,我參考開源的資料制作了RX5808分集接收機電路板,另外使用USP-ISP編程器通過ArduinoIDE給電路板了寫程序,詳見使用USB-ISP編程器向Mega328p寫程序,在實際使用中發(fā)現(xiàn)這種寫程序的方式存在一些不足,這種方式在擦除Atmega328P的FLASH和EEPROM時感覺不徹底,同時不能修改熔絲位,會導致代碼實際運行效率變低,在RX5808分集接收機上反應(yīng)為菜單的響應(yīng)時間過長,操作不靈敏。因此催生了今天這篇文章。
使用USBtinyISP編程器通過ArduinoIDE寫程序
USBtinyISP編程器接口定義
在使用USP-ISP編程器向Mega328p寫程序文中,我用USBtinyISP編程器直接通過ArduinoIDE寫程序,這樣的好處是便捷,同時可以隨時通過IDE對程序進行調(diào)整操作比較直觀,但奇怪的是程序?qū)懭?28P后,RX5808分集接收機的菜單響應(yīng)時間很長,操作起來非常不便,開始以為是源代碼延遲時間設(shè)置的問題,多次調(diào)整收效甚微,于是開始嘗試其它的寫程序的方式。
AVRUSB編程器向ATmega328P寫程序
使用AVRUSB編程器向ATmega328P寫程序步驟如下:
AVRUSB編程器向ATmega328P寫程序
progisp程序有一個特點,當AVRUSB編程器未連接或連接不成功時,它的“PRGISP”圖標是灰色的,連接成功后它是彩色的,如上圖黑色向右箭頭所指方向。AVRUSB編程器寫程序的步驟,首先在PROGISP程序打開后,在上圖1所示位置選擇目標芯片,然后點擊上圖2所示的“RD”按鈕測試芯片讀取是否成功,狀態(tài)欄會顯示芯片連接狀態(tài);然后在上圖3所示位置點擊進入熔絲位編輯窗口:
Atmega328P熔絲位
根據(jù)芯片型號編輯熔絲位;接著在上一張圖的4的位置導入HEX文件;最后點擊“自動”按鈕將程序?qū)懭胄酒?。注意圖中的勾選項“芯片擦除”、“編程FLASH”、“編程熔絲”等選項要勾選,否則代碼運行效率和“使用USBtinyISP編程器直接通過ArduinoIDE寫程序”效率一樣。
使用USBtinyISP編程器通過AVRDUDESS寫程序
Avrdudess是一款類似于Avrdude-GUI的AVR系列單片機下載與燒錄工具
USBtinyISP編程器通過AVRDUDESS寫程序
本著不斷折騰的原則,本次在嘗試使用USBtinyISP編程器通過AVRDUDESS向ATmega328P寫程序。AVRDUDESS可通過網(wǎng)絡(luò)下載綠色版的即可。連接USBtinyISP編程器,打開AVRDUDESS軟件,如上圖選擇“USBtinysimpleUSBprogrammer,…。?!保?a target="_blank">MCU選擇“ATmega328P”,然后點擊“自動偵測”,在上圖黑色狀態(tài)框會顯示“偵測到1e950f=ATmega328P”表示編程器與芯片連接成功。然后和AVRUSB編程器一樣我們也需要設(shè)置熔絲位和一些選項。熔絲位設(shè)置點擊右側(cè)“手動熔絲選擇器”彈出窗口如下,可手動設(shè)置熔絲位:
ATmega328P熔絲位設(shè)置
確定后回到主界面,按下圖再次確認設(shè)置項
AVRDUDESS為ATmega328P寫bootloader
通過“Flash”地址欄后“…”按鈕選擇需要寫入的HEX文件,點擊“開始編程”,狀態(tài)欄會對應(yīng)給出寫入狀態(tài)指示,待完成后寫入完成。測試過程中發(fā)現(xiàn),如果不選擇“擦除flash和EEPROM”,代碼運行效率與直接通過ArduinoIDE通過編程器寫的方式一致,慢就一個字!
三種編程方式的比較
細心地朋友會發(fā)現(xiàn)后兩種方式寫入的文件是HEX文件,它可以通過ArduinoIDE的菜單“項目”–“導出已編譯的二進制文件”的方式得到。曾經(jīng)懷疑代碼的運行效率是否與寫入文件格式有關(guān),仔細分析后我認為不管哪種方式寫程序?qū)懭胄酒亩贾粫嵌M制文件,只是通過ArduinoIDE編程器寫入的方式文件轉(zhuǎn)換的過程不可見而已。
因此,正如前面反復提到的,在三種給328P寫程序的方式中,直接通過ArduinoIDE寫程序,無法判斷寫程序過程中是否對芯片的Flash和EEPROM進行了完全的擦除。后面通過PROGISP和AVRDUDESS寫程序的兩種方式差異不大,僅是程序設(shè)置界面的差異,兩種方式如不選擇“擦除flash和EEPROM”,代碼的運行效率與第一種通過ArduinoIDE寫程序的效率一致。據(jù)此判斷它是導致代碼寫入后運行效率不高的主要原因。
-
電路板
+關(guān)注
關(guān)注
140文章
4810瀏覽量
96089 -
bootloader
+關(guān)注
關(guān)注
2文章
232瀏覽量
45366 -
Atmega328P
+關(guān)注
關(guān)注
4文章
56瀏覽量
17174
發(fā)布評論請先 登錄
相關(guān)推薦
評論