Knowledge
   

PSoCを使ってみよう

PSoCとは、普通のマイコンとはちょっと違って、CPU+デジタル回路+アナログ回路で構成されたマイコンです。 センサ処理など、メインマイコンの周辺処理をやらせるのにちょうどいいかな?と思って、触り始めてみました。 開発環境ですが、「はじめてのPSoCマイコン」という書籍を購入すると、$10で評価キットを購入することができます。


2005/05/31

はじめてのPSoCマイコン

「はじめてのPSoCマイコン」購入
「PSoC」ってご存知ですか?「ピーソック」と読むそうですが、前々から興味があって、書籍を購入してしまいました。 これは、サイプレス社のチップでして、 センサの処理をするのにいいかな〜と思って目をつけていたんですが、松っちゃん(父)さんのすすめもあってまずは書籍購入しました。

PSoC Book

このチップ、マイコンと言えばマイコンなんですが、いわゆるマイコンのコア以外に、デジタルPSoCブロックとアナログPSoCブロックと呼ばれるモジュールらしきものがあります。 周辺モジュールを組み上げていくイメージでプログラムできるのが特徴のようです。 また、内臓されている周辺モジュールが非常にセンサ処理向きのようで、例えば、アナログ入力信号を増幅するとか、 その増幅も、GNDから見ての増幅とか、1/2VCCを中心した増幅とかできるようです。 またデジタルの方も、カウンタ、PWM、UART、IIC等、いろいろ機能が盛りだくさんです。 しかも、24MHzのクロックまで内臓しています。

ということは、ひょっとしたらこれ1つで(外部回路無しで)、オペアンプとかの前処理無しでアナログセンサを取り込み、 それをPWM化してマイコンへ入力とか、IICでマイコンへ入力なんてのも簡単にできるんじゃないかな〜なんて。 だとすると、オペアンプ+8Pサイズのマイコンをつけるより省スペースにもなるんではないかとワクワクしてます。 実は、電子回路にすごく弱かったりするので、そそります〜。

この本を書かれているのは桑野雅彦さんという方で、Pastel Magicというホームページを立ち上げらられており、そこでもPSoCの解説や販売をされています。 その中に、PSoCチュートリアルもありますので、それを読まれるとわかりやすいと思います。

さてさて、開発キットの入手ですが、「はじめてのPSoCマイコン」には、「特別販売・PSoCミニ・ディヴェロップメント・キット」の紹介があります。 これは、なんと、特別価格$10で開発キットが購入できるというもの。う、これってここで書いていいのかな? 基本販売期間は2005年4月30日までとのことなので、やばいと思ってさっそくホームページにアクセスしてみると、 おお、なんか新しくなってる!本に載っていたのは、チップとUSBコントローラが実装された基板+開発ソフトって感じで、 すごく「評価セット」という感じだったのですが、今度のは、ソケットでチップが載せ替えれるものになっています。 $35で販売されているものと同じものです。う〜ん、すごい。これが$10か〜。というわけで迷わずオーダー。 クレジットカードしか使えないのが難点ですが…後は到着まで1〜2週間待つことにします。 でも、発送料も込みで$10なのかな?ホームページを眺めている限り、$10な感じですが… また、同じ物が前述のPastel Magicで\4,500で購入できるみたいです。特別販売じゃない場合、$35なので、こちらでさくっと購入も良さそうですね〜。

うぅ〜、PICの勉強をしようと、密かにJDMプログラマなんて作ってたんですが、やりたいことは結局センサのマイコン入力前処理なので、 このままPSoCに行ってしまいそう…。G-Tuneに搭載するのはまだまだ先になりそうですが、ああ、魅惑のPSoC。早く来い来い開発キット。

 

2005/06/01

夢が広がるPSoC

いや〜、PSoC、おもしろそうで、もうダメ!
既にPSoCミニ・ディヴェロップメント・キットをゲットされている、みすみロボット研究所さんのホームページを見させていただいていたら、 アナログ回路の取り込み、IIC通信等をやってみたいとのことが書かれていました。考えることは同じです…が、ハードPWM回路を使ってサーボドライブというところまでは考えていませんでした。 そういわれてみれば、PWMモジュールがあるわけですから、当然、サーボもドライブできますよね。 う〜ん、センサー取り込みばかり考えていたので、思いつきませんでした。16Bitカウンタを4つは配置できますから、少なくとも4つはサーボをハードPWMでドライブできます。 もし、出力端子もプログラムで切り替えることができるとしたら…ああ〜、夢が広がっていきます。んで、これをIICで芋づるにして、あんなことしてこんなことして…。

さて、ちょっと一息入れて…最初、この先もっとセンサーが増えてきたら、8PのPICとオペアンプでどうかな〜と思ったんです。 でも、回路組むと意外と大きくなりますし、なによりSISOは電子回路に弱いので、 電子回路面でコンパクト&シンプルにできるのであれば、それに越したことは無いな〜と。 また、PSoCのチップって、\500〜\700ぐらいで安いです。能力的に考えてコストパフォーマンスもすごくいいような気がします。 もし28PINが大きすぎれば、8PINのCY8C27143が共立エレショップで購入できるようです (写真は28Pですが…本当はどっちなんでしょう?)。開発キットは対応しているのかな?

