ラズパイで 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

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) 設定ファイルの編集。

pi@raspberrypi:~/avrdude-6.2 $ sudo nano /usr/local/etc/avrdude.conf

linuxgpio と書かれた場所を探す(コントロール+W で検索できる)。次のような記述があるはず。

#programmer
#  id    = "linuxgpio";
#  desc  = "Use the Linux sysfs interface to bitbang GPIO lines";
#  type  = "linuxgpio";
#  reset = ?;
#  sck   = ?;
#  mosi  = ?;
#  miso  = ?;
#;

これを下のように変更。各行先頭の '#' を削除して、'?' を数字に置き換える。

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"
     User configuration file does not exist or is not a regular file, 
skipping
 
     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" を選んでダウンロードする。

2017/07/18 追記:1.8.3 は現行の最新版みたい。何を勘違いしていたのかな>自分

(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 が登場する。


Arduino そのもの (UNO とか) を開発するならここから即スタートでよいが、今は「AVR のマイコンチップ単体」を使いたい。そこで、「ファイル→環境設定」を開いて、「追加のボードマネージャのURL」を入力する。とりあえず、よく使いそうな2つを追加しておく。


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


もう一箇所、「環境設定」の中の「より詳細な情報を表示する:コンパイル」にチェックを入れておく。


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

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)「スケッチ→検証・コンパイル」を実行。エラーがある場合は、赤い文字でメッセージが表示されるので、プログラムを修正する。エラーがなくなればコンパイル成功。


(6) プログラムの書き込み。ファイル名は /tmp/..../ソースファイル名.hex となる。.... の部分は、コンパイルしたときのメッセージの最後の方に表示されている。


pi@raspberrypi:~ $ sudo avrdude -c linuxgpio -p attiny2313 -v 
-U flash:w:/tmp/arduino_build_705672/my_blink.ino.hex:i

(7) 下のように LED をつなぐ。ON: 1秒、OFF: 0.5 秒で点滅するはず。