2011年5月5日木曜日

【AVR】BASCOM-AVR Initial setting

BASCOM-AVRの初期設定
 しばらく前のBlogでは40pin28pinのAVRマイコンを扱っている。それぞれAVRマイコンの機能概要を紹介し、テスト用基板の例を載せておいた。 こうしたテスト基板はニーズがあるらしく検索経由etc.でそこそこのアクセスを頂いている。

 もちろん例示したような回路でなくもっと簡単に始めることもできる。しかしFullに機能が載った回路を標準にしておくと有利だ。不要な部分を省けば根幹部分の共通化が図られている。そうすればプログムを書く時にも便利になる。

 BASCOM-AVRの初期設定も使用するポートが決まっていればデフォルト設定で行ける。 写真は少々旧式化してきたATmega8だが、前のBlogの例に従い28pin AVR用テスト回路に準拠して作ることにした。今度の製作で必要な機能はごく少ないので小さな基板に載せている。 28pinのATmega8シリーズならどのチップにでも載せ換え可能だ。

 なるべく共通化しておきたいのは、ISP/SPIのポート割り付け、LCDモジュールの接続ピン、RS-232Cの接続ピン、スイッチやロータリエンコーダの接続ピン、I2Cの接続ピンなどである。 これらをできるだけ共通化しておけば、初期設定が容易なだけでなく、誤りが防止できプログラムの載せかえも容易になる。

# 以下はBlogで紹介済みの28pin AVRマイコン用テスト基板のBASCOM-AVRに対する初期設定の様子である。回路図だけではなく、その設定手順も書いておかねば片手落ちだ。

Chipを選択・1
 BASCOM-AVRを立ち上げたら、まずはOptionメニューからChipの選択を行なう。 図の様に、Oprion→Compiler→Chipと進み次の画面へと進むことから始める。

 注)BASCOM-AVRコンパイラへの直接指示コマンドである:
$regfile=mega8def.dat
$crystal=8000000
・・・と言うコマンドをプログラム先頭に記述し、以下と同じ内容のセッティングを行なう方法もある。その方がプログラムだけを見た時には明示的でわかり易いかも知れない。但し、以下の方法でも支障は感じないので画面から初期設定する方法で行くことにする。

Chipの選択・2
 チップ定義ファイルを選択する画面が現れる。 図の窓から、これから使用するチップの定義ファイルを選択する。

 図はATmega168の例である。 ここではATmega8を使うので、「mega8def.dat」と言う定義ファイルを選択する。 もちろん、定義ファイルを変更すれば、この画面の各窓に表示されるFlashメモリの容量などは異なる。 この画面においてはチップの定義ファイルを選択するだけで、他の部分(窓)をさわる必要はない。




MPUクロックとシリアル・ボーレートの設定
 続けて、赤で囲ったCommunicationタブをクリックするとこの画面が現れる。ここでは、実際にMPUが動作するクロックの周波数を設定する。

 BASCOM-AVRは設定したMPUクロック周波数に基づいて、シリアル・コミュニケーション(RS-232C)のボーレートを計算・設定する。ここにクロック周波数のインプットがあるのはそうした意味からだ。

 3段目の窓に「Error」(エラー)とあるが、これは入力したクロック周波数で最適化した際に発生するボーレートエラーである。 一般に〜2%程度なら問題ない筈だが、そもそもシリアル通信しないのなら誤差が幾らであっても気にしない。

 また、プログラム中で頻繁に使う「wait/waitms/waitus」の各コマンドもクロック周波数の影響を受ける。ここに入力された周波数に基づいて時間計算され実行されるからだ。 従ってクロック周波数はわかる範囲で正確な数字を入れておく方が良い。(内部クロックはそれほど安定ではないのでせいぜい2〜3桁分の有効数字を入れれば十分だと思う)

 クロックはHz単位で入れる決まりなので、例えば8MHzなら「8000000」即ち8の後にゼロを6個入れる。図の例では27MHzなので、27の後ろにゼロが6個である。

 言うまでもないだろうが、ここでインプットした周波数でMPUが動作するのではない。それは逆で、MPUが動いている周波数をBASCOM-AVRに教えるのが目的だ。 実際のクロック周波数はヒューズ・ビットの設定と外部に接続した水晶振動子の周波数などで決定される。ここでは実際にMPUが動作している周波数をインプットする。

 いま製作した基板では内部クロック発振を使い、ヒューズ・ビットを書き換えクロック分周器はOFFして使うから8MHzで動作することになる。従って、「8000000」とインプットしておいた。なお、ヒューズ・ビットについては別のBlog(←リンク)で扱っている。

(参考:メーカー保証外だが、20MHz品のAVRマイコンは30MHzくらいまで平気で動作するようだ。少々旧型で16MHzが仕様のATmega8はせいぜい20MHzくらいが良い所だろう)

