書籍の紹介

本書は金沢工業大学で長年にわたり組込み教育に関わった著者が、その経験から得た知見を整理したものです。 小規模マイコン(AVR)へのプログラム実装をとおして組込み開発の基礎技術を学べるよう構成されています。 独習、高専、大学の授業、あるいは企業での研修にご活用ください。現役の技術者にも有益なヒントが得られる内容となっています。

書名 組込み開発のための実践的プログラミング
著者 鷹合 大輔、田村 修
出版社 近代科学社
発売日 2018/4/3
単行本 240ページ
ISBN-13 978-4764905610
価格 \2,916.-(税込)
購入 Amazon, 紀伊國屋
正誤表 第1刷用(2018.3.31) 第2刷(2020.3.31)で修正済

目次

1.基礎知識
1.1 組込み機器の構成
1.2 AVR マイコンのプログラム開発

2.組込みプログラミング入門
2.1 GPIO ポートの使い方1
2.2 GPIO ポートの使い方2
2.3 周辺機能と割り込み
2.4 ピン変化割り込み機能の使い方
2.5 内蔵タイマ機能の使い方1
2.6 内蔵タイマ機能の使い方2
2.7 USART シリアル通信機能の使い方
2.8 ADC 機能の使い方
2.9 フレームワークベースのアプリケーション開発

3.組込みプログラムの構成法
3.1 時間の管理
3.2 状態の制御
3.3 タスクの実行
3.4 システムの保守

付録. Arduino 基板の利用


開発環境の準備

OS やアプリケーションの更新に伴って情報が陳腐化し易いため、書籍から外しました。本ページを参照してください。

PC は USB の CDC プロトコルによって EMB-88 基板の AVR マイコンと通信します。Windows 10 以降、macOS および Linux では基板を PC に接続すれば OS 付属のドライバがロードされます (~ Windows 8.1 では手動でドライバを組み込めば動作するようです:サポート対象外ですがお問い合わせください)。

AVR マイコンの開発には Microchip Studio と呼ばれる 統合型開発環境(IDE)を用います。この Windows アプリケーションにはエディタ、コンパイラ、シミュレータ、デバッガなどが統合されており、無償でダウンロードできます。Microchip のサイト から
Microchip Studio for AVR and SAM Devices *** Web Installer
をダウンロードしてインストールしてください。

統合環境を用いず、使い慣れたエディタとコマンドラインからの make で作業するのであれば、
AVR-GCC (Windows コマンドライン用) を展開し、フォルダ内に avr-sample.zip を加えて使ってください。詳細説明は同梱の install.txt に記載してあります。

※macOS, Linux で開発する方は、GNU-C によるツールチェーンを構築してください。
  AVR Toolchain for Windows, Linux, macOS
  最新版 AVR-GCC (Linux/Windows コマンドライン用)
  CrossPack (macOS 用)
  Linux & macOS での Toolchain 構築手順

(Atmel Studio の基本操作)
・新規プロジェクト(File -> New -> Project...) で
  GCC C Executable Project とし、Name/Solution name と Location を指定
・Device は ATmega88PA を選択
・Project -> *** Properties... -> Toolchain ->
  C Compiler -> Symbols に F_CPU=8000000UL を追加
        Optimization で Optimize for size(-Os)

エディタで main.c のプログラムを編集し、F7 でビルドすれば、Output Filesとして ***.elf, ***.hex などが得られます。

EMB-88 基板のブートローダは HEX 形式のプログラムデータを読み込みます。基板は SW1 スイッチを押したままリセットするか、PC から DTR 信号を送ることでブートモードになります。

(a) 汎用ターミナルソフトウェアから HEX ファイルを送り込む方法
TeraTerm や HypoTerminal などを用いて HEX ファイルのテキストを転送します。DTR 信号を ON/OFF する機能があればブートモードへの切り替えが簡単です。

(con2com の使い方)
con2com は、DTR リセットとファイルのダウンロード が行える簡易なターミナルソフトウェアです。 コマンドプロンプトや PowerShell で使います。

(1) con2com.zip(2018-07-13更新版 UTF-8 コード対応) を解凍し、C:\Program Files (x86)\Atmel\Studio\7.0\shellutils のディレクトリに con2com.exe をコピーします。

(2) Tools -> Command Prompt を起動し、プロジェクトの HEX ファイルが生成されたディレクトリに移動します。

