2014年4月30日水曜日

キャラクターLCDにPSoC5LPの温度を出力しよう。

*先に注意 今回のはPSoC5LPもしくはPSoC3でしか使えません。

前回キャラクターLCDに文字や数字を
表示させて遊びました。

ただ、これだけでは意味があまり無いので
PSoC5LPに内蔵の温度センサを使ってキャラクターLCDに
表示させましょう。また、今回は
Exampleproject(使い方のお手本)の呼び出し方も
同時に覚えてしまいましょう。


まずは、PSoC Creator 3.0を起動させましょう。
起動させたら、「Start Page」のタブの中にある
「Examples and Kits」の項目の「Find Example Project…」
をクリックしましょう。




そうすると、新しい画面が出てきます。
画面の左側にたくさん英語で書かれた項目があります。


この一つ一つがPSoC3,4,5LPのお手本プロジェクトです。
PSoCの会社が出しているお手本なので、データシートを見ても
「う~ん?」と言うときにはこれを見てヒントを得るのも良いでしょう。

では、「Architecture」の項目のプルダウンメニューを「PSoC5LP」を選んで
「Keyword」のプルダウンメニューから「Die Temp」を選びます。

ここまで来たら、「Create New Workspace」をクリックしましょう。
クリックしたら、お手本を「どこに保存をするのか」のウインドウが出るので
普段プロジェクトを保存している場所に保存しましょう。



保存が出来たらキャラクターLCDのポートを設定しましょう。
Die Temp_BasicTest01.cydwr」をダブルクリックで開きましょう。
前回と同じ設定にしましょう。


お手本なのにポートの設定がいるかと言うと、
今はCYPRESSの開発キット(勉強キット)のCY8CKIT-001 PSoC
ポートの設定のままになっています。これでは動きません。
なのでポートの設定が必要になります。

ポートの設定が出来たら、コンパイルと書き込みをしてみましょう。

どうでしょう?キャラクターLCDにPSoC5LPの温度が出ましたか?

そう。結構テキトーな温度なはずです。
PSoC5LPの温度センサーは±5℃と精度が良くありません。
恐らくは、異常があるかどうか用なのだと思います。




~~~~プログラムについて~~~

今回はお手本なので比較的に「こういう風にこのまま使えばいいよ」というタイプです。なので、プログラムの内容については触れませんでした。

また、急にポインタの話も出てきてしまうので混乱すると思います。

解説がほしい場合は、コメントに「解説して」とか書いて頂けたらと思います。


2014年4月28日月曜日

PSoCメガセミナーに行ってきた。~進め!PSoC4~

まだまだ、私もPSoC使いのヒヨコレベル

なので勉強も含めて、PSoCメガセミナーに行ってきました。



**PSoCメガセミナーとは**
PSoCを使っていなくて、マイコンを(お仕事のでも)使っている人に向けて
日本サイプレス(PSoCの会社)が開いた「PSoCってこんなだよ」って言う勉強会

私としては「mb○○祭り」みたくアウェー感が無く
かといって内輪感も少ないのは良かったです。
計測機器の会社の人が「PSoC5LPは素晴らしい」って言うのを聞けて
arduinoのステップアップとしてPSoC5LPを選んで正解だったと感じました。

さて、セミナーの中心は話題は

PSoC4を新しい選択肢に!

ザックリそんな感じ。

PSoC4は去年に発表された新しいPSoC
簡単にPSoC4を説明するならば

PSoC5LPを軽量化して内部をシンプルにしたのがPSoC4 と言う感じ
ただし、軽量化しすぎてアナログ的な事がちょっと苦手というPSoC

今年はもしかしたら、PSoC4が流行る。かも??

そしてまだPSoC4は進化の途中だそうです。
アナログ系が強化されるんだとか??
ま、先は何とも分からないですが。

~~PSoC4の使い方~~

PSoC4の使い方は今までのブログとほとんど変わらないです。
つまり、PSoC4の使い方はPSoC5LPと同じなんです。(PSoC3もそうですが・・・)

なので・・・

「PSoC5LPが買えないよ~」と泣いている人は
秋月のPSoC4のボードを使うと良いでしょう。

2014年4月22日火曜日

PSoC5LPでキャラクターLCDを使おう!

