Tutorial

Author: senda@ツッコミ歓迎

このページは、PSoC入門:PSoC First Touch編を読んで、内容を理解していることを前提に書いてあります。

コメント

  • 0x10(16進"10"、2進"00001000"の否定で、"11110111")-> 00010000の否定=11101111 -- 2009-02-28 (土) 04:48:53

  • ご指摘ありがとうございます。遅ればせながら修正いたしました。 -- senda 2009-07-03 (金) 18:09:30

29466とは

PSoC CY8C29466-24PXI(以下、29466;にーきゅうよんろくろく)は、First Touchじゃちょっとデジタルブロック(とか、I/Oポートとか)が足りないよー、とか、もっと応用っぽいモノを作りたいよー、とかいう人にオススメのPSoCです。
なんとなく、MeRL標準ということになっているようです。

外形は28ピンDIPで、ICソケットを使ってユニバーサル基板に実装するのに適しています。
I/Oピンは3ポートx8の24本、デジタルブロックが16コ、アナログブロックが12コと、よほどのことがなければ不自由しない数が用意されています。
#それでも足りなければ、世の中には100ピンのPSoCもあるようです。I/Oピンはなんと64本(!)

ただし、First Touchと違って、Capsenseはありません。

使ってみよう

First Touchのときは、はじめから基板にLEDやセンサが実装されていて、基板と書き込み機があれば、とりあえず動かすことができました。
が、29466の場合は(というか大抵のマイコンは)、単体では何もできません。

基本的には、ユニバーサル基板を用意してICソケットを取り付け、書き込み用のピンと、使いたい部品を実装していくことになります。

MiniProg

PSoC用の一般的な書き込み機が、MiniProgです。

miniProg.jpg

Designerを使ってプロジェクトを作成、ビルドした後、MiniProgを使ってProgrammerでPSoCに書き込む、という流れになります。

初めてMiniProgをPCに接続すると、ドライバウィザードが立ち上がります。
通常は、自動的にドライバがインストールされますが、Programmerがインストールされていないと、うまくいかないようです。
MiniProgを接続する前に、必ずProgrammerをインストールしておきましょう。

基板にPSoCを取りつけるためのICソケットを実装したら、書き込み用のピンを立てます。
100mil(2.54mmピッチ)のピンヘッダ-5pinを立て、次のように配線します。
裏面からだとデータシートとは反転するので、向きに注意。

  1. VDD (5V)
  2. GND
  3. XRES
  4. SCLK (P1[1])
  5. SDATA (P1[0])

電源の5Vは、MiniProgから供給することができます(もちろん外部からも可能)。
First Touchでは、書き込み機をPCに接続すると、電源が常時供給されていましたが、MiniProgの場合は、常時ではなく、Programmerの「Toggle Device Power」をクリックすると、供給されます(もう一度クリックすると供給が止まります)。

#ちなみにこのMiniProg、世界的に品薄らしく、なかなか買えない状況になっています(2008.11現在)。
MeRLには数個しかないので、使ったら元の場所に戻すなど、大事に使うようにしましょう。

例1. LEDとスイッチ

とりあえず、LEDとスイッチを使った簡単な回路を実装してみましょう。

部品の実装

VDD - タクトスイッチ - P1[4](ポート1の4番)
P2[1] - 1kΩ程度の電流制御用抵抗 - 適当なLED - GND
となるよう、それぞれ配線します。

29466Tutorial_01.png

ここで書いたポートは一例なので、適当に使わなそうなポートを使うようにし、適宜読み替えてください。

モジュールと設定

User ModuleのMisc Digitalに、LED1コを制御することのできる"LED"というモジュールが用意されているので、これを使います。
LEDモジュールは、ブロックを消費しないので、Placeして、設定するだけで使えます。

29466Tutorial_02.png

PortとPinに、LEDを接続したピンを設定しておきます。
Driveは、Active Highが正論理、Active Lowが負論理になります。
今回は、ピンからの出力をLEDのアノードに接続するので、正論理です("H"でON)。

29466Tutorial_03.png

さらに、スイッチに接続したピンの、DriveをPull Downに設定します。
こうすると、ピンが内部でプルダウン抵抗を通してGNDに接続されます。
これで、スイッチを押すと"H"、離すと"L"になります(これも正論理)。
負論理の場合(スイッチの先がGNDの場合)は、Pull Upにします。

Global Resourcesは、今回は特にいじることはありません。

プログラム

プログラムは、次のようになります。

29466Tutorial_04.png

モジュールの関数については割愛します。

while(1)ループの中では、次のような処理をしています。

  • 15行目:PRT1DR(PoRT1のDataResistor)と~0x10(16進"10"、2進"00001000" "00010000"の否定で、 "11110111" "11101111")の論理積を取る
    • レジスタの、P1[4](スイッチがつながったピン)の値だけを0にしています
    • これで、内部プルダウンが有効になります
  • 16〜19行目:PRT1DRと0x10の論理積が0x00で無ければ、LEDをONにする
    • つまり、P1[4]が"1"("H")なら、ONです
  • 20〜23行目:そうでなければLEDをOFFにする

なんだかごちゃごちゃしてるかもしれませんが、慣れましょう。
負論理の場合は、該当ピンを"0"ではなく"1"にする必要があるので、適宜読み替えてください。

ちなみに、15行目のようにすると、ポートに任意の値が出力できるので、LEDモジュールを使わなくてもLEDの制御ができます。
(ただし、DriveをStrongにする必要があります)

これで、スイッチを押すとLEDが点灯し、離すと消えるようになります。
そんなのマイコン使わなくてもできるって?
ごもっともです。

なので、次回はI/O割り込みについて書きたいと思います…


( 2008.11.16 記述 senda )
( 2009.07.03 修正 senda )

添付ファイル: file29466Tutorial_02.png 1147件 [詳細] file29466Tutorial_03.png 1070件 [詳細] file29466Tutorial_01.png 1138件 [詳細] fileminiProg.jpg 1147件 [詳細] file29466Tutorial_04.png 1330件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2022-10-02 (日) 11:12:58