2020.08.09 LGT8F328P - Arduino clone
YouTubeでポイントを説明しています。画像をクリックすると再生できます。
今回は、Arduino clone、ALPHA 8F328P-U を使ってみます。
ALPHA 8F328P-Uは、ATmega328と命令互換チップLogic Green LGT8F328Pを搭載したマイコンボードです。
この8F328P-Uの最大の利点は、パッド切り替えで3.3Vあるいは5Vで動作するところではないでしょうか。
レベル変換モジュールを必要とせずに、3.3V駆動のTFT LCDなどが使用できるので、様々なArduino互換の安価な製品の中でも、コストパフォーマンスのよい製品となっています。
■仕様
MCU | LGT8F328P 16MHz(max.32MHz) |
Flash | 32Kbytes |
SRAM | 2Kbytes |
E2PROM | 0K/1K/2K/4K/8K/(FLASH Share) |
PWM | 8 |
ADC | 6 passageway 12 position |
DAC | 1 passageway 8 position |
Interface | UART. SPI, TWI(I2C), GUID |
USB Driver | HT42B534-1 (HT42B534-x USB to UART Bridge IC - Holtek) |
System logic level | Factory 5V (switch from pad to 3V3) |
■環境設定
$ platformio boards "LGT8F328P"
該当なしでなにも表示されません。
パッケージのダウンロード(pio-lgt8fx-master.zip)
https://github.com/darkautism/pio-lgt8fx
$ unzip pio-lgt8fx-master.zip
$ mkdir ~/.platformio/platforms/lgt8f
$ mv pio-lgt8fx-master/* ~/.platformio/platforms/lgt8f
再度、ボード情報を確認します。
$ platformio boards "LGT8F328P"
Platform: lgt8f
=====================================================================
ID MCU Frequency Flash RAM Name
---------------- ---------- --------- ----- --- ----------------
LGT8F328P ATMEGA328P 32MHz 29KB 2KB LGT8F328P
lgt8f328p-LQFP48 ATMEGA328P 32MHz 29KB 2KB LGT8F328P-LQFP48
LGT8F328P-SSOP20 ATMEGA328P 32MHz 29KB 2KB LGT8F328P-SSOP20
lgt8f328ps20 ATMEGA328P 32MHz 29KB 2KB LGT8F328P-SSOP20
プログラム用のディレクトリーを作成します。
$ mkdir ~/LGT8F328P
$ cd ~/LGT8F328P
環境設定ファイルを編集します。
$ platformio init -b LGT8F328P
$ vi platformio.ini
[env:LGT8F328P]
platform = lgt8f
board = LGT8F328P
framework = arduino
;board_build.f_cpu=16000000L
board_build.f_cpu=32000000L
;internal clock
board_build.clock_source=1
接続デバイスを確認します。
$ platformio device list
/dev/ttyACM0
------------
Hardware ID: USB VID:PID=04D9:B534 SER=0000 LOCATION=1-1:1.0
Description: USB TO UART BRIDGE
/dev/ttyAMA0
------------
Hardware ID: 20201000.serial
Description: ttyAMA0
■シリアル通信テスト
$ vi src/serial.ino
void setup() {
Serial.begin(9600);
}
void loop() {
if (Serial.available() > 0) {
char c = Serial.read();
Serial.println((char)c);
}
}
$ platformio device monitor -p /dev/ttyACM0 -b 9600
■動作電圧変更
ALPHA 8F328P-U は、基板上のパッドで5V←→3.3Vを変更できるようになっています。
今回使用したボードは、工場出荷値が5Vになっていたので、5V側にショートしていたはんだを除去して、3.3V側に盛り付けました。
これで、レベル変換なしに、3.3V仕様のデバイスが使えるようになります。
■温湿度表示
前回の記事「Seeeduino XIAO」で解説している、温湿度センサーAHT10と0.96inch TFT LCDによる温湿度表示プログラムを
ALPHA 8F328P-U に移植してみます。
Seeeduino XIAOで説明したライブラリーを予めインストールしてしまいます。
$ platformio lib install 6214
$ platformio lib install 31
$ platformio lib install 13
$ platformio lib install 12
$ vi platformio.ini
[env:LGT8F328P]
platform = lgt8f
board = LGT8F328P
framework = arduino
lib_deps =
6214
31
13
12
board_build.f_cpu=32000000L
;internal clock
board_build.clock_source=1
Seeeduino XIAO と ALPHA 8F328P-U では、ソースコードはピン定義を変えるだけで動作します。
ALPHA 8F328P-U の基板を裏返すと、割り当てられた機能が刻印されています。
これを参考に配線していきます。
AHT10 | - | LGT8F328P | - | TFT DISPLAY |
GND | - | GND | - | [1]GND |
3.3V | - | 3.3V | - | [2]VCC |
| | SCK | - | [3]SCL:SPI clock line |
| | [DI]MOSI | - | [4]SDA:SPI data line |
| | [D2] | - | [5]RES:Reset interface |
| | [D3] | - | [6]DC:SPI data |
| | [D1] | - | [7]CS:Chipselect |
SDA | - | [A4]SDA | | |
SCL | - | [A5]SCL | | |
【Seeeduino XIAO】
#define TFT_CS 1
#define TFT_RST 2
#define TFT_DC 3
#define TFT_SCLK 8
#define TFT_MOSI 10
↓変更
【ALPHA 8F328P-U】
#define TFT_CS 1
#define TFT_RST 2
#define TFT_DC 3
#define TFT_SCLK SCK
#define TFT_MOSI MOSI
ALPHA 8F328P-Uには、SPI、IC2ピンが2ヵ所あり、例えばSPIの場合
#define TFT_MOSI MOSI
と定義すると、裏面にMOSIと刻印のあるDIピンが使われ、
#define TFT_MOSI D12
と定義すると、Arduino Nanoと同様にD12ピンが利用されます。
Ref. ~/.platformio/packages/framework-lgt8fx/variants/standard/pins_arduino.h
#include <Adafruit_AHTX0.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ST7735.h>
#include <SPI.h>
#define TFT_CS 1
#define TFT_RST 2
#define TFT_DC 3
#define TFT_SCLK SCK
#define TFT_MOSI MOSI
#define BLACK ST7735_WHITE
#define CYAN ST7735_BLUE
#define ORANGE ST7735_ORANGE
Adafruit_AHTX0 aht;
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI,
TFT_SCLK, TFT_RST);
void setup(void) {
if (! aht.begin()) {
Serial.println("Could not find AHT? Check wiring");
while (1) delay(10);
}
tft.initR(INITR_MINI160x80);
tft.setTextWrap(false);
tft.setRotation(3);
}
void loop() {
sensors_event_t humidity, temp;
aht.getEvent(&humidity, &temp);
tft.fillScreen(BLACK);
tft.setCursor(5, 30);
tft.setTextSize(2);
tft.setTextColor(ORANGE);
tft.print(temp.temperature);
tft.print("C ");
tft.setTextColor(CYAN);
tft.print(humidity.relative_humidity);
tft.println("%");
delay(1000);
}
■参考文献
・Support for Logic Green LGT8F328P based boards #3291
・LGT8F328P-U Control Board
|