(3) EMB-88 基板が識別された COMポート番号(#の箇所)とボーレート、および HEX ファイルを指定して起動します。

・HEX ファイルのダウンロード後にシリアル通信を行う: con2com com# 38400 ***.hex
・ダウンロードのみでシリアル通信を行わない:    con2com com# 38400 ***.hex /
・ダウンロードせずシリアル通信のみ行う:      con2com com# 38400
・リセットしてブートモードに入るのみ:        con2com com# 38400 /

シリアル通信中に
・ESC キー を押せば DTR 信号を送出してブートモードになります。ここで '/' キーを入力すれば書き込まれているプログラムが開始します。また、HEX ファイルをテキストエディタで開き、ターミナルにコピー&ペーストすればダウンロード実行されます。
・Ctrl-C で終了します。

(b) Atmel Studio からファイル転送ソフトウェアを呼び出す方法
com2con を Atmel Studio のメニューに登録すれば、コンパイル後のキー操作で直ちにダウンロード実行できます。

(1) con2com.zip を解凍し、C:\Program Files (x86)\Atmel\Studio\7.0\shellutils のディレクトリに con2com.exe をコピーします。

(2) Tools -> External Tools で以下を登録します。

・Title: EMB-88 Programmer (&R)
・Commands: C:\Program Files (x86)\Atmel\Studio\7.0\shellutils\con2com.exe
  (実際の位置を [...] で選ぶ)
・Arguments: com# 38400 "$(TargetDir)\$(TargetName).hex" /
  (# は EMB-88 が識別された COM ポート番号)
・? Use Output window

(3) Atmel Studio でプロジェクトをコンパイル後、
  ALT-T, R
のキー操作でプログラムがダウンロード実行されます。

※ PC とシリアル通信するプログラムでは、ダウンロードのあと、Command Promptから
  con2com com# 38400
としてシリアル通信を起動します。
Atmel Studio からの再ダウンロードの前には Ctrl-C で忘れず終了してください。


ソースコード

書籍中で紹介・解説したプログラムリストと関連するプログラムをすべてダウンロードできますが、ご利用は書籍を購入された方に限定させていただきます。 ソースコードには著作権・著作者人格権が伴いますが、商業利用も含め各自の責任でご自由にお使いください。 なお、不具合のご指摘等は歓迎しますが、プログラムの動作構造や改造についての問い合わせにはお答えしかねますのでご了承ください。 書籍中の演習問題は、読者自身でプログラムを作成し試行錯誤してください(解答例はありません)。

プログラム (2018-04-03 更新)
サンプル (2018-07-13 更新)

教育機関向けに、金沢工業大学の演習で用いた課題プログラム集(設問PDFおよびプログラム解答例を約90問収録)を提供します。代表の方は お問い合わせください

(書籍中のプログラムのコンパイルと実行)
ダウンロードしたプログラムは、他の OS での利用も想定し、Atmel Studio でなくてもコンパイルできるよう Makefile を添付しています。Atmel Studio で利用するときは、(1) それぞれにプロジェクトを作成 / Properties ページの Build で Use External Makefile をチェック / 対応する Makefile および引数を指定 するか、(2) コマンドラインの make でビルドしてください。

(コマンドラインでの make)
(1) サンプルプログラムを解凍し、任意のディレクトリに配置する。
(2) Tools -> Command Prompt を開き、サンプルプログラムのディレクトリに移動する。
(3) Makefile を修正し、make でビルド
(4) 生成した HEX ファイルをターミナルソフトウェアでダウンロード実行
※ 最上位のフォルダで make すれば、すべてのプロジェクトをビルドします。


技術資料

EMB-88 基板を自作される方のための技術情報です。個人的な学習や社内研修などでの製作にお使いください(営利目的での使用は禁止します)。

回路図  部品表  ファームウェア

(製作上の注意)
・AVR マイコンは、内蔵のRC発振器で 8MHz のシステムクロックを生成します。メーカー出荷時に 10% 誤差まで校正されていますが、このままでは高速のシリアル通信時にエラーが多発する場合があります。ブートローダ書き込み時にクロック校正(誤差1%程度が可能)されることをお勧めします。
・マイコンへの書き込みには専用の書き込み器が必要です。
  AVR : AVRISP mkII, AVR Dragon など (純正品は RC発振器の校正ができます)
  PIC : PicKit III など (PIC16F1454 に対応しているもの)

(部品)
適宜、同等品を用いて製作してください。スルーホール部品のみで構成していますので、ブレッドボードでの実装も可能です。
・マトリクスLED は 8x8 ドットであれば使えますが、ピン配置が異なるものが多いので注意してください。また、マトリクスの内部結線(コモン側)が逆になる場合はプログラムの修正が必要になります。行(ROW側)がアノードコモンとなるBタイプを用います。
・集合抵抗は、実験の際にマトリクスLED を AVR から切り離せるよう、ソケット装着しています。入手困難であれば通常の抵抗を8本使ってください。
・フォトトランジスタは適当なものがなければ CdS セルで代用できますが、明抵抗が低め(口径が大きめ)のものを使ってください。
・2つのLEDは、高輝度または超高輝度タイプを使います。電流制限抵抗は LED の光り具合をみて調整してください。
・リセッタブルヒューズ(ポリスイッチ)は、実験中に誤って基板(もしくは外付け回路)で過大な電流が流れたときに PC からの電源供給を遮断します。 200~500mA 程度で遮断されるものを使ってください。

(ブートローダ)
EMB-88 のブートローダは HEX 形式のデータをフラッシュメモリに書き込みます。ページ単位でまとめて書き込みますが、この時、数ミリ秒の間 CPU 動作が停止します。PC からシリアル通信で送り込まれるデータが取りこぼされないよう、ページ書き込みの直前に CTS 信号により PC からのデータ送出を待たせます(実際には USB-USART変換の PIC マイコン内でバッファリングされますので、PC のターミナルソフトウェアでハードウェアフローを制御する必要はありません)。 EMB-88 用のブートローダを使うときは、CTS 信号を扱える USB-USART 変換アダプタを使ってください。

(ATmega168/328への換装)
EMB-88 基板では、標準の ATmega88 よりメモリサイズの大きい ATmega168 や ATmega328 を使うこともできます。いずれもフラッシュメモリの最後尾の1KB をブートプログラムが占有します。ブートプログラムのファームウェアや書き込みパラメータはそれぞれ異なります(添付の readme.txt を参照)。

※ATmega168/328 を使うときは、プロジェクトの Properties あるいは Makefile で Device 名を変更してください。

(内蔵 RC クロックの校正)
AVR マイコンの内蔵のRC発振器は、校正しておくことで安定したシリアル通信ができます。OSCCAL レジスタの値で発振周波数を補正できますので、あらかじめ見つけておいた最適値を起動直後に設定します。手順としては、

(1) 周波数補正(最適値探索)プログラムをロードして実行
  (SPI プログラマにこのための機能があります)
(2) 得られた補正値を退避してからブートローダを書き込む
(3) フラッシュメモリ末尾に補正値を書き込む

SPI プログラマとAVR を接続し、Tools -> Command Prompt で cal88.bat/cal168.bat/cal328.bat を起動すれば、上記の手順が実行されます。 ブートローダは始動直後に補正値を読出し、OSCCAL レジスタに書き込みます。

※発振周波数は電源電圧や周囲温度により変動します。実際に使用する環境に近い電源電圧と温度で書き込んでください。

(Arduino 互換基板の活用)
本書籍を用いた学習は、Arduino 互換基板で行うこともできます(本書の付録を参照)。プロジェクトのプロパティや Makefile の設定を以下に修正してください。

・Device を ATmega328 に変更
・システムクロックを 16MHz に変更(F_CPU=0x16000000UL)
・PB6,7 に水晶発振子が接続されるため、プログラム中でマトリクスLED, SW, ブザーなどのポートおよびピン指定を変更

書籍中のプログラム、特に外部デバイスを使うところは変更箇所が多くなります。ブザー鳴動中の SW2 読み込みには工夫が必要です。

EMB-ARD1EMB-ARD2
Arduino Uno 互換基板にブレッドボード実装   Arduino Nano 互換基板を搭載

Atmel Studio から使うときは、Tools -> External Tools に以下を登録します。

Title: Arduino Programmer (&Y)
Commands: C:\Program Files\Arduino\hardware\tools\avr\bin\avrdude.exe
Arguments: -C "C:\Program Files\Arduino\hardware\tools\avr\etc\avrdude.conf"
  -p atmega328p -c arduino -P COM# -b 115200
  -U flash:w:"$(TargetDir)\$(TargetName).hex":i

但し # は Arduino 互換基板が識別された COM ポート番号


基板の購入

EMB-88

スイッチサイエンス様でも同一価格で販売しています。
(代引きや即日発送もありますのでぜひご利用ください)

数量 単価(税別) 荷造手数料 ご注文
1~29 @\5,200.- @\500.-
30~ 割引あり 無料 お問い合わせください
書籍 @\2,700.- 無料 書店等で購入してください
書籍と基板
(10セット~)
@\6,800.- 無料 お問い合わせください

※ 在庫状況によっては納期が遅れます。
※ PayPal アカウントがなくともカードで入金できます。
※ 法人、教育機関の方、もしくは郵便振替をご希望の方は お問い合わせください

ページのトップへ戻る