みつきんのメモ

組み込みエンジニアです。Interface誌で「My オリジナルLinuxの作り方」連載中

PlatformIO AE-ATmegaを動かす

はじめに

秋月のATmega168/328マイコンボードキットをPlatformIOでLチカしてみる。

かなり昔に購入したので、使用するMCUATmega168P

プログラムの書き込みにはAVRISP mkIIを使用する。最近では純正品は入手が難しいっぽい。

PlatformIOの設定方法はここを参照。

プロジェクトの作成

作業用ディレクトリを次のように作成する。

$ mkdir -p ~/pio/ae-atmega168p
$ cd ~/pio/ae-atmega168p

このボードはPlatformIOでサポートするボードのうちdiecimilaatmega168に該当する。

$ pio init -b diecimilaatmega168

プログラムの作成

platformio.ini

純粋なArduino DiecimilaではMCUATmega168だが、今回使用するボードではATmega168Pであるため、設定を変更する必要がある。

またプログラムを書き込むためのプログラマAVRISP mkIIに設定する。

[env:diecimilaatmega168]
platform = atmelavr
board = diecimilaatmega168
framework = arduino

; change microcontroller
board_build.mcu = atmega168p

; change programmer to AVRISP mkII
upload_protocol = stk500v2
; each flag in a new line
upload_flags =
    -Pusb

main.cpp

src/main.cppを次の内容で作成する。

#include <Arduino.h>

void setup()
{
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop()
{
  digitalWrite(LED_BUILTIN, HIGH);
  delay(1000);
  digitalWrite(LED_BUILTIN, LOW);
  delay(1000);
}

一般的なArduinoのLチカのコード。

AVRISP mkIIとボード、PCを接続

PCとAVRISP mkIIをUSBケーブルで接続する。

AVRISP mkIIの6ピンケーブルを、ボード上のICSPのシルクがある3x2のピンヘッダに接続する。 ケーブルの赤いほうが1ピン。

ボードは別途給電が必要なので、USBか電源を接続する。

ビルドと書き込み

次のコマンドでファームウェアをビルドする。

$ pio run

次のコマンドで書き込む。外部のプログラマを使用するのでtargetの指定がuploadでは無いことに注意。

$ pio run -t program
Processing diecimilaatmega168 (platform: atmelavr; board: diecimilaatmega168; framework: arduino)
--------------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option

...(snip)...

avrdude: verifying ...
avrdude: 928 bytes of flash verified

avrdude: safemode: Fuses OK (E:F8, H:DD, L:FF)

avrdude done.  Thank you.

========================= [SUCCESS] Took 1.34 seconds =========================

書き込みが成功し、LEDがチカチカする。

まとめ

今回はATmega168Pを使用したが、新しいロットではATmega328Pが付属しているらしいので 適宜、MCU変更する必要がある。

また、最近ではAVRISP mkIIは純正品の入手が困難みたいなので、互換品(クローン製品など含む)を使用する場合、 別途何か手順が必要かもしれない。

ともあれ、PlatformIOでも問題なく動作させられることがわかった。