「LEDをピコピコさせる」というのは横一列に並べたLEDをマイコンのピンから順番に電流を出したり出さなかったりして順番に点灯させる事を指す。
GPIOの開閉、代入、wait処理、for文if文、インクリメントなどのマイコンプログラミングでよく使う要素が入っているので、新しいマイコンを使う時はこれをやってみる事にしている。
ちなみにGPIOへの入力は、チャタリングやプルアップなど色々あるので別にやる。
→LED ピコピコ 検索結果
あと最近知ったけど GPIO はGeneral-Purpose I/Oの略で、つまり汎用ピンの事なんだね。
PSoC MiniProg付属のPSoCMiniEvalにCY8C29466を載せてやってみた。
Source Code(PSoC Designer 4.3 + C Compiler)
動かした。
今回も桑野さんのはじめてのPSoCマイコンのp.63-72「入出力&割り込みのしくみとスイッチ&LEDを使った実験」を参考にした。
■デバイス設定
今回もPSoC Designerでやる。でもDevice EditorのUserModulesは使わずに、Interconncect ViewでGPIOのDrive設定だけを行なって、Generate Applicationする。
PSoC Designerの基本的な使い方は
s.h.log: PSoC DesignerでCY8C29466の16bitPWMを動かす
を見て欲しい。
まずInterconnect Viewの左側のPortの設定と、右側のPortの実体配置に注目する
どのPortのピンが基盤上のLEDに接続されているか?は、マイコンを外して回路を辿ってみればわかる。
この4つに接続されていて、その名前はPort2の0~3番ピンだった
そのPort2_0~3のDriveを「Strong」に設定する
ここまで設定したら、「Generate Application」する
「Strong」は普通の出力ピンとして使う時の設定。「Strong Slow」は立ち上がり/立ち下がりを遅くして安定させたStrongらしい。
他の設定でも、とりあえず「Pull Up」「Pull Down」ならLEDを光らせる事ができる。「Pull Up」は光が弱かった。
この辺ははじめてのPSoCマイコンのp.64に詳しく書いてある
■プログラムを書く
Application Editorで書く。
PSoCのPORTもAVRと同じく、1byte(8bit)のレジスタの各bitが開閉のフラグになっている。
それをC言語で扱う時にビット演算をしなければならないが、16進数が苦手なので、_BVとsbiとcbiをPSoCでも使ってみた。
→ s.h.log: avr-gccのレジスタ操作で16進数とか使わない方法
main.c
#include<m8c.h>//partspecificconstantsandmacros
#include&qute;PSoCAPI.h&qute;//PSoCAPIdefinitionsforallUserModules
#define_BV(BIT)(1<<BIT)
#definesbi(BYTE,BIT)(BYTE|=_BV(BIT))
#definecbi(BYTE,BIT)(BYTE&=~_BV(BIT))
voidnop(intn){
inti;
for(i=0;i<n;i++){
}
}
voidmain(){
charled;
led=0;
for(;;){
sbi(PRT2DR,led);//LEDon
nop(5000);//wait
cbi(PRT2DR,led);//LEDoff
led++;//nextLED
if(led>3)led=0;
}
}