他の事は埋もれたとしても、これだけは書いておかねば。
ぱお製作所主催の「ハードウエア交流会」に行って来た。
チケット購入先は「スイッチサイエンス」。
なので、参加者は自然と「はんだ付けカフェ」に集合し、移動することになる。
この日も、いつもの濃いメンツがこぞって集合。
何をするわけでもなく、その場でまず名刺交換が始まる。
そして、それぞれが「己を示す」活動の「証」を手に持ち、話し込む。
この日は、実装屋で実装してもらったAVR32の基板を持っていったので
もっぱら実装屋、実装コストについて話をする。
移動した先、交流会の会場でも、そんな感じでごった返していた。
過去に作った基板数枚と、実装屋上がりの基板。
それが私の「ウリ」。
自分の前においておくだけでも結構みんな興味を持ってくれる。
これは、明らかに、自分自身にとってのターニングポイントになる。
はんだ付けカフェ、交流会、あと、Twitter。
仕事を辞めた途端、世界は広がっていく。
秋葉原のはずれに、「スイッチサイエンス」という通販屋さんの
事務所の半分を開放した「カフェ」が出来た。
場所はArts千代田3331の中。・・・ぱんつが舞った体育館、といえば分かるか(分かるかよっ
カフェとはいえ、何か注文すると出てくるわけじゃない。。
基本的に、場所の提供が目的。
ハンダ付けをする場所、キットを組み立てる場所、コードを書く場所、
そのテの趣味を持つ人間が集まる場所。
日によってはかなり濃いメンツが揃うことも。
これがもう一年、早く出来てたら
毎日定時で上がって、通ってたかもしれない。
ここで知り合う人たちも、同じようなことを仕事にしてる人ばかり。
人と話すことが殆ど無くなった現状に
唯一、言葉の通じる人間たちに遭える場所。
精神安定上(笑)こういう場所があるのはありがたい。
検査冶具が
当初はもっと別の構造を考えていたが
ソフト書いていざ使ってみると接触不良で検査以前の問題に引っかかったので
思案の末、カードエッヂのスロットに落ち着いた。
AVRのSPIユニット、Enableになってると
どうにもプルアップ用の電源電圧が廻り込んで
電源供給されてるように見えてしまう。
このままでは、活線挿抜にならない。
まあ、ほっとこう。
仕様です。
ちなみに、AVRにしか繋いでませんので。
何に繋いで、どうだったか教えて欲しいぐらい。
そんな感じで。
出荷準備は出来たけど
パッケージと告知用のページがまだ。。。
5月の連休に、道具一式もって帰って
10枚ほど、手ハンダしてきました。
本当は、実装屋さんを頼もうと思って見積もりしてたんですが
メタルマスクを作らないとかなりな値段になってしまうので
とりあえず、今回は見送り。
動作確認後、どこかの店で委託販売になる予定。
先行分なので、なるべく原価に近いところの値付けになると思います。
・・・・と。さりげなく予告
LCDの表示は置いといて、タッチスクリーンを。
ハードウェア的には抵抗膜4線式スクリーン。
これをタッチセンサーのコントローラーであるADS7843でA/D変換し
SPI接続でホスト側で読み出す。
コントローラーの機能としては、タッチされたら通知するような割り込み用端子があるが
それは今回は使わない方向で。ついでに、BUSYの通知も使わない。
制御としては任意のタイミングで、その時点の値を読んで判断する。
ちなみに、コントローラーの世代的には古い部類らしい。
が、基本的に最近のものも制御自体は変わらない。
で、XMEGAのSPIモジュール。
なんか、設定すべきレジスタが1個しか・・・ない?
あとは送信・受信兼用のデータレジスタと、
割り込みステータス用のレジスタがあるだけ・・・・?
かなりシンプルね。
この場合、送受信の末端はひとつの関数で、
データを書いた後で割り込みフラグが立つのを確認、
その後にデータを取得すればいいのかな。
[code lang=”cpp”]
unsigned char SPIDCtrl_RW( unsigned char byte )
{
SPID.DATA = byte;
while( !(SPID.STATUS & SPI_IF_bm) );
byte = SPID.DATA;
return byte;
}
[/code]
このとき取得するデータは一つ前の送信に対する返答だってこと。
だから、コマンドの返事が欲しければ、ダミーで0xFFを送る。
そういえば、こんな一文が。
DMA support on the SPI module is only available in Slave mode.
・・・・DMAはSPI-スレーブの時しか支援しないよ・・・って
みんなSDカードをSPI接続で使うときにDMAしたくて仕方ないのに
この一文は堪える。
やりたかったらUSARTのSPIモードを使えと。
かなりの罠だww
と、いうことで。
つづく
やっとのことで、納得のいくメニュー構成になった。
まあ、プログラムはその分、複雑怪奇になりつつあるが。
階層構造はあきらめて、基本的にフラット。
モードとしては、バルブとシャッター。
シャッター間隔と、シャッターを押してる時間の設定ができる。
が、現在、この2つに違いはありませぬ。
この先、直すかも不明。
まあ、いいや。
結局今回も、ポインタ絡みで時間がかかった。
実のところ、解決したとは言い難く、回避している、というのが正しいか。
PROGMEM指定 の配列変数を PGM_P型の配列にして、
その配列のポインタを構造体の初期値として入れる。
というのが、どうにも解決できなくて構造体をRAMに置く方向に。
使ってもいないリングバッファやUSART関連のコードをはずすことで
RAMの使用量を減らして、ついでに放置してたワーニングの類も適正化。
なんとか一通りの動作をするようにはなった模様。
とはいえ、ソースがかなりおかしな構造してるので
あまりステキな状態じゃないんですけどね。
・・・・ある意味ステキだが(爆
静電容量は難しい、という話になって。
一番簡単に実現できそうだということで、とりあえず加速度センサーを
買ってきて付けてみた。
まず、HIDデバイスの入力軸数を3軸に変更。
これはうまく出来たようだ。
しかし、
USB機能付きのPSoC CY8C24894が
実はA/Dコンバータが2チャンネルまでしか取れないことが判明。
とりあえず、用途的には2軸あればいいから、ということで
そのままA/D変換して出力。
あと、PC側のソフトも作ってもらったので
いちいちゲームコントローラーのプロパティを開かずに
動作確認ができるようになった。
これでとりあえず、また見てもらって
どうするかは決めてもらえばいいや。
まあ、なんのフィルタも入れてないんだがw
完全番外編。
有効な情報はありません(なぞ
静電容量の変化で、人体の有無を検出したい、みたいな話があって
その結果をUSB経由のHIDデバイスで、ということなので
PICかAVRか、と思って調べてたところに
PSoCにUSBが使えてさらに設定だけでHIDになってくれるのが
既にあることが分かり、そっちに向けて急発進(なぞ
どっちにしろ、A/Dコンバータが必要だったし、
もともとアナログ系のPSoCなら言うことないしな。
その上、最近はCapSenserという機能(ライブラリ)まであるので
今回の用途はこれだけで済みそうな気が・・・。
HIDデバイスに見せるのは、マウス用のサンプルがあったので
あとはディスクリプタの書き換えで何とかできるのを確認。
ソレとは別に
静電容量計を買って、まずは静電容量の変化が検出できるのかについて
検討・・・これは他でやるはずだったのが結局何も進んでないとの話で
こっちでも実験してみることに。
そんな感じで、こんなものをでっち上げてみたが。
こんなのでも、静電容量ってあるんだねぇ・・・驚いたよ。
こんなのでも、センサーになるのね。
とはいえ、値としては常にバラついてるし安定してるとは言いがたい。
多少、何かしらの作戦は必要かもしれないが
とりあえず、人体の検出には成功してるようだし。
つーことで、実験はここまで。
あとは周りに説明して、どうするかは決めてもらえばいいや。
なんか、もう、ヘトヘト(なぞ
LCDをサクッと。
つーか、初期化コマンドが多すぎて、ゲンナリなので(T_T)
横着して人様のサンプルを(ぉぃっ
とはいえ、それじゃ癪なので、
昔ながらのBoxFillにしてみました(を
VRAMの書き込み先アドレスに関するレジスタが
X座標とY座標をうまく割り付けてあるので、座標即値で指定できるのはいいね。
つーことで。
LCDの表示まで一応。
XMEGAだろうと、32MHzだろうと、ポートのパタパタではこれが速度限界かな。
まあ、表示領域の矩形を設定してバースト処理にすればもう少しは速くなるかもしれないけど。
今日は疲れたので、ここまで。
何故か次は、PSoCをやらねばならぬようです(なぞ
さて。
とりあえず、片方向は出来たので。
LCD側を作りますか。
ネタとしては、MicroSDとかもやらなきゃならないんですが、後回しで。
付属していたタッチパネル用のケーブルがコネクタの根元から抜けてしまったので
仕方なく基板側のコネクタを取っ払い、半田付けになりました。
見ての通り、CPU基板にスタッキングできます。
というか、ウチの製作物で基板サイズにこだわってるのは、
この為なのよね。
秋月電子の95mm x 72mmの基板を基準として考えてる。
今までPCBで起こしたものが大概このサイズになってるのは
CPUでもI/Oでも、スタッキングして使えるから。
で。
LCDの設定としては、買ってきたままだと16bitバスモードになってるらしい。
それを変えるには、キャリーボードからパネルを剥がしてR2をR1へ付け替える。
たしかに、フレキにシルクが入ってた。
この辺は、先駆者たちの情報に感謝。
そういえば、元々XMEGA128A1で16bit接続しようと思ってたから
やってなかったんだ。
そんなこんなで、バックライトぐらいは確認できるかな。
ほいっ。
ただのI/OポートでMOSスイッチをONしてるだけ。
そのうちここもPWMにしてやらないとね。
そんな感じ。