Superb Garbages 2

千野純一(chinorin)のはてなダイアリーの続きです。

電子工作の沼

  • 底がねえ。
  • 新しく何かを作ろうと思うことがちょくちょくあるんだけど、そのたびに必ず何かしらのパーツが足りないんだよな。それでネットショップで足りないものを調達しようとすると⋯⋯
  • (その1)2個くらいあればいいのに100個単位でしか売ってなかったりする。探せば5個くらいで売ってるのを発見することもあるんだけどかなり割高、へたすると100個買うより絶対的に高かったりする。例えば、100個100円だけど5個だけ買うと200円とか。
  • (その2)パーツを見てると新たにどんどん作りたいものが思いついてしまってかなわん。これも興味あるしこれも面白そうみたいな感じでばんばんカートに入れてるといつの間にかたいへんなことになっている。しかし1個1個は50円とか100円とか高くても300円とかなので、どれを減らしても大して節約にならんというか。でも無駄なものは無駄なのでごっそりいろんなものを諦めて削除した上で注文し、それらが届いて検品してるとあーやっぱりあれは必要だったわってなる。そして最初に戻る。

 

  • ところで前回の(1)入出力が足りない問題については、「抵抗とボタンを並列に」と似たようなことをしているわけでは全然ないのだが、とにかくMCP23017というICを使ってI2Cで遊んでいる。I2Cというのは大昔からあるシリアル通信の規格だそうで、正しい表記は「\rm{I^2C}」。SDA(データ)とSCK(クロック)という2本のピン(と電源とGND)を接続するだけで、MCP23017(16ビットI/Oエクステンダと呼ばれている)1個につき16のI/Oを扱うことができ、さらにMCP23017自体は同時に最大4個、つまり1つのシリアル通信で最大64のI/Oを扱うことができる仕組みだ。
  • 制御はArduino環境だと標準ライブラリ <Wire.h> があり、MCP23017自体にプルアップも内蔵されてるし(ちゃんとそういう注文をしないと使ってくれないが)、I2Cの仕組みさえ理解してしまえば簡単なもの⋯⋯かと思いきや、プルアップの普段HIGHでスイッチONでLOWになるのとか全然慣れなくて、MCP23017の機能で取得するパラメータを反転させておくと楽なんだろうなあと思ってそうしたにも関わらずソフト側で取得するときにうっかり値をさらに反転して使ってしまったり、レジスタに渡すためのuint8_t型において左のビットと右のビットどっちが0番ポートについての値なのかいつまでたっても覚えられない上にICの足の番号も逆に読んじゃって何が何だかよくわかんなくなったり、まーいろいろたいへんである。前途多難だ。
  • で、I2Cで面白いのは、この方式を採用しているデバイスというのがそもそもけっこうあるらしいという点。この界隈で一番よく見かけるのはI2C接続のキャラクLCD(つまり文字を表示するための液晶)なんだけど、例えばWiiリモコンの下に刺すデバイス、つまりヌンチャクとかクラシックコントローラとかがI2Cだそうで、コネクタさえなんとかすれば(なんとかならない場合は線をぶった切って直結すれば)Arduinoでそのまんま使えるらしい。これはいいことを聞いた。もともと作りたいのものの一つにWindows用左手HIDというのがあるわけで、とりあえずヌンチャクで作ってみることを検討してみよう。とりあえず実験だー。

 

  • ところで前回の記述がけっこう間違っている。ATmega32U4からI/Oピンが全部出てるのはPro MicroではなくてArduino Microだったと思う。それからNANDを2個で作れるのはDフリップフロップではなくて\rm{\overline{SR}}ラッチ(Dラッチ?)あるいはRSフリップフロップとかそんな感じみたいだ。結局よくわからん。