「キャラクターLCDはちょっと値段が高いし
壊したり、扱い切れないともったいないよなぁ・・・」

PSoC5LPなら
設定も簡単に、易しく、表現豊かに
扱うことができます。

さて、キャラクターLCDモジュールを使って
文字(アスキーコード)
数字(整数)
バーグラフ
をキャラクターLCDに表示させましょう。

使うキャラクターLCDモジュールは
HD44780互換のモジュール
(秋月だとSC1602***系のLCDモジュール、心配ならお店の人と相談しよう。)

つなぎ方が気になるかと思う。けれど先にPSoC5LPで使う
ポート決めて置く方が先になります。
「ポート」と言うのは
「ある7本のピンを1つのカデゴリーとして表すこと」です。
ちょうど、住所を
緯度と経度で書くのか、
市区町村の番地で書くのか
だと近いかも??。


LCDのデータ入出力用のピンが6本あるのですが
設定の時点で、ポートごとの設定となってしまいます。なので
今回は先に使うポートをザックリ決めておいてください。


さて、まずは「LEDチカチカしようの準備編」の状態から
「Character LCD」をドラックアンドドロップだけ


さて、ドラックアンドドロップしたら

ダブルクリックをして設定をしましょう。


ここで設定できるのは、
「バーグラフ」の設定で
「Vertical Bargraph」は、垂直棒グラフ
「Horizontal Bargrah」は、水平棒グラフ

今回は水平棒グラフを選びます。

そうしたら、「OK」ボタンを押して閉じましょう。

次にポートの設定をしましょう。
[****].cydwrをダブルクリックして
「Pin」のタブでつなぐポートの設定しましょう。
「Port」のプルダウンメニューを開くと不思議な表記になっていますね。

P*[6:0]とP*[7:1]と言うような表記ですね。
これは、ポート*の何番目から何番目まで使いますよ。
って言う表記です。

カッコの中のコロン(:)の右側が「X番目から」と言う意味で
コロンの左側が「Y番目まで」と言う意味なのです。
今回の表記だと、
「ポート*番の0番目~6番目まで」
もしくは
「ポート*番の1番目~7番目まで」
が選択できるようになっています。
ポートはどこでも良いのですがP*[6:0]と表記されているタイプが良いでしょう。

選んだら、一度コンパイル。
ここまで来たら、LCDモジュールの準備をしましょう。
まずは、LCDのバックライトが点灯する様に抵抗とジャンパーをはんだづけします。
(へたくそだったのでJ3のパターンを壊しただけです。)


PSoC5LPとキャラクターLCDのつなぎ方はコンポーネットの
データシートにあるのでそれを見ましょう。
つなぎ方を見やすくしたのでこれを参考にすると良いでしょう。


PSoC5LPとの接続ができたら、
「main.c」をダブルクリックして、main.cのタブを出しましょう。

