2011年9月 5日 (月曜日)

沈黙の赤外線解析リモコン(最終回)

ようやく沈黙を破ってリモコンとしての役目を果たしたのもつかの間、NECフォーマットの機器に全く取り合ってくれず、またしても原因究明モードの赤外線解析リモコンの続きです。

Ir

ここで再び、UART経由で信号の状態などを見てみますが、やっぱり相変わらずのじゃじゃ馬ぶり。繋いでいる回路が悪いのか、何故かUARTを繋ぐとかなりの確率で、電源を入れた途端に(リモコン信号を送出しなくとも)「学習開始」のLEDが付いてしまいます。おそらくノイズでも乗っているんだとは思いますが詳細は不明。

そして実際のリモコン信号を学習させても家電製品協会フォーマット(以下家電協フォーマット)のリモコンのはずなのにNECフォーマットになったり家電協フォーマットになったりとフラフラ。正直表示があてになりません。

と言う事で、結局ロジアナに頼ります。波形を見る限り、概ね問題なさそう。唯一おかしなところと言えば

なぜがリーダの信号のOnの時間が異常に短い

くらいです。具体的には学習元のリモコンの1/4と言ったところ。とにかくここを何とかすればヨサゲです。

とは言うものの、「なんでこうなるの?」と言われるとサッパリ原因がわかりません。まぁ「動きゃいいんだろ?」とNECフォーマットのリーダ部Onの時間を決める変数の値を4倍するコードを書くのは簡単ですが、やっぱり理屈が伴わないとすっきりしないのでもう少し粘ります。

ふと書籍に載っていた「UARTで接続してNECフォーマットの信号を受信した時の画面」が目に留まりました。この画面ではir_readhは140になっています。これが規格通りの値なら

ir_readh = 140 → 9ms

となるはずです。
んで、この作例のプログラムではこの値を加工してir_shotと言う関数に渡すのですが、その時のロジックが

623倍してから256で割る

です。8bitマイコンならではの帳尻合わせの処理なのですが、仮に上記の値で計算すると

140 * 623 / 256 = 340(小数切り捨て)

ここで違和感を覚えます。「あれ、ちょっと待て。計算後の値を格納する変数の型なんだっけ?」と確認すると

char…

そうです。オーバーフローしてました。上位が切り捨てられて

340 - 256 = 84

となっていた模様。本来のデータと比較をすると

340 / 84 = 4(小数切り捨て)

1/4の理由がわかりました…。

データ型を見直せば最良なのですが、この変数(ir_readh)があちこちで基準となっていたのを理由に上記のとおりのコザカシイ修正で対応をした結果、手持ちのリモコンは全戦全勝と言う素晴らしいモノに仕上がりました(ちなみに著者の方は「失敗する原因はよくわかりません」「半分は成功していますから、これをもって完成とさせてください」と敗北宣言してますが、まぁ色々とお忙しかったのでしょう)

…ここまで長かった。ブログに載せるまでにかなりタイムラグがあったのですが、G.W.直前あたりから着手していて、全戦全勝確認できたのが7月下旬だったのでかれこれ3ヶ月近く。追加の設備投資(ロジアナ購入)も行った結構なプロジェクトになってしまいました(まぁ原因さえ分かってしまえばコードレビューで分かる程度の問題ではありましたが)。

つーか、最初の作例がこれってのはどうなんでしょうね?相変わらずサポートページにも言及が無い様ですし。この機会に進言してもいいのですが出版されてからもう2年経ってますしね。

