コメを噛め

コメを噛め

rerofumi の電子工作メモ

Archive for 6月, 2011


hatena bookmark


さて、前回(といってもかなり前ですが!) I2C接続で表示できるLCDモジュールを作製した。
これのシリーズとして今度は I2C 経由で読み取れるボタンと、LEDチカチカテストができるコンソールパネルを作製したいと思う。


以前なんとなくLEDとタクトスイッチが対になったモジュールを作ったらこれが便利だった物で。
ちょっとしたテストとか評価とかの時にLCDモジュールとセットで使うと、もうそれだけで簡易アプリになったりするのだ。
ただ、LCDモジュールもスイッチもベタで使うとGPIOを沢山消費してしまう。他のテスト用の足がなくなってしまったりするのだ。


そこでこういったテストコンソールは全部 I2C 等のシリアルインターフェースでぶら下げてしまえばよいのではないかと考えるにいたった。
I2C であればアドレスを持つので、適当にハブかなんかを使って繋いでいけば 127個まで繋いでも 2線しか消費しないで済む。

というわけで、LCDモジュールに続き 8個の LED と 8個のボタンスイッチを持つテストコンソールを作製する。
LED内蔵スイッチを使って、チカチカとスイッチ入力の両方を行うのが目標だ。
Read the rest of this entry »


hatena bookmark


CNCフライスで生基板とかアクリル板とかを加工する際は、テーブルに両面テープで固定してやる。
この際弱い両面テープだと切削加工中に剥がれてしまい無残にも加工失敗となるし、強すぎるとこんどはテーブルから剥がす事ができなくて無理して素材を割ったり曲げたりといった事にもなってしまう。その案配が難しい。

色々な両面テープを試してみたけれども、現在の所は「セルタック」一択である。

セルタックは他の両面テープと違って基材がセロテープと同じ素材となっている。他の両面テープは厚手の物を覗くとほとんどが紙が基材となっている。
この基材が紙だと剥がすときビリビリと容易に破損してしまい大変剥がしにくい。ところがセルタックだとその破損がほとんど無いので剥がしやすいのだ。
粘着力は強くもなく弱くもなく。正直フライス加工にはぎりぎりの粘着強度だとおもうけれども、今のところ困るような所はない。

問題はこのセルタック入手性が悪いのよね。
東急ハンズぐらいでしかみかけなかったし、Amazon でも在庫がすぐになくなるくらいの品。なので通販で見かけたらまとめ買いしておくのが吉っぽい。


hatena bookmark


できあがった PSoC3 の簡易テストボードが動作することを確認するために簡単なLEDチカチカコードを作った。
開発に使う PSoC Creater も 1.0SP3 となっており昔とは若干勝手が異なっているため、その辺を手探りしながらの作製。


まずはトップレベルデザイン。
今回は 5つの LED を順番に光らせていくテストをしたいので、1bit の出力pinを 5つ用意する。それぞれに LED1-5 と名前をつけ、1bit幅であることを指定し、「ハードウェアに接続」をしないで CPU から操作できるようにしておく。


リソースの Pins タブで出力先となるピンアサインを設定。先ほどは LED1 といった抽象化されたポート名だったが、それを実際のピンに紐づけていく。

チカチカのタイミングを得るためにデジタルハードウェアブロックのタイマーを1つ置く。
PSoC3 は専用のタイマーも持っているが 8/16bit 幅なので UDB ブロックを使って 24bit timer としている。

PSoC1 の時は割り込みは各モジュール毎に割り込み設定があった感じだけれども、PSoC Creater では「割り込みポート」なるものがあって、そこにモジュールからのシグナルを繋いでやることで割り込みが利用できる。
つまり割り込みもモジュールとして扱うということですな。


リソースの Interrupts タブでは割り込みモジュールの優先度順位が設定できる。

ソフトウェア上で割り込みを実装するにはどうやるかというと、これは変なところで PSoC1 の流儀そのままだったりする。
つまり、割り込みモジュールが生成したライブラリコードの中に記述するのですな。
ユーザーが追加したコードはライブラリコード再生成の時に消してしまわない様 IDE が便宜を計ってくれる。

今回 irt_timer1 という割り込みモジュール名にしたので、ライブラリソースは irt_timer1.c|h という名前で生成されている。
irt_timer1.c を開くと CY_ISR(irt_timer1_Interrupt) という関数があるので、この中を割り込み処理としてユーザーが記述するらしい。


