|

從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。

 

陸向陽
Latest posts by 陸向陽 (see all)
【Feedback】快製中心可行策略評析
Why矽谷? 我「酷」故我「賣」!

訂閱MakerPRO知識充電報

與40000位開發者一同掌握科技創新的技術資訊!

Author: 陸向陽

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

Share This Post On

5 Comments

  1. 請問外加電源電壓是多少如何外加

    Post a Reply
    • 嗨嗨!若是用MicroUSB埠送入,應該是5V電壓,若是鋰電池,則為3.6V或3.7V。

      Post a Reply
  2. 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

發佈回覆給「陸向陽」的留言 取消回覆

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *