目次
第1部 PICマイコンと開発環境の概要
第1章 マイコンとプログラミング
- 1-1 マイコンとは
- 1-1-1 マイコンの出現と進歩
- 1-1-2 マイクロプロセッサとマイクロコントローラの差異
- 1-2 マイコンのプログラムとは
- 1-2-1 マイコンの構成とプログラム
- 1-2-2 プログラムと命令
- 1-3 2進数と16進数
- コラム なぜ1バイトが8ビットになったか
- 1-4 マイコンの動かし方
- 1-4-1 動かすために必要なこと
- 1-4-2 マイコンでできないこと
第2章 PICマイコンの概要
- 2-1 F1ファミリの位置付けと種類
- 2-1-1 PIC16F1ファミリの位置付け
- 2-1-2 PIC16F1ファミリの種類
- 2-2 PIC16F1ファミリのアーキテクチャ
- 2-2-1 全体アーキテクチャ
- 2-2-2 クロックと命令実行
- 2-2-3 プログラムメモリのアーキテクチャ
- 2-2-4 データメモリのアーキテクチャ
- 2-3 コアインデペンデントペリフェラル
- 2-3-1 CIPの種類
- 2-3-2 CIPの適用例
第3章 ハードウェア開発環境の概要
- 3-1 ハードウェア開発環境概要
- 3-1-1 ハードウェアツール
- 3-1-2 評価ボード
- 3-2 Curiosity HPCボード
- 3-2-1 Curiosity HPCボードの概要と実装内容
- 3-2-2 回路構成
- 3-3 Clickボード
- 3-3-1 Clickボードとは
- 3-3-2 mikroBUSとは
- 3-4 ブレッドボード
- 3-4-1 ブレッドボードとは
- 3-4-2 ブレッドボードへの部品実装の仕方
第4章 ソフトウェア開発環境と使い方
- 4-1 ソフトウェア開発環境概要
- 4-1-1 2種類の開発環境スタイル
- 4-1-2 ソフトウェアツール
- 4-2 ソフトウェアの入手とインストール
- 4-2-1 ファイルのダウンロード
- 4-2-2 MPLAB X IDEのインストール
- 4-2-3 MPLAB XC8コンパイラのインストール
- 4-2-4 MPLAB X IDEの外観
- 4-3 プロジェクトの作成
- 4-3-1 MPLAB X IDEの起動
- 4-3-2 プロジェクトの作成
- 4-3-3 ソースファイルの作成
- 4-3-4 既存プロジェクトの取り扱い
- 4-3-5 プロジェクトのプロパティ
- 4-3-6 DFPの役割と選択
- 4-4 エディタの使い方
- 4-4-1 エディタの画面構成と基本機能
- 4-4-2 エディタの基本機能とツールバーの使い方
- 4-4-3 エディタの各種設定
- 4-5 コンパイルと書き込み実行
- 4-5-1 コンパイル
- 4-5-2 書き込み
- 4-5-3 SNAP/PICkit4の詳細
- 4-5-4 ICSPの詳細
- 4-5-5 書き込み時の注意とツールのエラー対策
- 4-5-6 ファームウェア不具合の修理方法
- 4-6 実機デバッグの仕方
- 4-6-1 デバッグに使う例題プログラム
- 4-6-2 実機デバッグの開始とデバッグ用アイコン
- 4-6-3 デバッグオプション機能
- 4-6-4 メモリ内容表示
- コラム コンパイルエラーの原因発見のコツ
第5章 MPLAB X IDEの便利機能
- 5-1 MPLAB X IDEの便利機能
- 5-1-1 ファイルの登録と削除
- 5-1-2 複数プロジェクトの扱い
- 5-1-3 複数構成のプロジェクト
- 5-1-4 プロジェクトのコピーとRename
- 5-1-5 Dashboard
- 5-1-6 プロジェクト内検索
- 5-1-7 コンパイラの追加と削除
- 5-2 エディタの便利機能
- 5-2-1 ショートカットキー
- 5-2-2 構造体やレジスタの要素選択
- 5-2-3 検索と置換
- 5-3 デバッグ時の便利機能
- 5-3-1 Hyper Navigation
- 5-3-2 Navigationメニュー
- 5-3-3 Call Graph
第2部 MPLAB XCコンパイラの詳細
第1章 XCコンパイラの動作
- 1-1 コンパイル処理の流れ
- 1-1-1 MPLAB XC8コンパイルの処理の流れ
- 1-1-2 セクションとMAPファイル
- 1-2 プログラム実行時の環境
- 1-2-1 実行時のメモリレイアウト
- 1-2-2 main関数とスタートアップコード
- 1-3 プリプロセッサの使い方
- 1-3-1 プリプロセッサ指示命令の種類
- 1-3-2 #defineとマクロ機能の使い方
- 1-3-3 #includeの使い方
- 1-3-4 #ifによる条件付きコンパイル
- 1-4 デバイスヘッダファイルの役割
- 1-4-1 ヘッダファイルの呼び出し
- 1-4-2 デバイスヘッダファイルの内容
- 1-4-3 マクロ機能と組み込み関数の使い方
- 1-5 pragma指示命令の使い方
- 1-6 コンパイラの最適化
- 1-6-1 最適化のレベルと最適化の内容
- 1-6-2 最適化の設定方法
- 1-6-3 最適化のサイズ見積もり
第2章 XCコンパイラの仕様
- 2-1 準拠するC標準
- 2-1-1 C90標準とC99標準
- 2-1-2 C90とC99の切り替え
- 2-2 変数のデータ型
- 2-2-1 変数の宣言書式
- 2-2-2 データ型の種類
- 2-2-3 データ型の修飾子
- 2-3 定数の書式と文字定数
- 2-3-1 定数の記述書式
- 2-3-2 定数の修飾 接尾語
- 2-3-3 文字の扱い
- 2-4 変数の宣言位置とスコープ
- 2-4-1 宣言位置とスコープ
- 2-4-2 変数の格納方法
- 2-4-3 自動配置の変数(autoタイプ)
- 2-4-4 指定配置の変数(Non-autoタイプ)
- 2-4-5 実際の使用例
- 2-5 変数の型変換
- 2-5-1 自動型変換(暗黙の型変換)
- 2-5-2 明示的型変換(キャスト)
- 2-6 標準入出力関数
- 2-6-1 コンソールデバイスと低レベル入出力関数
- 2-6-2 C90とC99の標準入出力関数の差異
- 2-6-3 標準入出力関数一覧
- 2-6-4 入出力関数の使い方
第3章 割り込み処理関数
- 3-1 割り込み処理の流れとメリット
- 3-1-1 割り込み処理の流れ
- 3-1-2 割り込みのメリット
- 3-2 割り込み要因と許可禁止
- 3-2-1 割り込み回路ブロックの動作と割り込み許可
- 3-2-2 割り込み関連レジスタの詳細
- 3-2-3 割り込み動作の詳細
- 3-3 割り込み処理の記述方法
第3部 MCCと内蔵モジュールの使い方
第1章 MCCの概要
- 1-1 MCCとは
- 1-1-1 MCCの役割と自動生成される内容
- 1-1-2 MCCの対応デバイス
- 1-2 MCCのインストール
- 1-2-1 最新バージョンのインストールの場合
- 1-2-2 旧バージョンのインストールの場合
- 1-3 MCCの起動方法
- 1-3-1 MelodyとClassic
- 1-3-2 Classicのライブラリの追加方法
- 1-4 MCCを使ったプログラミング手順
- 1-5 自動生成されるコードとその関係
- 1-6 MCCによる割り込み処理の記述
- 1-6-1 割り込み処理の流れ
- 1-6-2 ユーザ割り込み処理の記述方法
第2章 システム関連の設定
- 2-1 コンフィギュレーションビットとその設定方法
- 2-1-1 コンフィギュレーションビットの役割
- 2-1-2 コンフィギュレーションビットの種類と内容
- 2-1-3 MCCによるコンフィギュレーションビットの設定方法
- 2-1-4 コンフィギュレーションビット設定専用ダイアログの使い方
- 2-2 マイコンの実行速度を決める
- 2-2-1 クロック生成ブロックの構成
- 2-2-2 発振モードの種類
- 2-2-3 MCCによるクロック指定方法
- 2-2-4 内蔵クロックの周波数微調整
- 2-3 時間を高精度にしたい
- 2-3-1 クリスタル/セラミック発振子モードの使い方
- 2-3-2 外部発振器モードの使い方
- 2-4 クロック発振の監視をしたい
- 2-4-1 リファレンスクロックモジュールの使い方
- 2-4-2 クロック発振モニタ
- 2-5 電源変動しても安定に動作させたい
- 2-5-1 リセットとは
- 2-5-2 PORとBOR
第3章 LEDやスイッチを使いたい
- 3-1 入出力ピンとは
- 3-1-1 入出力ピンとSFRレジスタの関係
- 3-1-2 実際の使い方と電気的特性
- 3-2 接続する入出力ピンを自由に選びたい
- 3-2-1 ピン割り付け機能とは
- 3-2-2 MCCのPin Manager Gridによるピン割り付け設定
- 3-3 入出力ピンのオプション機能
- 3-3-1 MCCのPin Moduleの役割
- 3-3-2 アナログ入力かデジタル入出力か
- 3-3-3 スイッチのプルアップ抵抗を省略したい
- 3-3-4 電圧の異なる相手と接続したい
- 3-3-5 ピンに名前を付けるとその名前で関数が生成される
- 3-3-6 その他のオプション機能
- 3-3-7 突然の短時間の入力変化を知りたい
- 3-4 入出力ピンの使い方の実際例
第4章 一定のインターバルで実行したい
- 4-1 長時間のインターバル動作をしたい̶ タイマ0の使い方
- 4-1-1 16ビットモードのタイマ0の内部構成と動作
- 4-1-2 16ビットモードのMCCの設定と生成される関数の使い方
- 4-1-3 例題による16ビットモードの使い方の説明
- 4-1-4 8ビットモードのタイマ0の内部構成と動作
- 4-1-5 8ビットモードのMCCの設定と生成される関数
- 4-1-6 例題による8ビットモードの使い方の説明
- 4-2 ゲート制御でパルス幅を測定したい̶ タイマ1/3/5 の使い方
- 4-2-1 タイマ1/3/5の内部構成と動作
- 4-2-2 MCCによる設定と生成される関数の使い方
- 4-2-3 例題によるタイマ1の使い方の説明
- 4-3 正確なインターバル動作をしたい̶ タイマ2/4/6/8/10の使い方
- 4-3-1 基本構成のタイマ2/4/6の内部構成と動作
- 4-3-2 MCCによるタイマ2/4/6の設定と生成される関数の使い 方
- 4-3-3 外部リセット付きタイマ2/4/6/8/10の内部構成と動作
- 4-3-4 HLTタイマのMCCによる設定と生成される関数の使い方
- 4-3-5 例題によるHLTタイマの使い方の説明
- 4-4 長周期パルスの高精度測定をしたい̶ SMTタイマの使い方
- 4-4-1 SMTの内部構成と動作
- 4-4-2 MCCによる設定方法と生成される関数の使い方
- 4-4-3 例題によるSMTの使い方の説明
第5章 パソコンやセンサと通信したい
- 5-1 パソコンと通信したい ̶ EUSARTモジュールの使い方
- 5-1-1 同期式と非同期式とは
- 5-1-2 EUSARTモジュールの内部構成と動作
- 5-1-3 マルチドロップ方式と9ビットモードの使い方
- 5-1-4 MCCによる設定と生成される関数の使い方
- 5-1-5 パソコンとの通信の例題 ̶ 割り込みを使わないEUSARTの使い方
- 5-1-6 標準入出力関数による例題
- 5-1-7 パソコンとの通信の例題 ̶ 割り込みを使ったEUSARTの使い方
- 5-2 センサやLCDをデジタル通信で接続したい̶ I2Cモジュールの使い方
- 5-2-1 I2C通信とは
- 5-2-2 I2C通信データフォーマット
- 5-2-3 MSSPモジュール(I2Cモード)の内部構成と動作
- 5-2-4 MCCによるMSSP(I2Cマスタモード)の設定と生成される関数の使い方
- 5-2-5 MCCによるMSSP(I2Cスレーブモード)の設定と生成される関数の使い方
- 5-2-6 例題によるMSSPモジュール(I2Cモード)の使い方
- 5-2-7 接続デバイスの仕様
- 5-2-8 MCCによる例題のI2Cマスタ側のプログラム製作
- 5-2-9 MCCによるI2Cスレーブ側のプログラム製作
- 5-2-10 例題の動作確認
- 5-3 ICやセンサを高速で接続したい̶ SPIモジュールの使い方
- 5-3-1 SPI通信とは
- 5-3-2 SPIの4つの通信モード
- 5-3-3 MSSPモジュール(SPIモード)の内部構成と動作
- 5-3-4 MCCによるMSSP2(SPIマスタモード)の設定と生成される関数の使い方
- 5-3-5 MCCによるMSSP2(SPIスレーブモード)の設定と生成される関数の使い方
- 5-3-6 例題によるMSSPモジュール(SPIモード)の使い方
- 5-3-7 接続デバイスの仕様
- 5-3-8 SPIマスタ側のプログラム製作
- 5-3-9 MCCによるSPIスレーブ側のプログラム製作
- 5-3-10 例題の動作確認
- 5-4 センサを単線シリアル通信で接続したい
- 5-4-1 1-Wire通信とは
- 5-4-2 単線シリアル通信の温湿度センサの使い方
- 5-4-3 例題による単線シリアル通信の使い方
- 5-4-4 MCCによる例題プログラム製作
第6章 モータの速度制御やLEDの調光制御をしたい
- 6-1 パルス幅測定やPWM制御をしたい̶ CCPモジュールの使い方
- 6-1-1 パルス幅,周期の測定をしたい̶ キャプチャモード
- 6-1-2 一定の遅延を生成したい̶ コンペアモード
- 6-1-3 PWM制御をしたい ̶ CCPモジュールのPWMモード
- 6-1-4 フルブリッジをPWM制御したい̶ ECCPモジュールのPWMモード
- 6-1-5 MCCによるCCPモジュールの設定と生成される関数の使い方
- 6-1-6 例題によるCCPモジュールのキャプチャモードの使い方
- 6-1-7 例題のプログラム作成
- 6-1-8 LEDの調光制御の例題̶ CCPのPWMモードの使い方
- 6-1-9 例題のプログラム作成
- 6-2 Power LEDの調光制御をしたい̶ PWMモジュールの使い方
- 6-2-1 10ビット PWMモジュールの内部構成と動作
- 6-2-2 MCCによるPWMモジュールの設定と生成される関数の使い方
- 6-2-3 Power LEDの調光制御の例題̶ PWMモジュールの使い方
- 6-2-4 例題のプログラム作成
- 6-3 モータの速度制御をしたい̶ CWGモジュールの使い方
- 6-3-1 CWGモジュールの構成と動作
- 6-3-2 MCCによるCWGモジュールの設定と生成される関数の使い方
- 6-3-3 フルブリッジによるモータ制御の例題̶ CWGモジュールの使い方
- 6-3-4 例題のプログラム作成
第7章 いろいろな種類のパルスを生成したい
- 7-1 広範囲の周波数のパルスを生成したい̶ NCOモジュールの使い方
- 7-1-1 NCOモジュールの内部構成と動作
- 7-1-2 MCCによるNCOモジュールの設定方法と生成される関数の使い方
- 7-1-3 例題によるNCOモジュールの使い方̶ 1Hz単位のパルス出力
- 7-1-4 MCCによる例題のプログラム作成
- 7-1-5 書き込みと動作確認
- 7-2 信号を変調したい̶ DSMモジュールの使い方
- 7-2-1 DSMモジュールの内部構成と動作
- 7-2-2 MCCによるDSMモジュールの設定と生成される関数の使い方
- 7-2-3 例題によるDSMモジュールの使い方
- 7-2-4 送信側のプログラム製作
- 7-2-5 受信側のプログラムの製作
- 7-2-6 書き込みと動作確認
- 7-3 特殊なパルスを生成したい̶ 16ビットPWMモジュールの使い方
- 7-3-1 16ビットPWMの内部構成と動作
- 7-3-2 MCCによる16ビットPWMの設定方法と生成される関数の使い方
- 7-3-3 例題による16ビットPWMの使い方̶ RCサーボの使い方
- 7-3-4 例題のプログラム作成
第8章 消えないメモリにデータを保存したい
- 8-1 内蔵の消えないメモリを使いたい̶ EEPROMの使い方
- 8-1-1 データEEPROMメモリの内部構成と動作
- 8-1-2 MCCによるEEPROMの使い方
- 8-1-3 例題によるEEPROMの使い方̶ EEPROMの読み書き
- 8-1-4 書き込みと動作確認
- 8-2 内蔵のフラッシュメモリにデータを保存したい
- 8-2-1 フラッシュメモリの内部構成と動作
- 8-2-2 フラッシュメモリのMCCによる設定と関数の使い方
- 8-2-3 例題によるフラッシュメモリの使い方
- 8-2-4 書き込みと動作確認
- 8-3 外付けの大容量フラッシュメモリにデータを保存したい
- 8-3-1 フラッシュメモリの使い方
- 8-3-2 例題によるフラッシュメモリの使い方
- 8-3-3 例題のプログラム作成
- 8-3-4 書き込みと動作確認
第9章 センサなどの電圧や電流を扱いたい
- 9-1 センサなどの電圧や電流を計測したい̶ 10/12ビットADコンバータの使い方
- 9-1-1 10/12ビットADコンバータの内部構成と動作
- 9-1-2 10ビットADコンバータのMCCの設定と生成される関数の使い方
- 9-1-3 例題による10ビットADCモジュールの使い方
- 9-2 ノイズを減らして電圧を計測したい̶ 演算機能付きADCCの使い方
- 9-2-1 ADCCコンバータモジュールの内部構成と動作
- 9-2-2 MCCの設定方法と生成される関数の使い方
- 9-2-3 例題によるBasic_modeの使い方
- 9-2-4 例題によるADCCのAverage_modeの使い方
- 9-2-5 例題によるLow_pass_filter_modeの使い方
- 9-2-6 例題によるAccumulate_modeの使い方
- 9-3 音やセンサなどの瞬時電圧変化を知りたい̶ アナログコンパレータの使い方
- 9-3-1 コンパレータの内部構成と動作
- 9-3-2 MCCの設定方法と生成される関数の使い方
- 9-3-3 例題によるコンパレータの使い方
- 9-4 交流信号の位相を制御したい̶ ZCDの使い方
- 9-4-1 ZCDモジュールの内部構成と動作
- 9-4-2 ZCDのMCCの設定方法と生成される関数の使い方
- 9-4-3 例題によるZCDの使い方
- 9-5 任意の一定電圧を出力したい̶ 5/10ビットDAコンバータの使い方
- 9-5-1 5/8/10ビットDAコンバータの内部構成と動作
- 9-5-2 MCCによるDAコンバータの設定方法と生成される関数の使い方
- 9-5-3 FVRモジュールの内部構成と動作
- 9-5-4 例題によるDAコンバータの使い方
- 9-6 センサなどの小さな電圧を増幅したい̶ オペアンプの使い方
- 9-6-1 オペアンプの内部構成と動作
- 9-6-2 オペアンプのMCCの設定方法
- 9-6-3 例題によるオペアンプの使い方
第10章 その他の内蔵モジュールの使い方
- 10-1 内蔵モジュールの入出力を合成したい̶ CLCモジュールの使い方
- 10-1-1 CLCモジュールの内部構成と動作
- 10-1-2 CLCのMCCの設定方法
- 10-1-3 例題によるCLCの使い方
- 10-2 極低消費電力にしたい ̶ スリープと間欠動作
- 10-2-1 省電力モードの種類と動作
- 10-2-2 スリープと間欠動作
- 10-2-3 例題 WDTによる間欠動作
- 10-3 プログラムの異常動作を知りたい̶ WDTの使い方
- 10-3-1 プログラム異常監視とは
- 10-3-2 ウォッチドッグタイマ(WDT)の内部構成と動作
- 10-3-3 窓付きウォッチドッグタイマ(WWDT)の内部構成と動作
- 10-4 メモリ破壊の監視をしたい̶ CRCとSCANの使い方
- 10-4-1 CRCモジュールとSCANモジュールの内部構成と動作
- 10-4-2 CRCモジュールとSCANモジュールのMCCの設定と生成される関数の使い方
- 10-4-3 例題によるCRCモジュールとSCANモジュールの使い方
第11章 ミドルウェアの使い方
- 11-1 SDカードにデータを保存したい̶ FATファイルシステムの使い方
- 11-1-1 FATファイルシステムとは
- 11-1-2 例題の構成
- 11-1-3 MCCによる設定方法と生成される関数の使い方
- 11-1-4 例題のプログラム作成