« 2010年9月 | トップページ | 2010年11月 »

2010年10月

2010年10月31日 (日)

I2C通信について

I2C通信をしたくて調べて、いろいろ少しづつ分かってきたのですが、まだわからないところがあります。
だれか教えてください。お願いします。

まず、Arduinoでのことなのですが、Wireライブラリを使ってマスタの場合です。
Wire.recuestFrom(address,quantity);関数のことなのですが、
ここでいう要求するってどういうことでしょうか?

というのは、マスタはまず最初にスレーブのアドレス(7bit)を送信して、R/Wを送信しますよね。
R/Wのところを1にしてやると、ACKの後にスレーブからデータが来ますよね。
そのあとに何バイト受信したらACKを出さないで停止条件を出すんですよね。
要求するとはこのことなのですか?
パラメータのquantitiyつまり要求するデータのバイト数っていうのは、(マスタが)ACKを出さないようにするまでのバイト数を示すのですか?
つまり、「何バイト欲しい」っていうのをスレーブに伝えるのではなく、何バイトか受信したら強制的に終了するためのバイト数なのですか?

下はI2Cの仕様書です↓(クリックすると拡大します)

I2c3_2

もう1つ疑問があります。
PSoCでのI2CHWのAPI関数についてなのですが、(スレーブに設定した場合)

①マスターからスレーブ(ここでいうPSoC)への書き込み
PSoCにとっては読み込みなのに関数がWriteって書いてあるそうなのです(ややこしい)。
PSoCがマスタからの信号を自動的に読み取って、I2CHW_1_bReadI2CStatus();がI2CHW_WR_COMPLETEに変化する
→I2CHW_1_ClrWrStatus();する
→I2CHW_1_InitWrite(バッファ名,バッファサイズ);で「バッファ名」にマスタから受け取った信号が入る
→「バッファ名」を読み取ったらOK!
 という流れで合っていますか?

②スレーブ(ここでいうPSoC)からマスタへの読み込み
PSoCにとっては書き込みなのに関数がreadって書いてあるそうなのです。
例えばbuf_rdという変数をつくる
→I2CHW_1_InitRamRead(buf_rd, バッファサイズ);でRAMに移しておく
→マスタから送信を要求されたら自動的にRAMに入っているのを送信する
→I2CHW_1_bReadI2CStatus();がI2CHW_RD_COMPLETEになる
という流れで合っていますか?

どなたか知っている方、コメントしていただけたら幸いです。

2010年10月30日 (土)

PSoCマイコンのユーザーモジュールの日本語データシートがあるではないか!!

題のとおりPSoCマイコンのユーザーモジュールの日本語データシートの居場所を見つけました。
場所は、
Program Filesのフォルダの下のCypress\Common\CypressSemiDeviceEditor\Data\Stdum\何か\何か_ja.html
です。

「はじめてのPSoCマイコン」には英語のデータシートの参照方法しか載ってませんでした(ぼくが見た限り)。
他の皆さんは日本語データシートの居場所を知っているのですかね?

ぼくは英語しかないんだ・・・と、感じつつ、気合を入れて、プリントして和訳しようとして、プリンタのつながってるパソコンにUSBメモリ経由で移そうと思って(ドライバ入ってるはずなのになぜかそう思った^^)、それで、英語のデータシートの入ってるフォルダをみると・・・I2Cm_jaというのがあるではありませんか!
jaって、もしかして日本語?
と思って見てみると、日本語でした。という流れで発見!

早いうちに気づいててよかったです!

センサープロジェクトに参加した

SSC(Super Science Club:部活とは違う)っていうのがありまして、いろんな講座があって、センサープロジェクトっていうのに参加しました。

1回目の今日は、可変抵抗と固定抵抗を直列につないで、固定抵抗の電圧をみるという、とても基本的なものでしたが、発表をしまして、内容を理解することとは違った難しさが、発表することにはあると感じました。

発表で思うように伝わらないのは次の2つがあるように思います。
①分かっているのに文章がぐちゃぐちゃになる。
②分かっているつもりで実は頭の中がきちんと整理されていない。

発表を通じて自分の頭の中を整理できるということが発表のメリットであるというふうにも感じます。だから、学会とかいうものがあるのかもしれません。

