(2017年7月16日)
AVR マイコンのプログラミングをラズパイ上でできるようにして、とても安価なマイコン電子工作環境を作ってみた。
参考にしたサイト:
ozzmaker.com: How to Program an AVR/Arduino using the Raspberry Pi GPIO
Adafruit: Program an AVR or Arduino Using Raspberry Pi GPIO
2017/08/23 追記:Arduino IDE 上でフラッシュ書き込み・ヒューズ書き込みができるように修正しました。
(1) ターミナルを開いて、sudo apt-get update
(最新の状態に更新)。
pi@raspberrypi:~ $ sudo apt-get update
取得:1 http://mirrordirector.raspbian.org jessie InRelease [14.9 kB]
取得:2 http://archive.raspberrypi.org jessie InRelease [22.9 kB]
...(中略)...
パッケージリストを読み込んでいます... 完了
pi@raspberrypi:~ $
(2) sudo apt-get install bison flex -y
(bison と flex をインストール)。
pi@raspberrypi:~ $ sudo apt-get install bison flex -y
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
...(中略)...
pi@raspberrypi:~ $
(3) Avrdude をダウンロード。(注:2017/07/16 現在、最新版は 6.3 だが、このバージョンだとうまく動作しない。6.2 をダウンロードすること。)
pi@raspberrypi:~ $ wget http://download.savannah.gnu.org/releases/avrdude/
avrdude-6.2.tar.gz
--2017-07-15 15:53:58-- http://download.savannah.gnu.org/releases/avrdude/
avrdude-6.2.tar.gz
download.savannah.gnu.org (download.savannah.gnu.org) をDNSに問いあわせて
います...
...(中略)...
2017-07-15 15:54:01 (1.05 MB/s) - `avrdude-6.2.tar.gz' へ保存完了 [909744
/909744]
pi@raspberrypi:~ $
(4) 展開して、ビルドの準備。
pi@raspberrypi:~ $ tar xf avrdude-6.2.tar.gz
pi@raspberrypi:~ $ cd avrdude-6.2
pi@raspberrypi:~/avrdude-6.2 $ ./configure --enable-linuxgpio
checking build system type... armv7l-unknown-linux-gnu
...(中略)...
DISABLED doc
DISABLED parport
ENABLED linuxgpio
pi@raspberrypi:~/avrdude-6.2 $
(5) ビルド、インストール。
pi@raspberrypi:~/avrdude-6.2 $ make
/bin/bash ./ylwrap config_gram.y y.tab.c config_gram.c y.tab.h `echo
config_gram.c | sed -e s/cc$/hh/ -e s/cpp$/hpp/ -e s/cxx$/hxx/ -e
s/c++$/h++/ -e s/c$/h/` y.output config_gram.output -- bison -y -d
updating config_gram.h
...(中略)...
make[1]: Leaving directory '/home/pi/avrdude-6.2'
pi@raspberrypi:~/avrdude-6.2 $ sudo make install
make install-recursive
make[1]: Entering directory '/home/pi/avrdude-6.2'
...(中略)...
make[1]: Leaving directory '/home/pi/avrdude-6.2'
pi@raspberrypi:~/avrdude-6.2 $
(6) 設定ファイルの編集。ちょっと大胆だけど、/root/.avrduderc
を作成する。
pi@raspberrypi:~/avrdude-6.2 $ sudo nano /root/.avrduderc
programmer
id = "linuxgpio";
desc = "Use the Linux sysfs interface to bitbang GPIO lines";
type = "linuxgpio";
reset = 17;
sck = 2;
mosi = 4;
miso = 3;
;
(7) 動作チェック。
今回は ATtiny2313 を使ってみた。ATtiny2313 と Raspberry Pi の GPIO を下のように接続する。
下のようにコマンドを入力してみる。
pi@raspberrypi:~/avrdude-6.2 $ sudo avrdude -c linuxgpio -p attiny2313
-v
こんな風に応答が帰って来れば成功。
Version 6.2, compiled on Jul 16 2017 at 07:52:04
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2014 Joerg Wunsch
System wide configuration file is "/usr/local/etc/avrdude.conf"
User configuration file is "/root/.avrduderc"
Using Port : unknown
Using Programmer : linuxgpio
AVR Part : ATtiny2313
...(中略)...
avrdude: safemode: Fuses OK (E:FF, H:DF, L:64)
avrdude done. Thank you.
(1) Arduino IDE は 1.8.3 を使う。Arduino.cc のダウンロードページ から "Linux ARM" を選んでダウンロードする。
(2) 展開する。ダウンロードしたファイルは、ホームディレクトリ (/home/pi
) にあるものとする。
pi@raspberrypi:~/avrdude-6.2 $ cd
# ホームディレクトリに移動
pi@raspberrypi:~ $ tar Jxvf arduino-1.8.3-linuxarm.tar.xz
# ダウンロードした Arduino 1.8.3 を展開
pi@raspberrypi:~ $ sh arduino-1.8.3/install.sh
# メニューアイテムとショートカットアイコンを作成
インストールすると、メニューの「電子工学」というところに Arduino IDE が登場する。
(3) Arduino そのもの (UNO とか) を開発するならここから即スタートでよいが、今は「AVR のマイコンチップ単体」を使いたい。そこで、「ファイル→環境設定」を開いて、「追加のボードマネージャのURL」を入力する。とりあえず、よく使いそうな2つを追加しておく。
https://mcudude.github.io/MiniCore/package_MCUdude_MiniCore_index.json
http://drazzy.com/package_drazzy.com_index.json
(4) 「ツール→ボード→ボードマネージャ」を開くと、一番下に "ATTinyCore" と "MiniCore" があるので、それらをインストールする。
(5) もう一箇所、「環境設定」の中の「より詳細な情報を表示する」にチェックを入れておく。(必ずしも必要ではないが、トラブルが起きた時に原因を追究しやすい)
(1) ~/arduino-1.8.3/hardware/arduino/avr/programmers.txt
を開き、先頭に以下の行を追加。
linuxgpio.name=Linux GPIO
linuxgpio.protocol=linuxgpio
linuxgpio.program.tool=avrdude
(2) ~/arduino-1.8.3/hardware/tools/avr/bin
ディレクトリに移動して、avrdude
を avrdude-orig
などにリネームする。
$ mv avrdude avrdude-orig
(3) 同じディレクトリに、avrdude
を以下の内容で作成。chmod +x avrdude
で実行属性をつけておく。
#!/bin/sh
sudo /usr/local/bin/avrdude "$@"
(4)「書き込み装置」で "Linux GPIO" を選ぶ。
Arduino IDE で、「新規ファイル」を開く。
(1)「ツール→ボード」で "ATtiny2313/4313" を選ぶ。
(2)「ツール→ Chip」で "ATtiny2313" を選ぶ。
(3)「ツール→ Clock」で "1 MHz internal" を選ぶ。
(4) ファイルの内容を以下のようにする。"my_blink" などの名前で保存しておく。
#define PIN 8 // Arduino の PIN 8 は ATtiny2313 の 11 ピン
void setup() {
// put your setup code here, to run once:
pinMode(PIN, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(PIN, HIGH);
delay(1000);
digitalWrite(PIN, LOW);
delay(500);
}
(5) 「スケッチ→マイコンボードに書き込む」を実行。ウィンドウ左上にある「→」ボタンでもよい。コンパイルエラーがある場合は、赤い文字でメッセージが表示されるので、プログラムを修正する。「ボードへの書き込みが完了しました。」と出れば OK。
(6) 下のように LED をつなぐ。ON: 1秒、OFF: 0.5 秒で点滅するはず。
(7) 設定を例えば "8MHz internal" に変えたいときは、IDE 上の設定を変更したあと、「ブートローダを書き込む」を実行すると、ヒューズが書き換えられる。フラッシュはいったん空になるようなので、改めてビルド・書き込みを行う必要がある。