ATMEGA88を使うことにしたのですが、シリアル制御を一から作るのも面倒くさい、ということで、ちょっと古いようですが、AVRLibを試してみることにしました。
まず、ZIPファイルをダウンロードしてきて、展開します。
環境変数AVRLIBに avrlib のディレクトリ位置を(avrlibの名前を)設定して、rprintf のサンプルディレクトリに移動。
makeすると、makeはされるのですが、ATmega163用にmakeされてしまいます。
今回のターゲットはATmega88なので修正を試みます。
現状の修正箇所は、
- サンプルプログラムの makefile の MCU の定義
「MCU=atmega88」に書き直します。 - サンプルプログラムの makefile の AVRLIB の設定
環境変数ではなく、ここで記述してみます。(未検証)
AVRLIB = /(ほげほげ)/AVR-PROJ/avrlib - サンプルプログラムの makefile の SRC の設定
timer.c を使うとレジスタ定義が異なるので、timerx8.c に変更 - サンプルプログラムの makefile の終わりの方の依存関係(dependencies)の修正
「timer.o : timer.c timer.h global.h」を「timer.o : timerx8.c timerx8.h global.h」に修正 - global.h の F_CPUの値の修正
現状、7372800 が選択されているが、内蔵8MHzを使用するので、8000000に修正
サンプルプログラムのプロジェクトディレクトリにも global.h がいるので、そちらも直す。 - 最近のGCCならCOFファイルはなくても大丈夫だったような気がするので、avrproj_make の「all :」の依存ファイルから $(TRG).cof を削除
- どうせなら書込みまでやってしまいたいので、avrproj_make の最後に
###### BLOCK 12) make instruction to delete created files ######prog: all
avrdude $(WRITER) -p $(WRITER_MCU) -F -U flash:w:$(TRG).hex -U eeprom:w:$(TRG).eep -U efuse:w:$(EFUSE):m -U hfuse:w:$(HFUSE):m -U lfuse:w:$(LFUSE):mを追加。(このままだと拡張ヒューズビット無しのCPUに書くとき困るけど、とりあえずそのままで・・・)
- 同じくサンプルのmakefileに
# FUSE BIT for ATMEGA88/168(default is E=0x01/H=0xDF/L=0x62)
EFUSE = 0x01
HFUSE = 0xDF
# LHUSE = 0x62
LHUSE = 0xe2# WRITER parameter
WRITER = -c avrispmkII -P usb
WRITER_MCU = m88を追加
とすることで、rprintfのテストを実施が通るようになりました。(サンプルプログラムの方の global.h を修正し忘れていて、通信速度がおかしく、しばらく悩んでしまいました・・・)
無事にシリアル通信が通るようになりました! |