①を克服するにはたぶん慣れが必要ですね。
いろいろ発表する機会を作って、うまく文章にまとめられるようになりたいと思います。

PSoCでのビットフィールド

ぽよこまだんなさんのおかげでPSoCでのビットフィールド定義ができました。
これでビット単位でのポート入出力が分かりやすくなりました。
ありがとうございました。

ロボカップジュニア京都ノードまで4ヶ月を切ったことを知って少しあせってきました。
ロボットの想像だけで全然進んでいないのです。
がんばります!

にほんブログ村 その他趣味ブログ 電子工作へ
にほんブログ村

2010年10月29日 (金)

PSoCでLEDチカチカ

「PSoCマイコン・スタートアップ」という本に付属されているCY8C21434が実装されている基板を使ってLEDをチカチカさせてみました。

まずはPWMブロックを使って500msごとにチカチカさせました。

次に、本には書いてありませんがいろいろやってみようと思ってPWMブロックを2個使って
500ms消灯→500msの間5回点滅→
と繰り返すようにブロックを配置してみました。プログラムはPWMブロックを開始させるだけです。

さて最初点灯してしまうのです。
何でだろうと思ったら数Aで習ったド・モルガンの法則を忘れていました。
~A_OR_~BはA_NAND_Bと同じなのです。A_NOR_Bは~A_AND_~Bと同じです。
原因は~A_OR_~BとA_NOR_Bが同じだと誤解していたからでした。

まさかここで数Aが役に立つとは・・・

あとたとえばロボットが右前にボールを発見したときに、右に行く場合、ボールの真後ろまで距離は、発見時のボールまでの直線距離と角度とcosθを用いて求められますね。(文章で分かりにくくてすみません)

眠いのでこの辺で・・・

にほんブログ村 その他趣味ブログ 電子工作へ
にほんブログ村

2010年10月28日 (木)

PSoCマイコン

やっとPSoC Designerを動かしてみました(まだパソコン上でしかやってない)。
ブロックでいろいろ設置できて感動しました。
学研の電子ブロックのブロック1つ1つを超高機能にしたみたいな感じです。

ちなみに「はじめてのPSoCマイコン」の
p.79 リスト3-2 下から8行目の「poutdat &= LED1;」はやはり誤植で
「poutdat &= ~LED1;」が正しいようです。

IOポートの入出力はANDとORでいちいち書くのが面倒なのでArduinoみたいな関数を自分で作ろうと思います。
自分で見やすいほうがいいので。

あと英語は大事ですね!
データーシートが分かりません!
いちおうゆっくり辞書を使いながら読めばわかりますが、日本語と同じようにわかるようになりたい・・

2010年10月27日 (水)

poutdat &= LED1;ってどういうこと?(PSoCマイコン)

「はじめてのPSoCマイコン」のCD-ROMに入ってるPSoC Programmerをインストールした後PSoC Designerをインストールしようとすると PSoC Programmer 3.10が入っていないのでインストールできません みたいなのが出てきました。
たしかにCD-ROMに入ってるのは3.06でした。
アンインストールして、PSoC Programmerをインターネットから最新の3.12バージョンをインストールした後に、CD-ROMのPSoC Designer をインストールするとできました。
CD-ROMは間違って入っているのでしょうか?それともパソコンとの相性の問題なのか?
どっちでもいいですがインストールできたのでよかったです(でもまだ動かしてない)。

本の超音波のコーナーは何回も読むとだんだん分かってきました。
最初は疑問だらけでしたが・・

あとこの本を持っている方がいらっしゃったらお聞きしたいのですが、P.70のリスト3-2の下から8行目の「poutdat &= LED1;」ってどうゆうことなんですかね?
その前の行の「poutdat |= LED2;」は分かったんですが・・(きちんとLED2のトコだけ1になる)

「poutdat &= LED1;」って「poutdat = poutdat & LED1;」だと思うんですが、LED1って二進数で00001000なので、LED1のビット(つまり4ビット目)以外が0になってしまいません?
ってことはSW1とSW2のプルアップが消えません?

