インテグレーションを考える!の巻き 2020.4.21
ちょっと頭の体操です。
悩みの発端
SRC4137のDAIだけを動かすソフトを作成して、
SRC4137 → DIV5142(2WAY) → DAC4499
の構成で動くようにしたのはいいのだけど、パネルをつけて使いやすい形にしようとしたらどうしたらいいか
が悩ましいところ。
というのも、それぞれの基板の機能をフルに活用しようとすると、それぞれにLCDとスイッチを
とりつける必要があります。でも、それってパネルがかなり大きくなりますし、それに不恰好です。
普段使うのは、入力切替とボリューム程度なので、SRC4137のパネルのみのLCDをとりつけて、
あとはケースの中に閉じ込めるのが一番簡単ですが、ちょっと変更したくても簡単にはできません。
頭の体操がてら、1組のLCDとスイッチで全体の機能を統合して扱うためにはどうしたらいいかを考えてみましょう。
色々な基板が搭載されているのだけれど、どうやってまとめようか思案中。
現在はそれぞれの独立した機能の基板が入っています。操作はバラバラに行います。
DAC4499は仕方なくシンプルファンクションモードで動いています。
対策案、その1:新規にソフトを作る
一番スマートな方法は、 SRC4137、DIV5142(2WAY)、DAC4499の3つの基板を統合して操作できる
ソフトの作成です。それをSRC4137基板に搭載し、他の基板に制御線を接続して操作です。
都合のいいことに、DIV5142にしてもDAC4499にしても、どれもI2Cで制御する素子しか搭載していませんから、
SRC4137から2本(SDA,SCL)をそれぞれの基板に接続するだけで済むはずです。
ちなみに、いままでつかったI2Cで制御する素子のアドレスを調べてみました。大抵の素子のI2Cアドレスは
チップセレクト端子が2ビットありますので、上位5ビットのみを抜き出して整理しています。
結構アドレスがバラバラになっているので、この3枚の基板を動かす程度ではアドレスの干渉はしないようです。
さすがに同じメーカの同じ種類(例えばDAC)では同じアドレスをつかってはいるようですが、
一つのケースに少なくとも4つ以上のDACをのせることはないでしょう。
I2Cアドレスの一覧を整理してみました。結構ばらけています。
SRC4137をマスターにして、他の基板上の素子をI2Cで制御すると一番簡単ですが・・・・ソフトが大変。
この方法ですが、
長所:スマートに機能が統合できる。
ハードの追加がほとんどない。
短所:新規に統合ソフトをつくらないといけない(かなり面倒)。
他の組み合わせに流用できない。
プログラムの容量の不足の懸念。
(SRC4137(DAI):27%、DAC4499:25%、DIV5142(2WAY):75%で合計が100%を越える)
プログラムについては、共通部分もあるのと、すこし工夫すればなんとか100%以内に納まるとは思います。
が、やはり、一番のネックは新規ソフトの作成がかなり面倒です(プログラムの構造がそれぞれ違うので、
統一しないといけない・・・)。
とはいえ、普通に考えたらこの方法の一択になるのですが、折角なので頭の体操がてら他の方法も考えてみましょう。
対策案、その2:単純な切り替え機をつくる。
あんちょこにLCDとスイッチについて3台分の切り替え機を作ってやる方法です。
長所:組み合わせに自由度が生まれる(どの基板にも適用できる)
短所:ソフトのハードルが高い懸念
切り替えのための基板からの配線が多い。
新規にハードとソフトが必要ですが、それはさておきどうやって切り替えるかです。
スイッチについては、さほど難しくはありませんがLCDの切り替えは頭をつかいます。
というのは、単純に配線を入れ替えただけでは動作しません。LCDはいわゆるPCのモニターと
は異なっていて、文字毎のデータを受けて表示しているので、LCDの表示内容をそれぞれの
機種(基板)ごとに覚えておく必要があります。
すなわち切り替え機に接続する台数分の仮想的なLCDを構築しておいて、基板を切り替えるたびに
表示内容を変更するといったことを行わなければなりません。しかし、LCDとCPUとの間の信号速度が速く、
一つのデータ送信の速度は最短で40usです。そのため3台分の信号を同時に受けて処理できるかどうかが鍵になります。
PICで64MHzで動かしても、なんとなく厳しそうです。
こんな感じのものができればいいですが、ハードとソフトもどちらもハードルが高そうです。
対策案、その3:通信での切り替え機をつくる
切り替え機を考えた場合の最大のネックはその2のようにLCDの切り替えなのですが、LCDの制御信号を切り替えるのではなくて、
LCDの表示内容で切り替える方法です。すなわち、切り替える基板からLCDの表示内容のみを、切り替え機にリクエストがあれば送信します。
これだと、LCDのリフレッシュレートをある程度我慢すれば処理できそうです。
各基板側のCPUは直接LCDに表示せずに、仮想的なLCDにデータを溜め込ませて、切り替え機からのリクエストに応じて表示内容を送信することに
なるので、各基板側のLCDの制御ソフトを変更する必要がありますがLCDの制御ライブラリーのみの修正で済みそうです(ほんとかな?)
こんな形の切り替え機なら実現できるかもしれません。
長所:組み合わせに自由度を持たせやすい。
短所:各基板のソフトの修正は必要(ただし最小限で済む)
基板間の配線が多い(それでも1基板あたり4本程度でしょう)。
もうちょっとFSです。
まずLCDへの文字の転送時間について考えると、20×4文字のLCDだと一度に80文字を送信することになります。
調歩同期で送るとして、1ビットの送信時間を10us(100kbps)でできるとすると1スタートビット、1ストップビットの計10ビットで
80文字だと800ビットの計8msかかります。表示サイクルを20Hz(50ms毎)とすると、CPUの専用率は16%です。まあ、このくらいなら許せるかな?
あと、LCD内容をシリアルで送信するとすればリクエスト信号とデータ信号で2本必要ですが、LCDの制御自体には6本必要なので、かなり
配線を減らすことができます。
次にスイッチ(SW)の切り替えですが、一番簡単なのはスイッチ自体が各基板に4つしかないので、4本の配線でINTERRATION UNITからの信号を
受け渡すことです。でも、それでは芸がありません。こちらも調歩同期でのシリアル転送にすれば、基板からのリクエスト信号とデータ信号で
2本で済みます。ただ、4本が2本になったくらいではあまりありがたみがないな〜。
色々考えて
対策案、その3で考えよう!02020.4.23
INTEGRATION UNITと各基板の配線が少なくて、今後の汎用性も考えて「対策案、その3」で考えていきましょう。
で、目標ですが通信線は1本で行うこととします。すなわち双方向のシリアル通信でおこないます。
ただ、シリアル通信については双方向だとPIC内部のUARTユニットが使えないので、ソフトで行う必要があります。
それに、もともとUARTが使えるようにピン配置になっていないので、ソフトで対応するしかありません。
で、大まかな通信の仕様は下記を考えています。
・各基板からは1ms毎にLCDの2文字分の内容をシリアル転送(送出)する。
20×4=80文字を転送するには40mSかかるので、リフレッシュレートは25Hzです。
・2文字分のシリアル転送後にスイッチ情報(4Bit)を各基板は受け取る。
スイッチの情報は1ms毎に更新されるので、操作感は変らないでしょう。
さて、この仕様が実現できるかどうか事前に色々と調べることがあります。おいおい、進めていきましょう!
検討用のプラットフォームを構築
まずは色々な検討のためのプラットフォームの構築です。
まずはINTEGRATION UNITの検討プラットフォームを構築しました。
次に通信のための仮想基板を搭載します。
こちらは仮想基板。このPICと通信を行います。
通信プロトコル 2020.04.24
基本は調歩同期としますが、1スタートビット、1ストップビットで8ビットデータ長とします。
仮想基板をスレーブユニットとして、スレーブ側からLCD文字を1msおきに2文字づつ送信します。
その後にスイッチの情報を4ビットで受けます。
転送速度は100kbpsでも動きましたが、余裕をもたせて83kbpsとしました。これで、通信にかかる
時間は約300usです。スレーブ側は1msのうち300usは通信に使うことになるので、CPUの稼動は実質70%です。
通信プロトコルです
通信の状況をモニターしています。
基本的なところは動作することが確認できたのですが、ブレッドボードのままだと場所もとるので、
そろそろ基板にまとめていきましょう。
といっても、ユニバーサルで作るのも面倒だし、かといって基板をつくるほどの配線もないので、
既存の基板としてDUAL−I2C−CONTを使用します。
必要な部品をDUAL-I2C-CONTに実装しました。
まずはSRC4137(DAI版)から 2020.4.25
まずは、SRC4137(DAI版)のソフトを改造して、INTEGRATION UNITとの接続テストです。
問題なく、通信できることを確認しました。すべてのスイッチの機能もOKです。
SRC4137側の通信に使うポートはどれにするかと考えましたが、とりあえずは基板端子にでているところを使用しました。
まずはSRC4137(DAI版)との接続テストです。
さてさて、どうしよう?
SRC4137との通信で、LCDとSWの機能をINTEGRATION UNITに移すことはできましたが、さてさて元に戻す、
すなわちSRC4137上のLCDやスイッチを使う場合にはどうしたらいいだろう?ソフトとしては切り替えて使用する
こともできますが、どうやって切り替えるかはすこし悩みます。こればかりはハードウエアで設定しないといけません。
それとソフトの初期化の方法です。INTEGRATION UNITと接続する状態では、対象の基板にはスイッチがありませんから、
強制初期化(スイッチを押しながら電源を投入)がつかえません。このあたりは、基板毎で変る可能性はありますが
考えどころです。
まずは、SRC4137(DAI版)は
SW4のみを押しながら起動: スタンドアロンモード(基板上のLCDとSWを使用)
SW3のみを押しながら起動: 通信モード(INTEGRATION UNITと接続)
としておきましょう。初期値はありませんので、初期状態は不定です。最初に電源投入時点にかならず設定する必要があります。
DAC4499も繋いでみましょう
DAC4499のソフトもすこし修正してINTEGRATION UNITに接続できるようにしましょう。
DAC4499を通信モードで使用するための設定は、ジャンパスイッチが沢山あるのでそちらで設定できるようにしました。
DAC4499も追加で接続できるようにしました。
DAC4499のJP8-0,JP8-7を短絡すると通信モードで動作します。
通信のポートは基板端子のP1を使います。
DAC4499の操作画面を乗っ取ることができました。
通信先基板の切り替えは・・・
INTEGRATION UNITは4つの基板と接続できるようにしています。
※実際にはもっと接続できるのだけれど、使うとしても4つあれば十分でしょう。
で、その切り替え方法ですが切り替え専用のスイッチを追加すれば操作は簡単ですが、
そのスイッチ用のパネルの加工もあるので既存の4つのスイッチを活用することにしました。
キーの長押しで認識させてもよかったのですが、すでに長押しはリピート機能に割り振っているので
使えません。そのため、ちょっと面倒ですが、2つのキーを同時に押すと接続先の基板を
切り替えるようにしました。具体的にはTERM+とTEM-スイッチです。すなわちSW1とSW2
を同時に押せば、接続先を切り替えることができます。
4つの基板が接続できますが、つながっていない基板をアクセスすると表示は”?”だらけに
なります。ちょっとセンス悪いかもですね。このあたりは、後で考えましょう。
SW1とSW2を同時に押すと、接続先の基板を切り替えることができます。
つながっている基板がないと、こんな表示になります。ちょっとセンス悪いかな?
次は、DIV5142(2WAY)基板も繋ごう!
DIV5142(2WAY)のソフトも改造してIntegration UNITとつなげるようにしました。
DIV5142(2WAY版)とも接続しました。
DIV5142(2WAY)の表示も乗っ取ることができました。
表示はすこし改造です
接続する基板からの通信がない場合は、以前は画面一杯に”?”が出るようにしていましたが、
もうすこし修正して、「Connection failure」 の文字がでるようにしてみました。
接続基板がない場合の表示です。
フォーマットをすこし拡張! 2020.4.27
使用するSWは4個だけでいいのですが、将来的にその他のスイッチやロータリーエンコーダを接続できるように、
スイッチ用のビットを8ビットに拡張しておきましょう。こうすると、CPUの占有率が約31%から36%に上昇してしまいますが、
まあいいでしょう。とくに操作感として遅くなったという印象はほとんどありません。
フォーマットも少し拡張です。
ソフトも機能拡張! 2020.4.29
色々と弄っていて、もうすこし機能が必要なことがわかってきました。
そこで、かなりの大変更になりますが、メニュー形式でパラメータを設定できるようにしてみました。
1)接続できる基板は最大6枚に
チャンネルデバイダであるDIV5142を高次のBPFに設定すると、簡単に3枚、4枚と必要になります。
4WAYだと4枚必要で、現状の接続できる枚数が最大4枚だと、さらにDAIやDACも制御するとなると足りません。
そこで、6枚まで拡張できるようにしました。ただ、最初から6枚にすると切り替えが面倒なので、4枚および6枚から
選択できるようにしました。
しかし、6枚でもなりないことが想定されるので最大8枚程度までは拡張が必要かもしれません。問題はPICのどのI/Oピンを
つかうかです。簡単に取り出せるとこが少ないんですよね。
最大6枚までの基板を接続できるようにしてみました。
2)基板の切り替えスイッチも追加
基板の切り替えは、SW1とSW2を同時に押すことにしていますが、いちいち2つ押すのも面倒なときがあるので、
基板の切り替えスイッチも拡張できるようにしてみました。切り替えの専用のスイッチも取り付けられるようにしてみました。
ポートはPICのPIN_C1が候補ですが、プルアップ済みのPIN_Bに変更したほうがいいかな?
基板の切り替え専用のスイッチも取り付けられるようにしましょう。
3)スイッチの配列も選択できるように
基板によっては設定項目とパラメータのINCとDECが逆になっている場合があります。
基板をスタンドアロンで使用している場合は、配線を入れ替えるだけで調整ができますが、
同様にソフトでも調整できるようにしました。INC、DECの入れ替えだけでなく、TERM(項目)と
PARA(パラーメータ)スイッチの入れ替えもできるようにしてみました。
スイッチの切り替えのパターンです(その1)
スイッチの切り替えのパターンです(その4)
4)基板からのレスポンスタイムの設定
基板からは基本的に1ms毎にLCDの表示データとスイッチ情報のやり取りをおこっています。
しかし、基板からレスポンスがないとエラー表示をするようにしていますが、
基板側に赤外線リモコン機能があると一時的にレスポンスが遅くなることがあります。
というのも、赤外線リモコンの信号を処理しているときはプログラムがかかりっきりになるので、
他に手を回す余裕がありません。そのため、赤外線を受光している間は場合により100mS以上も
基板からのレスポンスが途絶える場合があります。そこで、基板からのレスポンスの時間も可変
できるようにしました。およそ10mS〜1sで4段階で設定できるようにしてみました。
基板からのレスポンスタイムの設定もできるようにしてみました。
さてさて、最終的な評価をしていきましょう!
対応機種を増やしていきましょう! 2020.5.1
なんやかんやで、さらに色々な機能を追加しています。接続できる基板は最大で8枚まで増やすことにしました。
ということで、接続可能な基板を増やして行きましょう。
やはり汎用的に多く使うのがSRC4137なので、SC2004のLCDを対象としたソフトをベースに改造を加えて
INTEGRATION UNITに接続できるようにしました。
SRC4137とも接続できるようにしました。
赤外線リモコンは難しいかな〜?
接続する基板が赤外線リモコンに対応していても問題はないのですが、例えばDIV5142を4枚つかった場合は
かなり大変です。1つの赤外線リモコン受光ユニットをすべてで共用することになるのですが、リモコンの学習時に
4枚の基板に対して、排他的にリモコンのキーを割り当てる必要があります。でないと、同時に複数の基板に対して
設定コマンドが作用するので、なにをどう設定しているのかわからなくなります。勿論、赤外線リモコンを扱う基板が
1枚だけなら問題はないのですが・・・・
で、1つの対応案としてはINTEGRATION UNITを赤外線リモコン対応にすることですが、これが難しい・・・・。
というのもINTEGRATION UNITは常に、最小で1ms毎に送られるLCDの表示内容を受信しなくてはいけません。
赤外線リモコンの信号が来ると、そちらに処理を優先させないと間に合わないので、その間はLCDからの信号を
取りこぼしてしまいます。赤外線リモコンでの送信コードは結構長くて数10mS程度になるので、LCDの画面でいえば
ほぼ丸々の表示ができなくなってしまいます。
リモコンの信号も受信できるし、かつ各基板からの信号も処理ができるようにできるか??????
割り込みのタイミングをもっと短くして、時分割で赤外線と基板からの信号の処理をして・・・・んん、間に合いそうにない感じ。
これは諦めるかな???
なんとかなるかな?・・・・
赤外線リモコンをつけることで、LCDの表示の抜けに対してはなんとかなるかもしれません。というのも、
各基板のプログラムはLCDの表示内容を常にリフレッシュ、すなわち同じ内容を常に上書きしている構造になっているので、
すこしの表示の欠けがあっても、すぐに穴埋めされるはずです。勿論、1回しかLCDに書き込みしない表示もありますが、
ほとんどが繰り返し描画しているので、実用的には問題はないかもしれません。付け加えることも検討してみましょう!
やってみましょう! 2020.5.2
さっそく基板に赤外線受光モジュールをとりつけて、ソフトの改造です。
ソフトの改造はすんなり行きましたが、やはり動かしてみると色々と問題がでてきます。
結論としては解決したのですが、下記のような対策が必要になりました。
・赤外線リモコンの信号を受光したときに画面が乱れる
これは、リモコンの信号を受信している間は画面の表示を停止しているので、その後に受信した
表示内容が違った位置に描画されるので、一瞬ですが画面表示がみだれます。これの対策としては
リモコンの信号を受信したら、基板からの信号のLCD表示の「区切り」信号を受信するまでは、画面
表示を停止するようにしました(内部の話なのでチンプンカンプンだと思いますが・・・。
・赤外線リモコンの信号をスイッチ信号に置き換えるための時間が短い
赤外線信号を受信したことをスイッチ信号におきかえて送るわけですが、1回だけ、すなわち
1mS程度の間だけだと基板が見落とす場合があります(ソフトのポーリングでやっている)。そこで、
スイッチ信号に置き換えるときに時間を5ms〜50msで変更できるようにしました。流石に50msもあれば
遅いソフトでも見落としはありません。
あと、困ったのはSONYのリモコンはキーを押している間はずっとリモコンのデータが送りつけられます。
他のメーカのリモコンはボタンを1回押すと1回だけデータが送られるので、問題ないのですが・・・・。
SONYの場合をつかった場合は、項目やパラメータの設定が1つづつでなく、2〜3個づつ飛んでしまうことが
発生してしまいます。ということで、SONYのリモコンではなく、違うリモコンで逃げました(汗。
赤外線受光モジュールをとりつけました。
長い足のままなので火星人のよう(って見たことないですが・・・。
完成!
もうこのあたりで仕上げに入りましょう。色々な機能を入れていくとだんだんプログラムが膨らんできてしまいました。
INTEGRATION UNITはこのあたりにしておいて、対応できる基板を増やしていったほうが良さそうです。
SC2004の動作も確認
プラットフォームに使用した基板はDUAL I2C CONT.基板ですが、この基板に搭載できるLCDは中華製の安価なものと、
秋月のSC2004のどちらも搭載できることができます。値段が倍ほど違うので、最近はもっぱら中華製を使っていますが、
念のため、秋月のSC2004もつかえるか確認しておきました。
秋月のSC2004用のコネクタもとりつけています。リボンケーブルも使えるように3列配置になっています。
SC2004での動作も確認しました。
接続できる基板を増やしてみよう!
いままで作った基板でもLCDを使うものは、いくつかあるのでINTEGRATION UNITへの対応を考えていきましょう。
またLCDをのせていないけどマイコンを搭載しているものもあるので、ソフトを組めばINTEGRATION UNITに
接続できるようになるので面白そうです。ただし、それらに搭載しているPICはDIPの18PINの小型のPICが多いので
速度とメモリー容量がすこし心配です。よくつかうPIC16F1827ではクロックは最大32MHzと半分だし、メモリーに
いたってはPIC18F26K20の1/8です。まあ、以前によくつかったPIC16F886と比べてもメモリーは1/2はあるので
できることは限られると思いますが、なんとかなるでしょう。
また、色々と弄っていきましょう!
その前に、備忘録として機能等を整理しておきましょう。
(備忘録)PICのピン機能
今回はプラットフォームにI2C DUAL CONT.をつかっていますが、PIC以外に電圧レギュレータ程度しか、素子という
素子がのっていません。そのため、適用なユニバーサル基板の切れ端をつかってもいいわけなのですが、肝心なのが
PICのピン機能なので、まずはこれを清書しておきました。
整理して行きましょう! 2020.5.9
遅々として書き物が進みませんでしたが、Integration Unitの製作マニュアルを作成しました。
書きながらも、内容がいままでと換わってきたりしていますが、一応このマニュアルが正です。
といっても、いつ変るかわかりませんが・・・・
IntegrationUnitManual.pdf
あわせて、このユニットに接続できる基板類のソフトと接続方法をまとめています。
SlaveUnitsManual.pdf
現状では、接続できる基板類は下記の通りです。
SRC4137
SRC4137(DAI版)
DAC4499
DIV5142 (4WAY版)
DIV5142 (2WAY、1WAY版)
もっと増やそうかと思案中です。というのも、LCDとスイッチの接続が不要だと、とても簡単にフルファンクションモードで動かせるので
便利かな〜と思っています。
4枚の基板をつないでみた
システム化を計るのと同時に、操作感のチェックのために基板を4枚つかってIntegration Unitに接続しました。
接続した基板は下記の4枚。
SRC4137
SRC4137(DAI版)
DAC4499
DAC4499DIV5142 (2WAY、1WAY版)
#その他、こんな基板が接続したいという希望あればBBSにでも投稿してください。
です。Integration UnitのSW5あるいはSW6で基板を切替えられるようにパラメータ設定しています。
なお、基板との通信は横着してミノムシクリップでおこなっています。通信が1本だけなのでこれができます。
4枚の基板とINTEGRATION UNITを接続しています。
で、感じた点は、まず1つのLCD,SWで集中コントロールできるのでとてもスッキリした感じになります。
ただ、いまどの基板の情報かがわからない。基板を切り替えたときに、何番と接続するかは一旦LCDに
表示されるのだけれど、しばらくしたら忘れてしまいますよね。表示内容をみれば、どの基板かわかるといえば
わかるのだれど・・・。
どこかに何番目の基板かを表示できるようにしたほうが便利かな〜。いらないかな〜。
次はDAC4497-2.1
DAC4497-2.1も色々なところで使用頻度の高いDACでもあるので、これも接続対象にしておきましょう。
次なるターゲットはDAC4497-2.1です。
ソフトの改造の前に、搭載されているPICをPIC16F1398からPIC18F26K20に変更したかったのですが、それをするためには
基板を一旦ばらさないといけません。ちょうど、液晶の裏に隠れてしまっています。そこで、今回はPIC16F1398でも動くかどうかの確認です。
というのもPIC16F1938はPIC18F26K20に比べて動作速度は半分の32MHzなのと、メモリー容量も半分の16kWしかありません。それで大丈夫かどうかの
確認です。
で、結論からすると速度は問題なしでしたが容量はギリギリでした。速度については少し余裕をもたせた83kbpsでの通信速度なので、余裕でしょう。
問題は容量で、これは結果的に収まったのですがROM占有率は98%まで上がりました。改造前が86%だったので、12%上昇です。逆に、改造前が86%以下
なら、なんとかINTEGRATION UNIT対応にできそうなことがわかりました。
DAC4497-2.1も対応ソフトに改造しました。
接続はP15を使います。フルファンクションモードにしてP16をGND(P17)に接続すればINTEGRATION UNITと接続可能になります。
同様にDAC4493-5も改造できそうです。こちらはROM専用率が現状で85%なので、ちょっとだけですが余裕があります。
DAC4493-5も改造、その前に 2020.5.10
いま接続しているのUNIT番号を2桁LEDに表示するようにしました。ちょうど、未使用のPICのポートが2つあったので、それを使いました。
もともと、動作チェック用につかっていたポートですが、もう使うこともないので2桁LED用のシリアル通信用に割り当てました。
UNIT接続NOも表示可能にしてみました。
DAC4493-5も改造
DAC4493-5とDAC4497-2.1は基本的には構造が同じなので、改造はほぼ同じ方法でできました。
DAC4493-5もINTEGRATION UNITと接続可能になりました。
通信端子はP15を使います。
P16をGND(P17)に接続して、フルファンクションモードで立ち上げれば
INTEGRATION UNITとの通信モードになります。
往年(?)のDACも(DAC9018Dです)
DAC9018DはRenew版も含めて2枚あるので、これもマルチチャンネル用のDACの候補になっているので
ソフトの改造を行いました。DAC9038Dもやりたいのですが、お嫁入りしているので残念ながら手元にありません。
妹から先に、嫁いでしまいました(泣。
DAC9018Dもソフト改造です。このころのLCDは1602タイプなので、画面が少しさびしいです。
DAC9018Dはハード的な初期化がないので、メニューの初期化ルーチンを追加しました。
気づいたのはDAC9018Dを作ったのが今から8年ほど前になりますが、今とはプログラムの構成が全然違っています。
勿論、今の方が可読性が高いのですが、やっぱりプログラムも経験が必要ですね。でも、また数年たったら今のプログラム
も汚く見えるのかな〜。
さらに、DAC9018Sも接続 2020.5.11
こちらも往年のDACですが、DAC9018Sも接続できるようにしました。
DAC9018Sです。
P12が通信ポート。P13-P14を短絡して起動すると接続開始です。
最終的な活用方法をもっとイメージする
さて、INTEGRATION UNITのソフトもほぼ煮詰まってきたし、また接続できる機種も増えてきました。機種を増やすというより、
増やすことでINTEGRATION UNITとの接続のためのソフトの改造方法に慣れる(手順化する)のが目的だったります。
そろそろ装置組込みをイメージしだしていますが、どんどん考えが発散していきます(笑
当初の目的は、下図のように複数の基板を一つのLCDとSWで操作することでした。
もともとの装置イメージです。
でもINTEGRATION UNITと基板間の配線数はかなり少なくすることができます。たとえば4枚の基板との接続を考えた場合、
電源2本(5V、GND)と信号線4本の合計6本で済みます。そうなれば、わざわざケースに一体型で納める必要もないかもしれません。
下図のようにケーブルでつないでケースから外だししてもよいかもしれません。そうなると、機器側のケースの加工がものすごく簡単になります。
極端にいえば、INTEGRATION UNITは調整などの必要なときにだけつなげばいいので、基板丸出しでもいいわけです。そして機器側の
ケースの加工はコネクター用の丸穴一つで済みます。
ただし、このあたりは個人の趣味が色濃くでるところでケースには表示器や操作スイッチなどのギミックが色々あるのを好む
場合もあるでしょう。私も個人的には、色々な操作スイッチがついているのが好きですが、いざ作るとなるとかなり労力を必要とします。
「お気楽」をモットーとしている私としては、下図の構成もいいかな〜と思ったりです。
INTEGRATION UNITを外付けにすると、ケースの加工が楽だったりします。
さらに進めると・・・・
いっそのこと、INTEGRATION UNITには電池を抱かせてやれば複数の機器に接続することができます。コネクタは2Pのφ3.5のジャック
を使えば簡単です。もっとも基板の数だけジャックを使うか、あるいはスイッチで切り替えるかは必要ですが、上図のように多ピンのコネクタ
をつかうより加工は楽では?と思ったりです。それに多ピンのコネクタは色々な形状があり、また結構高価なのと差し込むのが面倒だったりします。
有線のリモコンのイメージでしょうか。
こんな感じで有線のリモコンみたいに必要な機器に接続しいてコントロールするのが便利かもです。
頭の体操も兼ねて消費電流を調べてみましょう
INTEGRATION UNITにバッテリを内蔵させて、リモコンのように扱うとなったら気になるのは電池の持ちです。
音楽を聴くときに最初にリモコンのスイッチを入れる程度は我慢するとして、すくなくとも一日数時間の使用なら
数ヶ月はもってもらいたいものです。まあ、充電式の電池をつかえばいいとい声もあるでしょうが・・・・。
まずは必要な電流を調べてみました。
一番、電流を喰うと予想されるのがLCDのバックライトです。そのため、LCDの有無も含めて測定してみました。
結果は下図の通りで、バックライトをつけて動かすと60mA流れます。単3アルカリ電池の容量を2000mAhとすると、
33時間です。数日しかもたないですね。それに、電池の末期だと電圧も下がるので動かなくなる可能性もあります。
しかしながら、バックライトを消すと17mAまで落ちます。なんと消費電力の70%以上がバックライトです。で、バックライト
なしだと117時間です。四六時中操作することはないので、操作をやめたらバックライトを消せばいいですね。
バックライトを消しても、外部からの光があれば表示は十分に視認できます。
でも、まだ電池の持ちは短いな〜。一日5時間の使用で約1ヶ月です。
ちなみに、液晶をとりはずすと消費電流は15〜16mA(1mA単位でしか測れなかった)で、これがPICの消費電流
になります。液晶のロジック部分だけの消費電流をみると1〜2mA程度のようです。
表示 | 消費電流 | 条件 |
バックライト点灯時 |
60mA | PICの動作速度 64MHz (PIC18F26K20) |
バックライト消灯時 |
17mA | |
液晶なし | 15〜16mA |
乾電池を用いても大丈夫かな?
乾電池の電圧は公称1.5Vですが、新品のときだと1.65Vくらいあります。それを3本じゃすくないし4本は必要だと思いますが、
最大電圧は1.65×4=6.6Vです。一応、液晶(SC2004)のロジックICの最大定格は7Vのようなので問題はなさそうです。
でもどの電池を使うかは悩むな〜。ニッケル水素なら電圧は1.2Vで放電末期でも電圧はあまりかわらないので4本で丁度よいでしょう。
乾電池だと最初は6Vあるとして、PICを3.3Vで動かすとなると液晶のロジック電圧のHIGHレベルが足りない可能性が高いです。
乾電池をつかう場合は液晶に5Vの低ドロップ(0.6V程度のもの)をつかって供給したほうがよいでしょう。
液晶のロジックICの最大電圧は7Vです。乾電池4本でも耐えられそう。
PICの消費電流を抑えるには
使わないときはバックライトを消すとして、あとは使わないときはPICの動作周波数を下げる必要があります。
ちなみにカタログで、PICの動作電流は
64MHz・・・15mA
4MHz・・・・・4.5mA
1MHz・・・・・0.75mA
(PIC18F26K20 3.0V動作時)
やはりCMOSプロセスなので動作周波数が低くなると消費電流が抑えられます。PICの実力として最低周波数の32kHzで動かせば
消費電流は数uAに抑えられますが、そこまで落とすと液晶のロジック素子の電流が支配的になりますのであまり意味はありません。
やるならば、液晶のロジック駆動までをPICに任せる方法がありますが、3.3V動作のPICで5Vの液晶ロジックの電源をまかなうためには
外付けの部品が必要になります(といってもトランジスタ1個だけですが・・・)。
まあ、ここはすこし妥協してスタンバイ時にPICだけ動作周波数を1MHzに落とし、PICの消費電流が0.75mA、液晶ロジックが2mAとして
合計約3mAとしましょう。すると、乾電池で670時間程度もつことになります。一日8時間つかうとしても80日以上もつことになります。
これならば、いいでしょう。
バックライトのON/OFFはどうする?
バックライトには実測で60-17=43mAが流れています。一方、PICのIOピンのシンク電流の最大値は25mAです。ということは
I/Oを2本パラにしてつかえば50mAで足りるかな?しかし、2本つかって均等に流れるとも限らないしな〜。かといって電圧分散に
抵抗を入れるくらいなら、スイッチとしてのトランジスタを入れても実装は変わらないしな〜。
なんか、枝葉末節で悩んでしまいそうです。それにどんどん手段が目的と化してきています(笑。
まずは肝心な省電力となるソフトを考えたほうがよさそうです。
パワーセーブの機能を追加 2020.5.12
ソフトの機能追加ができたので、ハードも追加です。LCDのバックライトの制御用に1個トランジスタを追加しました。
機能としては、スイッチ操作が10秒あるいは1分なければバックライトの電源をおとします。そして、そのまま1分あるいは2分
たてばPICをスタンバイ(低速モード)に切り替えます。もちろん、パワーセーブのOFFもできます。普通はそれでつかうでしょうね。
バックライトLEDのスイッチTRを取り付けました。
ところで、どのくらい電流が減るか調べてみましょう。
バックライトON、PIC動作(64MHZ)・・・ 59.31mA
バックライトOFF、PIC動作(64MHZ)・・・18.26mA
バックライトOFF、PICスタンバイ(1MHZ)・・3.89mA
PICスタンバイ(1MHz動作)で3.89mAです。すこし期待値より大きな電流が流れています。
スタンバイ時は3mAくらいになると予想していましたが、ちょっと大きめです。こりゃPICの待機時の周波数は32kHzまでおとしたほうが
いいかもしれません。そうすればあと0.7mA程度は消費電流がおちるはずです。
でも約4mAの消費電流なら電池で500時間くらいはもつことになりますから、十分かな〜。
それでも、あと0.7mA消費電流を落とせば600時間になるな〜。家電のリモコンみたいに電源スイッチなしにしたら
それでも25日しかもたないな〜。液晶の電源までコントロールするかな〜・・・ああ、どんどん手段が目的に代っていっちゃう〜。
しかし家電のリモコンの設計している人は、相当シビアに消費電流を落とす工夫をしているのだろうな〜と思ってしまいました。
えい、ここらで打ち止めにしよう!
なんか、INTEGRATION UNITの本質と違うことに走り出しているので、ちょっとこの辺で打ち止めにしましょう。
一応、スタンバイ時の再測定 2020.5.13
一応、スタンバイ時のPICの動作周波数は32kHzの最低まで落としたときの消費電流を測っておきました。
1MHz動作の3.89mAから3.35mAまで電流が落ちました。ただ、面倒なことに接続先の基板の電源が落ちると
4.8mAに増加します。これは、通信線を伝って基板側に電流が流れ込んでしまうためです。接続基板は常に通電
しておかないと、省電力が測れないという矛盾ですね。
一番いいのは、通信線も切断することです。そうすれば2.78mAまで電流を落とすことができます。
でも、通信線を切るためにはコネクタを抜くなどの作業が必要です。
まあ、スタンバイモードは電池で動かすための補助的な機能として考えましょう。普通のリモコンみたいな使い方
はやはり難しいです。
32kHz動作によるスタンバイ時の電流は3.35mA(接続基板1で、接続基板は電源ON)
32kHz動作によるスタンバイ時の電流は4.8mA(接続基板1で、接続基板は電源OFF)
32kHz動作によるスタンバイ時の電流は2.78mA(接続基板なし)
マニュアルを改訂
機能もいろいろと増えたので、マニュアルも改訂しました。
IntegrationUnitManual.pdf
一応、これで本当に打ち止めにしましょう。あとは接続先基板の改造を進めていきましょう!
後編につづく