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

最低系統(tǒng)ATmega328p開(kāi)源

具有集成LoRa和CAN總線的ATMEGA328P模塊

基于Atmega328P的PWM控制器卡

使用ATmega328p的迷你示波器

帶有ATMEGA328P設(shè)備的Arduino Uno門鈴項(xiàng)目

Atmega328P脈寬調(diào)制控制器

帶ATMEGA328P的定制LoRa基礎(chǔ)模塊

如何通過(guò)ATMEGA328P AU(SMD)制作廣告面板

簡(jiǎn)單的獨(dú)立ATMega328p微控制器

基于ATmega328P的DIY macropad

基于ATmega328P微控制器的Ardu鍵盤

評(píng)論