ラズパイで AVR プログラミング

(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. Avrdude のインストール

(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.

2. Arduino IDE のインストール

(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つを追加しておく。


(4) 「ツール→ボード→ボードマネージャ」を開くと、一番下に "ATTinyCore" と "MiniCore" があるので、それらをインストールする。


(5) もう一箇所、「環境設定」の中の「より詳細な情報を表示する」にチェックを入れておく。(必ずしも必要ではないが、トラブルが起きた時に原因を追究しやすい)


3. Arduino IDE で LinuxGPIO 対応の avrdude を使えるようにする

(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 ディレクトリに移動して、avrdudeavrdude-orig などにリネームする。

$ mv avrdude avrdude-orig

(3) 同じディレクトリに、avrdude を以下の内容で作成。chmod +x avrdude で実行属性をつけておく。

#!/bin/sh
sudo /usr/local/bin/avrdude "$@"

(4)「書き込み装置」で "Linux GPIO" を選ぶ。


4. サンプルスケッチを作ってみる

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 上の設定を変更したあと、「ブートローダを書き込む」を実行すると、ヒューズが書き換えられる。フラッシュはいったん空になるようなので、改めてビルド・書き込みを行う必要がある。