「poutdat &= ~(LED1);」ってしたらうまく4ビット目だけ0にできる気がするのですが・・・( ~ とはNOTのこと)

動かしてもいないのにこんなこと言ってすみません。自分の間違いかもしれませんが分からないのです。

にほんブログ村 その他趣味ブログ 電子工作へ
にほんブログ村

2010年10月23日 (土)

京都大学宇治キャンパス公開へ行ってきた

電子工学やロボットとはあまり関係ありませんが、京都大学宇治キャンパス公開2010へ行ってきました。
ぼくは公開講演会と「加速器でつくるレーザー」と「慣性静電閉じ込め核融合装置」というのを見てきました。
パンフレットです。

公開講演会では1つ目と2つ目を聞きました。
1つ目は「宇宙から見る地球の大気」というテーマで、人工衛星と地上観測の違いとか気象観測の歴史とかを聞きました。
人工衛星からどうやって大気のある物質の濃度を測定するのかなと思ったら、電波でいろいろすると、測定できるそうです。
2つ目は地域の景観の美しさについてから始まり、過疎についてなどを聞きました。

展示のほうでは、まず「加速器でつくるレーザー」というのを見に行きました。
ていねいに説明していただき分かりやすかったです。
電子を光に近い速度で行く軌道を磁場によって揺らしてレーザー光を出すそうです。
波長が自由に変えられるそうです。
とっても広くて、莫大な予算がかかっていそうな感じでした。

次に総合展示のプラズマ閉じ込めについて聞きました。
核融合発電までの道のりは長そうです。
現段階では閉じ込めるだけだそうです。
でも、閉じ込めるのではなく、レーザーを当てる方式の核融合発電もあるそうです。

最後に「慣性静電閉じ込め核融合装置」というのを見てきました。
こちらも核融合ですが、かなり小規模で、発電をするのではなく、中性子をだして地雷から返ってくる電波を測定して地雷発見器を作るための核融合だそうです。

どれもかなりおもしろかったです。
詳しく説明してくださった方々ありがとうございました。

さて宇治までの電車でPSoCの本を読んでました。
はじめてのPSoCマイコンっていう本なんですが、とても分かりやすいです。
42151l
PSoCマイコンのすごさに感動しました。
アナログフィルタとかもマイコン内部に簡単に設置できてすごいです。
時間がかかりそうですが、がんばって干渉防止のための40kHz以外の超音波センサーを作ってみたいと思います。

にほんブログ村 科学ブログへ
にほんブログ村

2010年10月22日 (金)

定期テスト終了!&アクセス数5000突破!!

定期テストが終わりました~!

アクセス数が5000突破しました!
これからもよろしくお願いします。

にほんブログ村 科学ブログへ
にほんブログ村

2010年10月 9日 (土)

オフライン環境でのmbed

mbedとLPCXpresso(LPC1768)はマイコンが同じなので開発環境も同じと思っていたら、全然違いました。
mbedのクラウド上でコンパイルできる関数はmbed専用で、LPCXpressoでは使えません。
mbedの関数のありがたさを感じました。かなり簡単になっています。
ぼくはLPCXpressoではプログラムできません(難しい)。

さて、オフラインでmbedのコンパイルに成功した方がいらっしゃってこれで使える!と思いました。
実際にやってみたら成功しました。

ですがコンパイルが90秒以上かかりました。
mbedのクラウド上でもそのくらいはかかるのでしょうか?(mbedを買っていないので分かりません)
ぼくは書き込みが速いことを知ったからmbedをベースにロボットを作ろうと思っていました。
なぜなら、試合当日のときの調整に試行錯誤を何回もするので、書き込みの時間というのは惜しいからです。
試合当日でないときはゆっくり開発するのですが・・
書き込みの時間はオフラインでも同じく速いんでしょうが、コンパイルで90秒取られると試合当日の調整が少し厳しくなりそうです。

というわけでmbedはオンラインが前提なので、ロボカップサッカー用ロボットのベースには厳しい気がしてきました。(携帯を使うデータ通信(つまり試合会場でインターネットを使う)はお金がかかる)

