WinAVRを使います.
Cで開発できるとはいっても,PCと違ってSRAMの量やスタックは限られているので, どんなコードにコンパイルされるか想像しながら書けないときついと思います. 少なくとも,AVRの命令セットを頭の片隅に置きながらプログラムを書いた方が 良いでしょう.
あと,GCCを使うと,コードの最適化で思った処理時間と大幅に食い違う部分が 出てくることがあるみたいです(最適化を切るのも手ですが). 指定した時間待つディレイ関数をインラインアセンブラで書いておくと便利です. ミリ秒単位のタイミングならそれで十分です. 本当に時間の精度が必要ならアセンブラで書きましょう. (タイマー割り込みくらいならCでも使えるか)
まず,AVR用のプログラムを作るためのコンパイラが必用です.
WindowsならWinAVRが簡単にインストールできていいです.
WinAVRをダウンロードします. SourceForgeからのダウンロードに慣れてないとかなり手間取るかもしれませんが, 良く見てリンクを辿っていけば,目的のファイルにありつけます.
困ったときは,AVR-Wikiの 情報や,データシートを参照すれば大抵解決します.
まず,言語の選択画面. 好きな言語でいいですが,とりあえずここでは「Japanese」にしておきます.
あとは適当に進めてください.
その他のOSの場合は,avr-gccをインストール.
PORTBを全てON/OFFする例です.LED等を繋げて確認してみてください.
#include<avr/io.h>
void wait(uint16_t w){
while(w--){
volatile uint16_t i=200;
while(i--);
}
}
int main()
{
DDRB=0xFF;
for(;;) {
PORTB = 0x00;
wait(1000);
PORTB = 0xFF;
wait(1000);
}
}
私は以下のようなバッチファイルを作って使ってます(2313用). 使うAVRに合わせてmmcuの指定を変更してください.ATMEGA88ならatmega88.
@echo off SETLOCAL set PATH=D:\Dev\WinAVR\bin;%PATH% cd %~dp1 echo compiling %~nx1 ... avr-gcc -mmcu=at90s2313 -Wall -O2 -o %~n1.elf %~nx1 %2 %3 set ERR=%ERRORLEVEL% IF %ERR% NEQ 0 goto ERROR avr-objcopy -O ihex -R .eeprom %~n1.elf %~n1.hex set ERR=%ERRORLEVEL% IF %ERR% NEQ 0 goto ERROR del %~n1.elf exit /B :ERROR exit /B %ERR%
詳しくは,使っているライタの使い方を参照してください.
USBasp用のavrdudeを使う場合の バッチファイルです.
@echo off SETLOCAL set PATH=D:\Dev\avr;%PATH% set DEVICE=m88 REM DEVICE=2313,m88,etc... cd %~dp1 echo writing %~n1.hex ... avrdude -c usbasp -p %DEVICE% -U flash:w:%~n1.hex -U eeprom:w:%~n1.hex set ERR=%ERRORLEVEL% IF %ERR% NEQ 0 goto ERROR exit /B 0 :ERROR exit /B %ERR%
C言語で開発できるとかなり楽ですね.