久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> Arduino >> 瀏覽文章

擴(kuò)展NDS掌機(jī)連接Arduino (1)--Arduino端最小系統(tǒng)實現(xiàn)

作者:c_gao   來源:轉(zhuǎn)的   點擊數(shù):  更新時間:2014年06月25日   【字體:
前幾天寫了這篇方案:擴(kuò)展NDS掌機(jī)連接Arduino方案設(shè)計。昨天在此基礎(chǔ)上實現(xiàn)了第一步,即Arduino端最小系統(tǒng)實現(xiàn)。此第一步主要內(nèi)容概括為不使用任何外部電子元件,實現(xiàn)僅Atmega328獨立運行的最小系統(tǒng),包括支持3.3V運行電壓下工作的bootloader,以及一個簡單的sketch (blink)的運行。該最小系統(tǒng)目前在面包板上實現(xiàn)和運行,圖1為實現(xiàn)效果。


圖1. 最小Arduino系統(tǒng)blink程序效果。左側(cè)面包板為最小系統(tǒng),右側(cè)無CPU的UNO僅為左側(cè)提供3.3V工作電壓。

下面記錄一下實現(xiàn)過程。

首先我手上的資源如下:
(1)兩塊Arduino UNO板子
(2)面包板一塊
(3)杜邦線若干

第一步,制做Arduino ISP。是在IDE里設(shè)置好正確的串口和板子類型(Arduino UNO),選擇File->Examples->ArduinoISP。編譯上傳該Sketch至其中一塊UNO板上。上傳成功后,這塊Arduino板子便成為了ISP (In-System Programmer),即燒寫器或編程器。


圖2. 用一塊Arduino給另一塊燒寫B(tài)ootloader。

第二步,燒寫bootloader。按圖2所示連接好兩塊UNO板的線。圖中上方的UNO為含需要被上傳bootloader的CPU板子,下方為第一步完成的作為ISP的Arduino UNO。然后按之前方案所述,在Sketchbook location路徑(該路徑可在菜單Preferences對話框內(nèi)查看)下創(chuàng)建hardware文件夾,并在該文件夾中創(chuàng)建breadboard文件夾,然后在這個breadboard文件夾中創(chuàng)建boards.txt文件,內(nèi)容如下:

##############################################################

atmega328bb.name=ATmega328 on a breadboard (8 MHz internal clock)

atmega328bb.upload.protocol=stk500
atmega328bb.upload.maximum_size=30720
atmega328bb.upload.speed=57600

atmega328bb.bootloader.low_fuses=0xE2
atmega328bb.bootloader.high_fuses=0xDA
atmega328bb.bootloader.extended_fuses=0x05
atmega328bb.bootloader.path=arduino:atmega
atmega328bb.bootloader.file=ATmegaBOOT_168_atmega328_pro_8MHz.hex
atmega328bb.bootloader.unlock_bits=0x3F
atmega328bb.bootloader.lock_bits=0x0F

atmega328bb.build.mcu=atmega328p
atmega328bb.build.f_cpu=8000000L
atmega328bb.build.core=arduino:arduino
atmega328bb.build.variant=arduino:standard

然后,關(guān)閉Arduino IDE后重新打開IDE,此時在菜單Tools->Board里會出現(xiàn)一塊新的板子,即:ATmega328 on a breadboard (8 MHz internal clock)。選擇這塊板子。并在菜單Tools->Programmer里選擇Arduino as ISP。然后點擊菜單Tools->Burn Bootloader,IDE開始給另一塊板子的CPU燒寫B(tài)ootloader。燒寫成功后,被
燒的板子上的CPU就擁有了僅使用CPU內(nèi)部8MHz晶振作為時鐘源的最小系統(tǒng)。

這里不得不提一件非常重要的插曲,估計絕大多數(shù)用戶可能都會遇到的很難解決的問題。以下是我最初嘗試的第二步:將其中一塊的CPU取下后按之前方案中圖3連接好線后,怎么也刷不上bootloader,總是提示這樣的錯誤:
 "avrdude: Yikes!  Invalid device signature." or "avrdude: Expected signature for ATMEGA328P is 1E 95 0F" 或
 "stk500_getsync(): not in sync: resp=0x00"
開始毫無頭緒,查了非常多的資料和論壇發(fā)現(xiàn),很多老外都遇到這個問題,而且?guī)缀趺總貼子都沒有解決,其中有一個貼子很多網(wǎng)友回復(fù),非常之長,提了N種可能的解決方法,包括添加10uF的電容在Reset和Gnd之間,以及添加10K電阻在Vcc和Reset之間,還有說UNO不帶FTDI芯片無法解決,可惜提問者也都沒有最終解決。而我除了第三種FTDI外,前兩種嘗試了N遍也都無果。其中10uF的電容我還是從同學(xué)的廢舊錄音機(jī)上拆下的。