と言う事で「PICとC言語の電子工作」の最初の作例のせいで「PIC('A`)マンドクセ ヤーメタ」となってしまう事を阻止すべく、「赤外線解析リモコン 動かない」で検索できるようにここに書いておきますw(さっき「赤外線解析リモコン 動きません」で検索トップに出たけど検索するなら「動かない」でしょうからね)。

あと、最初の作例で挫折した方へ朗報。この本の2番目の作例(デジタル電圧計)はサンプルが一発で動きますので売り払う前にちょっと試してみてください。まぁ、PIC12F683じゃなくてPIC16F88なので新たに買わないといけませんが(地方在住者はここが一番イタイかも)。

と言う事でこのシリーズは一旦終了です。

| | コメント (0) | トラックバック (0)

2011年9月 4日 (日曜日)

沈黙の赤外線解析リモコン(その2)

さて、UARTでデータを覗いてみれば一発で解決するかと思われた赤外線解析リモコンですが、却ってワケワカラン状態となってしまった前回。その後の顛末を記します。

結局、埒があかないのでロジックアナライザを導入する事にしました。前々からオシロも含めて「欲しいなー」と思っていた機材の一つでしたがついにその時が来たようです。まぁ、そんなに大それたものは買えないし、買っても使いこなせなかった(\(^o^)/オワタ)となっても困るので、入門機にはちょうどいいであろう、ZEROPLUSのLAP-C(16032)をチョイスしました。

購入後しばらくは使い方に戸惑い、若干の失敗(試しにやってみたUARTのbaud rate設定の仕方が分からなかった)も経験しつつ、ようやく慣れてきたところで検証再開です。まずはリモコン信号の受信センサに電源供給するだけの回路を作り、プローブを受信信号端子にかませてリモコン本体の信号を取り込みます。その後、解析リモコンに学習させた信号も取り込んで両方を比較します。

すると、「リーダとトレーラ部以外のデータは完璧」と言う、「なんだそりゃ?」的な結論が出ました。
もっと具体的に言うと、

  • リーダ部はLレベルの時間がとにかく短い
  • トレーラ部は…なんと、それらしい部分がありませんでした。

とりあえず場当たり的に、リーダ部のLレベルの時間を目測で対比し8倍の値にセット。トレーラ部はそもそも実装が無かったので追加。この2点を修正してから再度動作確認をするとようやく動作!試しにアサインしたTVの電源が付きました。ここまで来るのが長かった…。

しばし感慨に浸ってから改めてソースコードを振り返りますが、トレーラ部は「言われてみれば無いよねー」と華麗にスルーしてました。リーダ部もよくよく見ると、リーダ部の検出後に時間カウント用のタイマ分周比を変更(8bitタイマと言う事もあり、余裕でカウントオーバーフローしちゃうので最長にしていると理解)しているのですが、信号学習後の実際の送信時に分周比を戻していない!こりゃ上手く行く筈がありません。ちなみに分周比の変更前/後の比はちょうど8:1で、上記の目測の根拠はここにありました。

さて、これで一仕事終わりと行きたいところだったのですが、まだ一部のリモコンの信号しか学習出来ていません。具体的には手元にあるパナソニック製品(CATVのSTBとTV)と照明のリモコンくらい。その他の東芝製DVD&HDDレコーダやエアコン、車のオーディオやナビのリモコンは一応学習はする素振りを見せるものの、学習したデータがおかしいor送信の仕方がおかしいのか、機器が信号を全く受け付けてくれません。書籍では「勝率は50%でしたがまぁこんなもんでしょう」的記述もあるのですが、何かが引っかかりますのでもう少し粘ってみます。

現状分析すると、上手く学習出来るリモコンの信号は前回導入したロジアナで見る限り、いわゆる「家電製品協会フォーマット(以下、家電協フォーマット)」の様で、学習出来ないリモコンの信号は家電協フォーマットと双璧をなす「NECフォーマット」の様です(他にSONYフォーマットもあるんですが、この作例のプログラムでは最初から未対応を表明しているため、今回は除外とします)。

と言う事で、再び原因の究明モードに入るところで次回へ続く。

| | コメント (0) | トラックバック (1)

2011年7月26日 (火曜日)

沈黙の赤外線解析リモコン(その1)

またブランクが空いてますが気にせずwに前回の続き。

さて、購入したPIC本「PICとC言語の電子工作」の最初の作例である、「赤外線解析リモコン」を実際に作って試してみたのですが、とにかく動きません。テレビとCATVのSTB(共にパナ製)を始め、エアコン、照明、カーステ、カーナビのリモコンと試しましたが全滅でした。いや、決して無反応というわけではなく、リモコンを向けてボタンを押すと、学習中である事を示す赤色LEDが点灯します。このもどかしさといったら…。

で、原因究明ですが「まぁ、どうせ自分がどこかでしくじっているんだろう」と楽観的に

  • 回路は問題無いか?
  • コーディングの転記ミスは無いか?

を確認してみたものの、コードのミスを1カ所(デバッグ表示用で使うUARTのタイマ設定値)を見つけたくらいで、他は何も見つかりません。そうこうしている内に、書籍の付属CD-ROMにソースコードが収録されている事を思い出し、さっそく収録のソースと自身のソースをWinMergeで比較するも、一字一句同じで問題無しと言う結論となりました。頼みの綱的にインターネット上の公式サポートページを見るも、該当する記述も見つかりません。

多分、これが初めての電子工作&マイコンプログラミングだったならばこの時点で挫折は必至だったのでしょうが、まだ手詰まりではありません。この作例ではUART経由で学習データの確認が出来る仕様になっているので、大分前に作ったiTAX-irDA用の書き込みケーブルと繋いでTeraTermに表示をしてみます。これで進展するかと思いきや、

  • UARTを繋いだ状態で電源を入れるとかなりの確率で勝手に信号受信動作をする
  • 受信するデータがコロコロ変わる。同じリモコンの同じ信号でもNECフォーマットになったり、家製協フォーマットになったりで不安定

と、却ってワケワカラン状態に陥ってしまいました。さぁ、いよいよ手詰まりか?と言うところで次回へ続く。

| | コメント (0) | トラックバック (0)

2011年6月 4日 (土曜日)

今更ながらのPICデビュー!だがしかし…

前回(昨年9月)からは超久々のエントリです。このブランクの間に人生のロール(役割)に「親父」が追加されましたw。そんな中、タイトルにもあるように、ようやくPICマイコンデビューをしたのでその辺りの顛末を書いてみようかなと思います。

マイコンプログラミングに触れたのはかれこれ3年前のFRマイコンが最初だっただけに「今更PICやるのかよw」って感じです。でも正直敷居高かったんですよ。巷の書籍は大分前から店頭で立ち読みしつつも、付随する電子回路も作らないといけないのがネック(住んでいる土地柄、部品購入が難しい)だなーと思っていて、なんと言ってもライターが結構高い。マイコン本体が百円台から買えるのにライターが数千円なんて!と思っていました。

まぁだからこそ、雑誌付録のマイコン基板の存在を知った時は嬉しくて飛びついちゃったんですよね。USBコネクタ等の実装が必要かつ、別売りだったのは盲点で一瞬ひるみました(しかも支払い方法が代引のみ > 実は代引嫌いw)けれども、それでも「ライター要らず」な事、しかもDSub9pinのシリアルコネクタじゃないと言うのはアドバンテージでした(自宅にはレガシーポートを持ったPCがすでに無い)。

そして、最近の付属マイコン基板はこういった参入障壁すら減らすべく、USBコネクタも実装済みで、LEDチカチカやるだけならUSBケーブル以外の追加購入が不要になっていますね。「良い時代だなー」としみじみしておりますw

そんなこんなでPICを避けて通っていた私ですがやっぱり「PIC触ってみたい」と言う好奇心には勝てず、地味に準備をしていました。PIC本買ったのが2年近く前、PICライターとPICマイコン買ったのが今年の2月。途中、震災を挟んで4月始めにLEDチカチカデビューと言う牛歩戦術を展開して、ようやく入り口に立つ事が出来ました。

そして、G.W.直前あたりに購入した本の最初の作例である「赤外線解析リモコン」にチャレンジしたのですが、回路&プログラム作って書き込んで動かしてみるも、動かないではないですか…早くも挫折フラグが…といった所で次回に続きます。

| | コメント (0) | トラックバック (0)

2010年5月 7日 (金曜日)

「オブジェクト指向っぽいことをしなくても良いわけ」を考えてみる

えーと、久しぶりにこのブログのメインテーマ(だったはず)な話題を。

プロフィールにも書いてあるのですが、3年前にこここんな文章を書きなぐっていた時期がありました。ほんとに最後の方は書きなぐりで誤字脱字も酷いし、そろそろ内容を見直し&追記しようかなぁと思っていたところに、竹添さんのツイート経由でこんなエントリを見つけたのでした。

ご覧の様にコメント欄がプチ炎上状態です。まぁコメント内容を読むと炎上して当然かな?と言う内容があったりするのですが、そういった部分には触れず、このエントリを見る以前から思っていた事をこのエントリとコメントからの内容もふまえた上で書いてみようかなと思います。

「自分でクラスを作ってオブジェクト指向っぽいことをしている」なんてことはまったくない。

これは業務アプリケーション実装の末端部分では結構当たり前だったりします。もちろん、自前で再利用性を考えて様々なクラスを作って使っている方も居ますが、大抵はこのエントリでも述べられているように、「.NET Framework」で提供された便利なクラス群を組み合わせて所定の処理(ロジック)を実現するケースが多いと思います。そして、大抵のロジックはこんな作りだったりします。

  1. メソッドの引数あるいは他の仕組みから、処理結果のデータをもらうために必要なデータ(パラメータ)をもらう
  2. 必要ならパラメータを加工(場合によってはパラメータの検証(バリデーション)も行うケースがあるかも)
  3. 結果として必要なデータをデータベースから得るための命令文(SQL)を生成(ここで1〜2で出てきたパラメータも使用)
  4. データベースに接続&SQLを実行してもらって結果をもらう
  5. もらった結果を(必要であれば加工して)画面に表示(あるいは結果によって画面の表示を変えるなど)

このタイプのロジック、私は個人的に「SQL一発」ロジックと呼んでいます。その理由として、上記における3.の「SQL生成」が最重要であると言うところからです。ほとんどの場合、ここを間違えさえしなければそのロジックは正しく動きます。だから必死でこの部分をどう実現するか考えるわけです(場合によってはここでかなりの時間を要します)。当然、4.以降の処理も大事ではありますが、3.で間違いがあるようでは元も子もありません。

それで、4.以降の処理と言うのはもっとも単純なケースでは「結果を画面に表示するだけ」の処理になります。イメージとしては「データの移し替え」で、プログラミングの世界ではいわゆる「代入」です。ここにオブジェクト指向の出番と言うか、メリットはあまりありません。

じゃぁ、どこにメリットがあるのか?冒頭の引用で「オブジェクト指向っぽいことをするなんてことはまったくない」と書いてあるように、そもそも入り込む余地は無いのです(ちょっと大げさに言ってます。実際は入り込む余地は十二分にありますがね)。

言い換えると、上記に記載の1〜5の処理のどこかでそのメリットと競合する部分があり、その部分でカバーされているので「オブジェクト指向っぽいことをする」必要が無いと言う事なのです。それはどこか?はい、それが3.の「SQL生成」処理にあたるのです。件のエントリの著者の方のコメントにも

どのようなSQL文を書くか決まれば、もう内部設計が終わったようなものです。

と言うものがありますね。このスタイルで仕事をこなす事にすっかり慣れ親しんでしまった人にとって、これで十分に目的が達成できている訳ですから「オブジェクト指向プログラミングを自らが行う事によるメリット」と言うのは感じづらいモノになるのは自然だと思っています。

とは言えこの業界、外部から情報を収集していると「やっぱ、オブジェクト指向を自ら取り入れた方がいいのかな?」と思うケースもあるんじゃないかなと思っています(そうあって欲しいなぁ…)。ま、そこはそこでまた別の要因が絡んだりしてすんなりと行かない事が多いようです。

と書いたところで少し長くなったので、続きはまた後日。

| | コメント (3) | トラックバック (0)

2009年11月13日 (金曜日)

もう一作品はこんなの

前回のエントリ後半に書いた「もう1作品」の動画をアップしました。


技術的には大したことやってません。まぁ、C#でMIDI&デリゲートの練習には

続きを読む "もう一作品はこんなの"

| | コメント (0) | トラックバック (0)

2009年11月 3日 (火曜日)

∞(無限)トクトク改良版をアップ

また間が空いてしまいましてすいません。あ、ARMマイコン基板コンテストは結果が出ましたね。残念ながら入賞はできませんでした。まぁ、今回は正直着手が遅すぎました。そのうちここで製作したモノのお披露目をしようかと思います。

あと大分告知が遅れてしまいましたがエレキジャック誌に記事を書かせていただきました。No.14No.15です。興味のある方は是非購入して読んでいただければと思います。

んで、最近はもっぱらMTM04の準備です。今回もニコニコ技術部枠での出展になります。全2作品を出展予定で、さきほど本エントリのタイトルにもなっている1つ目の作品の動画をうpしました。

もう1作品は

続きを読む "∞(無限)トクトク改良版をアップ"

| | コメント (0) | トラックバック (0)

2009年8月 7日 (金曜日)

Palm(CLIE)で『あの楽器』のその後

間が空きましたが前回の予告どおり、「Palm(CLIE)で『あの楽器』」のその後です。まずは先々週および、昨日アップした動画をご覧ください。


MTM03終了後の改良点は

  • MTM03に間に合わせるために突貫で作った部分の見直し(特にアプリとしての体裁)
  • グリッサンド対応
  • あてぶり録音機能
  • オクターブシフト機能
  • あてぶりデータ演奏位置変更機能

です。正直なところ、

続きを読む "Palm(CLIE)で『あの楽器』のその後"

| | コメント (3) | トラックバック (0)

2009年6月 7日 (日曜日)

MTM03での展示物(その1)

MTM03で出展していた作品です。

まずは『Palm(CLIE)で「あの楽器」』。


当日はニコ生中継中のゲリラライブに飛び入りさせてもらったりしました。

そして『∞(無限)トクトク』。

続きを読む "MTM03での展示物(その1)"

| | コメント (0) | トラックバック (0)

2009年4月13日 (月曜日)

携帯電話でネギ振り

今年最初のエントリでちらっと触れたiアプリですが、ほんの少しだけ体裁を整えて公開してみました。


ちなみに本ブログ経由でご覧の方は最初から「iアプリ」って宣言しているので動画上で狙っている効果(「携帯で・・・ってそっちかよ!」ってやつね。)は得られません。ご了承を。

続きを読む "携帯電話でネギ振り"

| | コメント (0) | トラックバック (0)

より以前の記事一覧