1. カメレオン AVR 基礎 1.1 カメレオン AVR ボードについて (1) カメレオンAVRボードとは カメレオンAVR ボードは,MCU(micro control unit) とCPLD(complex programmable logic device) をボード上で密に結合した多目的用途向けの組込み用ボードです. 仙台電波高専と ( 有 ) エグゼキュートシステム社が共同で開発しました. 設計者は, 開発用パーソナルコンピュータ上でソフトウェア (MCU) およびハードウェア (CPLD) の開発を行い, その結果の設計情報を カメレオンAVR ボードのMCUやCPLDにダウンロードすることでシステムが完成します. 設計情報は, 不揮発性 ( 電源が切られてもデータが消去されない ) メモリに格納されるため, 電源をオフにしても再度電源を入れると直ちに動作を再開することができます. このボード用いてソフトウェアとハードウェアのそれぞれの特徴を活かしたシステムを実現することができます. 図 1-1にその外観を示します. 左右および下側の3 個のコネクタを介して他のボードに接続が可能であり, 拡張性に富んでいます. 教育用だけではなく, 実際に組込みシステムに搭載して機器の制御に利用することができます. MCU ATmega64L (Atmel 社 ) 図 1-1 CPLD MAXⅡ (EPM570T100C5) (altera 社 ) カメレオン AVR2 ボードの外観 図 1-2 に カメレオン AVR ボードの基本的な構成を示します. ボード上には,8 ビット MCU(ATmega64L, Atmel 社 ) と CPLD(MAXⅡ-EPM570T100C5,Altera 社 ) が搭載され, 前者にはユーザが設計したソフトウェアが, 後者にはハードウェアが実装され, それらが統合してフレキシブルで, かつ高速な処理を可能にしています.MCU と CPLD 間は, 高速なシリアル通信で接続され, お互いに必要なデータをやり取りすることができます. 図 1-2 カメレオン AVR ボードの基本構成 - 3 -
MCU は, メモリとしてフラッシュメモリ 64Kbyte,EEPROM2Kbyte,SRAM4Kbyte を持ち, タイマ / カウンタ, 高速シリアル通信 (SPI など ), 割り込みコントローラ,10bitA/D 変換器など高機能な周辺デバイスを豊富に有しています. 一方,CPLD は, ユーザが HDL(hardware description language) で設計した回路情報を JTAG コネクタを介してダウンロードすることで瞬時に希望する回路を実現することが可能です.CPLD の規模は, ロジックエレメント 570 個, ユーザ使用可能な IO ピン 76 個であり, 比較的規模の大きな回路を実現することができます. MCU も CPLD も不揮発性のフラッシュメモリを内蔵しており, 電源をオフにした後に再度投入した場合にもダウンロードされたプログラムや回路情報は消えずに, 続けて実行することができます. 図 1-3 は, カメレオン AVR ボードの部品配置図を示します. AC アダプタ JTAG (USB/Byte blaster) SPI (AVR ISP ライタ ) MCU CPLD USB 注 ) コネクタJ2,J3,J5のピン仕様はカメレオンAVRボードハードウェアマニュアルを参照して下さい. 図 1-3 カメレオンAVRボードの部品配置図と機能 - 4 -
(2)MCU の基本的な仕様 MCU の主な特徴を以下に列挙します. ATMEL ATmega64L 高性能低消費電力 8 ビットマイクロコントローラ 131 命令 ( 多くは 1 サイクルで高速実行, 乗算命令は 2 サイクル ) 1 バイト汎用レジスタ 32 個動作速度 8MHz 豊富なメモリ構成フラッシュメモリ 64k バイト,EEPROM2k バイト,SRAM4k バイト 内蔵周辺機器 8/16 ビットタイマ カウンタ : 各 2 個, 実時間カウンタ :1 個, 各種 PWM 出力機能 A/D 変換器 :8ch10 ビット, ウォッチドッグタイマ 豊富な通信機能 JTAG インタフェース, バイト対応 2 線シリアルインタフェース, SPI シリアルインタフェース (3)MCU の内部構造とピン配置 図 1-4 内部構造図 1-5 ピン配置 32 個の汎用レジスタはどれもほぼ同じように使えるため, 柔軟性が高い. 豊富なメモリ構成に加え, タイマ カウンタ,A/D 変換器などの基本的な周辺機能および豊富な通信機能を内蔵し,1 チップ構成でシステムを構築することが可能. 入出力ピンに複数機能を持たせて兼用とすることにより, パッケージの小型化を図っている. - 5 -
1.2 カメレオン AVR 指南について カメレオン AVR ボードを用いて MCU や CPLD の設計実習を効果的に行うためのインタフェースボードが, カメレオン AVR 指南 です. ボードの外観を図 1-6 に示します. ボード上には, 表示用に 4 個の 7 セグメント LED,16 個の LED,1 個の液晶表示器 (LCD) が実装されています. また,16 個のトグルスイッチおよび超音波測距回路,2 対の赤外線通信回路, ステッピングモータ,DC モータ,RC サーボモータの駆動回路が備わっています. 設計実習を行う場合には, 図 1-7 に示すようにカメレオン指南ボードの中央の 3 個のコネクタにカメレオン AVR ボードを差込んで利用します. 図 1-6 カメレオン AVR 指南 2 ボードの外観 図 1-7 カメレオン AVR 指南 2 ボードにカメレオン AVR2 ボードを接続した様子 - 6 -
カメレオン AVR 指南 ボードの配置図を図 1-8 に示します. 図 1-8 カメレオン AVR 指南ボードの部品配置図と機能 表 1-1 入出力ポートの割り付け MCUport 信号仕様 備考 PB0 SS SPI/ISPライタ PB1 SCK SPI/ISPライタ PB2 MOSI SPI/ISPライタ PB3 MISO SPI/ISPライタ PB4 LED D2 カメレオンAVRボード PB5 SW S3 カメレオンAVRボード PB6 PB7 DCモータ PC0~7 DB0~7 指南ボードLED PD4~7 ステッピングモータ PE2 SB5 指南ボードSW PE3 RCサーボモータ PE4~5 アナログ出力 PE6~7 SB6~7 指南ボードSW PF0 アナログ入力 JP2:CdS/ 外部切替入力 PF1 アナログ入力 PF2~7 LCD PG0~4 SB0~4 指南ボードSW - 7 -
1.3 組込み系におけるソフトウェア (1) 組込み系ソフトウェアとはソフトウェアというと, パーソナルコンピュータ (PC) 上で日常使っているワープロソフトや表計算ソフトを思い浮かべる人が多いと思いますが, 実は PC 以外のさまざまな機器でもソフトウェアが使われています. 例えば, 家電製品 ( 炊飯器, 電子レンジ, テレビ, 電話, その他多数 ), 携帯電話, 自動車といった身近なものから, 工場で働く制御機械やロボット等, これらの機器にはコンピュータが組込まれていて, ソフトウェアの記述を元に動作しています. このように機器に組込まれたコンピュータ用のソフトウェアのことを 組込み系ソフトウェア と呼びます. PC 系ソフトウェア ( ここでは組込み系ソフトウェアと区別するため,PC 上で使うソフトウェアをこう呼ぶことにします.) と組込み系ソフトウェアとの違いを以下の表にまとめてみました. 表 1-2 PC 系ソフトウェアと組込み系ソフトウェアの違い PC 系ソフトウェア 組込み系ソフトウェア 主な処理内容 データの計算処理 各種センサ情報の取り込み, 各種アクチュエータの制御, データ通信制御, その他周辺機器の制御, データの計算処理 ハードウェア リソース 制限なし. お金があれば大規模化も必要最小限の規模に抑える必要がある. 可能. 処理時間に関する制限 特にない. 処理速度はPCの環境によ機器によっては, 一定の時間的な制約が って変化する. ある. 信頼性 バグがあっても, 人命にかかわるようバグによる不具合で, 非常に危険な状態 な影響はほとんどない. になることもある. 主な処理内容では,PC 系ソフトウェアではデータの計算処理が主な仕事ですが, 組込み系ソフトウェアではそれ以外にセンサやアクチュエータといった入出力機器の制御や, データ通信, 周辺機器の制御と, いろいろな処理を考えなくてはなりません. ハードウェア リソースについては,PC は簡単に CPU やメモリ, ハードディスクといったスペックを変更できますが, 組込み系システムでは大きさや価格, 消費電力といった制約のため, 必要最小限の規模で実現しなければなりません. 処理時間についても制約があり, 組込み系ではマイクロ秒の範囲で規定される処理も珍しくなく, 処理時間の制御も重要です. さらには信頼性についても組込み系ソフトウェアに関しては慎重に対応する必要があります. 例えば車に組込まれる機器の場合, 組込み系ソフトウェアのバグが原因で車の制御がきかなくなったら, 大事故につながってしまいます. 組込み系ソフトウェアの開発では,PC 系ソフトウェアでは考える必要のなかった上記の特徴を考慮した設計が求められます. (2) 組み込み系システムのマイクロプロセッサ組込み系システムに利用されるマイクロプロセッサは, その用途に必要な性能を満たしていればよく, 通常は必要最小限の性能を持ったマイクロプロセッサが用いられます. そのため, 現在では PC のプロセッサとしては使われることのなくなった 8 ビットのマイクロプロセッサも, 組込み系システムの分野では現役で活躍しています. もちろん複雑な制御や計測が必要な場合には,16 ビット,32 ビットのマイクロプロセッサを用いることになります. また, マイクロプロセッサやメモリ, 周辺 IC をワンチップに収めたマイクロコントローラと呼ばれる IC もよく利用されています. 組込み系システムに利用される主なマイクロプロセッサ H8, M16, Super H( ルネサステクノロジ ),Power PC(IBM),78K0(NEC エレクトロニクス ),KC80, KC160( 川崎マイクロエレクトロニクス ),PIC( マイクロチップ テクノロジ ),AVR( アトメル ),etc. - 8 -
(3)ATmega64L ターゲットデバイスである ATmega64L は AVR と呼ばれる製品群の中の一つです.AVR はアトメル社の開発した 8 ビット RISC タイプの MCU(Micro Controller Unit) で, 世界中で多くの組込み機器に採用されています.AVR ファミリの登場時には各 MCU には AT90S**** という名前がついていましたが, 現在はピン数が 24 ピン以下の小規模な AVR は ATtiny シリーズ,28 ピン以上の AVR は ATmega シリーズと呼ばれています. この授業では ATmega シリーズの ATmega64 という AVR を対象としてプログラム例を示します. 組込み系ソフトウェアでは,PC 系ソフトウェアのように C 言語で書けばどの PC でもコンパイルして実行可能というわけではありません.AVR 以外のプロセッサをターゲットとする場合はハードウェアアーキテクチャに関する記述は大きく変更をする必要がありますし, 他の AVR をターゲットとする場合でも使用できない機能などが含まれていれば多少の書き換えが必要となります. しかしマイクロプロセッサのアーキテクチャや開発方法の基本は共通する部分が多くあるので, ひとつのプロセッサについてソフトウェア開発ができるようになれば, 他のプロセッサでの開発方法を修得するのはそれほど苦にはならないでしょう. 組込み系ソフトウェアの開発では, 要求仕様を満たすためにはマイクロプロセッサも最適なものを選択しなければなりません. 好みのマイクロプロセッサだけではなく, 必要に応じてどんなプロセッサでも使ってやろうという気持ちが大切です. (4) 組込み系システム開発環境組込み系ソフトウェアの開発では, 開発対象が PC ではないため,PC 系ソフトウェアとは開発の流れが異なります.PC 系ソフトウェアの場合,PC 上でソース コード記述, コンパイル, リンクをすれば, そのまま PC 上で実行することができます. 組込み系ソフトウェアの場合はソフトウェアを実行するターゲット ( マイコンボード等 ) 上では開発が困難です. そのため, 通常は PC 上でターゲット用の開発ツールを用いて開発を行い, ターゲットで実行可能なコードを生成し, そのコードをターゲットにダウンロードして実行します. 組込み系の開発ツールはクロス ツールと呼ばれ, コンパイラ, シミュレータ, エミュレータ等があります. シミュレータ, エミュレータは PC 上でターゲットの動作を模倣して動作確認が行えるツールです. ターゲットが手元にない時などには便利なツールです. 一般的にクロス ツールはターゲット毎に異なり, 価格も無償から高価なものまで様々です. 実際に組込み系システムを開発しようとする場合は, 開発するシステムの要求仕様を満たすことはもちろん, 開発環境についても考慮したほうがいいでしょう. (5) 開発言語マイクロプロセッサの開発言語として現在最も使用されているのは C 言語です.C 言語は PC 系ソフトウェアの開発でも主流の開発言語の一つなので, 既にご存知の方も多いと思います. そのほか OS を導入した組込みシステムでは Java もよく使われます. また組込み系では, デバイス制御や処理速度の高速化等のためにアセンブリ言語を使用することも少なくありません. 1.4 カメレオン AVR ボードの開発環境 カメレオン AVR ボードの開発環境を次図に示します. 開発用パーソナルコンピュータを用いて MCU のソフトウェアの開発や CPLD の回路設計を行います. ソフトウェアの開発では, 主に C 言語を用いて設計し, 統合開発環境 AVR Studio のもとで,C コンパイラ Win AVR を用いてコンパイルし, その結果を専用の書込み装置 (AVRISP ライター ) を用いて MCU のフラッシュメモリにダウンロードします. 一方, CPLD の回路設計では, ハードウェア記述言語である verilog を用いて設計し, 統合開発環境 QuartusII のもとで論理合成やレイアウト設計を行い,JTAG 経由でその結果を CPLD にダウンロードします. - 9 -
図 1-9 カメレオン AVR ボードの開発環境 下図は, ダウンロードするためのケーブルを接続したときの様子を示しています. この図では, 電源を USB から給電していますが,AC アダプタ (+5V, センターが +) から給電することもできます. 図 1-10 カメレオン AVR ボードに開発用ケーブルを接続したときの様子 - 10 -
1.5 AVR プログラミング C 言語による AVR プログラム開発環境は無償のツールで準備できます. ここでは統合開発環境として Atmel Studio 7 を用いた場合のプログラム開発の流れを示します. (1) プロジェクトを作成する Atmel Studio 7 を起動すると, プロジェクトを新規に作成するか, 既存のプロジェクトを開くかを選択するウィンドウが開きます. プロジェクトとはあるシステムを開発するのに必要なファイル群を管理する単位で,Atmel Studio でプログラムを開始するためにはまずはプロジェクトを作成する必要があります. 今回は新規にプロジェクトを作成するので,"New Project" を押します. 下図のようにプロジェクトを作成する工程が始まります. 使用する言語と開発目的を選択し,Name にはプロジェクト名を記入します. 今回は C 言語で実行可能プログラムを開発するので,GCC C Executable Project を選択し,Name は simpleio としました.Create directory for solution にはチェックを入れておきます. これで Solution name に記述してあるファイル名群が自動的に作成されます ( ファイル名はデフォルトでプロジェクト名と同じになります ).Location はプロジェクトに関するファイル群を保存する親ディレクトリを選択します. このディレクトリには各自で保存したい場所を選択してください. ディレクトリの選択で気をつけていただきたいのは, ディレクトリパスに日本語が含まれるとコンパイルが出来ませんので, 必ず日本語の含まれないパスを選択してください. 最後に "OK" を押します. 図 1-11 開発言語とプロジェクト名の設定 次にデバイスを選択する画面になります ( 下図参照 ). 図 1-12 デバイスの選択 - 11 -
Device では開発対象となる AVR の型番を選択します. 今回は ATmega64 を選択します. 以上の設定をして, 最後に "OK" を押します. 以上でプロジェクトが作成されて, プログラム開発画面へと移行します. (2) プログラム開発プロジェクト作成が終了すると, プログラム開発画面が表示されます ( 下図参照 ). 図 1-13 プログラム開発画面 次にコンパイル時に行われる最適化の設定をします. メニューから Project=>**** Propaties を選択, あるいはプログラム開発ウインドウのタブを選択します. すると次図のウィンドウが表示されます. 設定項目の中の Toolchain 内の AVR/GNU C Compiler の下の Optimization Level を "None(-O0)" に設定してください. 図 1-14 コンパイル最適化の設定 - 12 -
コンパイルの最適化とは,C 言語で書かれたプログラムをコンパイルする際に無駄な記述を排除し, コードサイズを小さくしてくれる処理です. 組込みシステムではメモリ容量が小さいことが多いため, 最適化は重要な機能です. しかし最適化は適切に使用しないと本来プログラムに必要な記述まで削除されてしまい, 正常に動作しなくなってしまうことがあります ( 参考資料 ). 今回の設定 "-O0" は最適化しないという設定です. プログラムにある程度なれてきたら, その他の最適化の設定も使用してみましょう. なお, 本テキストに掲載している全てのプログラムは最適化しない状態で動作確認をしています. 組込み系は入力が更新されないなどの誤動作を防ぐため, 最適化しない とするのが無難. ソースファイルのタブを選択し, 以下のようにプログラムを打ち込んでください. リスト 1-1 サンプルプログラム このプログラムは,AVR のあるポート ( ポート E の一部 + ポート G の一部 ) から 8 ビットデータを入力して, その値をそのまま別のポート ( ポート C) へ出力するプログラムです. プログラムの内容については後ほど詳しく解説しますので, 今はこの程度の理解でかまいません. プロジェクトをビルドするには, Build" メニューの "Build Solution" を選択するか, ツールバーの以下のアイコンをクリックします. 図 1-15 プロジェクトのビルド エラーがなければ,Output ウィンドウの最後に Build succeeded. ========== Build: 1 succeeded or up-to-date, 0 failed, 0 skipped ========== と表示され, ビルドが成功したことが分かります. もしエラーや警告が生じた場合は Output ウィンドウにメッセージが表示されるので, メッセージを参照してプログラムを修正し, 再びビルドをしてください. (3)AVRへプログラムファイルを書き込むデバッグが終了したらAVRへプログラムファイルを書き込みます. ここではAVRにデータを書き込む AVRプログラマには,ATMEL 社のAVRISP mkiiを使用します. その他のAVRプログラマを使用する場合は, 以降の記述を適切に読み替えてください. - 13 -
AVRISP mkii で AVR と開発用 PC を接続し,"Tools" メニューから "Device Programming" を選択します. プログラマーを選択する画面が表示されるので,Tool に "AVRISP mkii",device に "ATmega64",Interf ace に "ISP" を選択し,"Apply" ボタンを押します. 図 1-16 AVR プログラマの選択 プログラマの設定画面が表示されます.Memories タグの設定を以下のようにします.Flash の欄に今回ビルドした実行ファイル ( プロジェクトディレクトリ default simpleio.elf) を参照して選択 ( 下図参照 ). 図 1-17 プログラマ設定画面 上記設定が終ったら,"Program" ボタンを押します. これで AVR に実行ファイルがダウンロードされます. プログラムの結果はプログラマ画面下部のメッセージエリアに表示されます. 全て OK と表示されていれば正常にプログラムが終了したことを示しています. - 14 -
実際に実行ファイルをダウンロードした AVR で正しく動作しているか確認してみましょう. 今回使用している実習ボードでは, ポート E7,6,2 ビット, ポート G4,3,2,1,0 ビットに, それぞれ SW 入力インターフェイスの S9,10,11,12,13,14,15,16 のトグルスイッチが接続され, ポート C7,6,5,4,3,2,1,0 ビットにそれぞれ LED 出力インターフェイスの D9,10,11,12,13,14,15,16 の LED が接続されています. よって,S9~16 のトグルスイッチを ON/OFF することで, その値が D9~16 の LED に表示されれば正常に動作していることになります. 実際に実習ボードで確認してください. ATmega64L はデフォルトで ATmega103 互換モードになっている. 下位 5 ビットの入力が動作しない場合は, Fuses タグ内の EXTENDED Fuse を 0xFD 0xFF に変えること. 練習問題 1 1. サンプルプログラム (simpleio) を打ち込み, カメレオン AVR ボードに書き込み, 実習ボード上で動作を確認せよ. 2.ATmega103 互換動作時と ATmega64 動作時の違いをデータシートから調べ, 列挙せよ. - 15 -