まずは
Int main(){…の中に

LCD_Char_1_Start();
LCD_Char_1_Position(0,0);
LCD_Char_1_PrintString("Hello PSoC5LP");

と書きましょう。

LCDモジュールに文字や数字を書くには
LCDのここから書き始めて!」っと言うのをプログラムに書きます。
ディスプレイ内を行と列として扱うことで「LCDのここ!」を指定できます。
2列16行の場合このようになっていて

左上が「0行0列」となっています。

LCD_Char_1_Position(0,0);
が「ここから書き始めて」っという事です。
次の行に書いた
LCD_Char_1_PrintString(Hello PSoC5LP);

Stringとあるように「文字列」なんです。
表示させたいことを()の中“”の中に書きます。
残念ながら日本語の表示には対応していないので、
アスキーコードの中にあるものしか使えません。

数値の場合は
LCD_Char_1_PrintNumber();
となります。PrintNumber()の場合は“”は要りません。
ただし16bit整数しか使えません。つまり0~65536までしか扱えないので
注意してください。(小数点も使いたい場合、文字に変換するひと手間がいります。)

さてバーグラフは
uint8 Bar=0;
   
    while(Bar <=80){
   
    LCD_Char_1_DrawHorizontalBG(1,0,16,Bar);
    CyDelay(200);
    Bar++;
   
    }
とこんな感じに書くと動きます。

LCDに書いている本体は
LCD_Char_1_CrawHorizontalBG(,始めの列,終わりの列,ここまで書く)

となっていて、「ここまで書いて」と言うのは
LCD表示の1つのブロックを縦に5等分したものを「1個」としています。
「80」の場合、始めの列から縦に80個分という事になります。

今回は、プログラムが単純な割に長いので
私が書いたものをコピーしておきます。

int main()
{
    /* Place your initialization/startup code here (e.g. MyInst_Start()) */
    LCD_Char_1_Start();
   
    LCD_Char_1_Position(0,0);//0行0列に書く
    LCD_Char_1_PrintString("Hello PSoC5LP");//書くのは文字列
    CyDelay(2000);
    LCD_Char_1_ClearDisplay();//ディスプレイをすべて消せ!
   
    LCD_Char_1_Position(0,0);//0行0列に書く
    LCD_Char_1_PrintString("print number");
    LCD_Char_1_Position(1,0);//1行0列に書く
    LCD_Char_1_PrintNumber(43210);//書くのは数値
   
    CyDelay(2000);
   
    LCD_Char_1_Position(0,0);
    LCD_Char_1_PrintString("Downlod START");
   
    uint8 Bar=0;//8bitの整数の箱
   
    while(Bar <=80){
   
    LCD_Char_1_DrawHorizontalBG(1,0,16,Bar);//水平バーグラフを書け
    CyDelay(200);
    Bar++;
   
    }
   
    LCD_Char_1_ClearDisplay();
   
    LCD_Char_1_Position(0,0);
    LCD_Char_1_PrintString("Exit Test");
   
    LCD_Char_1_Position(1,0);
    LCD_Char_1_PrintString("==Complete==");
   
    /* CyGlobalIntEnable; */ /* Uncomment this line to enable global interrupts. */
    for(;;)
    {
        /* Place your application code here. */
    }
}

これに書き替えたら、もう一度コンパイル。

LCDモジュールとPSoC5LPとの配線が比較的にややこしいかと思いますので
ゆっくり配線するのがいいでしょう。

 ~~2行のLCDと4行のLCD~~
HD44780互換のLCDモジュールには
2行16列のタイプと4行20列のタイプがあります。

どちらも動かすのが可能ですが、
0行19列を超えると1行0列となってしまいます。

2行16列のタイプを使う方が簡単なのでそちらを使うことを勧めます。

2014年4月19日土曜日

PSoC5LPでLEDをふわふわ光らせよう。

せっかく、LEDのほぼ書かないプログラムが出来たので
それを改造して

LEDをふわふわ(じわじわ)光らせよう。

改造が必要なのは
使った部品の設定とプログラム


さて、改造をしてLEDをフワフワさせましょう!

設定を変えるのは
クロック と PWM

クロックの設定が500Hzだと遅すぎるので
500Hz ⇒ 12kHz
設定しましょう。

PWMも16bitもいらないので、
16bit ⇒ 8bit
しましょう。


ただ、ラジオボタンを移動させただけだと


「!」マークが出て「エラー」が出ます。
なので、「Max」のボタンをクリックしてエラーを取りましょう。


OK」をクリックしたら、一度コンパイル。


コンパイルが終わったら、「main.c」のタブを開いて

for(;;)の外側に

PWM_1_Start();
int i;

を書きましょう。

for(;;)の内側に

for(i=0;i<=254;i=i+1){
PWM_1_WriteCompere(i);
CyDelay(5);
}

を書いて、もう一度コンパイル。

書けたら、PSoC5LPに書きこんでみましょう。
どうです??ふわふわ(ジワジワ)光りました??

書き方としてはArduino系に近い書き方かな?っと思います。
同じ要領で、通常のモーターやサーボモーターも制御できますよ。



~~番外編 ほしいPWMを作るには??~~


今回、手順通りにすればLEDがフワフワする様になりますが
実際では

サーボモーター制御するためにベストなPWMを作りたい とか
赤外線LEDを38kHでチカチカさせたい 等だと思います。

なので、PWMコンポーネットに供給するクロックの
計算法について書いておきたいと思います。

bitの場合
1÷{(1÷X[Hz])÷256}=Y[Hz]

16bitの場合
1÷{(1÷X[Hz])÷65536}=Y[Hz]

このひと手間で、「ライブラリーがなぁ・・・」という事も無くなります