I2C、1-Wire、SPI/ISPのポート設定
 次にI2Cインターフェース、1-Wire通信、及びSPI/ISP通信に使うポートを設定する。赤で囲ったタブをクリックする。 このうち特に重要なのはSPI/ISPの設定だ。 もちろん、プログラム中でI2Cや1-Wireを使うならこれらの設定も必須になる。


 なお、SPI/ISPに使うピンはAVRマイコンの品種により決まっている。 ATmega8のほか、28pinのmega8シリーズであるATmega48、ATmega88、ATmega168、あるいはATmega328なら、図の設定がデフォルトになる。なお、この中でSSピンは特に設定不要なようだが、一応図のようにしておけば良いようだ。

 注:I2Cや1-Wireはマイコン相互や周辺用ICとデータ通信するための規格で、簡単に説明するのは困難なのでWikipediaやBASCOM-AVRのマニュアルなどを参照。 28pin AVRマイコン用テスト基板の設計に合わせるなら、I2CのSCLport=PORTC.5、SDAport=PORTC.4にセットする。もちろん、これらを使うつもりが無ければ設定は何でも良いだろう。

LCDモジュールの設定
 もっとも簡単で手軽に文字や数字情報を表示できるのが、標準タイプのLCDモジュールである。 図の赤く囲ったタブをクリックする。 キャラクタ・タイプのLCDモジュールの配線接続をここで設定する。

 左上の窓で、使用するモジュールのタイプを設定する。ここでは16文字2行のタイプを使っているので、「16*2」を選ぶ。 またBUS modeは4ビット、Data modeはpinがデフォルトの筈だ。 同様にLCD-AddressとRS-Addressの部分も変更せずそのままで良い。

 右側の窓で、LCDモジュールの各端子をマイコンのどのポートに接続するのかを設定する。製作した基板は前のBlogにある28pinAVRマイコン用テスト基板と同じ配線になっている。 そのままの配線を踏襲したので図と同じに設定すれば良いわけだ。 LCDと各ポートの設定にはかなり自由度があるので製作物の都合で変更しても良い。 LCDモジュールへのデータの流れが他の接続物と干渉しないよう旨く設計すればポートの共用も可能だ。上手に工夫して少ないポートをなるべく効率的に使いたいものだ。

以上、全ての設定が済んだら画面下の「OK」と言うボタンを押して終了する。 あらためて確認したいなら、もう一度Option→Compilerのメニューから始める。

参考:LCDモジュールの設定は上記のほかにプログラム中に記述する方法でも可能だ。
Config Lcd文などを使う。
例えば:
Config Lcdbus =4
Config Lcd= 16 * 2
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.0 , Db7 = Portb.1 , E = Portb.3 , Rs = Portb.2
・・・と言うように記述する。詳細はBASCOMマニュアルのConfig LCDなどの説明を参照。

テストプログラム
 定番の「LEDチカチカ」と「LCD表示」の簡単プログラムだ。 まずは、これがうまく行けば配線に問題が無く上記の設定にも間違いはないと言う最低限の確認ができる。

 「LEDチカチカ」など今さら馬鹿らしいかもしれないが、基板を製作したらまずは最低限の動作確認をしておくべきなので少なくとも1回は実施している。 丁度テスターで各部の導通テストやB+がアースにショートしていないか確認するようなものだ。 基本的なことが確かでなければ、以後のプログラムはけしてマトモには動かないだろう。

参考:図はATmega168用なので、チップに合わせて適宜変えれば良いが確認するだけの目的なら同じでも何ら支障はない。

動作成功
 上記の設定を行ない、さっそくチップにプログラムを書込んでみた。

 このようにLCDに表示が出てポートに接続したLEDもチカチカを始めた。 これで配線に誤りは無く設定も問題なくできたことが確かめられた。たぶん、この先無用な心配をせずに進めることができるだろう。


                 −・・・−

後記
 かなり暫くぶりにAVRマイコン回路を作成した。回路は定番を踏襲するので、以前のBlogを参照しながら問題もなく進められる。今回は必要な機能に絞って小型基板に載せた。 さて、一旦配線も完了しプログラムを始める前の段になって少々手間取った。BASCOM-AVRの設定とか初期に必要な作業をだいぶ忘れてしまっていたのだった。

 あいにく、件のBlogにはハードウエアやチップのことは書いてあってもボード製作後の初期設定に関しては全くなかったのだ。 むかしのweb記事にはその辺りも書いてあったのを思い出しつつ何とか作業を進めることができた。 結局、マイコン製作は配線図だけでは足りないのだ。 最低限、想定したコンパイラなりツールに合わせた初期設定の部分まで書いておくべきなのであった。このあたりは少々反省点。

 さっそく、振り返って辿った手順を記述しておくことにした。 もちろん、これは何時ものように自家用の備忘録である。 そう言えば、ヒューズ・ビットも書き換えたので設定方法を書いておくべきだった。それはまた改めてにしよう。(笑)  de JA9TTT/1

参考)AVRマイコン活用に必須な「ヒューズ・ビット」については:→こちら(←リンク)のBlogで。

(おわり)

6 件のコメント:

JG6DFK さんのコメント...

おはようございます。

仕事で久しぶりにソフト開発をやることになったのですが、ターゲットがPICで、AVRには今なお触れずじまいです。Hi.

