| 
	 
	 
	GPIOのお勉強 
	というわけで、仕事も何気にヘヴィだったりするので、だらだら〜っと休息期間を取っているわけですが、
	ぼちぼちっとPSoCを触り始めています。まずは、GPIOを使ってみようと思います。
	「GPIOってなんぞや?」なんて思ったんですが、要は「汎用入出力」のことのようです。
	MiniEval1には、スイッチとLEDが実装されていますので、「スイッチを押すとLEDが点灯する」という、
	単純なプログラムを組んでみようと思います。
	 
	PSoCのI/Oポート 
	I/Oポートには、High Z、High Z Analog、Open Drain High、Open DrainLow、Pull Up、Pull Down、Strong、Strong Slowの
	8つのモードがあります。「初めてのPSoC」に解説が書いてありましたが、まだまだ勉強不足。
	とりあえずLEDを点灯させるためには「StrongでOK」と理解しました。また、スイッチは、MiniEval1では、VCCにぶら下がっていますので
	(+5Vにつながっている)、PSoC内で処理をするためには、Pull Downとすればよさそうです。
	 
	プロジェクト作って、ごごごっと行ってみよう! 
	 
		
			
				  クリックで拡大します。
			 | 
			
				というわけで、まずは「PSoC Designer」を起動します。そうすると、「Start」というダイアログが表示されまして、
				新プロジェクトを作ったり、今まで作ったプロジェクトを読み込むことができます。ここでは迷わず「Start new project」をクリックします。
			 | 
		 
		
			
				  クリックで拡大します。
			 | 
			
				プロジェクト名は、「LEDSW」としました。「LEDをSWで点灯させるから」です。もっと長い名前でも大丈夫です。
			 | 
		 
		
			
				  クリックで拡大します。
			 | 
			
				今回は、「CY8C27443-24PXI」を使っていますので、以下の画面のように設定します。チップを切り替えるには、
				ダイアログ左にある「View Catalog」をクリックして選択メニューを開き、そこから選択します。
				また、せっかく「Cコンパイラ」が使えるので、「Generate 'Main' file using:」は、「C」を選択します。
				なんで、「CY8C27443-24PXI」を使っているかというと、なんとなく、モジュール規模が少ない方が最初は理解しやすいかな〜と思ったので、
				こっちにしました。ちなみに、「CY8C29...」になると、デジタルブロック数やROMが倍だそうです。
			 | 
		 
		
			
				  クリックで拡大します。
			 | 
			
				というわけで、「Device Editor」の「Selection(モジュール選択画面)」が開きました。
			 | 
		 
		
			
				  クリックで拡大します。
			 | 
			
				今回のプログラムでは、モジュールを使わないので、そのままさくさくっと結線作業を行います。
				普通は、モジュールを追加しますので、ここで、A/Dコンバータ等を追加して、それから結線作業となるのですが、
				今回、I/Oをちょっといじるだけのプログラムですので、モジュールは使いません。
				メニューから「Interconnect」を選択する事によって、画面を移動します。
			 | 
		 
	 
	
	I/Oの設定 
	 
		
			
				  クリックで拡大します。
			 | 
			
				これが「Interconnect」の画面です。「モジュールが無いのに、結線がいるの?」と思われるのかもしれませんが、実は、
				この画面からI/Oの設定をします。 
				先に説明したとおり、各I/Oポートはモードを持っており、入力/出力を切り替えたり、プルアップ、プルダウンの設定をすることができます。
			 | 
		 
		
			
				  クリックで拡大します。
			 | 
			
				「Interconnect」画面の左下の方にあるのが、I/O設定のための画面です。まずはスイッチの設定から行きます。 
				スイッチは、P1[4]に接続されていますので、Port_1_4の「Drive」の列をクリックすると、モードを選択できるようになります。
				8つのモードが表示されますが、この中から「Pull Down」を選択します。これで、後でコードを生成した時に、
				このための初期化コードが生成されます。
			 | 
		 
		
			
				  クリックで拡大します。
			 | 
			
				これでOKです。
			 | 
		 
		
			
				  クリックで拡大します。
			 | 
			
				引き続き、LEDの方も設定します。LEDは、P2[0]〜[3]につながっていますので、どれでもいいんですが、ここでは、
				P2[0]を使います。同じように選択し、「Strong」を選択します。これ、要は普通の出力みたいです。
			 | 
		 
		
			
				  クリックで拡大します。
			 | 
			
				さてっと、ソースコードを生成します。ここまで、なんだかリッチな画面でいろいろ編集してきましたが、
				実は、これ、自動生成されるソースコードのための設定作業です。例えば、「ポートをプルダウン」という設定をしましたが、
				これも「そのための初期化コードを生成」するためのものです。 
				では、「Generate Application」します。
			 | 
		 
		
			
				  クリックで拡大します。
			 | 
			
				お、なにやら完了した模様。
			 | 
		 
	 
	
	コーディング 
	 
		
			
				  クリックで拡大します。
			 | 
			
				ちょこっとですが、コーディングします。先に説明したとおり、初期化コードなどは既に「Generate Application」で生成されていますので、
				後は、本体を書くだけです。マイコンプログラミングをやっていると、まず最初に「モジュール初期化のコードをどう書くか?」というところで、
				マイコンのハードウェアマニュアルとにらめっこになるのですが、PSoC Designerを使っている場合は、この苦労が少なくてすみそうです。 
				それでは、「Application Editor」へ行きます。
			 | 
		 
		
			
				  クリックで拡大します。
			 | 
			
				これが「Application Editor」です。よくある統合環境の画面ですね〜。
			 | 
		 
		
			
				  クリックで拡大します。
			 | 
			
				ソースファイルを開きます。開くには、左のツリーから選択します。他にもいろいろソースコードが入っており、
				覗いて見るとおもしろいかもしれません。自動生成されたコードも入っています。また、モジュールを追加した場合、
				それ関係のソースコードも入ります。
			 | 
		 
		
			
				  クリックで拡大します。
			 | 
			
				それでは、「SWの情報を、LEDへ出力する」というプログラムを書きます。 
				I/Oポートへアクセスするためには、「PRTxDR」という変数を介してアクセスをします。こうやって使うと、
				普通のマイコンと同じ感じです。例えばPORT1ならば「PRT1DR」で、それぞれのビットが、各ピンの状態に対応しています。
				今回の場合、P1[4]に接続されているSWの状態を読み取るので、二進数で00010000b、つまり16進数で10hです。
				また、LEDは、P2[0]ですので、二進数で00000001b、16進数で01hのデータにて、操作すればOKです。
				 というわけで、コードはこうなります。
