高通台灣AI黑客松|競賽說明會
|

【Tutorial】動手做一個Intel D2000 x Arduino的火焰感測器吧!

   

作者:賴建宏

緣起

先前的開箱影片中我們可以看到Intel D2000開發板的一些特色,MakerPRO社團裡的幾位好手大大也都寫過有關Intel D2000的文章。從開箱影片中我們發現就硬體上來看Intel D2000的硬體規格跟Arduino Uno的接腳配置是一樣的,那各位可能就想問:「可不可以把Arduino那一大堆模組拿來套用?」於是,我們這次就真的挑一個Arduino初學者常用的火焰感測器,來試試看是不是真的可以在硬體上共通!

材料

  • Intel D2000原廠開發板
  • 火焰感測器模組(用LM393那種比較器、上面還有個可選轉的可變電阻那種)
  • 公對母的杜邦線三條(VCC、GND、DO剛好三條)

接線的方式

特別說明一下,Intel D2000原廠開發板的輸出入電壓是 3.3VDC,和Arduino Uno的 5.0VDC 是不一樣的。如果接錯了,那就可能真的會把Intel D2000原廠開發板給搞壞掉囉~

常遇到很多人會問:「我那個模組一定要5.0VDC怎辦?」這時候我在這裡提供你兩個簡單解決方法:

  1. 電阻分壓:這方法超級便宜又簡單,問題在於假如是高速通訊裝置(像GHz級BUS線…等)的東西,這方法可能會變成阻抗不匹配,甚至波形失真嚴重根本無法使用喔!若是像先前的9600bps 那一類 TRX 倒是試過還可以使用。
  2. 加入Level shifter:由於需要購買元件,這個解決方式比較昂貴;可是如果像 I2C 那種接線不多的話,74LVC245這種就夠了!

步驟

有些 Quark的開發板需要得自己去張羅JTAG,但Intel D2000原廠開發板就是做的周詳,本身就有附上燒錄程式的訊號轉換器,不必另外找JTAG,直接接上USB就可以了。

Intel原廠D2000開發板已經內建JTAG轉換晶片模擬裝置,不用另外添購

接下來,我們就按照以下的圖片來試試看囉~

STEP1_眉角_記得開發板上D2000已經燒錄的內容,為了確保之後燒錄順利,先更新回出廠值

 

STEP2_建立一個新的專題

STEP3_指定是D2000

STEP4_採用QMSI也就Intel提供給Quark的軟體介面

STEP5_我們不必其他的裝置,只要用USB連上D2000即可,板子上已經有自動轉換的晶片

STEP6_啟用LED Blink的專題當範本

STEP7_眉角_在Makefile中加入這兩列,防止因為Windows下安裝一大把東東結果編譯不成功

STEP8_找到我們要改的主角main.c這個檔案

以下這些原始程式碼是要改到main.c中的,要注意目前Intel D2000還是得用Intel ISSM而不是Arduino IDE喔~

/*
* Copyright (c) 2017, Intel Corporation
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. Neither the name of the Intel Corporation nor the names of its
* contributors may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS”
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE INTEL CORPORATION OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/

/*
* LED_Blink
*
* This app will blink an LED on the development platform indefinitely.
*
* In order for this application to work correctly on the Intel(R) Quark(TM)
* Microcontroller D2000 Development Platform, jumper J3 must be set to USR.
*/

#include “clk.h”
#include “qm_gpio.h”
#include “qm_pinmux.h”
#include “qm_pin_functions.h”

/*
* Laisan, 20171027, to define the PIN for flame sensor
*/
#define PIN_FLAME 2
#define FLAME_PIN_ID (QM_PIN_ID_2)

/* The following defines the pin and pin mux details for each SoC. */
#if (QUARK_SE)
#define PIN_OUT 25
#define LED_PIN_ID (QM_PIN_ID_59)
#define PIN_MUX_FN (QM_PIN_59_FN_GPIO_25)
#elif(QUARK_D2000)
#define PIN_OUT 24
#define LED_PIN_ID (QM_PIN_ID_24)
#define PIN_MUX_FN (QM_PIN_24_FN_GPIO_24)
#endif
#define DELAY 250000UL /* 0.25 seconds. */

static void pin_mux_setup(void)
{
qm_pmux_select(LED_PIN_ID, PIN_MUX_FN);

qm_pmux_select(FLAME_PIN_ID, PIN_MUX_FN);
}

int main(void)
{
qm_gpio_state_t state;
qm_gpio_port_config_t cfg;

/* Set the GPIO pin muxing. */
pin_mux_setup();

/* Loop indefinitely while blinking the LED. */
while (1) {
qm_pmux_pullup_en(PIN_FLAME, true);
qm_pmux_input_en(PIN_FLAME, true);

cfg.direction = 0;
qm_gpio_set_config(QM_GPIO_0, &cfg);
qm_gpio_read_pin(QM_GPIO_0, PIN_FLAME, &state);

if( state == 1 )
{
/* Set the GPIO pin direction to out and write the config. */
cfg.direction = BIT(PIN_OUT);
qm_gpio_set_config(QM_GPIO_0, &cfg);

qm_gpio_set_pin(QM_GPIO_0, PIN_OUT);
clk_sys_udelay(DELAY);
qm_gpio_clear_pin(QM_GPIO_0, PIN_OUT);
clk_sys_udelay(DELAY);
}
}

return 0;
}

STEP9_確認程式碼能照範例這樣,就編譯然後燒錄到D2000試試吧

最後,照例看展示影片吧:

結語

目前看來Intel D2000原廠開發板上手其實不算太麻煩,不過軟體程式跟Arduino IDE不一樣也沒附有內建的Serial給使用者,這兩點以外,我個人覺得就機能性來說算高的了!因為Intel D2000其實是有即時作業系統(Real-time Operating System,RTOS)的,跟Arduino Uno這類純粹只有微控器的開發板,兩者以汽車來比喻,Intel D2000好比雙B,而Arduino Uno就跟我開的國民車一樣。

所以要是開發更複雜的系統來說,Intel D2000原廠開發板可能會因為Real-time operating system的緣故,減少很多開發上的困難度。在目前智慧電子裝置市場越來越興盛的情況下,Intel D2000性能上還是可觀!

(責任編輯:葉于甄)


◎加入我們的Line,獲得更多及時文章更新&活動資訊→

加入好友

賴建宏

訂閱MakerPRO知識充電報

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

Author: 賴建宏

社群稱號為「賴桑」的他,以電子電機的背景,熱衷於OSHW的應用開發與實作。取得台北科技大學電子所博士學位,目前主推「農林漁牧大業」計畫的迷你型魚菜共生系統開發。

Share This Post On
468 ad

Submit a Comment

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