戻る

AVRに書き込む

AVRでプログラムを動かすためには,パソコン上でプログラムを書いて,AVRに書き込む必要があります.

ソフトのインストール

ダウンロードの仕方が分からない場合や面倒くさい場合は,言ってくれればフラッシュメモリで渡します.(ロボ研の共有フォルダにもおいておきます)

コンパイラ

Windowsの人はWinAVRをインストール.

MacOSの人はOSX-AVRが便利です.

Linuxやその他の人は,avr-gccをmakeして使ってください.苦労するかもしれませんが….

ライタ

コンパイルしたプログラムをAVRに転送するソフトです.

USBaspという回路を使って書き込みます.avrdudeが標準的ですが,2006年05月に公開されたavrspxが使いやすい.

avrspxの方が使いやすく,書き込み速度も速いようです.MacOS用は無いのか?ってなわけでMacOSに移植したものを置いておく(USBasp専用.FreeBSDでも使えました)

WinAVRに付属しているavrdudeはUSBaspに対応していない(気がする).

ヒューズの設定

AVRの動作モードは幾つかあって,ヒューズというものを設定する必要が有ります.ヒューズというと一度書き換えると終わりみたいですが,何度も書き換えられます.

今回は,ATMEGA88の動作クロックを8MHzに設定します.

これは,最初に一度だけやれば,次回からは必要ありません.もちろん,AVRを新しいものに交換したりした場合は,もう設定しなおす必要があります.

avrspxを使う場合

以下のコマンドを打ち込んでください.

avrspx -pu -d60 -fl11100010

avrdudeを使う場合

ソフトから書き込み速度の調節が出来ないので,ジャンパを差し込む必用があります.

avrdude -c usbasp -p m88 -U lfuse:w:0xe2:m

詳しくは,後藤君に聞いてください.

コンソールについて

コンソール上でコマンドを打ち込んでプログラムを実行できるようにしておきましょう.

Windowsの場合は「コマンドプロンプト」を使います.コマンドプロンプトは,スタートメニューのプログラムの「アクセサリ」の中に入っています.

コマンドを打ち込む前に,作業用のディレクトリ(フォルダ)に移動しましょう.目的のディレクトリに移動するためには,

cd ディレクトリ名 [Enter]

とします.

フォルダをウインドウにドラッグ&ドロップすると,ディレクトリ名が貼り付けられるので活用しましょう.

プログラム例

PORTDのLEDをON/OFFするプログラムです.内容の解説は次回やるので,ここではなんとなく雰囲気だけ見てください.テキストエディタにコピーして貼り付けて,led_test.cという名前で保存してください.

#include <avr/io.h>

// 指定された時間だけ待つ
void wait(uint16_t w){
	while(w--){
		volatile uint16_t i=200;
		while(i--);
	}
}

int main()
{
	DDRD=0x0F;
	for(;;) {
		PORTD = 0x0F; // ON
		wait(1000); // 少し待つ
		PORTD = 0x00; // OFF
		wait(1000); // 少し待つ
	}
}

コンパイル

以下のコマンドで,AVRに書き込むための.hexファイルが作成できます.

avr-gcc -mmcu=atmega88 -Wall -O2 -o a.out led_test.c
avr-objcopy -O ihex -R .eeprom a.out led_test.hex

まず,avr-gccでコンパイルして,objcopyで書き込むためのhex形式のファイルに変換しています.

書き込み

書き込み時には,マイコンの方の電源を入れておくのを忘れないでください.電源を切ったまま,何度も書き込もうとしたり,書き込みの最中に電源をON/OFFすると,ヒューズの設定がおかしくなって,それ以降,書き込めなくなることがあるようです.

avrdudeの場合

avrdude -c usbasp -p m88 -U flash:w:led_test.hex

avrspxの場合

avrspx -pu led_test.hex

LEDが点滅することを確認してください.

スクリプト,バッチファイル

毎回,コマンドを入力するのは面倒なので,バッチファイルかシェルスクリプトを作っておくと楽です.

MacOS/Linux用

gcc-m88.sh

#!/bin/sh
avr-gcc -mmcu=atmega88 -Wall -O2 -o a.out $*
avr-objcopy -O ihex -R .eeprom a.out ${1%.*}.hex

write-m88.sh

#!/bin/sh
avrspx -pu -d2 $*

Windows用

ドラッグ&ドロップでコンパイルや書き込みが出来るようになってます.

コンパイルは,ソースファイルを「gcc-m88.bat」にドラッグ&ドロップ.エラーが出ずに「~.hex」というファイルが出来ればOK.エラーが無ければそのままコマンドプロンプトが閉じる.

書き込みは,出来た hex ファイルをwrite.batにドラッグ&ドロップ.これも,エラーが無ければそのままコマンドプロンプトが閉じる.

gcc-m88.bat

@echo off
SETLOCAL
set PATH=C:\WinAVR\bin;%PATH%
cd %~dp1

echo compiling %~nx1 ...

avr-gcc -mmcu=atmega88 -Wall -O2 -o %~n1.out %~nx1 %2 %3
set ERR=%ERRORLEVEL%
IF %ERR% NEQ 0 goto ERROR

avr-objcopy -O ihex -R .eeprom %~n1.out %~n1.hex
set ERR=%ERRORLEVEL%
IF %ERR% NEQ 0 goto ERROR

del %~n1.elf

exit /B

:ERROR
pause
exit /B %ERR%

write.bat

@echo off
SETLOCAL
cd %~dp1
echo writing %~n1.hex ...

avrspx -pu -d2 %~n1.hex
set ERR=%ERRORLEVEL%
IF %ERR% NEQ 0 goto ERROR

exit /B 0

:ERROR
pause
exit /B %ERR%

この文書の履歴

Copyright © binzume all rights reserved.