文章類型
開發平台
解決方案
關注主題
文章類型
開發平台
解決方案
關注主題

從Arduino改換到LinkIt ONE當注意什麼?

作者:陸向陽

聯發科推出LinkIt ONE已約一年時間,LinkIt ONE標榜相容Arduino,接腳排列方式跟Arduino一樣,程式的整合開發環境(IDE)也跟Arduino一樣,對本來就有使用Arduino的人而言,可以很快改用LinkIt ONE。

LinkIt One3-1

雖然如此,但其實還是有一些小細節是不同的,不能完全套用,筆者以下就目前為止的摸索經驗,與各位分享、交流討論。

1.接腳電流驅動力、承受力

LinkIt ONE用的主控晶片MT2502A,是原本聯發科為特色手機(Feature Phone)所提出的,較類似處理器(Processor),而不是較類似控制器(Controller),所以I/O接腳的電流驅動力(Source)比較弱、承受力(Sink)也比較弱,無法與正規Arduino所用的ATmega系列控制器晶片相比。

根據資料,Arduino用的ATmega晶片,單一I/O接腳最高可承受40mA電力的輸出(通常電壓處於邏輯低準位實),但MT2502A則只有12~16mA。電壓的邏輯準位也不等同。

linkit_one_0_06

所以,在I/O的輸出、輸入電路上,有可能無法直接套用本來在Arduino上的設計,輸入的時候,可能需要串接更大阻值的電阻,好避免主控晶片被輸入過多電流而燒壞。同樣的,也盡量不要直接用主控晶片去驅動需要較多電流的元件,透過電晶體去驅動是比較安穩的作法。

也因為如此,本來可用於Arduino上的Shield,改轉接到LinkIt ONE上,有可能不能動,這點要注意,最好重新確認一下電壓、電流等差異,比較妥當。

2.PWM數目的不同

正規Arduino有6組脈寬調變輸出(PWM Output)可用,但MT2502A沒有,只有2組,僅剩D3、D9接腳有,原本可以用的D5、D6、D10、D11無法使用,如果本來撰寫的控制程式是使用D5、D6、D10、D11接腳輸出PWM信號的,必須改寫程式。

縮減成剩2組,各位可能很失望,但與完全沒有PWM的樹莓派(Raspberry Pi)相比,可能就會安慰點,至少還有2組。樹莓派由於完全沒有PWM,只能用兩種方式補償,一是用軟體模擬PWM,但會耗用較多的樹莓派主控晶片(BCM2835/BCM2836)的運算力、電力,或者透過GPIO接腳外接其他具有PWM輸出能力的晶片。

就算一起頭就是使用D3、D9接腳輸出PWM,程式改寫可能性也相當高,因為MT2502A提供的是13-bit解析度(大陸稱:分辨率)的PWM輸出,與Arduino/ATmega提供的8-bit輸出不同。所以,有關PWM的Duty Cycle還是要檢視或調整一下。

3.ADC數目的不同

正規Arduino有6組類比(大陸稱為:模擬)輸入可用,即A0~A5,但MT2502A只有3組,即A0~A2,且LinkIt ONE的參考電壓固定為5V,不像Arduino還可以自行選擇參考電壓。

因此,過去使用A3~A5的ADC(類比數位轉換)的程式必須改寫。不過,LinkIt ONE與Arduino的ADC解析度都是10-bit,這方面較能直接沿用。

4.時間不同

Arduino只跑自己的Arduino控制程式,但LinkIt ONE其實還有跑其他程式,最底層、最優先執行的是GSM數據通訊,其次是裝置程式,更次為Link OS作業系統,最後才是Arduino控制程式。所以,過去把時間掐很緊的控制程式寫法,有可能在LinkIt ONE會造成時間偏差,也是建議改寫。

其他建議

另外,有些L字母開頭的函式是專供LinkIt ONE使用,若與Arduino本有的函式功能相重疊,建議盡量用LinkIt ONE提供的。

還有,LinkIt ONE是以外掛程式方式,附掛(檔案解壓縮後,拷貝到與Arduino相同的安裝路徑、資料夾內)在正規Arduino整合開發環境下,本以為只要新版的整合開發環境均可附掛,但後來發現1.6.x版無法在選單上找到LinkIt ONE,之後閱讀常見問答集,才了解依然建議用舊版1.5.7版來附掛。

其他也包含電腦會偵測到LinkIt ONE有2個COM埠,一是除錯(Debug)埠,另一是數據(MODEM)埠,真正傳輸程式到LinkIt ONE上,必須選用除錯埠。而正規Arduino只有1個COM埠。

官方回應

(1) SDK 1.1.09 BETA版本之後(新版的 SDK)就不需要一直換了,原因是upload sketch的時候會自動偵測合適的COM port,開發者只需要選擇Serial COM port就可以了。

(2) 目前有針對IDE 1.6.4的(實驗性)支援,可連結至此,主要是支持了IDE 1.6.4的Board Manager機制,可以從IDE當中直接安裝LinkIt ONE。

 

陸向陽

陸向陽

從電子科系畢業後,即以媒體人的角色繼續這段與「電子科技」的不解之緣。歷任電子技術專書作者、電子媒體記者、分析師等角色,並持續寫作不殆。近來投入Arduino、Raspberry Pi等開放硬體的研究與教程介紹。
陸向陽

上一篇: | 下一篇:

3 Comments

  1. Hi,不知道能不能請教一下,我有一段code在LINKIT ONE上是可以使用的,但我換到arduino mega上時,我下的指令到了接收端好像就錯了,假如原本要下0x0d 0x0a,接收端會變成0x8d 0x0a,其他數值也都有出現多了int 128的現象,不知道能不能聽取一些建議呢?

    Post a Reply
    • Joe您好:

      不知道您用的是何種功能?0x0d 0x0a是透過哪個介面傳輸的嗎?

      Post a Reply
      • 哈哈後來發現原因了!Linkit ONE傳送資料用包率115200不會錯誤,但Arduino會出現問題,降為9600就解決囉!

        Post a Reply

我想回應

你的電子郵件位址並不會被公開。 必要欄位標記為 *

成城共創股份有限公司版權所有、轉載必究.Copyright(c) 2017 MakerPRO