Tech:pic
出典: Tariki
目次 |
PICマイコン
PICでモノをつくるのは、修行に似ている。おまえはZ80Aか!? と怒鳴りたくなるくらい遅いクロック、足りないピン(入出力)数を重畳、狭いメモリ空間、14ビットという変な命令語長のアセンブラ (データ領域とプログラム領域が分かれていることを意味する)でしこしこ。
こんなことをいったら少量生産・低コストのコントローラとしてPICを実用的に使っているひとには怒られるだろうが、こと趣味で一個限りの電子おもちゃを作っている限り、PICを使うことに自分いぢめ以上の意味はない(笑)。H8なりARMなりでCコンパイラを使い裕福にメモリをだばだば使い25MHzで動かしてCPUタイムの大半はmain()のアイドルループ、というほうがなんぼか楽ですわ。ある種の制限に基づいたゲームを楽しむような、いまでは失われた開発の醍醐味(笑)を味わうために、私はPICを使っている。
もっともこれは教育用途ならば意味のないことではない。はじめからすべてがC言語で書けると思っている最近のふぬけた若者に、LED一個点滅させるのにいかに労力がかかるかを知らしめるのには最適であろう。私も教育産業の端くれに関わっている者なので、そういう意味では『実用的』なのかもしれない (ただし相当モノの分かる大学院生相手にPIC講座を一回やったら、相当引かれた(笑))。
ただしPICというのは、Z80自作マイコン世代からいうと甘っちょろい部分もある。例えば、電源の許容が広いことである。3Vちょっと~9Vくらいまで(うそかも。信じて火吹かないように)動く。何じゃそりゃ。電源といえば5V、3端子レギュレータを入れるのはお約束じゃろうがばかものぉぉ。
あとLEDが直接駆動できる。出力端子から電流をとりまくれるので、10mAくらい(うそかも。火吹かないように)流してもICが死なないのである。何じゃそりゃ。LEDは電池につなげば光ると思っているゆとり世代には最適なデバイスなのかもしれないが、PNPトランジスタを入れるのはお約束じゃろうがばかものぉぉぉ。
あと入力にスイッチを直接つなげる。もちろんオープン端子は1 (TTL) または0 (CMOS) になる確率は高いがノイズに配慮してプルアップ抵抗を入れるのはお約束じゃろうがばかものぉぉぉぉ が、プルアップ抵抗がソフトウェア(レジスタ設定)で入っちゃったりするのである。もちろんチャタリング処理はソフトウェアで(これは旧来から)。実際にほんものの抵抗を入れないと入力がどうなってしまうか知って、その上でプルアップ抵抗はIC内蔵だからソフトウェアでこれを接続しましょう、というのならよいが、『スイッチ入力に使うときはここのレジスタを1』的なシンボルで済ませてしまうのは、教育上良くない。Windows上の開発プラットフォーム上でエミュレーションなんかできるのと相まって (これ楽しいんだよね)、バーチャルな世界ですべて物事が済んでしまう風潮を助長するのではないかと、おじさん心配。
あとクロックが、PWMでDACが、タイマ割り込みが、シリアルがI2Cがワッチドッグが電源監視が (やめた)。
以下PICで遊んだものの記録である。徐々に埋めていく。
開発環境
Microchipのフリーアセンブラと秋月のPICプログラマ。
振り振りディスプレイ(途中まで)
- 『王様のアイディア』なんかにある、一列LEDで文字表示する企画。水銀スイッチで振り振り周期を検出して列の表示速度を決定する。
- →ハードウェア完成、ソフトもシンボル表示したくらいで開発停止中。
学会タイマー
- 秋月の巨大LED表示モジュール(64×16)を使って、スタート・予鈴・質疑・ストップ、休憩時間、デモモードなどを表示する。ウリは18pin PICでLEDドライブ・押しボタンSW3個と5接点ロータリースイッチ・圧電ブザーまで駆動していること。
学会タイマーオプション・ベルドライバー(挫折中)
- 学会タイマーからの出力で手押しベルを駆動。ソリッドステートリレー→AC100Vで肩マッサージ器駆動、まではできた。
- →ベルとの組み合わせ手前で開発停止中。
ASCIIコード表示器
- 学祭での展示で、文字コードも01で出来ていることをデモするためのおもちゃ。トグルスイッチ入力で5×7マトリクスに英字・記号を表示。文字→二進数変換カード (スチレンボードに紙) がエンコーダ、このおもちゃがデコーダとなる。
ダイヤル式黒電話DTMF発生装置(挫折中)
- 旧友Sの提案でダイヤルを回したスイッチオンオフをカウントしてDTMFを発生させる。ウリは8pin PICでできるだけ正弦波に近い2トーンを発生させること。
- →回路設計までして挫折中。
光るイーサネットケーブル(途中まで)
- これも学祭展示用。イーサネットのパケットを目で見るために、クリスマス電球状にLEDを仕込んだイーサケーブル(3本)にいまパケットが流れているという電飾表示をする。パケット解析はHUB代わり(sniffer仕込み)の小型FreeBSDマシン、そこから232C接続で1文字コマンドを送り (どのケーブルのどちら向きに光らせるか)、それに従ってPICがLEDを順に点滅させる。
- →ハードウェア完成、LEDドライブは完成 (ただのクリスマス電球状態)。解決していないのはパケットが流れたという表示がよくわからないという問題。例えば往復pingをしても (光が流れるディレイはイーサネット機器のディレイよりはるかに大きいため) 両端から光がほとんど同時に流れてわけ分からなくなる。TCPのコネクションとかpingのパケット対応関係まで考慮してディレイをかけないと往→復で光を流すことができないので、デモ効果がない。ということに途中で気づいて、それ以上進展なし(笑)。
geocaching関連
2011年の作品。
この中のトップ、問題発生器(0)をつくらんがためにPICプログラマを5年ぶりに引っ張り出し、さらに仕事のほうで昔からつくろうと思っていたガジェットと、いくつかのジオキャッシング用おもちゃを作ったので、その忘備録。まあ中には、ここにスペックを詳しく書いちゃうとネタバレになるものもあるかもしれないので、当り障りのない範囲で。
- 問題発生器(0) 光る座標指示器: 『取るのに特殊な道具が必要なキャッシュ』シリーズのNo. 3 (自分のキャッシュとしては2番目)の予定だったのだが、続く2つが先にできてしまって設置。一連のモノの中でいちばん最初につくりはじめた・かつこれを作るために久々にPIC脳に電源を入れたのに、いまだ未完成。できたらレポートします。
- 問題発生器(1) 一定時間LEDを光らせる: 『取るのに特殊な道具が必要なキャッシュ』シリーズNo. 3。
- 問題発生器(2) ある周波数の音を出す: 『取るのに特殊な道具が必要なキャッシュ』シリーズNo. 4。
- FTF賞: 単なるメッセージ表示ボード。腕が衰えないために作った。バージョン1~2。
- SIMON: 70年代の未来のゲームです(笑)。なぜこれがgeocaching関連か!?
