PSoC1duino 設計上の工夫の小話
PSoC1duinoを設計するのあたって、工夫した点などの小話を・・・
- ピン配置(その1)。 ArduinoのA0-A7は「アナログ入力」ですから、PSoC1で最もアナログ入力としての自由度が高いPort0を割り当てました。
- ピン配置(その2)。ArduinoのA4とA5はI2CのSDA/SCLとしての機能を持たせることができます。PSoC1でハードウエアI2Cモジュール(I2CHW)のピンが割り当てられてるのは、P0.0/P0.1とP1.5/P1.7です。しかし以下の理由から、A4/A5に接続するピンをジャンパピンで切り替えられるようにしました。それにともない、D13の割当が後述のようにやや変則的になっています。
- A4/A5にP0.0/P0.1を割り当てるのはピン番号が不自然
- P0.0/P0.1はICSPでのプログラム書込にも使うため、I2CHWのI2Cピンとして使うことは少ないと思われる
- I2CHWではもう1組、P1.5/P1.7を割当ができる
- ピン配置(その3)。ArduinoのD0-D7の8本は1つのポートに割り当てたいのですが、後述の理由でPort1が使えないので、ここはPort2を割り当てています。
- ピン配置(その4)。ArduinoのD8-D13の6本は、前述のようにPort1のP1.5/P1.7がI2CHWで使用できるためA4/A5に割り当てできるようにしていることから、Port1の残る6本をここに割り当てました。
- リセット信号。PSoC1のリセット端子(XRES)は正論理で、普段は0、リセット時1、です。一方Arduinoのリセット端子(RST)は負論理で、普段は1、リセット時0、です。一方、USB-シリアル変換ICのFT232のDTR端子は、PCがCOMポートを開いたときに0になります。ArduinoではこのDTR端子に0.1uFのコンデンサをはさんでHPF(微分回路)を形成して、COMポートを開いた時に一瞬だけRSTが0になるようにしてリセットをかけています。
ならばPSoC1のXRESは、このRSTを論理反転すればよいような気がするのですが、直接NOTゲートをつないでしまうと、ICSP端子にMiniProg等の書き込み機をつないで直接プログラムの書き込みを行う際に、書き込み機がXRES端子を制御できなくなります。つまりRST/XRSTに必要な機能は以下の通りとなります。
- DTRから0.1uFを通してRSTを生成(VDDに10kΩでプルアップ)
- RST=0のとき、XRES=1としたい
- RST=1のとき(通常動作時)は、XRES=0とするが、このXRESは外部から制御できるようにしたい
以上から、回路図のように、pMOSトランジスタを使ったソース接地回路でオープンドレインなNOTゲートを形成し、これらの必要機能を満たすようにしています。
お問い合わせはこちらまで: akita@akita11.jp