コメを噛め

コメを噛め

rerofumi の電子工作メモ

Archive for the ‘PSoC’ Category


hatena bookmark


ヒューマンデータPLCC68 PLD シリーズというのがある。PLD(FPGA/CPLD) を小型モジュール化して PLCC 68 ピンサイズにしたものだ。
DIP(2.54mm) の PLCC ソケットが使えるのでユニバーサル基板とかで工作しやすいというもの。今のところピンも合わせてあるので PLCC シリーズを載せ替えて使う事もできるっぽい。
面白いなーと思って一個買ってあった。IO は少ないけれども、扱いやすいしちょこっと遊んだり実験したりするには十分じゃないかと思ったので。

しかし、これは単なるモジュールなので何かするには基板を起こす必要がある。当たり前と言えば当たり前のお話。
ユニバーサル基板でもなんでも乗せない事には JTAG ケーブルも繋がらない。


なので、これまた実験としていじり倒したい PSoC3 とセットのテストボードをこさえてみようというのが今回のお題。
PSoC3 は以前作成した変換基板ベースで、これまた DIP サイズにしてあるもの。
写真のは CY8C3246 だけれども CY8C3866 も買ってあるので載せ替えられるように。


回路図。
全ピンを引き出しているわけじゃないけれども、そこは無理しても面倒なだけだからそこそこの数引いてあれば良しとするお気楽設計。


CNCで作成、片面ジャンパ3本。

実装や設計のチェックはこれから。本日は基板を作ったところまでに。
まあ、この段階でちょっと設計手直ししたいところが既にあるので、後日また作り直す予定ですが。


hatena bookmark

前回の 3LED、3ボタンのプロトタイプに続いて 8LEDボタンのコンソールを作成。
動作しているところが写真で説明しにくいので動画にしておいた。

Youtubeじゃないと、ってかたはこちら http://youtu.be/sRLdotBFUX0

Read the rest of this entry »


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


できあがった 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


PSoC1 を仲介にして、3.3V駆動、I2C通信で表示ができるキャラクターLCDモジュールのユニットを作成してみた。

ストロベリーリナックスの 3.3V キャラクターLCDモジュールはお安くて入手性も良いのだけれども、いかんせんちょっと小さいのとバックライトがないのとで見づらいところがある。
バックライト付きの 5V LCDモジュールを 3.3V と I2C で使いたいなあと、制御マイコン付きの基板を作ってみることにした。

回路図、K2CADのパターンファイル、基板のガーバーデータ、PSoCプロジェクトの詰め合わせ。
Download: i2c_lcd_psoc1.zip

Read the rest of this entry »


hatena bookmark

3Dプリンターでケースも出力したし、これと基板を組み立てていく。


基板の穴に合わせて 2mm のドリルで穴を開け、2.6mm のタップネジで固定します。
上側も同じようにタップネジで固定するのだけれども、基板と上部と底の 3つをネジで固定する形となる。


本体部分は固定完了したので、上の口からワイヤーを引き出し、そこにLED基板を接続していく。


二枚目以降のLED基板もポリウレタン線を使って筒を通しながら接続していく。


筒をはめ込んで完成。
合成はあまくて隙間が空いちゃっているけれども、そこは手作りの味ということでひとつ。


これでいるみさんは完成。プロジェクトのゴールとなる。


以前ケミカルライトを計測したのと同条件で明るさ測定。
まずまずの成績。


hatena bookmark


ここまででエレキ部分は完成。

ちゃんと点灯もするよ。
ということで、こんどは安定して動作するかどうかのテストを行う。
満タンの電池で連続点灯して何時間くらい光っているかを見るのです。

と、これがなかなかうまくいかなくてですね。最初のトライでは 2時間で消えてしまいました。
ここで一週間ぐらいあーでもないこーでもないと調整をしていたのですが、結果としては LED ボード上になんらかの短絡があったらしくそれでダメになっていたという次第。
次に短絡を全て解消したら、今度は消えないもののやはり2時間くらいで点滅をはじめボタンでの色切り替えができなくなってしまうという現象が発生。これも原因究明が困難でしたが、マイコンからトランジスタスイッチを駆動させる手前で挟んでいる保護抵抗が小さすぎるというのが原因だった。
回路図ではすでに 470Ω に書き直してあるけれども当初ここは 100Ω だった。するとマイコンからのシグナルが大量に流れ過ぎでチャージポンプによる微弱な電流では貧血を起こしてしまっていたのですな。
わかってしまえばなんてことないけれども、調べているときはわかんなくてうんうん悩んでいたもの。

そういった不具合や調整もあらかた片付き安定したところで電池の電圧計測を行った。

最も電力を消費する白色表示のときの電圧降下グラフ。ニッケル水素は 1本あたり 1V 以下まで使うとよろしくないらしいので、2V 未満は使わない方が良い領域。といってもその近傍ではストンと電圧がさがるのですぐに LED が消えると思う。
1.7V で一回棚ができているのは LEDドライバーが駆動しなくなり LED が消えたため、消費電流が押さえられたのだと思う。

で、この計測結果をみると 5時間30分が駆動時間になるらしい。
要求の 6時間にはちょっと足りないけれども、まあぎりぎり許容の線。
別の色にしていると消費電流が下がるので、6時間は超えるはず。