実のところ、今のH8/3694だけでも、サーボ20ch、加速度センサ、距離センサx2、ジャイロx2、ProBo対応まではいけると思っているのですが、 今後、もっといろいろ対応していかないとダメかなって思ってまして、次期のさらに次のG-Tuneあたりで搭載できたらいいな〜なんて思ってます。

やってみたいことは、各種センサを取りまとめてIIC通信化です。 H8TINY(H8/3687を除く)、I/O数が少ないので、いろいろ繋ぎたくても脚が足りなくなっちゃうというのと、 アナログを扱う以上は、オペアンプなどのアナログ回路は避けられない(特に安く使おうと思うと)のかな〜って思ってまして、 だったら、オペアンプなどを内臓して、しかも内部で組換え可能なマイコンであるPSoCならうってつけじゃないかな〜なんて予感がします。

IICは、芋ずるのように接続できますので拡張性も維持できますし、シリアルEEPROMを読み出すような感覚で扱えるスレーブのIICデバイスにできたら、 なんとか番地のメモリを読み出すと距離センサーの値が、別の番地を読み出すと加速度センサの値(しかも増幅された)が…なんてできそうです。 いや、プログラムも組めるわけですから、転倒判定もPSoCの方でやらせるのもいいかも…。ああ〜、また夢が広がっていってしまいます。 IICで体内ネットワークレベルまでやるとノイズの問題で難しいらしいですが(本当はどれくらいまでいいんだろう?)、隣のボードに繋ぐのは問題ないですし、 G-Tune程度のサイズなら簡単なノイズ対策程度で体内ネットワークもできるかもしれません。

というわけで、まだ開発キットは来ていませんが、なんだか我慢できなくなってきたので、PSoCデザイナーをダウンロードしてインストールしてみました。 本にもついているのですが、なんとなく開封するのがもったいなくて…。

まずはCYPRESSのトップページから、「Software and Drivers」に入り、「Select Product Group:」を「PSoC Mixed-Signal Controllers」にして「Apply Filter」します。 そうするとツール群がずらずらっと出てきます。 「PSOC DESIGNER V. 4.2」と「PSOC DESIGNER V.4.2 SERVICE PACK 2」があるのですが、説明を読むとこっちは拡張機能っぽいので、まずは「PSOC DESIGNER V. 4.2」をダウンロードしました。 うへ、66MByteもあります。じっと待ちます。

CYPRESS TOP PAGE  CYPRESS DESIGN RESOURCES

インストールそのものは、解凍して出てきた実行ファイルを起動するだけですので、特に難しいところはありません。 あとは、Pastel Magicさんのところのチュートリアルを読みながら、PWMでLEDのやつを入力してみました。 おお、おもしろいですよ、これ。というわけで、なんか絵ができたところで、現物が無いので終了〜。あ〜、久しぶりにデバイスで興奮しているような気がします。 採用は次々期G-Tuneにしようと思っているんですが…ま、新型制御ボードの製作スケジュールを後ろにして、進捗の様子を見ながらやろうと思います。 なんだか止まらない予感…。

CYPRESS TOP PAGE

 

2005/06/04

PSoC下調べ中(早く『取調べ中』になりたい…)