while( 1 ){
  if(( PRT1DR&0x10 ) != 0 ){ // P1[4](SW) Input Check
    PRT2DR |= 0x01;          // P2[0]=H LED ON
  }
  else{
    PRT2DR &= ~0x01;         // P2[0]=L LED OFF
  }
}
			エディタ上で日本語を入力すると、文字化けする事に気づいてしまいました…。うちの環境だけかな〜。
			 | 
		 
		
			
				  クリックで拡大します。
			 | 
			
				それではビルドします。
			 | 
		 
		
			
				  クリックで拡大します。
			 | 
			
				無事、ビルド完了したようです。
			 | 
		 
	 
	
	PSoCへの書き込み 
	 
		
			
				  クリックで拡大します。
			 | 
			
				というわけで、パソコンにUSBケーブルで、MiniEval1、CY3210-MiniProgを接続します。もちろん、もっと前から接続していても構いません。
				そして、「PSoC Designer」の「Program Part」のアイコンをクリックします。実行されるのは「PSoC Programmer」ですので、
				Windowsメニューの方から起動しても言いのですが、「PSoC Designer」から起動すると、プロジェクトの情報が引き継がれるので便利です。
			 | 
		 
		
			
				  クリックで拡大します。
			 | 
			
				じゃん、「PSoC Programmer」です。起動すると、いきなりPSoCと接続されます。
			 | 
		 
		
			
				  クリックで拡大します。
			 | 
			
				「Program」ボタンを押すと…。
			 | 
		 
		
			
				  クリックで拡大します。
			 | 
			
				ごごごっとプログラムが転送されます。「成功!」と出てますので、大丈夫です。 
				なぜか「PSoC Programmer」の動作ログ表示は、新しい方が上です(「PSoC Designer」では、新しい方が下)。
			 | 
		 
	 
	
	プログラムの実行 
	 
		
			
				  クリックで拡大します。
			 | 
			
				それでは、動作させてみます。「PSoC Programmer」から電源ON!します。これは便利です。CY3210-MiniProgからMiniEval1に電源が供給され、
				そのままプログラムを走らせる事ができます。 
				注意は、「このチェックボックスの表示にはウソがある」ことです。下の方に表示されているステータスのところを見る方が正しいです。
			 | 
		 
		
			
				  クリックで点灯します。
			 | 
			
				というわけで、「スイッチを押すと、LEDが点灯する」プログラムの完成〜です。
			 | 
		 
	 
	
	というわけで… 
	というわけで、ここまで、だだだっと作って見ましたが、これを応用すると、とりあえず「デジタルコンパスの値をLEDで表示」というのは簡単にできそうです。
	そのときは、入力ポートは「Pull Down」じゃなくて、別のにする必要があると思いますけど、プログラム自体は、ちょっと直すだけでOKそうです。
	しばらくは、この評価ボードだけで遊んでみようと思います(とか言いながら、今、RS232CのI/F作ってたりして…)。
	 
	   |