Arduinoも関数で簡単に使えるようになっているので、mbedはあきらめて、結局Arduinoでやってみようと思います。
ArduinoのI2Cはスレーブアドレスが7bitということが気になりますが・・・
でもArduinoでロボットを作れそうなので。

さてさて話は変わりまして超音波センサーの周波数干渉防止についてですがPSoCというマイコンは中にアナログ回路を作ることができるそうで(ぽよこまだんな様Reverse父様ありがとうございます)、こちらもやってみようと思います(定期テスト後)。
うまくできれば25kHzと32.8kHzの超音波センサーを作れそうな気がします(想像)。

火曜から2学期中間定期テスト1週間前に突入するのでしばらくお休みします。

にほんブログ村 科学ブログへ
にほんブログ村

2010年10月 5日 (火)

ダイセン新発売DSR-1005のデーターシート和訳

ダイセンから新しく発売されたDSR-1005の取扱説明書が途中から英語になっています。
I2C通信の部分だけ自分のためにも和訳しましたので、必要な方は参考にしてください。
なお、もしも誤訳があれば教えてください。

I2Cの使い方 Using I²C

I2Cバスに関する詳細な説明は以下を参照してください
For a detailed description of the I²C Bus, please refer to:

そしてiM-3502のデーターシートです
And also the iM-3502 datasheet:

全方向センサーモジュールへの書き込み方法(1バイト):
Write to Omni-Direction Sensor Module (1-Byte) :

1. IICにおいて開始条件を発行します
1. Host issues a START condition on the IIC.

2.クロックを発振しながらセンサーへスレーブアドレス(0x50)を送信します。
2. Transmit the slave address (0x50) to the sensor with generating CLK.
(解説)スレーブとは子機のこと。一方親機はマスタといいます。

3.センサーからACKを受け取ってから、センサーへ命令(レジスターのアドレス)を送信します。
3. After receiving ACK from the sensor, transmit the command(register address) to the
sensor.
(解説)ACKとはアクノリッジ(acknowledge)の略。受信側がきちんと受信できたかを送信側に知らせる信号です。つまり、ACKが帰ってこなかった場合エラーということになります。

4.センサーからACKを受け取ってから、センサーにデータ(8ビット)を送信します。
4. After receiving ACK from the sensor, transmit the data(8bits) to the sensor.

5.データを受信してから、停止条件を発行します。
5. After receiving the data, host issues a STOP condition.

全方向センサーモジュールからの読み取り方法(2バイト):
Read From Omni-Direction Sensor (2-Byte):

1バイトで読むことができないため、"DEV_ID"や"REVNUM"を読み込むときには1ワードで読み込みます。
There is no Single-Byte Read Sequence, so that "DEV_ID" and "REVNUM" should be
read at word length if it would be read.

このような場合には、1ワードの上位バイトが"ゼロ"になり、有効なデータは下位バイトになります。
In this case, upper byte of the word is "zero" and
the valid data is in lower byte.

1.IICにおいて、開始条件を発行します。
1. Host issues a START condition on the IIC.

2.クロックを発振しながらセンサーへスレーブアドレス(0x50)を送信します。
2. Transmit the slave address (0x50) to the sensor with generating CLK.

3.センサーからACKを受け取ってから、センサーへ命令(レジスターのアドレス)を送信します。
3. After receiving ACK from the sensor, transmit the command (register address) to the
sensor.

4.データを受け取ってから、停止条件もしくは反復開始条件を発行します。
4. After receiving ACK from the sensor, host issues a STOP or a REPEATED START
condition.

5.開始条件を発行してから、再びスレーブアドレス(0x51)を送信します。
5. Transmit the slave address(0x51) again after making a START condition.

6.センサーからACKを受け取ってから、センサーからデータ(16ビットで最上位のビットが先)を受信します。
6. After receiving ACK from the sensor, receive the data(16bits – MSB first) from the
sensor.

7.データを受信してから、停止条件を発行します。
7. After receiving the data, host issues a STOP condition.

にほんブログ村 科学ブログ ロボットへ
にほんブログ村

25kHzと32.8kHzの超音波センサーが見つかった~

25kHzと32.8kHzの超音波センサーが見つかりました~!!
送受信それぞれ1050円です。
これでバンドパスフィルターを作らなくてもよくなりそうな予感がします。
増幅回路をがんばってマイコンでなんとかしたらいけそうな気がしてきました。

