ラベル PSoC3 の投稿を表示しています。 すべての投稿を表示
ラベル PSoC3 の投稿を表示しています。 すべての投稿を表示

2013年2月22日金曜日

KURUMIとPSoC3備忘録\(^o^)/

あ~、ちょっと間隔があいちゃいましたね。
もうすぐ3月だしぃ。
仕事がらみで、バタバタしてたのはいつものこととして、
がじぇルネプロジェクトのRL78duino(以下GR-KURUMI)のプロデューサミーティングに
参加したり、といろいろおもちゃも増えつつあります。

GR-SAKURAはArduino互換のRX63N利用の高機能ボードとして
やっと認知されつつあるようですけど、情報が散逸がちで、
ライブラリも隠蔽状態で、いまいち使い込むには???なかんじ。
それでも展示会なんかで、

『関西ではやらないの?なんで~~』

って、つっこんでいた手前、RL78版で参加せざるをえない?雰囲気に
なってて、2月3日に大阪ミーティングに参加してきました。


GR-KURUMIはRL78/G13をのっけた、Arduino Pro Mini互換の
ちっこい省電力マイコンです。
昇圧コンバータものっけているので、乾電池駆動できるというのが
ウリでしょうか。
SparkfunのFT232RLのアダプタでシリアル通信と書き込みができます。
Webコンパイラでコンパイルもできますが、GCC環境なのでe2studioで
ローカル開発したほうが気持ちいいかも、です。
といっても、GDB+E1でのデバッグはまだまだ不安定なので、
デバッグ環境がととのっている、とはいえないようですけど。




とりあえず、大阪の第2回ミーティングがせまってきているので
mbed用につくっていたライブラリをKURUMI用に改変して
うごくことだけは、確認しました。
案外簡単にうごくのね。
トラブルのほとんどは自分のIOまわりの設定ミス。
やっぱりちゃんとメモしてつくらんとあかんなぁ。

で、さすがにmbedほど高速にはうごかないので、定番のねぎミクも
振っているのがみえるし(汗
とにかく、ライブラリとしてうまくまとめて公開準備しなきゃ。


閑話休題。

やっとPSoCの利用のお仕事、第一弾がきまったのでシコシコとテスト
をつくっています。
ひさびさにつかってみたらKEILのライセンスがきれてるのにうまくUPDATEできない
とか(これは新規インストールしたらできた)、いろいろあったけど、
とにかく、使えるようにはなった(汗

出荷用のボードを起こす時間も費用もないので、CQ出版の

なるものを購入。5040円也。
でも、Amazonで発注してから、
USBコネクタとかいろいろないことが発覚。
秋月でパーツキットも購入。
このとき、この本まで扱っているのに気がついてorz
最初っからこっちで買っとけばよかった。。。。。


このあと、コネクタとか実装するわけだけど、
秋月キットのUSBコネクタが小さくなってて、
ボード端よりかなり内側に実装することになってる。

これでは、USBケーブルがささらない!!
ということで、ヤスリでゴリゴリと削ってなんとか
ケーブルがささるところまではもちこんだけど、こういうのってなんとかならんかったんか?


でも、ここからはおもしろい!!でも、また忘れると困る内容を
備忘録としてまとめておく!!


まず、PSoCのプロジェクトをつくったときに、拡張子が、

cysch ==> スケマティック=回路図面
cydwr  ==> 本体の基本設計

ができるわけだけど、cydwrファイルが重要。普通にクリックすると
Pinsがでてきて、定義した信号名をIOピンに割り付けられるわけだが、
この下側にあるタブで、全体のクロックをまずは調整する必要がある。
これに気がつかないと、せっかく高速のマイコンなのに、3MHzで
うごかすとか、変なことになりかねない。

cydwrのpins画面。下にあるタブに注目すべし!!


















下にあるタブで、clocksをおして、このなかでダブルクリックすると
グラフィカルな画面になる。

clocks画面。実際に変更するには
IMOなどの文字部分をダブルクリックする!



クロック周りの実体設定部がこれ。
ここで、設定しとかないと...

































XTAL:外部供給クロック
IMO :オンチップ高速オシレータ
ILO :オンチップ低速オシレータ
をベースとして、つくるわけだけど、CPUに入るバスクロックと
マスタークロックはやっぱり24MHzくらいにはしたいよね、というわけで
とりあえず、IMOを24MHzにして、PLLなんかも分周比1で、そのまま入れる
ように設定。低消費電力なんかを目指すなら、ここらあたりをうまく調整
しないと!ってことですよね。

さて、ここが設定できたら、もうあとは設計にはいっちゃえばいいわけですな。


マイコンの初歩としてはLチカははずせへんでしょ?
ってことで、サンプルはLチカ。

まずスケマティックをつかって
回路を構成するわけだが、
ここに
 Pin_1
をおいて、cydwrのpinsで任意の場所に割り付けて、
まずはBuild。
そうすると、利用コンポーネントのソースが生成されて
Cから扱えるコンポーネントAPIもつくられる。
要は、ハード構成を変更したら、まず、Build!ってのを
習慣化しないとだめなんだな!

で、あとはmain関数のなかで

==================================

void main()
{
    int clk=0;

    Pin_1_Write(clk);
    clk ^=0x01;
    for(;;){
        Pin_1_Write(clk);
        clk ^=0x01;
        CyDelay( 500 );
    }
}

==================================


とでもすれば、500msごとに点滅する回路の完成。
なるほど。

でもね、CyDelayっておもしろくないな~ってことで、
ほかのマイコン同様、タイマーをつかいたかったので
それでつくったのが、この回路。


上側の回路がLED点滅回路。
下はUARTのテスト用回路.



















タイマーの設定画面。
供給クロックを変えると勝手にperiodも
計算してくれるので、超簡単





















分周CLOCKコンポーネントで10kHzつくってタイマーに入れ、
タイマーをダブルクリックすると、あとは任意の時間を設定して
コンペアマッチ出力(tc)を出してくれます。
ただ、でてくる出力は当然クロック1発分だけですから、外側に
D-FFでラッチするようにしてやると、ソフト挙動に関係なく
光らせることができますね。
この回路ではisr_1という割り込み出力もつくってますが、割り込みを
つかうと、レジスタ待避などのいらない挙動がつくので、ハードウエア
で処理できるならそれにこしたことはないよね!
ってのがわかる回路になってます。

ついでなので、UARTもやってみた。
IOはどこでもいいので、RX/TXをわりつけてUARTの設定で
回線速度とかをごそごそ設定。



おもしろいのはBufferサイズが
可変なこと。

通常のマイコンだと、UART設定
ができても、所詮ダブルバッファくらい
しかないので、受信割り込みで
FIFOをつくって処理してやらないと
だめだったりと、
結構面倒くさい、というか、
ここらが、ソフト屋さんの腕の見せ所だったり
したわけだけど、
PSoCの場合は最初から、バッファサイズ4。任意に増やせるので、僕の場合は
128にしてみた。
こうすると、割り込み&FIFOなんてことしなくっても大丈夫だったりするのだった。

ここまで簡単にUARTをつかえるのってめずらしい。

ちなみにUSBFSでUSBーUARTの機能もあるのだが、
基本的に同じつかいかたでいけるのはすごい。
とりあえず、ここまでのソースを添付しておく。

なんか、おもろいわ~~。


==========================


/* ========================================
 *
 * Copyright YOUR COMPANY, THE YEAR
 * All Rights Reserved
 * UNPUBLISHED, LICENSED SOFTWARE.
 *
 * CONFIDENTIAL AND PROPRIETARY INFORMATION
 * WHICH IS THE PROPERTY OF your company.
 *
 * ========================================
*/
#include <device.h>
#include <stdio.h>

// 割り込みプロトタイプ宣言
CY_ISR_PROTO( ISR_Interrupt );

// タイマー割り込みの実体
CY_ISR(ISR_Interrupt)
{
}

void main()
{
    /* Place your initialization/startup code here (e.g. MyInst_Start()) */
int clk=0;
char c;
int i;
int rcount;
char  buf[50];

isr_1_StartEx(ISR_Interrupt) ; // タイマー割り込みを割り付け

Timer_1_Start();
UART_1_Start();
UART_1_ClearRxBuffer();

CyGlobalIntEnable; // 割り込み許可

//Pin_1_Write(clk);
//clk ^=0x01;
    for(;;)
    {
        /* Place your application code here. */

rcount = UART_1_GetRxBufferSize(); // 受信バッファにあるサイズを取り出す
if ( rcount ){
for(i=0;i<rcount;i++){
c = UART_1_GetByte(); // GetCharは0を除外するのでつかわない
sprintf( buf, "%c = %02x\r\n", c, (int)c );
UART_1_PutString( buf );
}
x = 0;
}
//Pin_1_Write(clk);
//clk ^=0x01;
//CyDelay(500); //ms待ち
//CyDelayUs(500); //us待ち

    }
}

/* [] END OF FILE */


==========================

2012年9月10日月曜日

PSoC3 やってみた。

ご無沙汰しています(汗

ここんところ、いろんな講座や講習会にでることが多くて
意外に楽しんでいたりします。

GENET 画像処理分科会 では、ひさびさ?にガッツリ受講生していますし。

テクノス株式会社の利弘さんが講師なのですが、。話慣れてるのか、
キャラが立ってるのもあって、おもしろく聞かせてもらえてます。
まだ、第一回が行われたばかりで、本題には入っていないわけですが
のんびりとでいいので、しっかり教えて欲しいところです。
僕的には、

  1. アルゴリズムや手法の組み合わせの妙
  2. 実装事例
あたりが、ざっくりでもいいのでみれればいいなぁ、とおもうのですが
さすがにここらあたりは、経験的なものだろうし、仕事のキモになる部分でしょうから
なかなか教えてもらいにくいところかもしれません。
まぁ、ゆっくり、落第しないようにがんばりたいところです。


閑話休題。

7月に、サイプレス社のPSoC3ワークショップに行ったわけですが
実際に、手元のボードで、チコチコと遊んでみています。
ワークショップのお題を適当にやってみたら、おおむねわかってくるんですが
逆に言うと、あまりにも従来版の考え方とちがうので、「???」ってなるカンジですね。

PSoC Creater2.0 を立ち上げて、まずは利用コンポーネントをスケマティック画面に
貼り付けて配線しちゃいます。




画面では3つのブロックでつくっています。枠囲みはとくに意味はないので
ほんとうに図面チックに進められます。(ただし、日本語入力が×なのはご愛敬...)
今回は、ワークショップの例題どおり、
1.ボタンの割り込み取得でLEDの点灯
2.VRの値に応じて、LEDをPWM点灯
3.VRの設定値をLCDに表示して、バーグラフ的にも表示させる

っていうのを一度に実装しちゃおう!的内容です。
このうち、2についてはハード的にPGAがやってくれるので、コードが
ありません。(初期化&開始処理のみ)
これをソフト的にやろうとすると結構面倒くさいので、PSoCの面目躍如といったところでしょうか。





で、これがソースコード一式。
メインループ内ではADの変換完了をまって表示に展開しているだけです。
う~ん、お手軽感が伝わらないけど、まぁそれなりにおもしろいなぁと。
今回はAD値を12bitのΔΣにしたけど、20bitまではいけるのでいろいろ
おもしろいことにはつかえそうなカンジですね。

実際に動作させている写真はこれ。



基板左端のVRを回すとLEDがそれに応じて光るわけです。
そのときのVRの取得値はADで取り込んでLCDに表示すると。


さて、実際にここまでやってみて、おもしろいとはおもうんだけど、
スケマティックで変更したり、ユニット追加してから、ソースツリーに
対応ソースが生成されるまでに差があって、そのままではうまく追加されない
ことも結構あって、関数名をさがせないことが結構あったりします。
まぁ、スケマティックを変更したら、その場で一旦Buildしちゃえば
生成されるわけだけど、それなりに時間がかかるので、もうすこしなんとかならないかなぁと。

ま、PSoCデザイナーのダメダメぶりとはひと味ちがうかんじで、これなら許せる感じに
しあがってますね。
あとはもうすこしわかりやすい、チュートリアルがそろってくればいいのかなぁ。

あ、そうそう、デバイスの価格が高いのもちょっと問題かもしれず。
いまつかってるPSoC3の最上位版だと2500円くらいかかるので
安いCPU+CPLDとの差別化がうまくいくかどうか、が問題かもしれませんな。

2012年6月16日土曜日

ET West 2012 雑感 (2012.06.18追加)

先日、書いたとおり、6月14、15日の両日インテックス大阪にて
ET West2012 (組込み総合技術展 関西2012)
が開催されていました。
で、うちの会社もワイヤレスコントロール研究会の一員として
出展者として参加していました。
例年は結構人出がすくないのですが、今年は初日午前からガシガシ
人がきてる感じで、なかなかの滑り出し。
奈良高専の土井先生も同感だったようで、いわく
「カンファレンスもテクニカルセッションもタダにしたからじゃないか?」
とのことでした。
なるほどね。たしかに、ぼくも無料だから、ってんで
TS-1 ドライバ開発実践的手法 ~Android最新バージョンへの適用で注意すべきポイント~
ってのをうけたんですよね
内容的にはまぁまぁ、ってか、そんなもん、って感じだったけど(@@;)
みんなメモメモってかんじだったけど。。。。
ま、評価はいろいろなんだろね。
で、うちらの出展は、
学研の大人の科学のお掃除ロボットに、XBee(ZigBee)のユニットを乗っけて、
電池電圧と位置情報をXPortPro(uCLinux)で改修、2面の部屋を判断して
電灯をつけたり消したりする、っていうデモをやりました。
あまりにもあっさりさんなので、PCでも観測制御、っていう展示でした。
もともと岡崎ゼロエミッションでの某所の電力量収集システムを流用したので
応答性はいまいちだったんですが、ま、そこそこ安心してつかえました。
さすがに駆動部はおもちゃなだけあって、2日目にはギアがガシガシ音をたてた
けどね(^▽^)
というわけで、速報的にはこんなかんじで。
続きは次回ということで。

(2012.6.18  以下追加)





我が「ワイヤレスコントロール研究会」の展示ブースの写真です。
2台のお掃除ロボットがみえますか?


















外部接続のモニタ出力をアップにしたものです。
盤面上の左右領域を移動すると画面上の掃除ロボットくんも
するする~~~っと移動して、ランプが連動する、というデモを
そのまま表示しています。
画面下段のグラフはロボットの動作電圧の推移です。
1.7Vくらいでブラックアウト、となるので、電池交換で復帰した
姿がわかります。ざっくり、2時間半弱というのがエコじゃなかったですけど(汗
この画面の上側には電灯と扇風機を設置したコンセントの電力量
推移と、積算電力がグラフ表示されています。

さてさて、1日目はメンバーがぼくともう一人だけだったので
ほぼフルで対応してたんですが、2日目はもう一人が来てくれたので
いろいろ遊びほうけていました。

まず、ザイリンクスにいって、QFPなくなってどうすんのよ!と苦情申し入れ。
さすがに東京エレクトロンさんは結構聞き流してましたけど。
ツールも7シリーズからはPlanAhead系のVivado(ビバドってよむらしい)に
移行します!っていってました。
たしかにロジック合成された結果はかなりいい感じで配置されてたみたいだけど
「それよりもVHDLの構文解釈がVerilogなみに落ちてるほうが問題だ!」
と釘をさしておきました。
実際、シンタックスの評価がガタガタ(ISE13.1)で、ビット長があわなくても
エラーが吐かれないのには閉口します...
わざわざ悪い方にあわせなくてもいいのにね。
VHDLのいいところないじゃん。

つぎに対極のAlteraへ。
こっちは小コマのわりにはまあまぁのカンジ。
SOPC BuilderがQSysに変わって、ちょっと使いやすくなったよ!
ってのがウリだった模様。
こちらは結構好印象だった。
やっぱAlteraのほうがええんだろうか?う~ん。
でもね、WebPackでの操作性はザイリンクスのほうが一枚上手な感じなんだけど。
ま、徐々にこちらに動くってのもありかもしれず。
ちなみにノベルティ、くれた。(わ~い)
CamiAppだったの!!素直にうれしい。

そのお向かいにいたのはDigiとルネサス。

ルネサスはSmartAnalogとLED制御を得意とするRL78の小ブース展開だった。
この当日、SmartAnalog Web シミュレータ ルネサスVAが公開されていたわけだけど
これも実物がみれました。
オリジナルのサンプルソフトとほぼ等価なイメージでま、こんなもんかなと。
CubeSuite+との連携もうまくいっているようなサンプルがあったけど
実際にでてくるには少し時間がかかるっていってたな。
期待してるのにぐずぐずしてると、タイミングのがしちゃうのに。
密かに期待してたがじぇルネのGR-SAKURA関係はまったく紹介すらなかった。
大阪にも進出してほしいなぁ、と伝えておいたけど、たぶんだめなんだろうなぁ。
頻繁に東京までいってられないもんね。

Digiは相変わらずのXBeeの展示だった。
岡本無線さんとのコラボだったけど、まぁこんなもんだろうと。
XBee Wifiもでてたけど、実際のコマンド群とかやってくれたらよかったのに。
ま、ここはいつもこんなもんだろうけど。

うちのXBeeのボードにのっけるってのが最短のテストなんだろうけど、
Twitterみてると結構電源周りが鬼門みたいだし、もうすこしあとにならないと
採用しにくいかもね。
ま、要注目ではあるけど。

意外なものといえば、株式会社デバイスドライバーズ
いろんな展示会でいつも、ここにはつかまるんだけど(笑)
ことしも日高氏が、憎めない髭面で...(笑)
EnOceanの315MHzの無線ユニットをXBeeのPINコンバチボードに乗っけた
ものを出展してました。
315MHzなら、使いやすい周波数なんだけど、よ~~く聞くと
半二重通信、というか基本は1方向通信でやろうというユニットのよう。
単純に無線スイッチとしてなら、これで十分だけど、データのやりとりを
やろうとすると、結構面倒なかんじだった。
ま、これはこれでニッチな市場でいいんではないかなと。
で、こっちがもっと気になったのは、ARM+.NET MircroFrameworkの展示だった。
前に、SH2のボードへのポーティングも書いてらっしゃったけど、
今月号のCQ出版 インターフェース誌にも記事が載るとのこと。
こいつも要チェックなカンジでした。
ボード的にはたぶんコレ。ChipworkX Development System


日高さ~ん。HPみたらすぐわかる!っていってたやん。
全然わからん。
FEZばっかりで。
というわけで、マウザーでも見つけた。やっぱりこれ。
39900円はいいとして、マウザーで、製造中止ってのが気になるよね。
.NET MicroFrameworkなので、C#で開発できるのが最大の売りだけど。
前のSHの記事は微妙にわかりにくかったから、今回は期待してたりするわけです。


あと、何でもないけど、ユニダックスがアヴネットに吸収されてたのにはおどろいた。
Kinectのワークショップ、いきたいなぁ。


PS.
なら高専の土井先生からの紹介で、
サイプレスの田中さんと、名刺交換。
7月11日(水)にPSoC3のワークショップをおこなう!、ということだったので
とりあえず参加の方向で調整中。
当日さんざん、クダまいてごめんなさい。>田中さん