|
■承前 我ながら勘が鋭いのか鈍いのか。 前回、PDL関数に返される値が10以下にならない理由として、「処理に最低100μs以上かかり、これ以上短いパルスを発生できないため」とし、怪しい部分として「7ピンHIGH→ディレイ→7ピンLOW」の箇所を挙げた。 しかしその後、Arduino言語のリファレンスをよく読むと、analogRead(pin)について、「この処理は約100μ秒かかります。」との記載があった。 つまり、処理に100μs以上は正しかったが、原因箇所が間違っていたのである。 ■図A、図B というわけで、外部割り込みを用いて書き換えてみた。 MSXの8ピンをArduinoのデジタル2ピンに接続。LOW→HIGHを感知して、VRの抵抗値に応じた幅のパルスを返す。Arduinoを使ってPDL関数に値を返すので、「ArdPDL」(アルドパドル)と暫定呼称する。1ChipMSXのUSB端子が電力供給用に役に立っている。 なお、スケッチ中の「analogRead(VR)*2.85+1」は、PDL関数で得られる値が0〜255に収まるよう試行錯誤した結果である。 ■図C、図D MSX側では、時系列的に10個のデータを表示し続けるループプログラムを実行。 結果は、ほぼ満足すべきものとなった。 PDL関数で得られた値は、ほぼ安定的ながら時たま±1程度のふらつきを見せる。以前、74LS123を用いたときは、微妙な浮遊容量の影響と考えたが、今回は、MSXとArduinoの「相性」としておこう。メーカーのサポートの常套句である。 ■まとめ Arduinoを使ったパドルは一応目鼻がついたが、本来のゴールであるタッチパネル付き液晶ディスプレイにたどり着くまでには、まだいくつかの関門が存在する。 最大の難関は、自分の移り気なところでしょうな。 |
全体表示
-
詳細
コメント(0)
|
パドルのテスト(その2)。 前回、「PDL関数はナノ秒単位」と書いたが、それは誤りであった。PDL関数は、トリガに対し返される10μs〜3ms幅のパルスから0〜255の値を読み取る。従って、「PDL関数はマイクロ秒単位」が正しい。ナノ秒単位などと買いかぶってごめんな、MSX。 しかし、それに続いて「どうもこのへんで暗礁に乗り上げそうな気がする。」と書いた。それは正しかったのである。 右スケッチは、絶えずアナログ入力を読み続け、8ピンにトリガがかかれば、アナログ入力の値に応じたパルス幅を7ピンに返すものである。 「VR*3」は、アナログ入力値の最大値1023を3倍して、PDL関数の3m秒に近似させている。 MSX側では、PDL関数を読み続けるBASICプログラムを実行。 「簡単じゃん♪」と考えていたが、暗礁に乗り上げた。次のふたつの問題点が生じたのである。 (1) PDL関数には正しい値に挟まって、絶えず「0」が返される。 (2)PDL関数に返される値が、「10」以下にならない。 いろいろと考えた末、一応次のことが原因であろうと推測する。 (1)については、Arduinoがトリガを認識しない期間に発せられたトリガに対しては「LOW」が返るためPDL関数は「0」と判断するためであろう。要するに「リトリガ」処理の問題であって、割り込みを用いることによって対処できるのではと考える。 (2)については、7ピンHIGH→ディレイ→7ピンLOWの処理に最低100μs以上かかり、これ以上短いパルスを発生できないためであろう。これに対してはポートの直接操作で対処できるのではと考える。 いずれも、Arduinoが十分速ければ顕在化しない問題だろうと思う。 処理速度の点では、ArduinoとMSXは案外「ともだち」かもしれない。と言うとArduinoがちょっとイヤな顔しているな。 |
|
とりあえずは、パドルのテスト(その1)。 アナログ入力ピンに可変抵抗を接続し、USBを通じてパソコンに値をシリアル転送する。 アナログ入力は0〜1023の値を返すが、パドルの想定のため、4で割って0〜255の値を返すこととする。 ■右図上 手元にあった100kΩの可変抵抗をやっつけ仕事でArduinoに接続。うっかり金属部分が端子に接触しないよう、両面テープで絶縁し、USBポートの金具に固定。 ■右図下 単純極まりないスケッチ。 Arduinoにロードし、シリアル表示でデータをモニタしてみる。 よしよし、可変抵抗の動きに合わせてちゃ〜んと0〜255の値を返しておるぞ。 ■次のステップ deley()はミリ秒単位ということで、パドルには使えない。あまり精度も高くないというし。 そこで、delayMicroseconds()を使おうと思ったら、PDL関数はナノ秒単位なの。MSXのクセに生意気な。どうもこのへんで暗礁に乗り上げそうな気がする。まあいいや、やってみなくちゃ分からない。 ■まとめ ここで、なぜArduinoにこだわっているか触れておく。 というより、なぜPIC等を使わないのかというべきか。 ひとことで言って、ストイックと理解してほしい。 出来の悪い子ほど可愛いノリでMSXに付き合っているわけだが、やはり時代の流れで、かつての周辺機器が入手困難となっている。 そこで、PICなどのトレンディーなデバイスを使って、チャッチャッと代替品を作成するのがイマいのかもしれない。 ただ、ここで一点、守りたいと思っていることがある。 それはすなわち、基本的には「買ってきて組み立てれば、すぐMSXに接続できるもの」でありたい。一歩譲ってPCは使っていいが、それ以外の開発環境は許さん! 端的に言って、PCからUSBケーブル一本で書き込めるArduinoはいいけれど、別途、書き込みライターが必要なデバイスはNGとしている。 これまで汎用ロジックICで無理しているかと思えば、高価なProDigioなんてボードを使ったりしているのも、MSXの外部環境(ハード)として、PCとせいぜいケーブルどまりに限定しているためである。 なんでそんな不便な制約を課すかというと、「道楽」のストイックさというワケよ。わかるかなぁ、わかんねぇだろうなぁ〜。Powered by 松鶴家 千とせ |
|
というわけで、Arduino側の処理は一応目鼻がついたところで、MSXとのインターフェースを考える。 候補としては、次のようなものが考えられる。 (1)RS232Cカートリッジを用いる。 (2)PADやPDL等の既存の入力関数を用いる。 (3)オリジナルのプロトコルを考える。 (1)はRS232Cカートリッジは一般的アイテムではなく、(3)はどうなることやら。 従って、まずは(2)のアプローチを考えることとする。 本来なら、タブレット入力に使われるPAD関数を用いたいところであるが、どのようなやりとりが機器間で行われているのか不明である。 このため、機序が把握できているPDL関数について考えてみる。 手順は概ね次のとおりとなろう。 (1)Arduinoは、出力ピンの初期状態をHIGHにする。 (2)次にMSXの8ピンがHIGHになるのを待つ。 (3) MSXの8ピンがHIGHになれば、アナログ入力の値に応じて一定の期間出力ピンをLOWにしたあと、HIGHに戻す。 (4)MSXはPDL関数で、0〜255の値でデータを受け取る。 右図上は、可変抵抗器の値をアナログ入力ピンから読み込み、MSXに出力する実体配線図である。 これによりパドルが実現できるはずである。 以前作成したワンショットトリガICを用いたRC発振と異なり、内蔵タイマーによってパルス幅を決めるため、浮遊容量の影響を受けない正確なデータが期待できる。 右図下は、4線式タッチパネルの実体配線図で、タッチされていない場合は「0」となるよう、プルダウン抵抗を介してGNDに接続されている。 とまあ、すっかり出来たような気でいるが、こういうのを「獲らぬ狸の皮算用」というのであろう。最悪の場合、以上で満足し、興味がヨソに移ってしまうおそれがある。 モチベーションの維持が期待される今日この頃である。 |
|
「建築発明工作ゼミ2008」様のページは実に興味深く、テレビに画像を映すべくArduinoでビデオ信号を作り出す、といったことまで実験されている。 という前フリであれば、当然、右写真はArduinoで出力したテレビ画像、と思うところであろうが、そんなに素直な天の邪鬼ではないのは先刻ご承知のとおり。 (「建築発明工作ゼミ2008」様HP) http://kousaku-kousaku.blogspot.com/ 今回、興味を持ったのは「タッチパネル」の実験である。 タッチパネルには各種方式があるが、「4線式タッチパネル」は「加圧メンブレンセンサー」が2次元方向に展開された構造になっている。 Arduinoとの接続は非常に簡単、スケッチも分かりやすい。というわけでトライしてみようと思い立ったわけである。 では、右写真はタッチパネルかというと、そうではない。そんなに素直な天の邪鬼ではないのである。 結論から言って、液晶パネルの上にタッチパネルをセットし、MSXにタブレットPCっぽいインターフェースを装備させてみようという目論見である。 用意したのは、7インチワイドサイズのTFT-LCD(LCDコントローラーセットで4,980円)と同サイズのタッチパネル(6,500円)。重ねてみると、実にピッタリサイズである。 ちなみに買ったお店はココ。http://www.aitendo.co.jp/ というわけで、まず着手したのはMSXとビデオモニターセットとの接続である。 一番手間取ったのは12V電源の確保ぐらいで、しかるべく接続し、LCDコントローラーを適当に調整すればそれなりに映った。 たかだか5千円ほどで11万画素のTFT-LCDとコントローラーが入手できるなんていい時代になったものである。 さて、次はタッチパネルであるが、これはもう出来たも同然。と思ったところでハタと気が付く。 タッチパネルの座標取得はArduinoに任せるとして、それをMSXにどうやって伝えるか考えていなかった。いよいよ本当にMSXとのインターフェースを考えないといけなくなってきた。 ちょっと、ちょっと、どうしようかな。Powered by ザ・たっち |