CY_ISR(irt_timer1_Interrupt)
{
/* Place your Interrupt code here. */
/* `#START irt_timer1_Interrupt` */
my_isr_timer1();
/* `#END` */

/* PSoC3 ES1, ES2 RTC ISR PATCH */
#if(CYDEV_CHIP_FAMILY_USED == CYDEV_CHIP_FAMILY_PSOC3)
#if((CYDEV_CHIP_REVISION_USED < = CYDEV_CHIP_REVISION_3A_ES2) && (irt_timer1__ES2_PATCH )) irt_timer1_ISR_PATCH(); #endif #endif }

こんな感じで #START と #END の間に記述する。
M8C では割り込みからCの関数を呼べなかったが今回は大丈夫な模様。

ポートはピンのどこに割り当てたかをモジュールライブラリが吸収してくれるので、ビットシフトとかを考えなくて良い。
LED2 というモジュールを 1bit で生成したら ON するコードは

LED2_Write(1);

と書くだけで良い。実際に P2-4 に出力するための

staticBits | ((value < < LED1_SHIFT) & LED1_MASK)

はライブラリの中でやってくれる。
わかりやすいかどうかはともかく、従って置いた方が色々面倒がなくてよさそうだ。

Download: PSoC3_TEST_LED.zip (343kb)
PSoC Creator1.0 のプロジェクト一式。


hatena bookmark


PSoC3 のテストボードを作ったよ、といっても一発で完成したわけでなく前回の基板は Rev.B となる。
最初に作った基板は一発では動作しなかった。


PSoC Programmer の JTAG chain で見えたり見えなかったりしているのだけれども、Erase とかがまったくできない状態。
初めて使うデバイスは流石に勝手がわからないものだねー。


こんなこともあろうかと作っておいた変換基板を使って書き込みのテストをすることにした。

小さい基板は JTAG ピンの breakout board。こういう細かいのはさくっと作れて楽しい。
でかい変換基板もなんか満足度が高くて嬉しくなる一品。

ブレッドボード上であーでもないこーでもないと試行錯誤を繰り返しながら書き込み試験。
いじり倒して結果わかったことは、

  1. JTAG の RST は nTRST ではなく XRES につなぐ
  2. 電源周りを一通りケアしないと失敗する
  3. JTAGなりSWDなりのラインはプルアップしておいたほうが安定する
  4. power cycle 書き込みがなんだか動かない

といったあたり。

結局基板が失敗したのは XRES につないでなかったからで、これはパッチしたら動き出した。なので Rev.B はRST ラインを修正したものとなる。 JTAG の場合は nTRST かと思いこんでいて失敗した。しかし、XRES の方に繋いだままソースコードデバッグもできたので、nTRST は何につかうのかわかんなくなった。

PSoC1 は適当ぶっこいて MiniProg からの ISSP をダイレクトに足に繋いだだけでも書き込めたので楽ちんだったが、PSoC3 は流石に一通り電源配線して、10uF の安定用キャパシタとかを挟まないと power cycle とかで失敗するみたい。
アナログVdd とかいらないだろとか思っていたけれども、このへんも配線した方が安定するとかそんな風味で。

5線の JTAG はそうでもないんだけれども、2線+XRES で書き込むSWDはこのへんの安定性をもろに食らうご様子。電源配線のうえ、プルアップしないとほとんど成功しなかった感じ。
しかしまあ、作ったテスト基板のほうではプルアップ無しで、SWD 書き込みとデバッグができていたのでさほど神経質になるようなほどでもないか。

で、最後の power cycle だけれども、これは本来 XRES でリセットしなくても電源投入直後のタイミングでほにゃららすると書き込みモードになるはず。なのだけれども、このときでも XRES が無いと書き込めなかった。
この件に関しては HirakuTOIDA さんの記事にそのものが記されていた。PSoC3の書き込み / PSoC3の書き込み(解決編)
うむむ、販売版の PSoC3 と最新版の PSoC Programmer + MiniProg3 でも駄目だったということは、MiniProg3 の Revision に因るのか。まあうちのは一番最初のロットだからなあ。

48pin だと XRES を GPIO としても使えるのだけれども、それをやってしまうと二度と書き込めなくなりそうである。100pinの奴は XRES が独立しているので問題なし。
まあ、XRES が使えるようにしておけばそれで良いので気をつけて使う方向で済まそう。


hatena bookmark


PSoC3 が Digikey で在庫あり商品となり購入することができるようになってきた。
ITショップ「えとせとら」さんでは、これをうけて早速 PSoC3(CY8C3866)のテスト基板を作って販売している。この基板、プレーンなテスト&チップ評価基板としてそれなりに良くできているため利用させて貰うのも手なのだが、やはり自分の手で設計/作製してみたいところなので Digikey からチップを購入することにした。
上の写真はSSOP48のほうが CY8C3246-PVI、LQFP100 のほうが CY8C3665-AXI。グレードの違いはメモリ&ROM容量より主にアナログブロックのモジュールがあるかないかが大きいのだけれども、一番低いグレードの奴でもデジタル部分はフルに載っているので十分に遊べる。


チップを買うときに Digikey で一緒に買っておきたいのが Cypress の評価基板や MiniProg3 のJTAGケーブルで使われている 1.27mm ピッチのピンヘッダ。これは秋葉原で眺めてもなかなか置いてなかった。
Cypress オススメの奴は 300円/個 もする高いうえに在庫がないのだけれども、Digikey内を探すと上記の様なピンヘッダのみの奴がそれなりなお値段で見つかる。
上の奴は 25個注文時単価 57円だったので 25個ほどまとめて購入した。1個からだと 110円くらい。


これを使って簡単なテストボードを作ってみた。いつも通り CNCフライスでの基板作製でチップを載せられることが分かっているからというのもある。
流石に片面基板だと全部のピンを引き出せないのでそこはざっくり諦めてできるだけで作る方針。
それでも 15本の I/O があるので遊ぶ分には十分でしょ。


最初に電源と USB周りを設計で作って配線し、そのあと引き出せそうなピンを選んで出力していった。回路図と基板設計を行ったり来たり。
4ピンだけ出ているのは主に電源込みで I2C を引き出すためのもの。先日の I2C LCDモジュールに始まって色々なテストモジュールを I2C に統一してみようという企みの一環。

やっぱり自分の手で作ってみると色々と分かることも多い。
PSoC3 になって電源周りの配線引き回しが面倒になった。これは、いままでオプションだったアナログブロックの電源が完全に分かれたこととか、I/O端子電圧がついたことなので沢山引き回さないといけなくなったというのが原因。
I/O端子電圧は PLD などではおなじみだけれども、これ PSoC3/5 の目玉なんじゃないですかね。GPIO は大体 4つのブロックに属していてそのブロック毎に I/O電圧が変えられるという仕組み。 5V と 3.3V と 2.5V が混在した回路でもレベルコンバーター無しで真ん中に PSoC3/5 を置くだけで良いというのは楽ちんっぽい。
コアの電圧はどうなっているのかというと、内部でLDOを使って作り出しているらしくそいつのために外付けでキャパシタをつけてやるというのが Vccd らしい。(自信なし?)


今回作った基板。
毎度のことで、回路図と K2CAD とガーバーをまとめて置いておく。

Download: psoc3_eztest_board01.zip


hatena bookmark

動画製作用の小ネタ。
PCでの作業中、今動作しているかどうかを見るのに HDDアクセスランプを見る癖があるのだけれども、そのLEDランプが今ひとつ見にくいなーというのを常々思っていた。どうせならもっとぎゅんぎゅん光ってアクセス中なのをアピールすれば良いのにと、LED線を引き出してPCケースの外で光らせることにしようというもの。
アイディアだけあって 2年くらいほったらかしていた。

PCケースから HDD アクセスランプの線を引っ張り出してみると、+側は常に通電で -のシンク側がスイッチになっていて電流のON/OFFを行っていた。全てのマザーボードで共通かどうかはよくわからないところ。

いつも通り回路図やファームのソースコードを置いておく。
Download: HDD_access_light.zip
回路図、K2CADファイル、ガーバーデータ、PSoC Designer5.0 プロジェクトの詰め合わせ。
Read the rest of this entry »


hatena bookmark


CNCフライスでの試作基板作りで目指しているのは 0.5mm ピッチのフラットパッケージが乗る奴を自作できるところなのだけれども、その段階として徐々に細かいピッチにチャレンジしていってる。
前回は小手調べで 0.8mm ピッチの ATMega328P が載る基板を作製したわけだけれども、これは割と難なく作る事ができた。なので次は 0.65mm ピッチに挑戦。

0.65mm ピッチというとだいたい 28pin の SSOP がそれにあたる。
秋月電子通商で手に入る SSOP で基板が自作できるとおいしいのはやはりなんと言っても FT232RL USBシリアルコンバーターじゃないだろうか。ついでCAPセンスを持っている PSoC CY8C21534 あたり。


てなわけで作ってみた。
片面基板でちんまりまとまった USBシリアル基板。大成功。
特に苦労っぽいのはしていないけれども、試行無しで一発で作れるのはここまでかなーという感覚も得た。
次の 0.5mm ピッチの時はちと試行錯誤するかも。

Download: ft232rl_usbserial.zip
K2CADファイルと、ガーバーファイルの詰め合わせ。
今回回路図を書いていないのでいきなり基板設計から。

あー、だから BOM 代わりになるものがないや。
しかも R1, R2 が C1, C2 になっているし(汗;