[教學] Arduino Pro Mini 的便宜替代品 MiniEVB

MiniEVB 是一款仿造 Arduino Pro Mini微控制器模組,採用深圳 LogicGreen 公司出品的LGT8F328P-SSOP20 8位元晶片。這顆MCU的功能,除了跟 Arduino Pro Mini 上面使用的 ATmega328 功能相仿之外,核心頻率還比 ATmega328 勝過一籌,可以運行到32MHz,運算速度32 MIPS,內部的32KHz RC振盪器,有提供校準功能,讓可以精準執行即時計數,或輸出準確的方波。而 原廠提供的Arduino 硬體支援包,讓你可以像使用其他 Arduino 模組一樣,用你熟悉的方式, 來開發 MiniEVB 相關的應用。

MiniEVB正面外觀,可明顯看到被塗抹掉的晶片
MiniEVB 正面外觀

晶片基本規格:

I/O 與封裝:QFP48/32L, SSOP20L

32Kbytes 可編程 FLASH 程式記憶體

2Kbytes 內部數據 SRAM

EEPROM 0Kb, 但有提供模擬接口,可配置为 0K/1K/2K/4K/8K (共用 FLASH 空間,而且是配置的2倍空間,這部份不如 ATmega328)

最低功耗: 1uA@3.3V

工作電壓: 1.8V ~ 5.5V

工作頻率: 0 ~ 32MHz

工作溫度: -40C ~ +85C

HBM ESD : > 4KV

認識 MiniEVB

拍賣網上面可以看到一些賣家販售這個模組,有的價格還比ATtiny85便宜。這也就是我在「ATtiny85 的 DigiSpark山寨可插拔開發編程板」一文中提到,使用ATtiny85,還不如使用這個MPU模組的原因。
本文首頁的那張產品照片,可以看到右側有放一顆 AMS1117  3.3V的穩壓晶片,而目前拍賣網看到的,多半是 5V的版本,你可以輸入6V~12V的電源電壓,到板子上的 RAW的腳位,之後透過 AMS1117 5V轉成 5V電位到板子上的 VCC。若你要直接用 USB 5V電源也可以,將電源直接連接 VCC腳位即可。

5V版本使用AMS1117 5.0
我買到的是 5V 版本

將模組橫放來看,可以看到上下排各有10根針腳,左右側各有5根針腳,總共 30根針腳,針腳位置與配置,跟 Pro Mini 不同。



從外觀可看到,這片板子比較奇怪的設計:

1. 左右兩側的針腳定義,印刷在PCB背面,明明正面看起來還有空間可以印刷。
2. 另外,GPIO 8, 9 跟 GPIO 10, 11 共用一根針腳。等於浪費了兩個 GPIO,這個設計有點難理解,D8 D9 還可以解釋,選擇有沒有 PWM,但D10,D11兩個都是 PWM。難不成可以用 Multiplexer 之類的來定時切換,讓兩個 GPIO信號同時共存?希望電子電路方面的先進可以指導一下。

另外,MiniEVB 沒有 Pro Mini 上面的那顆黃色的自恢復保險絲,在開發測試階段,誤操作的容許度沒有 Arduino Pro Mini 好。

在 Arduino 安裝使用 MiniEVB

基本上在 Arduino上面,安裝原廠提供的 MiniEVB 套件,沒有什麼難度。倒是在此之前,試過一些 GitHub 的第三方套件,有遇到問題。

首先去原廠網站的資源下載頁 (http://www.lgtic.com/downloads/) ,下載「LGT8FX8D/P系列Arduino硬件支持包(v3.6c)壓縮檔裡面,包含完整的 Arduino 外掛硬體目錄結構,壓縮檔最上層目錄是 Larduino_HSP_v3.6c,這個不要,只要把目錄裡面三個子目錄解開放到你的 Arduino 檔案 -> 設定 (Preference) 中,所定義的 Sketchbook 目錄就行了。重新開啟 Arduino之後,就可以在板卡選單裡面,找到 「LGT8F328D-SSOP20 MiniEVB」這塊卡了,編譯上傳的時候選擇它,就可以使用這片卡了。

剛剛解壓縮的 sketches 目錄中,找到一些簡陋的範例程式參考。

編譯第一個 MiniEVB 程式

不過範例程式中,竟然沒有最基本的 Blink。沒關係,把 Arduino 原版的 Blink 改一下就能用了:

#define PIN_LED D13 //5V standby power CMOS

void setup() {

  // initialize digital pin LED_BUILTIN as an output.

  pinMode(PIN_LED, OUTPUT);

}

// the loop function runs over and over again forever

void loop() {

  digitalWrite(PIN_LED, HIGH);   // turn the LED on (HIGH is the voltage level)

  delay(1000);                       // wait for a second

  digitalWrite(PIN_LED, LOW);    // turn the LED off by making the voltage LOW

  delay(1000);                       // wait for a second

}


沒有留言:

張貼留言