Help us understand the problem. What is going on with this article?

ATmega328Pで作るMetaboard互換回路

More than 3 years have passed since last update.

最近様々なLチカばっかりやってる気がするerukitiです、ごきげんよう。

先日書いたFT232RLでAVRライターを自作してATtiny85をDigispark互換にするまで - Qiitaという記事ですが、micronucleusはATtinyシリーズにしか対応していませんでした。ATmega328Pで同じ事はできないものか?と調べていたところ、どうもATmegaシリーズでの事例の方が先にあったようです。今日はそんなATmegaシリーズで可能なMetaboard互換回路を作成してみました。

ブートローダー

まずは先日のAVRライターでmicronucleusに変わるブートローダー(むしろこっちが元祖?) USBaspLoader を書き込みます。

回路的には9番と10番にクロックを入れてください。調べた限りではどうもUSBを駆動する場合、セラロックはばらつきが多いという話もあるので、ちゃんとしたクリスタルとコンデンサを入れた方がいいかもしれません。(僕はその情報を知らずにセラロックを入れてましたが、一応ちゃんと動いているようです。)

avrdude -c diecimila -p m328p -B9600 -U lfuse:w:0xf7:m -U hfuse:w:0xda:m -U efuse:w:0xfc:m -U flash:mega328p_16mhz.hex:w

さて、このmega328p_16mhzをどこから入手するか。V-USB - A Firmware-Only USB Driver for Atmel AVR MicrocontrollersのDownloadから https://www.obdev.at/downloads/vusb/USBaspLoader.2012-12-08.tar.gz をダウンロードしてきて展開するのは手ですが、どうもこの後の開発はforkされたbaerwolf/USBaspLoader: An (V)USB bootloader firmware for AVR-MCUs emulating the popular USBasp for programming itselfで行われているようですので、これを自前でコンパイルしてもいいかもしれません。(僕は面倒くさがって既にある2012-12-08のバイナリを使ってしまいました。)

注意点はコンパイルする場合、最低でも12MHzを指定しないといけないらしく外部クロックが必須っぽいです。

回路

Metaboard clone by erukiti dd2cee5aa4e2e737 - Upverter

Metaboard-clone.png

補足: 最初のバージョンでは文字がつぶれてましたが、7of9さんの出力したバージョンによって綺麗になりました。

ピン接続

ATmega328P 名前 接続先
1 reset(PC6) タクトスイッチでGND
4 PD2 抵抗経由でD+
6 PD4 抵抗経由でD-
7 VCC VCC
8 GND GND
9 PB6 XTAL
10 PB7 XTAL
13 PD7 enable boot loader (※1)
19 PB5 Lチカ用LED
22 GND GND

※1: 起動時にboot loaderに行くかどうかを決める。GNDに落ちている間、ブートローダーにいる (USBasp経由で書き込みができる) このピンはタクトスイッチではなくスライドスイッチかジャンパピンで実現するのが好ましい。

参考

スケッチを焼く

まずはplatformioを使ってコンパイルだけします。

$ platformio init
$ cat > platformio.ini
[env:328p16m]
platform = atmelavr
framework = arduino
board = 328p16m
program = usbasp
$ cat > src/test.ino
#define LED_PIN 13
void setup() {                
  pinMode(LED_PIN, OUTPUT);
}

void loop() {
  digitalWrite(LED_PIN, HIGH);
  delay(1000);
  digitalWrite(LED_PIN, LOW); 
  delay(1000);
}
$ platform run

本当はPlatformIOでアップロードまでしたかったんですが、やり方がわかりませんでした…。

$ avrdude -c usbasp -p m328p -U flash:w:".pioenvs/328p16m/firmware.hex"
avrdude: error: could not find USB device with vid=0x16c0 pid=0x5dc vendor='www.fischl.de' product='USBasp'

avrdude done.  Thank you.

おやUSB deviceが見つからないと言われます。ハードウェアを間違えたのでしょうか?そうではありません。リセットボタンを押さないとUSBaspのブートローダーが反応してくれないのです。

ATmega328Pの13ピン(Enable boot loader)がGNDに落ちている事を確認したらタクトスイッチを一度押してください。その後、もう一度コマンドを実行すれば、今度はうまく書き込めたはずです。(ダメなら回路が間違っているかもしれません。)

うまく書き込めればLEDがチカチカすると思います。

まとめ

  • Digisparkと同じ事はATmega328Pでも可能
  • ATtinyよりも性能が高く、I/Oの数が多いので色々と使い勝手がいい
  • 安価でスケッチをUSB経由で焼き込めるという利点も大きい

といったところでしょうか。それではごきげんよう。

erukiti
React/TypeScript/VSCodeやメタプロが好きです。元々バックエンドエンジニア経験および、UNIX/Win32ネイティブアプリ開発経験の方がフロントエンド経験より遙かに長いので、フロントエンド初心者です。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした