2014年12月16日火曜日

プログラムをモニターせよ~デバッグを使おう~

mb○dやArdui●oを通常の使い方をした場合では
プログラムのどこのコードが動いているかが分かりません。
お手軽の場合な場合では、マイコンのシリアル通信を使って
シリアル通信のプログラムを反して「どこが動いていますよ」みたいな
事を人力でする感じ。

ですがPSoC Creatorでは「デバック」と言う機能を使って
プログラムのどこのコードが動いていますよ。
と言うのが隅々まで分かるようになります。
また、デバッグ用のプログラムを作る必要もありません。

この機能を使うには
まずPSoC5LPへの書き込み方法を確認しましょう。
「ブートローダ」を使っている場合では「デバッグ」を使うことが出来ません。

ブートローダを使っている場合では
miniProg3やCro_Progキットのような書き込み機を用意しましょう。
PSoC5LPと書き込み機を接続すれば大丈夫です。

freeSoCのような海外のボードやCQ出版のボード、CY8CKIT-050、CY8CKIT-042等は
デバック対応の書き込み機が入っています。

さて、デバッグを使ってみましょう。
難しいことはありません。

LEDドライバーを使って、カウンターコンポーネットの数値を取り出すプログラム
を例にデバッグを使っていきましょう。



カウンターのピリオドを4000としてプログラムをしました。
任意でリセットが出来るようにコントロールレジスタコンポーネット
を使っています。

プログラムを書き終わって、コンパイルが終わったら
虫マークのボタンをクリックしてみましょう。



そうすると画面が少し変わって
下側にメモリーやレジスター、ローカルのタブが付いた画面が出てきます。
これがデバッグ画面になります。



まずは、「StepOver」のボタンを押してみましょう。



クリックすると黄色い矢印と帯が下に進みます。



このようにして、自分のプログラムを進めていきます。
もう一度押すと、7セグLEDに「PSoc」と表示され
プログラムの処理が終わり、次のコードに進みます。
今度は、「Step Into」を押してみましょう。



今度は、別のページに飛びます。




これは「Write7SegDigitHex()」に関するプログラムが表示されています。
用事が無い場合、「Strp Out」を押して自分のプログラムに戻りましょう。



Step Overを押してコードを進めていくと、変数 iに差し掛かります。



そうするとLocalsのタブ上にNameの行の隣のValueの行の数値が変わりました。



この画面では自分できめた変数が表示されます。
また、プルダウンメニューから数値に対する表記方法も変更出来ます。



何度かループを回してみると、変数 i が不思議とif 関数で
リセットをかけたつもりが、かかっていません。
この事から、カウンターコンポーネットのピリオド値を
変えてあげる必要がありそうという事がわかりました。

デバッグを終了するには、「Stop Debugging」をクリックして終了します。



この様に、ビルドの時のミスとは別に
プログラムの良くない所がわかるようになります。

この方法はm●edやArdu●noでは純正環境が無ければ出来ません。
また、無料の時点ではビルドのデータ量に制約が付くため
上位モデルにおいてはビルドすら出来ません。

デバッグを使うことによって、プログラムの裏側で動いている場合でも
何が動いているのが明らかになり、ビルドから漏れたエラーも分かるようになります。
サンプルプログラムからより多くの事も分かるようになるので、
デバッグが使えることは、プログラムに慣れない人にはうれしいですね。

2014年12月7日日曜日

7セグメントLEDを使ってみよう!

ADCの記事が先なのは、十分わかっているのですが。
PSoCまつりで7セグメントLEDを使ったデモを持ってきたので
それの説明、と言うわけ。

さて、7セグメントLEDを通常のマイコンで使う場合
ダイナミック点灯と言う方法を使います。
ダイナミック点灯の簡単な説明をすると
マイコンの入出力ポートにLEDのカソードとアノードの両方を接続して
数字、もしくは文字のように表示させる方法。
ただし、制御がそれなりに面倒な部類で、
プログラムでは配列をつかって
セグメントのON,OFFを繰り返す形で表示させます。

PSoC5LPではどうなのかと言うと

配列云々を使ったりはしません!

では、どうするのかと言うと
LEDドライバーコンポーネットを使います。
「Display」のファイルの中のから「4 Digit 7-segment LED Driver」を選びます。
(これと近いコンポーネットがあると思うが、このタイプを使ってほしい。)



画面にドラックアンドドロップするとこんな形となります。



それでは、LEDドライバーの設定を開けてみましょう。


中の設定は、左側に「ナンバーオブセグメント」
「ナンバーオブコモン」と言う表示があって
右側に「タイミング」「ブライトネスコントロール」と言うのがあります。

「ナンバーオブ***」はセグメントの数と桁の数の設定で
アクティブLowとhigtは7セグメントがアノードコモンか、
カソードコモンなのかによって違います。

アノードコモンである場合はこのままで良いですが
カソードコモンである場合は2つとも逆にします。
また、トランジスタ等でドライブ回路を組む場合にも調整が要ります。

ブライトネスコントロールを使う場合では
タイミングの数値を下げる必要性がありますが
今回はカソードコモンの7セグを使って、
ブライトネスコントロールを使わないので、このまま。
「OK」をクリックして閉じましょう。

閉じたら、今度は配線をしましょう。
配線は少しヤヤコシイですが、カソードコモン4桁の場合を例にやってみます。
アノード側のピンをA~DPまでを抵抗をはさんで適当なピンにつなぎます。
抵抗はLEDに対して1mAになるように選びます。
(電源電圧-下がった電圧/0.001=抵抗値)
コモン側も同じように適当なピンにつなぎます。
この時に必ずつないだポート番号(ピン番号)と7セグの何番ピンを使ったか
のメモしてください。

繋げたらピンアサインの画面を開いて設定をします。
今回は「Name」の行を見ながら作業をしていきます。

NameにはそれぞれCom[0]Seg[0]と言うような事が書いてあります。
コレが重要な目印になってくれています。
図を見ていただきたいのですが、



7segAの所(11番め)につないだPSoC5LPのポート番号を
Nameの行がSeg[0]の所に設定をしてあげます。
7SegBの所(7番目)につないだPSoC5LPのポート番号を
Nameの行がSeg[1]の所に設定をしてあげます。
という形で7segAGseg[0]seg[7]に一致するように設定します。

コモン側の設定は4桁の左側が基準になるように設定をしていきます。
たとえば4桁の左側、一桁目のコモンの12番目につないだPSoC5LPのポート番号には
Nameの行がCom[0]の所に設定をしてあげます。

こう言う形だとちょっと面倒かもしれませんが
ポートごとでの設定と言うことも出来ます。今回は省略させていただきます。

設定が出来るとこんな感じ。



ここで一度、コンパイルをしましょう。
コンパイルが出来たら「main.c」を開いて

3行書きます。




LED_Driver_1_WriteStering7Seg()では「C」の文字がどうしても小文字で表記されるので
LED_Dreiver_1_Write7SegDigitHex()を使って16進数表記で「C」を表記しています。

もう一度コンパイルして書き込みましょう。
そうしたら7セグLEDに「PSoC」と表示されますね。
そうしたら成功(/・ω・)/

PSoC5LPではトランジスタ等が必要にはなりますが、16セグまで同じやり方で動きます。
16セグのLEDが手に入れば、表記の幅も広がって表現が豊かになりますね。

どうでしょう?arduinombedでは出来ない芸当です。
またカメラを通して見てみるとダイナミック点灯で起きるチラつきがありません。
CPUが最低限の事をしていませんから当然ですね。

~~~~ソース電流とシンク電流について~~~

今回、LEDをつなぐ際に
1mAになるように抵抗を選んでください」と書きました。
これはPSoC5LPに吸い込める電流値が「8mA」と決まっているためです。
吸い込める電流をシンク電流
出せる電流をソース電流
と言ってどのON,OFFするような回路にも出てきます。




PSoC5LPではシンク電流が8mA、ソース電流が4mA
決まっています。
SIOと言うデジタル専門のピンを使えばシンク電流を25mAまで拡張出来ます。

2014年9月24日水曜日

PSoCまつり、のその後…。



学生やホビースト、勉強家の会社員へ向けたセミナー
PSoCまつり2014が去る2014年9月20日、スイッチサイエンス大会議室で行われました。
参加者数は、関係者を含め22名の皆様に参加していただきました。
Twitterでは#PSoC_fest ハッシュタグ付きのつぶやきが20程度ありました。




プレゼンテーションの内容
       http://www.slideshare.net/hatris/p-so-c-39470696

PSoC5LPの体験コーナーでは
タクトスイッチを押したらLEDが消える
と言うプログラムを行いました。
体験した方は感動していたみたいです。

私が用意した、皆さん用の「お土産」
その「お土産」の正体は
CY8CKIT-050です。
ま、PSoC5LPの開発キットですね。

PSoCまつりは大成功を収めて
無事におわったとさ。
ちゃんちゃん

2014年8月23日土曜日

「PSoCまつり2014」


2014年9月20日(土)に「PSoCまつり2014」を開催します。

スイッチサイエンスの大会議室にてプレゼンター数名に
PSoCに関する情報や使い方を紹介して頂きます。

数名ではありますが、体験コーナーや
豪華なお土産会などもあります。

是非、ご参加ください。

詳細、登録は下記よりお願いいたします。

2014年8月1日金曜日

sprintf(数値文字変換)のfloatが変換されない場合

今回はトラブルシューティングのブログですね。

PSoC Creator3.0以降で
数値文字変換のSprintf();を使う場合
floatでの変換をしたくても、出力されない場合があります。

これは、リンカーが抜けていた事によって
起こるようです。

・解決手順
メニューバーにある「Progect」から「Bild Settings」をクリックすると


セッティングのウインドウが出てくるので
「ARM GCC」ツリーにある「Linker」の中の「Command Line」をクリックします。
クリックしたら、「Custom Flags」の隣に

-u _printf_float

と入力して 「OK」をクリックします。

これで、もう一度ビルドすれば解決完了!

早めに更新プログラムが出てほしい限りです(泣)

2014年7月15日火曜日

マイコンのADCを知ろう~PSoC5LPのADCを使えるために~

PSoC5LPのADC(アナログデジタル変換器)の使い方を書こうと
思っていたのですが、どうしても普通のマイコンのADCを知らないと

ADCの設定が解らぬ~
とか
ADCが3chしかないの?増やせないの~

と苦しむと思います。
まずは、通常のマイコンで使われているADCを知ることで
こういった事に苦しまずに済みます。

さて、大抵の場合、マイコンに搭載されているADCは
アナログ配線の
切り替え機(アナログマルチプレクサ)が1個 と ADCの本体が1個

の2つによって構成されています。
またADCの本体も1種類であることが多いです。

たぶん
「え?ADCが8chってことはADCが8個あるんじゃないの?」
と思うでしょう。
実はたいていの場合は配線の切り替えを高速にすることによって
8chあるようにしています。
なので、同時に変換しているわけではないのですね。

「え?ADCに種類があるの?」
と思うでしょう。無理もありません
普通こんなところで、この話はまず出てきません…。

さて、ADCには4つの種類があります。
並列型ADC
逐次変換型ADC
サブレンジング型ADC
シグマ・デルタ型ADC

通常のマイコンで搭載しているのは逐次変換型のADCです。
PSoC3,5LPでは2種類でシグマ・デルタ型逐次変換型
2種類が搭載されています。(逐次変換が搭載されていない場合もある)

「シグマ・デルタ型と逐次変換型をどっちがイイの?」
となりそうですが、単純にどっちがイイとは言えません。

デルタシグマ型
メリット:分解能が高い
デメリット:変換スピードが遅い

逐次変換型
メリット:変換スピードが速い
デメリット:分解能が低め

TIの説明ページに図があるので、それでイメージをつかむのが良いでしょう。


PSoCLPでは、設計の必要性に応じて、
変換スピードを優先するかそれとも分解能を優先するか
どちらを優先した方がいいかな?を考えてコンポーネットを選びましょう。

今回はなんで通常のマイコンのADCの話をしたかと言うと
PSoC5LP、PSoC3は強い柔軟性のためにADCと切り替え機が別々になっています。
そのため、通常のマイコンでのADCがどの様な構成なのかを
知る必要性がありました。
別々になっているからと言って、不安になる必要はありません。
相も変わらず、マウスでコンポーネントをポンポン入れれば平気です。

Lチカの次は?

少し前、某掲示板(2chでは無い)の某書き込みに

「LEDチカチカまでは丁寧だけどそれ以降が無い」
「本当に初心者向けなのか?」
「初心者を想定してないんじゃないか?」

と言う書き込みを見ました。

私はこれを見て、ハッとしました。
確かに、作ってみたいなぁ…っと思っても
どこから手を付けていいか判らないという
事のは、不親切だなぁと思いました。

そこで、
内容として取り上げる事はできませんが
どういう風に進めたらいいの?と言うのは書こうと思います

ステップとしては
ステップ1 LEDのチカチカ
      目的:使い方を知る。
ステップ2 スイッチを使う
           目的:入力を知る。数値について知る。if文、switch文を知る。
ステップ3 バーLEDを光らせて、光り方を変える。(左右に振る)
      目的:for文、カウントを知る。
ステップ4 1桁7セグメントLED
           目的:Void()、配列を知る。
ステップ5 サーボモーター
           目的:PWMを知る。
ステップ6 DCモーター
           目的:ドライバーICを知る。
ステップ7 半固定抵抗のアナログ値を読む
           目的:ADCについて知る。
ステップ8 シリアル通信をする。
           目的:UARTを知って、パソコンに文字や数値を出せる。
ここまで出来てしまえば、十分に使いこなせていると思います。

勧めるヒントになったら幸いです。