それはさておき、汎用ボードを作っておくと便利なのは確かですが、1つのピンに複数の機能が割り当てられているので、どれを生かすかは頭の痛いところではないかと思います。また、顧客から回路を提示されてしまうと、こちらで思い通りに、というわけにもいきません。Hi.

あと、これには私自身も巻き込まれましたが、知人の会社でメーカー製の汎用ボードでデバッグをしたところ予期せぬ動作をし、原因究明に多くの時間を費やす結果になりましたので、汎用ボードを使う際はこういった「落とし穴」にもよく注意する必要があるでしょう。

もっとも、すべての仕様を自身できちんと把握できていたら、このようなことは起きないのかもしれません。

蛇足ながら、今度の開発ではC言語を使うことにしましたが、やはり高級言語は楽でいいです。依頼主はBASICを所望していますが、PICのプログラム領域は相変わらず8Kワードといったレベルなので、BASICではすぐにオーバーフローします。Hi.

TTT/hiro さんのコメント...

JG6DFK 児玉さん、おはようございます。

さっそくのコメント有難うございます。
> 1つのピンに複数の機能が割り当てられているので・・・
そのあたりの割り振りは悩む所ですが、ピン変化割り込みとかカウンタ入力、シリアルポート等はハードウエア的に決められているので、なるべくこれらに支障のないようにしておくと後々面倒が無いようですね。テスト基板は一応その辺を考慮してあります。

> 「落とし穴」にもよく注意する必要がある・・・
これは、マイコン回路の宿命のようなものですね。機能やピンを共用化しているので副作用が現れることもあります。MPUのバグやコンパイラのバグもあるので悩むことにも・・。hi hi

> 依頼主はBASICを所望していますが・・・
マイコン開発は今もC言語が主流のようですからPICなら尚更その方が良さそうですね。 BASCOMは手軽でサンデープログラマには良いのですが、吐き出されたオブジェクトの中身が見えないのでトラシューが厄介なこともあります。トラブルの少ない簡単なプログラム向きと言うことでしょうね。

PICの開発作業(お仕事?)頑張って下さい。

T.Takahashi JE6LVE/JP3AEL さんのコメント...

おはようございます。

Magaシリーズも種類が増え、価格も下がりましたので
最近はよほど簡単な物はtinyを使いますが、
それが以外はMegaシリーズを使うようにしています。
容量が足りなくなっても回路の変更無く容量の多いマイコンに変えられるのは助かりますね。

ただMegaシリーズはピンアサインが複雑なのでどう使うか悩みますが。Hi

最近デジット(共立)からもTmega168を搭載したAVRトレーニングボードが発売されています。
http://blog.digit-parts.com/archives/51633828.html

TTT/hiro さんのコメント...

JE6LVE 高橋さん、おはようございます。

コメント有難うございます。
> Megaシリーズを使うようにしています。
ずいぶん安くなりましたのでtinyシリーズは存在意義も薄れてきましたね。mega8系はピンコンパチでメモリ容量が色々あるので便利です。おなじ系列でもmega8は初期型なので陳腐化する前に早めに使うことにしました。メモリ量は4kBもあれば十分なんですけれど。(笑)

> ピンアサインが複雑なのでどう使うか・・・
機能の割に少ないピン数なので兼用が多くて使いにくいですね。8bit Fullのポートが少ないのも難点です。そうかと言って40pinは大き過ぎますし。hi

> mega168を搭載したAVRトレーニングボードが・・
情報ありがとうございます。 秋月の↓コレもmega168/328用ですがイタリアのアレの準互換品のようですね。@150円と安いので旨く流用できると良いのですが・・・設計はだいぶ違いますけど。hi hi
http://akizukidenshi.com/catalog/g/gP-04399/

T.Takahashi JE6LVE/JP3AEL さんのコメント...

こんばんわ~ 

今日は大阪日本橋にてでプチオフでした。
3人でパーツショップを徘徊してきましたw

>ずいぶん安くなりましたので・・
秋月では安いのですが共立グループでは2313が@300円以上もします・・^^;
共立はなぜかAVR高いんですよね~

>秋月の↓コレもmega168/328用ですが・・
エレキジャックNo29のArduino Diecimila互換 eJackinoの互換基板だそうです(ややこしい^^;)
@150円は安いですね。
お気に入りに登録しましたので次回注文時に購入してみます。

TTT/hiro さんのコメント...

JE6LVE 高橋さん、こんばんは。

再度コメント有難うございます。
> 日本橋にてでプチオフでした。
オフ会楽しそうですね。皆さんでどんな買物をされたんでしょう。hi

> 共立グループでは2313が@300円以上も・・・
秋月が特別に安い感じですね。Dig-Keyの纏め買いと同程度ですからお買い得だと思っています。mega8系も安くて有難いです。どんどん使いましょう。(笑)

> ・・の互換基板だそうです(ややこしい^^;)
そのややこしい基板はたったの@150円ですが良くできてます。これに合わせて作ると言うのも手ですね。Arduinoに拘らず、単なるAVRマイコン基板と思って使うのも良さそうです。先日お試しに買っておきました。hi