テスト2週間前に突入しました。こっちもがんばらなくっちゃ。

にほんブログ村 科学ブログ ロボットへ
にほんブログ村

2010年10月 3日 (日)

超音波センサーの干渉しない方法を考え中

現在ロボカップジュニアサッカーで用いられている超音波センサーは40kHzしかぼくは見たことがありません。
みんな40kHzを使えば当然干渉します。

というわけで周波数を変えれないか考え中です。
超音波センサーは送受信回路ともに難しいです(というか全然分かりません)。
35kHzとか45kHzとかができればいいなと思っています(あくまで想像)。

送信の発振回路は、マイコン1つでできそうな気がするのですが、
受信が・・・
どうやらまず増幅してあーだこーだするようです。

そうですよね。増幅しないと!
数mVだそうで、1000倍以上増幅するそうです。

フィルターについても調べてみると、
ある周波数だけを通すフィルターのことを、”バンド・パス・フィルタ(BPF)”というそうで、
OPアンプを使う方法とインダクタ・抵抗等だけを使う方法があるようです。
えーー・・・ちょっと見てみましたが数式だらけでかなり難しそう・・・
アナログ回路設計は大変そうです・・

普通超音波センサーはフィルターは使わないのでしょうか?
村田製作所のデーターシートに載っている回路の例では増幅するだけに見えますが・・・(勘)
もともと圧電素子は40kHzだけ共振するようになってる気がします・・・(これも勘)
アナログ回路とか受信の仕組みとか知っている人がいればコメントしていただければ幸いです

ロボカップサッカーで相手チームの使ってる周波数を聞いて相談して
周波数を変えて使うのが当たり前!
なんて時代がくればいいなと思います(それか画像解析が当たり前になったらすごいですね)。

にほんブログ村 科学ブログ ロボットへ
にほんブログ村

2010年10月 2日 (土)

新しい32bitマイコン

今日ダイセン電子工業に行ったら、新しいmbedという32bitマイコンの紹介をしていらっしゃいました。
mbedは開発環境がインターネット上にありコンパイルもインターネット上で行います。
マイコンとはUSBケーブルでつなぎ、マイコンはUSBメモリとして認識されます。
マイコンへのダウンロードは、USBメモリと認識されているのでコンパイルされたファイルをコピーするだけ。
書き込み機なんていらないのです。

開発環境をパソコンにインストールできるもの(LPC1768)もあります。

PIC,H8と並ぶ低価格さで、かなり高性能ですごい時代になってきたと感じます。
ただ、解説書やデーターシートなどは英語になります。

新しくダイセンで発売された方位センサーについて、
I2C通信はできそうなのですが、どうやら0~359度の方位のデーターは自動的に、加速度センサー(3軸)と3軸の方位センサーのデーターから計算されていて詳しくは分からないようです。
また、モーターの磁気の影響は受けにくいようですが受けないことはないようです。
しかし、1度刻みで分かる方位センサーが発売されてかなり有難いです。

ロボットが自分の位置を知るためのセンサーとモーターをどうしようか困ってます。
位置情報を得るためには
①超音波センサーと方位センサーを使う
②画像解析を行う
の2つしかありません。それ以外にあれば教えてください!
ところが超音波センサーは干渉します。
また、方位センサーは大きいモーターを使えば誤動作します。

今タミヤの380ギヤードモーターのモーター部分だけを取り出しギヤ部分を自作して直径22cm以内に収めようと考えています。しかし、もし方位センサーが使えないほど磁気を出していれば(未確認です)、方位センサーは使えません。
すると画像解析をするかモーターを変えなければ行けません。
マクソンモーターは高すぎて手が出せません。
ダイセンはたくさん使っていると焼ききれてしまいます。

やはり画像解析するしかないのでしょうか。
高性能のマイコンもしくはパソコンが要ります。
予選は2月です。4ヶ月しかありません。

と・・いうわけで・・・やらないと始まらないのでとりあえずいろいろやってみます。

にほんブログ村 科学ブログ ロボットへ
にほんブログ村