Arduino的核心其實就是AVR單晶片。我們在計算機概論都上過電腦有五大單元,想要組成電腦,這五大單元缺一不可。耳熟能詳的 Pentium或 i5 等等都是無法獨立運作的CPU,而單晶片就是CPU沒有那麼強,卻將CPU與主記憶體等五大單元全都包在一塊晶片裡,使一塊晶片=一部小電腦,並且讓這部小電腦比指頭還小、比一罐礦泉水便宜,這就是單晶片。
單晶片無所不在,許多家電控制的地方都會用到,只要家電行銷強調「微電腦」「智慧」「Fuzzy」等等字眼的就有,我以前曾修理過投影機布幕升降控制的開關盒,裡面就有一個 8 pin的單晶片在控制,接收外部的按鈕訊號,來決定投影布幕的馬達是要上升、下降或停止。
傳統在技職學校中,常教的單晶片以 8051 或其衍生的增強型為主,科技業界除了這種以外,還很多用PIC(屬於Microchip公司)或 ARM,功能上與Arduino定位相近的就是 8051 與 PIC 了。在學校常用的 8051 又以ATMEL公司的AT89S5X(X=1或2) 為主,因為功能很少,想要用 ADC(一種用來擷取大自然訊號的電子電路) 還得外接、想要用PWM(一種用來調燈光亮度或控制馬達變速的訊號)還得用軟體自己寫、想要和PC或Mac通訊還得自己兜USB to TTL。以上講得這些外加周邊在Arduino是標準配備,所以造成很多人有種「Arduino(AVR) 比 8051還要好」的錯覺;不瞞您說,我自己當初在學 8051 都有過這種錯覺。
為什麼會有這種錯覺呢?原因是錯的師父領進門-太多學校老師(大部分是高工)用習慣了AT89S5X就不想換,殊不知還有很多增強型的 8051 把 ADC\DAC\PWM\溫度sensor\OPA等等有的沒有的周邊全都內建在chip中,比起過去高職教材,只是做一個簡單的溫度計就要外接一大堆有的沒有的IC來折騰人好多了。尤其在業界,不論是PIC\ARM\8051等等各種核心,將這些常用周邊整合進一顆MCU都已經是基本門檻。也就因為過去的教材\教師這麼不長進,讓電資科系的學生投入Arduino的擁抱,而忽視增強型8051的存在。
Arduino(AVR) 至少也是另一種單晶片,那傳統的 8051 或 PIC 憑什麼就比這個好?
除了以上Arduino有的缺點NXT都有(而且更嚴重)以外,NXT讓學生打打電動、組裝積木就以為自己可以獨立建構嵌入式系統了,可是每次做好的東西單價都貴得要死,想做新的不得不拆掉舊的,不但傷感情,成就感也無法累積,經驗難以傳承,更沒有辦法體會實際產品開發的縮影。如果跟他說學單晶片就可以很便宜的做出來,不用每次拆掉,也沒幾人可以走出NXT所圍下的舒適圈,於是就陷入了萬-丈-深-淵-之中~
案例1:某市立高工資訊科學生
有一次去訪視,是要幫忙看一位資訊科高職生的專題作品,請我們給他一些意見。那是一個自走型的輪型機器人(那是別人這樣說,抱歉,我不認為這是機器人,那只是裝了輪子的微電腦系統而已,頂多稱為智慧車),底下有光感應模組用來追線,上面有 IP Cam 透過無線 AP 把影像傳出去,第一眼看到我覺得超厲害的!因為:
案例2:內湖某科大資訊系學生
在 2013 年宜蘭的某研討會上,他們發表「壓力發電暨人數監控系統」,在發表的文章中提到自己就是用 Arduino 控制板,對多個壓電元件做電壓監測。那我就問他們 ADC 在哪裡?結果報告的人完全聽不懂 ADC 是啥?在台上發楞半天,追問之下才知這位同學是做資料庫的部分,我就問:「寫 firmware 的是誰?有在場嗎?」然後旁邊那位寫 firmware 的同學才出來解釋「我們沒有用ADC」,我又問:
「那有比較器或其他類比元件嗎?」
「沒有」(但是他們的參考文獻卻有一項是「運算放大器」)
「沒有ADC也沒有比較器,請問你們到底用什麼監控電壓的?」
「我們就用 Arduino 控制板」
這位同學啊~我相信您回去把ADC的電子電路讀懂之後,再看一遍 ATmega2560 的 datasheet,一定會對自己當天在眾人面前的表現,感到勇氣可嘉!
以上是我交涉比較深入的 2 個例子,其他還有很多印象沒那麼清楚的。
8051、AVR和ARM的關系及實際情況(原作者連結失效已久,請直接搜尋文章標題,對岸很多備份)
http://blog.csdn.net/doyoungnet/article/details/5623536
Arduino 使用經驗(一)
http://chamberplus.blogspot.tw/2014/01/arduino.html
ATmega2560 的 datasheet
http://www.atmel.com/images/doc2549.pdf
上週有網友來信,指出我的寫的以下這段會造成誤解,令人以為Arduino也是一種單晶片:
「Arduino(AVR) 至少也是另一種單晶片」
的確有錯,因為Arduino並不是一種單晶片,AVR才是。這是我寫文章時草率疏忽的地方,特此更正,以下會說明。
Arduino是一種架構、一種生態系、或是說一種framework也可以。這個體系是以Atmel的AVR單晶片為核心發展出來的,有自己特定的PCB腳位排列原則、有自己的IDE、有自己的Library大幅簡化開發門檻。與8051、PIC這類8bit單晶片相比,AVR單晶片並沒有什麼特別突出的不同,而是Arduino這個體系先提供了標準開發板,使得腳位固定下來,讓HAL共用性提高。上述這些限制(某種角度來看反而是"輔助"),讓Arduino開發者更容易在網路上與他人交流,因此而蓬勃發展。
藉著2015 hackNTU免費提供開發板的機會,我深刻的體驗一次Arduino framework,讓我可以將Arduino的好與壞闡述得更清楚。
優點:
缺點: