やっぱりボクが悪かった
I2C経由のLCDドライバー完成(2/3/08)
ニセコの深雪を堪能し、命の洗濯をして朝起きてみたら、東京も雪だった。やることは沢山あるのだけれど、4日も空けたマイコンいじりに自然に手が行って、食事もそこそこに作りかけのLCDボードの配線を急ぐ。ひとつひとつは無機質な部品を半田付けでなどで固定していき最後は何らかの機能を持った製品にするという作業は、どんなものでも理屈ぬきに楽しいものである(プラモデルなどが最たるものだ)。
配線が一番綺麗に出来るレイアウトにしてスキーに行く前にそこだけ配線し、テストしてみたらこれが逆順だったことがわかり頭を抱える。ピンを迂回させて何とか形にし、遂に正月以来制作していたLCDドライバーが完成した。I2Cの3線でLCDを表示することができる。お笑いは今これを使う目的がないことなのだが、フラッシュROMの寿命の近い、始めて買ったマイコンチップTiny26 の安住の地としてはふさわしい。これで2台のシステム(というのか)を完成させたことになる。(ISPライターを入れれば3台)。
次の課題は、2313を使ったUSB-SPIブリッジ、SDカードライター(ソケット基板を買ってある)あたりを予定している。イーサネットドライバはちょっとまだ敷居が高い。TCP/IPプロトコルの学習には最適だと思うが、コードを自前で書くところまでは行けまい。既存のフリーのドライバがあるが、それをインストールするだけではつまらないし、あまり勉強にならない。
とうとう犠牲者が出た(2/4/08)
当GataroAVR研究所(gataroken)は発足以来、一人(ひとつ)の事故(おしゃかにする部品)も起こさず、LEDの点滅から2線インタフェースによるMPU接続まで実現してきたが、本日遂に最初の犠牲者が出た。それは秋月で買ってきた低ドロップ型3端子レギュレータ(¥100でコンデンサつき)である。
今までのAVRはすべて電池で動いてきた。電池では火事を起こすほどのパワーはないので安心だし、最近は低電力化が進んでいるので実験に不自由しない。商用電源からとるDCアダプタはもう今は使わないモデムやハブなどのPCの周辺機器のものが山ほど残されているが、ユニバーサル基板やブレッドボードに簡単につけられるDCアダプタのソケットがなく、スイッチング電源そのものに何となく不安を感じていた。こいつはテスタで測っても、電流が微小のときは正規の電圧を示さないやつもあるので安心できない。
ところが、このあいだ秋月の近くの千石電商でソケットをユニバーサル基板につけられる変換基板を発見し、ちょうどLEDを沢山使ったアプリケーションを考えていたときだったので、早速入手し(2つで\550は少し高いけれど)電池の消耗を気にする必要のないACからのVcc供給を始めることにした。
定番の3端子レギュレータとコンデンサをその変換基板につけて、この基板をブレッドボードに挿すだけで5Vを安定供給できるようにする。今から考えれば、もう少し事前に調べてから半田付けするべきだったのだが、レギュレータは以前何度か使ったことがある。入出力さえ間違えなければと気楽につけて早速動かしてみる。
これが5Vを示さないのである。DCアダプタが供給する6V(正確には6.8Vもある)から1Vしか低くならない5.5V内外の出力である。おかしいなと別のDCアダプタ(9V)を試しに挿してみたとき、一瞬、基板から淡い煙が見えた。「やった。これは壊した」。試しに手で触って余りの熱さに飛び上がる。しっかり火傷をしてしまった。
何か誤配線をしたに違いない。変換基板を確かめる。ソケットから出ている端子に間違いなく入力が接続され、使われていない端子を利用して出力側としそこへ電解コンデンサが配線されている。間違いはない。プラグをはずしてテスタで導通を見ると、何と、入出力が短絡されている!そんな馬鹿な。
あわてて、まだ半田付けしていないもうひとつの変換基板をブレッドボードに挿して、実際の電圧を測ってみた。これが何と言うことか、今まで出力だと思っていた端子に電圧が出ている。ソケットから直に出ている入力端子(と思われる)は0V。あれえ、さっき導通していたはずなのに、これは一体どういうことなんだ。
知らないということは恐ろしい。Webで調べてDCアダプタのソケットは、3本端子が出ており、そのうち2本はプラグをさす前は、オーディオのRCAジャックのようにもう一方の端子と導通していることを知った。信号線でもないのになんでこんな仕様なんだろう。理解に苦しむ。(その後、電池との切り替えのためと知りました。無知とは恐ろしい)
つまり最初、テスタでプラグの接触するところと導通していることを確認し、基板のパターンも入力だと思われた端子は実は、プラグを挿入したときに切れる出力(というか空き端子)側だったのである。空き端子と思われた端子が実際のソケットからの出力、つまりレギュレータの入力側であった。
この誤解によって、逆接続されたレギュレータは苦しんだ挙句、9Vを喰らって遂に昇天したのである。可哀相なことをしてしまった。もしかしたらと淡い期待を抱いて、変換基板からはずし、ブレッドボードで正規の配線に戻してみたが、3V余りを出力する単なる抵抗器に変わり果てていた。事前に良く確かめずにつないでしまった俺に全責任がある。悪かった。許せ。合掌しながらゴミ箱に埋葬した。
私は電子部品はよほど高いものでない限り、検証と予備を兼ねて必ず2つ以上買うことにしている。レギュレータも2つ買ってあったので、もうひとつを正規に配線する。正確な電圧(4.99V)でLEDを沢山つけても全く温度はかわらない。ごく普通のレギュレータなのだけれど妙に頼もしく感じられたのは不思議なことである。
基板工作の定番ミニルータを買ったぞ(2/5/08)
次のお題、chaN氏のUSB-SPIブリッジのため、小さなケースを2つ買ってある。最初の温度ロガーの基板とケースや、オプティマイズのロジアナのケースは、ありあわせの金鋸や40年も前に買ったかってのラジオ製作用の金やすりで切り出し、あとは紙やすりで根気よく削って何とかそれなりの仕上がりにした。しかし、いつまでも牛刀をふりまわすのも芸がない。次はまともな工具で楽に作ろうと考えていた。
最近のブロードバンドサイトでは、世界中のマニアたちが電子工作の出来栄えを見せるだけでなく、製作過程をつぶさに記録したビデオまで公開している。このなかで、ミニドリルで簡単に基板を切り出し穴を開けているシーンが印象的だった。これに刺激されたこともある。 基板を手にとってレイアウトを考えているうち、急に思い立ってDIY店のJ-Martに出かけた。
千石電商にあったミニドリル(ミニルータと言うのだそうだ)と同じ、Proxxonの製品のコーナーがあり、研削ビット(刃)とセットになると良い値段(1万以上)なので迷ったが、結局、0.5~1.5ミリ(これはすぐ折りそう)のドリルビット3本セットも含めて買うことにした(¥11,500)。ロジアナ以来のマイコン関係の大きな買い物である。
家に戻って早速試してみる。切断用のやすりディスクを装着のときに力を入れたら、あっさり割れて、セットに5枚も付いていたことを納得させられたが、試しにUSB-SPIブリッジのケースに入るユニバーサル基板を切ってみた。
いや、これは楽だ。あっと言うまにケースにぴったり収まる基板をきれいに切り出すことができた。1ミリ以下の穴あけはプリント基板でも起こさない限りやることはないと思うが、細かいケースの加工はこれで格段に楽になる。これからの制作が楽しみだ。
このミニルータはボール盤やフライス盤になるアダプタが売り出されていて、これが結構精密なつくりでそれほど高くなく(一万以下)、道具欲(こういうのがあるか)をそそる。ビットの折れ予防や、正確な穴あけには欠かせないが、まあここまでやることはないだろう。
やっぱりボクが悪かった(2/6/08)
1/17の「今度はボクは悪くない?」の記事で、インタバルタイマをはずしたら動いたので、自分は悪くないと書いたが、?をつけておいて良かった。通信とタイマは密接な関係があり、タイマをつけたくらいで本来はおかしくなるわけがない。恐らく何かのチョンボだと思っていたけれど、原因をつきとめられなかった。それが、解決したのである。
そろそろI2Cのソースリストを印刷しておこうとI2Cスレーブルーチンのリストを整理していたら、コメントアウトしたタイマーのステートメントがあったので、ついでに少しデバッグすることにした。あのときは先を急いでいたのでそんな余裕がなかったのである。
まず、タイマを完全に独立させて1秒ごとにLCDに*を出すようにして動かしてみる。問題なく動く。次に、タイムアウトの時に行うI2Cのリセットをやめて通信のスタートでタイマが動くようにする。何と問題なくデータが2回目以降も送られる。何、リセットが問題か。LCDを良く見ると、少しおかしい。*が送信データの前についている。1秒タイムアウトなので、送信データが送られてから暫くして*がつかないといけない。
タイマがスタートした直後に*がありそれから送信データが表示される。割り込みがスタートの時に起きているのだ。あーあーあ、わかった。何で気がつかなかったのだろう。こんな簡単なミスに。タイマの取り扱いに慣れていないからこういうことが起きる。
原因はこうだ。1秒タイマはタイムアウトすれば次のスタートまで割込み許可のビットをマスクして割り込みを止める。タイマは一度動き始めると止められない(止めることも出来るが手続きが面倒)。そして、割込み要求を上げつづける。この状態で、次のタイマースタートでこのマスクをはずした途端、待っていた割り込みがここでかかる。
要するに1秒タイマになっていなかったのである。割り込み先では割り込みを止めるのでもう割り込みは起きない。しかし、割込み要求ビットは上がったままなのでスタートのときに起きてしまう。ここで通信関係のリセットをかければ、当然先のデータは読まれない。これが1回目は動き、2回目から沈黙する原因だったのである。
原因がわかれば、対処は簡単である。タイマースタートの前に、割込み要求ビットをクリアしておくだけである。たったの1ステートメント。タイマーを使いこなしている人には常識なのかもしれないが、素人の私には、プログラムは書いたようにしか動かないという格言が身にしみる。
まあ、負け惜しみかもしれないが、よく見つけたと思う。*が送信データの前にあるという些細な事実から、長い間何が原因かあれこれ考えていた不具合が見事に解決された。現場に残された微小な証拠から犯人をつきとめた名探偵の心境で、風呂に入って寝るまでうきうき気分だった。それにしてもこの楽しさは何なんだろう。100冊の推理小説を読むより面白い。
バグのとれたソフトI2Cスレーブのコードは前の「Tiny用ソフトI2Cスレーブ」の記事にまとめて置いてあります。
| 固定リンク
「AVR」カテゴリの記事
- ソフトI2Cはクロックストレッチまで手を出してあえなく沈没(2017.09.02)
- オシロのテストどころかソフト開発で大はまり(2017.07.26)
- 超音波方式の人感センサーI2C化と新しいオシロ(2017.06.29)
- motionの動体検知はRaspi3の電源が安定しない(2017.04.16)
- 赤外線学習リモコンはデータ再現で挫折したまま進まず(2016.07.21)
コメント