回路的なことを少し書いておく。
この回路のキモは、HC238の数珠繋ぎにある。
8セグメントx3=24個のうちの任意の1個を選択する回路になる。
HC238は3bitで8つのうちひとつを選択する、それがLEDマトリクス1つ分。
さらに上位に2bit追加して3つのHC238を選択させる。
メモリーのデコード回路そのものなのだが・・・最近の人はそれすら知らないだろう。
このHC238/HC138は主たる3bit以外に有効/無効を指定するためのピンが3つある。
つまり、この3つのピンの条件が揃わなければ、3bitでの選択信号は出力されない。
この信号をうまく使えば、3つのHC238を制御することができる。
なんだかんだ言っても、この選択回路、今回のキモだ。
さらに言うなら、全出力を無効、という状態を用意することが必要。
この状態がないと・・・・いろいろと不都合が起きる。
データの書き換え時は全消灯を一度挟む。
電源投入時には勝手に点灯しては困る。
使う使わないではなく、安全策として必要不可欠。
案外、これを忘れる。
そんなところか。
要は単純なデコード回路だってこと。
ここ数年、自分が手を動かす、というのは、大概は基板CAD上で設計することを指すようになっていたのだが。
久々にガッツリと配線作業。
何年経っても、一度確立した手法はなかなか手を離れない。
道具としてのPCBEなど、もう使う気もなかったのですが、ユニバーサル基板を作るとなれば
使わざるを得ないわけで。
きっちり設計して少しでも資料を残す。
これって実は大事なことで。
一度、LEDマトリックスモジュールは頓挫した経験があったのだが
今回はその1/2の配線量だったのもあり、なんとか乗り切った。
LED-MATRIX1組分の動作確認を終え、これを3つ組み合わせる。
実は、LEDモジュールを買うときに、秋月電子の店頭でいつもとは違う基板を手に取った。
緑色の長細いユニバーサル基板。
これに、8x8ドットのLEDマトリックスモジュールを載せると、ぴったりの幅で、
ちょうど3つ載るぐらいの長さ。
これは何かと都合がいい。
DIPのCPUとHC238、トランジスタアレーを載せるとちょうどいっぱいいっぱい。
それを2段重ねにしてLEDマトリックス。
この構造は、なるべくしてなったと言える。
この時点では、正確な時刻を刻むすべについては、何も考えていなかった・・・
プロジェクトはここから始まるといった割にひどいタイトル(笑
それと同じ時期に。
LED-MATRIX 8x8のモジュールを3つ並べると、一番外周がちょうど60個になるって、気がついた。
これって、秒針と同じ数。つまり、60個+αのLEDがモジュールとなってそこにある。
LED-MATRIXの制御回路って、実は今回の時計と全く同じ。
1グループ8個のLEDが8組あるだけ。
まるで1グループ5個のLEDが12組あるのと同じ理屈。
回路定数を拾うにあたり、試作するのも悪くないかな、と思い、
まずはモジュール1つで試作。
回路構成はといえば、普通にシフトレジスタを並べるのではなく、
74HC238という3to8デコーダーを使う。
3bit出せばどれかひとつを選択してくれる。HC138の出力がHiになったタイプ。
アノード側は必ずひとつしか同時にONになってはいけないというのだから、この用途にぴったりではないか。
カソード側は普通にドランジスタアレーをONしてやるだけ。
回路のシンプルさを追求して部品を削るよりも、
回路的にできるだけ正しいものにしたい。
なので、多少ゴテゴテと部品が載るのも愛嬌。
同時に。
ソフトウェア的な面からも検討をしておきたい。
当然、ダイナミック点灯だし、1ドットづつの制御が出来るように仕組みが欲しい。
できれば階調表示も。
そんなことを考えながらATmega328でプログラムを書く。
5Vで動いてる分には問題ないが、3.3Vにすると、光り方が暗い。
どうも、カソード側のトランジスタアレー自身の電圧降下が原因らしい。
TD62083のVcesatというパラメータが1V近くになってるのが良くない。
以前作ったとき(注:5年以上前)の回路図を調べ、
現物からとりだしたのはTD62381。
こいつだとVcesatは0.4V前後で済む。
同様の理由でアノード側のトランジスタアレーについても再考がひつようなのだが
昨今のトランジスタアレー大量ディスコンイベントの煽りで、殆ど死滅。
そのなかの数少ない生き残りがTD62783。
これはもう、どうにもならない。
もうひとつ。
LED-MATRIXでやるなら、ということで考えていたこと。
数字が上から下へ降りていくアニメーション(ドロップダウン)を付けたかったので
それもプログラムに仕込む。
そこまでやれば、ほぼ技術的な部分は固まったといえる。
このプロダクトがいろいろ絡みすぎて説明しづらいのは、
メインの成果物以前に、いくつかの形が違う「何か」があるからで。
この時点で、同じ回路でありながら、2つの基板に関するアイディアがごっちゃになってるのだ。
そして、どちらも「派生」ではなく私にとってはメインストリームだということ。
はっきり言って、今回のプロダクト、いろいろと絡みすぎ。説明しづらいwww
2010年、夏。
SpecForMintiaをやってる最中。
せっかくAltiumの評価版が使えるんだから、やるだけやってみようと思い立つ。
とりあえず、思いつくまま、スタンダードな回路図を引くが、
後追いの都合もあり、先駆者とは違うものを選びたい。
秒針を2色LEDにする。
7SEG-LEDは面実装品。
完全な円形ではなく、四角に配置する。
どうせなら、青い7SEG-LEDと赤青の2色LEDで作る。
とりあえずは、この方針で設計を開始。
回路については他で書くが。
結局、この配置の基板は完成までは行ったのだが。
今ひとつ、見栄えがぱっとしないのと
2つもプロダクトを製造にかける余裕はない、
その他もろもろの雑念もあって
そのままお蔵入り。
そして、本当のプロジェクトは、この屍を超えるところから始まる。
(パチンっ)
話をしよう。
あれは今から36万・・・・いや。1年と3ヶ月前だったか・・・・
まあいい。
私にとってはつい昨日のことだが、君たちにとっては多分、明日の出来事だ。
・・・・・なんてことを考えて検索掛けると、仕事がまったく進みませぬ(を
というか、着地点がまったく思いつかないので、本題。
数年前のMTM04に行ったとき、Silriumという方のブースで
LEDを円形に配置し秒針とした時計を見ました。
LED表示の時計はいくらでもありましたが、60個のLEDを円形に並べて秒針にするというアイデアを
見たのは、私にとっての衝撃でした。
参考までに↓
帰ってきてから、いろいろ調べて、結構前からあるのだということを知りました。
LEDを円形に並べる、というのは。
機能のない基板CADでやるには、かなりシンドイはず。
ましてや、円形の配線パターンなど、サポートされるのか、という世界。
過去に仕事でやってるので、出来ることはわかってるんだけど。
EAGLEでよくやるなぁ、と。
でも、面白そう。円形に配線するのは、実は結構楽しい。
平行の線より、完成が美しい気がする。
いつかはやってみたい。
しかしな・・・2番煎じではな・・・
そう思い、しばらく忘れることに。
しばらく放置されてたw
某M氏から結論が帰って来た。
「ISSPの線とCapSensの線を共用するなよぼけがぁぁぁぁ!!」
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ごめんなさい(T_T)
いろいろ調整してくれたり、I2Cの変換ブリッヂまで作ってデバックしてくれたらしく
感謝に堪えない。
こっちでも、もう一枚実装して、ISSPへの線をぶった切ってみるよ。
まあ結局、シビアなものを扱ってる関係上、ビアや分岐は
あってはならないってことなんだろうなって当たり前か。
よくよく気をつけてはいたんだけどねぇ
PSoCの機能配置が嫌らしくてな。
あと、ピン配置も、ヲレから言わせればぐちゃぐちゃ。
日本メーカーのCPUを見習って欲しいわ。
まあ、とにかく。
16キーのうち9しか反応しないらしいが、これにて完成と。
もう疲れた。このネタ。
基板は直さなきゃいけないしね。。。
もうそろそろ、このネタ疲れてきた(T_T)
小型版のMP3プレーヤー用の入力として、
小型版のタッチセンサー基板を作ったのでした。
もちろん、単体での検証は終わっていますので、今度はUSBデバイスではなく
単純な入力デバイスとしてコードを書き直しましす。
とはいえ、USBにつながらない以上、デバックの方法がないので(笑)盲目デバックですが。
MP3基板側のキー入力ルーチンはなるべくそのままで、タッチセンサー基板側であわせこむ。
7つキーが並んでいますが、とりあえずは縦に並んでるものをグループとして、同じキーに割り当てます。
そして、これをスイッチ入力と同じビットパターンになるようにポートへ入れてやれば
MP3基板側はコードをいじらなくても済む。せいぜい入力で読むポートを変えるぐらい。
長押しも、ダブルクリックも、MP3基板側で処理できる。こっちはスイッチのフリをすればいいだけだ。
そんな感じで。
だいぶ長いこと、やってた気がするが、これで一通り、基板が動いたことになる。
動作の様子はこの辺
まあ、こんなものでしょう。
さて。
もう一方の小さいMP3基板ですが。
こちらも同様に。実装時にショートしていました(笑
ゑゑ、仕様です(まて
発振器の基板マクロが小さいの、そのままで再利用しちゃったわけです。
諦めて、波形が出るまでハンダ付け。
なんとか波形が確認できてゴテゴテとデバック用にコネクタを付けまして。。。っと。
場所の都合でISPコネクタを2mmピッチにシュリンクしてたんだっけ。
ケーブル作らなきゃ。
プログラムの書き込みは成功。
とりあえず、コードを直して電源投入で音が鳴るようにして動作確認。
・・・・当然、鳴るよね。回路同じなんだし。
あとは、これ用に入力を用意しないと。
つづく。
UIの続き。
いろいろ構造的に考えなきゃならないんだが
一時停止/再開の方法がわからなかったので、ほかの人のソースを漁る。
ELM/ChaN さんの所に運良くソースが転がってたので解読。
この人のソースコードはいつも効率がいい。構造的にもシンプル。
当然FatFSを使うにも、コールバック関数で直接転送するようになってる。
割り込み内での処理とメインループ内での処理がうまく回るようにフラグ変数をいくつか用意して
つじつまが合うように書かれてる。
見本はたまたまシングルタスクだから、関数内をループするように書いてあるが
そこはこちらにはそぐわないので、多少アレンジしなければ。
割り込み処理を、ChaNさんのコードとおなじような(笑 構造になるようにコードを追加。
タスク内のループも同様にフラグとボリュームとデータ転送をそれぞれフラグを元に動作するように書く。
もちろん、メインループに毎回処理を戻す構造。
大きいほうの基板はこれで一応、一連の動作を出来るようになった。
つぎは、これをベースに小さいほうの基板用に直しを入れる。
つづく。