還好我在第二天查到了另一種引發(fā)該問題的原因,即因為我使用的是CPU是從原UNO板上取下的Atmega328,該CPU已燒有帶16MHz外部晶振運行的bootloader,因此無法取下后在沒有添加晶振和附加濾波電容的條件下重新燒錄bootloader或運行。是這篇文章給了我回答和解決方法:Breaduino,文章里有一段原話:
So why couldn't I burn the bootloader using the Minimal Circuit?
All my ATMega came preloaded with the regular Arduino Bootloader for use with the Arduino Board. That way they are configured to work with an external 16 MHz crystal.
So, because of that, the ATMega that I was trying to burn a bootloader into wasn't working. It needed the external crystal as configured for me to be able to burn a different boot loader.
既然需要外部晶振,那么原來的沒取CPU時的UNO板子不就帶嗎?于是按這個思路最后實現(xiàn)了正確的第二步。而之前方案中采用的是剛出廠未被使用過的CPU,這種剛出廠未使用的CPU在出廠時默認(rèn)被設(shè)置為使用內(nèi)部晶振,因此可以不用外部晶振就能工作。這個理由應(yīng)該可以從Atmel官方的DataSheet中查得到(我沒查),不過我在這篇文章:Fuse bits aren’t that scary中查到了這樣兩句話:
1. Most MCUs are shipped with the internal RC oscillator set as default clock source.
2. ATmega48 is shipped with internal 8MHz RC oscillator set as an active clock source and CKDIV8 fuse set. 

因此第二步的成功和失敗經(jīng)驗得出如下結(jié)論:
(1)如果是給已含有帶外部晶振的CPU燒只用片內(nèi)晶振的bootloader時,需要添加外部晶振。
(2)如果是給出廠未使用過的CPU燒只用片內(nèi)晶振的bootloader時,不需要添加外部晶振。

第三步,上傳Sketch。首先,將原作為Arduino ISP的板子上的CPU取下放到一邊(暫時用不上了),并按圖3所示連接好連線。


圖3. 上傳Sketch時的連線。
此時,取下原CPU,再連好線后,任意選擇一個Sketch即可編譯上傳。我為了演示方便,選擇了最常用的Blink,然后對照圖4,將Arduino 13號數(shù)字引腳對應(yīng)的Atmega328的第19號腳(PB5)和Gnd間串連個電阻(220~330歐左右)和LED,便能看到一秒停一秒亮的運行效果了。


圖4. Atmega 168/328 和Arduino引腳的對照圖。

至此,面包板上的東西就是個真正的最小系統(tǒng)了,無任何外電子元件。

注意:第二步和第三步里,操作的對象都是需要制做的最小系統(tǒng)的CPU,所以菜單Tools->Board里保持選擇ATmega328 on a breadboard (8 MHz internal clock)不變。

第四步,使用3.3V給最小系統(tǒng)供電。 這部分工作可能復(fù)雜,也可能很簡單,這和CPU類型,以及燒錄bootloader時boards.txt里寫的low fuse, high fuse, extend fuse有關(guān)。特別是extend fuse里可以設(shè)置brown-out電壓,按Atmel官方的資料, 雖然Atmega 168/328運行電壓為1.8V~5.5V,但實際情況可能會因為運行電壓低于一定值時CPU就無法工作。這就是為什么要設(shè)置extend fuse bit里brown-out電壓的原因,具體這里不給出說明了,可以google之。

因為我采用上述boards.txt里的fuse bit設(shè)置后,將無CPU的Arduino UNO板3.3V口作為供電電源后,本方案一切運行正常。所以第四步,對于我來說只是改變供電電壓便何。

敬請期待后續(xù)工作...

相關(guān)文章

主站蜘蛛池模板: 高清色| 一区二区三区国产视频 | 欧美aⅴ在线观看 | 国产成人精品亚洲日本在线观看 | 国产精品久久久久久久久久久久午夜片 | 美女毛片免费看 | 国产色网 | 亚洲精品视频在线看 | 中文字幕在线观看视频网站 | 奇色影视 | 亚洲欧美在线观看 | 欧美一级黄色片在线观看 | 91久久国产综合久久 | 夜夜夜操 | 99re6在线 | 日韩精品久久 | 毛片a | 久久精品国产亚洲一区二区 | 91免费视频观看 | 国产精品久久久久影院色老大 | 一区二区三区小视频 | 91久久精品国产91久久 | 久久免费视频1 | www.4虎影院 国产999精品久久久影片官网 | 精品videossex高潮汇编 | 欧美成人a∨高清免费观看 91伊人 | 四虎影视免费在线 | 精品二区视频 | 国产综合区 | 国产剧情一区 | 欧美性影院 | 91视频.com| 羞羞网站在线观看 | 国产精品区一区二区三 | 久久一热 | 一级毛片色一级 | 亚洲精品视频在线播放 | 中文字幕日韩一区 | 国产中文在线 | 日日操av | 日韩欧美第一页 |