PIC16ライブラリ

■背景

PIC16シリーズ(PIC10/12/16を含む)も次世代に入り、アセンブラからC言語での開発に移行が進もうとしています。
Microchip社がHI-TECH社を得たことで、PIC16シリーズ用のXC(旧HI-TECH C)を提供しはじめました。
これによりアセンブラになじみのなかった方もPIC16の開発を行うことができ、ユーザの裾野を広げていくことでしょう。
もちろんアセンブラがなくなるというわけではなく、最適化したコードを確実に記述する場合にはアセンブラが適しています。
C言語にはインラインアセンブル機能もあるため、適材適所でアセンブリ言語を記述することができます。
一方でC言語にもデメリットが存在します。 これらのデメリットも搭載メモリの増量、C言語に適した命令の追加などが行われ、改善に向かっています。
ここで紹介する、ライブラリはきっとみなさんのお役に立つものと思います。

■プログラムの本質

さてPIC16用にプリミティブな(原始的な)ライブラリは Microchip 社から提供されていますが、 実用レベルで使い回しの効く、真の意味でのライブラリが整っていません。
ライブラリは使い回してこそ価値があります。つまり再利用できるかが重要です。
例えば、PICではコンフィグレーションの設定など、さまざまな細かい手続きが必要で (これをプログラマーの世界では通称「おまじない」と呼びます)、 なかなか本来やりたいことにたどり着きません。たくさんの「おまじない」を記述しなければなりません。
つまりプログラムの本質的ではないところに時間と労力を費やすことになります。
ここで提唱する汎用化方式と従来方式を比較してみましょう。
従来方式汎用化方式
どちらの方式がプログラムとして読みやすく、再利用しやすいかは一目瞭然です。
些細な違いではありますが、後々大きな差になります。

■プログラムの生産性向上

従来のままではプログラムの生産性が上がらず、非常に不便であり、初心者の方にも障壁が高く PICの普及につながりません。
C言語の基本構造は関数の集まりです。 ちょうど積み木のように機能をブロック化して積み重ねていくことで、複雑な処理も簡単に プログラムしていくことができます。main関数を中心にした関数の組み合わせで構成されています。
関数という単位で分割統治することにより、管理しやすくします。 問題の修正や改良は関数単位で行えばよく、インターフェース(引数、戻り値)のみ気をつけておけば他に気をとられることはありません。 その関数の閉じた世界で考えればよく、集中することができます。
そしてある目的を持った関数の集合をライブラリと呼びます。
C言語は先人の知恵をライブラリという形で使い回すことで開発効率を飛躍的に向上させることができます。 つまりC言語はより使いやすいように関数を汎用化することで、下層の複雑な手続きを隠蔽することができます。 おまじないを隠蔽することで、本質的ではないことから大幅に解放されます。

■特化

PIC16F1827に特化します。使い方を限定し、割り切りました。
※他のPIC16シリーズにも、ソースコードを改変すれば対応できます。
動作確認は以下のバージョンで行います(バージョンによってバグが異なるためです)。 ※MPLAB IDE(X IDEではない)でXC8を使えないという方へ
※Select Language Toolsuite でXC8を認識しない問題があります。
※コマンドプロンプト(管理者)で以下のコマンドを実行すると認識します。
※cd "C:\Program Files (x86)\Microchip\xc8\v1.35\bin"
※regsvr32 MPLABXC8.dll

■回路図

ライブラリを利用するための回路図です。PIC16F1827の機能をほぼフルに引き出しました。
※システムクロックは32MHzです。これを前提にタイミングを調整しています。

電源端子
5V電源です。LCDに5Vを必要とするため、3.3Vは使えません。
GNDGNDです。
ICSP端子
VPP書き込み用電圧です。
VDD書き込み用電源です。
VSSGNDです。
PGD書き込み用データ信号です。
PGC書き込み用クロック信号です。
I2C端子
SCLI2Cクロック信号です。
SDAI2Cデータ信号です。
UART端子
TXUART送信端子です。
RXUART受信端子です。
部品リスト
PIC18F1827マイコンです。
SC1602BS16x2行のLCDです。
SWタクトスイッチです。
LED赤LEDです。Aが長く、Kが短い端子です。
10Kカーボン被膜抵抗(1/4W)です。プルアップ抵抗です。
10Kカーボン被膜抵抗(1/4W)です。プルアップ抵抗です。
4.7Kカーボン被膜抵抗(1/4W)です。コントラストの簡易設定用抵抗です。
1Kカーボン被膜抵抗(1/4W)です。LED電流制限抵抗です。
10KBアナログ入力用可変抵抗です。Bカーブです。

■シンコンのススメ

■テクニック

PIC16シリーズではコードサイズに限りがあるため、テクニックが必要になります。
例えば、sprintfで%fを使うとコードサイズ・オーバーフローを起こします。
回避策としてmodfを使います。一旦、整数部と小数部を分離して整数として扱います。
%5.2fとは全体として5桁(小数点を含む)、小数部を2桁として表示するという意味です。
回避策では、整数部を2桁、小数部を2桁(ゼロパディング)、それぞれ整数%dとして扱います。

■著作権と免責事項

■ライブラリの予定

  1. ライブラリ(CONFIG)
  2. ライブラリ(OSC)
  3. ライブラリ(WAIT)
  4. ライブラリ(LED)
  5. ライブラリ(SW)
  6. ライブラリ(LCD)
  7. ライブラリ(ADC)
  8. ライブラリ(EEPROM)
  9. ライブラリ(TIMER)
  10. ライブラリ(TYPEDEF)
  11. ライブラリ(UART)
  12. ライブラリ(I2C)
©2010-2015 All rights reserved by Einstein. inserted by FC2 system