作者:賴建宏
之前幾篇關於SE C1000的文章,可以看出來不管是Intel原廠版本,還是國產MtM的都各有千秋,問題是不少人後來問我到底怎樣容易上手?嗯……這也難怪!畢竟大家用Arduino習慣了,遇到一個走不同路線的奇才,這到底該怎麼辦,相信不管是誰都傷腦筋。
所以這篇就以自製一個超級簡單的GPIO著手,從一開始到怎樣看懂SE C1000跟Arduino元件的對應關係來釐清。我們為了簡化,就挑一個Arduino專題上常見的揚聲器,透過程式產生不同頻率的音調,來看如何橫跨兩個平台。
所需料件
- Intel SE C1000原廠開發板
- Micro USB手機通訊與充電線一條
- Arduino常見上面有電晶體的那種 (三根腳的)小型揚聲器
- 公對母杜邦線三條
開發過程
請先下載Intel SE C1000 Evaluation Kit的使用手冊跟電路圖這兩個檔案,很多人可能沒看,其實說得還蠻詳細的,有時間的話建議詳細讀看看。接著開啟我們的開發工具 – Intel ISSM。
STEP1:Update ROM Image回到出廠值
STEP2:新增一個SE C1000專題
STEP3:一樣用QMSI就好,因為QMSI可是Intel Quark量身訂製的。
STEP4:設定平台
STEP5:用LED_Blink為基礎建立一個專題
STEP6:找到原廠說明書看Arduino接腳如何對應SE C1000
然後,打開使用手冊,在第29頁的地方會說到Arduino Header Pin Mapping,這個表是以Arduino Uno為例,把Arduino Uno的腳位實際上是接到QMSI指定的腳位,以及Sensor Subsystem的腳位;千萬記得所有腳位都有其對應關係,需要找到喔!因為Intel SE C1000的複雜度比起一般的單晶片高很多,因此幾乎所有的程式一開頭,都有腳位多工器Pin Mux的設定,這也是很多人一開始忽略的地方。
揚聲器 |
Intel SE C1000開發板 |
VCC |
VCC |
GND |
GND |
IN |
D9 (GPIO1) |
STEP7:把SE C1000的LED Blink範例的腳位修改,也就是把D9對上SE C1000的Pin
最後就是音調;其實音調的形成,就是利用不同頻率的訊號產生輸出而已,從物理學的角度來看,一個Square wave有高有低,頻率與時間的關係剛好就是倒數,因此我就以DO、RE、MI、FA、SO、LA、SI七個音的大概頻率基準,透過clk_sys_udelay()這個函數來產生延遲間隔。特別要說明的是,clk_sys_udelay()的參數單位是μs,而不是Arduino常用的ms,兩者的差距有1000倍喔!
我做的範例程式碼如下:
#include "clk.h"
#include "qm_gpio.h"
#include "qm_pinmux.h"
#include "qm_pin_functions.h"
#define PIN_OUT 1
#define TONE_PIN_ID (QM_PIN_ID_9)
/*
* T = 1/f, so the tone will be generate in us unit
*/
#define DO 3816
#define RE 3401
#define MI 3030
#define FA 2865
#define SO 2551
#define LA 2272
#define SI 2024
static void pin_mux_setup(void)
{
qm_pmux_select(TONE_PIN_ID, PIN_OUT);
}
static void playTone(int us, int times)
{
int half = us / 2; //For a square wave, high and low
int i;
for(i=0; i<times; i++)
{
qm_gpio_set_pin(QM_GPIO_0, PIN_OUT);
clk_sys_udelay(half);
qm_gpio_clear_pin(QM_GPIO_0, PIN_OUT);
clk_sys_udelay(half);
}
}
int main(void)
{
static qm_gpio_port_config_t cfg;
/* Set the GPIO pin muxing. */
pin_mux_setup();
/* Set the GPIO pin direction to out and write the config. */
cfg.direction = BIT(PIN_OUT);
qm_gpio_set_config(QM_GPIO_0, &cfg);
while(1)
{
playTone(DO, 500);
clk_sys_udelay(200000);
playTone(RE, 500);
clk_sys_udelay(200000);
playTone(MI, 500);
clk_sys_udelay(200000);
playTone(FA, 500);
clk_sys_udelay(200000);
playTone(SO, 500);
clk_sys_udelay(200000);
playTone(LA, 500);
clk_sys_udelay(200000);
playTone(SI, 500);
clk_sys_udelay(200000);
}
}
展示影片:
結語
其實不管哪一個開發板,都會有其應用特性!你若打算發揮它的特性,除了收集相關的技術資料進行消化外,再來就是日積月累地累積操作的熟練度。因此,我想應該不會再有那麼多人排斥Intel SE C1000、Intel D2000這樣的開發板了吧,畢竟不同的板子能做到的事情不一樣,並沒有好壞之分。
◎加入我們的Line,獲得更多及時文章更新&活動資訊→
- 【開箱評測】用Mbed上手開發DSI 2599開發板 - 2020/08/03
- 【OpenVINO™教學】自製麵包影像辨識POS機的應用 - 2019/12/24
- 【邊緣運算】OpenVINO好夥伴 — athena A1 Kit x86單板 - 2019/11/18
訂閱MakerPRO知識充電報
與40000位開發者一同掌握科技創新的技術資訊!