コメを噛め

コメを噛め

rerofumi の電子工作メモ

hatena bookmark

ほんとは実装の手順をちびちびと順をおって解説していこうかと思っていたのだけれども、面倒になってきたので一気に実装を済ませてしまう。
大体動くあたりまでできた感じ。

CPLD で定義されていないコントロール用の足を定義する。
GCK2(7pin) – アドレスカウントアップのクロック
FB1MC6(8pin) – RST、High にするとアドレスカウンタが 0 になる
FB1MC8(9pin) – E、High にすると SRAM の CE が 0 になって動き出す
FB1MC9(11pin) – CAPT、High でSRAMストア、LowでSRAMリード

CPLD は単純なカウンタとゲートといった役割。
VHDL と UCF(ピン設定) ファイルはこちら。

logiana01_cpld.zip

PSoC のユーザーモジュール配置はこんな感じ。
UART 以外はカウンタのかたまり。


上の段は CPLD に送るクロック(=サンプリング周期)を生成するための分周器。
今回は 1Hz 〜 1MHz 程度をサンプリング周期として狙っているので、その範囲を上手くカウントするのに 24bit カウンタが必要だった。でも PWM が 16Bit しかなくて、もう 8 bit カウンタを追加した次第。その二つはカウンタ値をPCから変更できるようにして任意のサンプリング周期に設定できる。
Counter8_2 はPSoCの内蔵オシレータ(24MHzの倍)を丁度良いように調整する緩衝役。
VC1〜3 といった分周器は UART の調整に用いて、サンプリングの方と分けたかった。

下の段にある16Bitカウンタはサンプル数を数える役。
SRAM は 32kb だけれども、毎回 32768 サンプルでは時間がかかるので任意数で打ち切るためのもの。指定数になったら割り込みを発生させて、サンプルを終了する。
この様に PSoC のカウンタモジュールを利用して、CPUを用いずにサンプルクロックとカウントを行うことができるというのが狙い。
PSoC 内蔵オシレータの精度があまり良くないあたりは難点だけれども、アマチュアのゆるい工作には使えるでしょ。

SRAM から読み出して PC に送るときは P0_0 ピンを内蔵モジュールラインから切り離して CPU の GPIO にしてしまい、プログラムで上げ下げしながらゆっくり読み出している。読み出し時はカウンターは動作させていない。

そんなこんなで作成した PSoC のプロジェクト。

logiana_01.zip

PSoC Designer 4.3 用のプロジェクト。CY8C29466 で作成してある。
一応 CY8C27443 でもできるようにモジュール数はしぼってはあるけれども、プロジェクトを変更することはできないと思う。
アセンブラで書いてあるのでコンパイラライセンスは無くても大丈夫。

細かい調整も残っているけれども、なにより PC 側のアプリケーションを作らなくてはならないのです。

—–

Leave a Reply