PICでもっと遊ぶその4「外部メモリを使ってサーボを複雑に動かす」夏でも楽しい工作教室(1/2 ページ)

» 2005年08月02日 14時00分 公開
[小林哲雄,ITmedia]

外部ROMをつけて動作ステップを飛躍的に増やす

 1つのシーケンスに対し場所と時間という2バイトのデータが必要になる前回の方法では、PIC12F675に内蔵されたEEROMを使う場合、たった64ステップの動作しか行えない。といって、シーケンス数を増やすためにデータバイトを減らすと動きや時間に制約が出る。

 となると、データ総数を増やす方法を使うしかない。そのためにEEPROMの多いPICを買ってくるのもバカバカしい。というのもPICについているEEPROMデータサイズはPIC16シリーズで最大でも256バイトと2倍にしかならない。もっともっとシーケンス動作ステップを増やさなければ面白くないし、将来の野望に備えるには不十分だ。

 そこで外部メモリに活路を見出すことにした。I2C(アイスクエアシーと呼ぶ)のシリアル転送EEPROMを使えば少ない2ピンでROMを読み書きできる。そして、それを簡単に行えるSSP機能を搭載したPICもある。でもPIC12F675にはSSP機能はない。アララ……

 ではPIC12F675でI2CのEEPROMが使えないのか? というと、スレーブ動作(コントロールされる側)は無理だが、外部回路をコントロールするマスター動作はソフトウェアで実現可能だ。そのプログラムはMicroChipから“Application Note”として公開されている。I2Cの制御は色々と面倒なことがあるし、デバッグも難しくなるので、素直にこのサンプルプログラムを使ってしまおう。

 前回はEEPROMに対してプログラムと同時に書き込んだが、外部I2C ROMへの書き込みは春の工作教室でも紹介した「IC-Prog」と秋月の「AKI-PICプログラマー Ver.4」で共にサポートしている。シリアルROMも秋月電子で売っている(シリアルI2C EEPROM)。

 秋月電子では以下を販売している。

メーカー容量価格型番
MicroChip64Kビット100円24LC64
256Kビット160円24(L)C256
ATMEL256Kビット160円AT24C256
512Kビット300円AT24C512
1Mビット600円AT24C1024

2ピンで制御可能なEEPROM。見かけはPICとあまり変わらない

 価格と容量で256Kビット(32Kバイト)製品が適当なようだ。秋月電子ではATMELとMicroChipの製品を販売しているが、それぞれでピン配置が異なるので配線には注意したい。ここではPICと同メーカーということでMicroChipのメモリを使う。ただし、64Kビット製品も容量が違うだけで制御方法は同じでなので、ステップ数が4000もあれば十分という場合は64Kビット製品を買ってもよいだろう。

 ちなみにI2CのスレーブにはA0、A1、A2という3つのアドレスピンがあって、これが背番号になる。つまり背番号0から7までの機器を指定することで、最大8つの機器がI2Cでコントールできるのだ。

 あとはプログラム(とシーケンスデータ)を書くだけだ。と言っても今回はプログラムの変更点が多い。まず、資料としてMicroChipのWebサイトから“Application Note”のページを見ると、「APP NOTES BY FUNCTION」という機能別に項目が並んでいる。

 その項目から「Communication」セクションの「I2C」というサブカテゴリを開くと「AN982:Interfacing I2C Serial EEPROMs to PIC10 and PIC12 Devices」という説明が見つかるはずだ。ここで「AN892」をクリックしてサマリーを見るとキーワードとして「Serial EEPROM, I2C, PIC10F202, PIC12F675, 24LC16B」と書かれている。

 ここからサンプルソースファイルをダウンロードしよう。キーワードから分かるように、非常に好都合なことにPIC12F675をターゲットにしたプログラムとなっているので、ほとんど変更せずに利用できそうだ。I2Cでのコントロールの詳細はPDFファイルのドキュメントを読むとよいだろう。もちろん、24LC64/24(L)C256の資料もMicroChipのサイトから入手できる。

 サンプルソースは共通となるモジュール「i2c_routines.inc」と数種類のサンプルプログラムから構成されている。ざっと目を通してみると

  • キーワードから分かるように24LC16B用となっている。そのためアクセス方法が違う可能性がある
  • TRISIOへの値が決め打ちになっていて、(サーボを動かすのに使っている)GPIOの4ピンから5ピンが入力となっている

 という問題がありそうだ。後者はソースファイルを書き変えてしまえば対応だろう。前者は少々厄介で、資料を見ると24LC16Bのメモリ構成は「8*256*8」と書いてある。後ろの8は8ビットアクセスという意味で真ん中の256はアドレスが8ビットあるということだ。では前の8はというと、先に書いたA0、A1、A2でバンクセレクトしてしまおうということになっている。つまり冒頭に書いた「最大8つのスレーブ」というのが使えない。

 一方、24C64/256はアドレスを2バイト(16ビット)必要とする。資料を見るとアドレス設定のコントロールワードの後にアドレスを2回、8ビットづつ送信すればよいことが分かる。読み出しルーチンはソースを参考にして別途作ってしまうのがよさそうだ。

 もう1つ、I2Cは元々100kHzでのシリアル転送であったが、現在は速度アップされている。ソースは100kHz版だが、秋月電子で売っているMicroChipのI2C EEPROMはすべて400kHz版なので、そこもソースをいじっておくとよいだろう。

i2c_routine.incの変更点

       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

アクセストップ10

2026年07月01日 更新
  1. Macで外付けGPUが使える「TinyGPU」をRTX 5060 Tiで検証 実用性と浮き彫りになった課題 (2026年06月29日)
  2. 懐かしの「タマゴ型マウス」が現代仕様にアップデート エレコム創業40周年モデルの4代目「EGG MOUSE」は10色の着せ替え対応で4980円 (2026年06月30日)
  3. サブスク不要で画面を持たない潔さ Polarの新型フィットネストラッカー「POLAR Loop」を「Fitbit Air」と比較 (2026年06月30日)
  4. “縦2眼”で広角20mmから望遠120mmまでカバーするジンバルカメラ「DJI Osmo Pocket 4P」を試す (2026年06月30日)
  5. アキバ夏のボーナス商戦は「コスパと延命」がキーワード! 5000円切りのピラーレスケースや3000円弱のDDR5用メモリクーラー登場 (2026年06月29日)
  6. NUC風PCやメモリ128GBのモンスターミニPC「DAIV CX」などを続々投入! マウスコンピューターが事業戦略発表会で明かした新製品ロードマップ (2026年06月29日)
  7. 各社製マザーボードをデザインしたカプセルトイ「手のひらPCパーツ」が発売予定 4大メーカーが監修 (2026年06月29日)
  8. IBMが世界初のサブ1nm半導体チップ技術を発表/LenovoがノートPC向けで世界初となる“1000Wh/L”バッテリーの詳細を明らかに (2026年06月28日)
  9. フェイス、「スカイライン GT-R」をデザインしたミニカー型ワイヤレスマウス (2026年06月29日)
  10. AIグラス「Ray-Ban Meta」「Oakley Meta」がアップデート 日本語でのライブ翻訳に対応 (2026年06月29日)
最新トピックスPR

過去記事カレンダー