PSoC下調べの続き
現状、こんな感じです。せっかくなので、Noteというページを作って、 こういうメモ書きみたいなものはそっちに入れることにしました(いつかディスククラッシュした時のショック軽減のため…な〜んて)。

  • 情報ソース
    • CYPRESS
      なんか、日が経つにつれ、日本語表示が増えている気がする。
    • サイプレスジャパン
      日本語Data Sheetのダウンロードができる。(トップページの「日本語資料」より)
    • パステルマジック
      「初めてのPSoC」の著者さま。初心者向けチュートリアルや簡単な作例、BBSあり。
  • 入手方法
  • PSoC Designer
    • ソースコードサンプル
      PSoC Designerから呼び出すData Sheetに、Sampleソースコードがたくさん載っているので、 それを参考にすれば書けそう。
    • Data Sheetの位置
      デフォルトでインストールした場合、以下のフォルダにhtml形式である。
      C:\Program Files\Cypress MicroSystems\PSoC Designer\Data\Stdum
      PDFも一緒に入っているので印刷するにも便利。
  • Selection/Interconnect
    • 出力の流れ
      ユーザモジュールの出力は、RO(Row Output:内部?出力)バス、GO(Global Output:グローバル出力)バス→I/Oピンという流れで外に出る。
    • ロウ出力バスとグローバル出力バスの結線
      ロウ出力バスは、16本あるグローバル出力バスのうち、決められた4本のうちの1〜4本に接続することができる。
      例えば、RO0→GOE0,GOE4,GOO0,GOO4、RO1→GOE1,GOE5,GOO1,GOO5という感じ。
    • I/Oピンとグローバル出力バスの結線
      いくら自由度が高いとはいえ、たぶん…1つのGOバスは、接続先としてだいたい2つI/Oピンから選択できるようである。
  • Hardware Block
    • I2C Hardware Blockについて
      PSoC Designerでは、「Digital Comm」内に「I2CHW」と「I2Cm」がある。「I2Cm」はマスター用、「I2CHW」は全般っぽい。
    • I2C Hardware Blockの通信速度
      サポートしているI2C Clock Speedは、「50K」、「100K」、「400K」の3種類。CPUクロックには依存しないようである。
      H8/3664(16MHz)でマッチするもの…400K、100K
      H8/3694(20MHz)でマッチするもの…100K
      ちょっとぐらいずれてても大丈夫ならば他の値でも通信できるかも。期待値は、Slave動作ならば、クロック入力にあわせて適当に動いてくれること(シリアルEEPROMみたいに)。 シリアルEEPROM等がこれ以上のスピードをサポートしていても、同じバス上に接続するならばこれに合わせる必用あり。
    • 謎の「I2Cs」
      I2CのSlaveモジュールと思われるが、なぜかPSoC Designerには選択肢として出てこない。PSoC DesignerのData Sheetにのみ、存在する。 Slave用のサンプルソースコードが「I2CHW」にあるので、こっちを使うということだろうか?
    • Incremental ADC
      Data Sheetを読むと、「ADCINC…46.8ksps」、「ADCINC12…from 7.8 to 480 sps」、「ADCINC14…from 2 to 120 sps」ということで、 H8等の、うんusという単位と比較すると、あまり速くはない。それにしてもこの幅はどうしたもんだろう。 演算的なことはオペアンプにやってもらって、結果をAD変換するようにした方がよさそうだ。

 

2005/07/31

動かしちゃったよ…PSoC

PSoCチュートリアル
「触るな、触るな…」と思いつつ、ついに触ってしまいました。ははは。 気分転換にちょっとだけね、ちょっとだけ。

PastelMagicさんのホームページのTIPSにて、 「PSoCチュートリアル」が紹介されています。これは、「Invention Board」とPSoC Designer V4.0を使用して、 LEDをPWMでチカチカさせるプログラムです。これを、$10で入手したCY3210-MINIPROG1にてやってみました。 チップは、CY8C27443を使い、PSoC Designerは、V4.2 SP2です。また、Cコンパイラのライセンスキーも入力済み♪です。

まずは、このようなサンプルをアップしてくださっている桑野さんに感謝しながら、チュートリアルどおりに入力。 さて、LEDの回路でも作ろうかな、と思ったんですが、考えてみたらこのMINIEVAL1(CY3210-MINIPROG1に同梱されているPSoCを載せるボードの方)って、 LEDが実装されているからそれを点滅させればいいということに気づきました。

チュートリアルでは、PWM出力が「Port0_0」と「Port0_1」に接続されています。 MINIEVAL1では、「Port2_0」〜「Port2_3」にLEDが接続されていますので、これに変更してみました。

PSoC Designer Original
クリックで拡大します。

まずは、「Port0_0」、「Port0_1」に接続されているGlobal Outputバスを外します。 これには、Gloval Outputバスを選択してクリックし、「Pin」を「None」にします。

PSoC Designer
クリックで拡大します。

PSoC Designer

はい、これで接続が外れました。

PSoC Designer
クリックで拡大します。

それから、「Port2_0」と「Port2_1」に配線し直します。 なんか、配線を外さずにやったら両方接続されてしまったので、こうやってます。

PSoC Designer

PSoC Designer

PSoC Designer

後は、GenerateしてBulidすればOKです。

PSoC Designer

既にmain.cにソースコードが書いてあったんですが、それが消えることは無かったです。 ん?なんか「warning」が出てます…。また時間ができたら細かい話もアップします。 とりあえず気にせずに「PSoC Programmer」を起動して(PSoC Designerから呼び出せます)書き込んでみました。 「PSoC Programmer」には、「Mini Prog」から「CY3210-MiniEval1」へ電源供給する機能がありますから、それをチェックオン(なんか表示がバグっている気がしますが、ボードのLEDが点灯するのでわかります)すると、無事、実行できました。

PSoC MINIEVAL
クリックで再生

今日のNOTE

  • 開発キット(CY3210-MINIPROG1)
    • CY3210-MINIPROG1のMINIEVAL1(評価ボード)に実装されている部品と接続先
      P00      TP6
      P01  VR  TP5
      P03      TP4
      P05      TP3
      P14 SW1
      P20 LED4 TP10 DNP-1
      P21 LED3 TP9  DNP-2
      P22 LED2 TP8  DNP-3
      P23 LED1 TP7  DNP-4
      P24           DNP-5
      P25           DNP-6
      P26           DNP-7
      P27           DNP-8
      

     


SISO-LAB Knowledge