カテゴリ:ポケコン( 49 )

ポケコン PC-G850Vで電子回路工作(3/15)

a0034780_1223957.jpg


なんかポケコンを購入された人がいらっしゃるので、自分の所よりもわかりやすいサイト様があったので紹介。

【その5 アナログでGO!】 - ポケコンで電子工作_5

こちらはA/D変換を自分とは違ったICで変換している。
私はSPI通信でやったが、このICは8ピンで0~255(6ピンなので0~31?)の値で返してくれるらしい。
これはpiogetで11ピンにかかる信号で取得するらしいが、piogetの使い方を理解していないのと11ピンに繋ぐ必要な回路がわかっていなかった。

そこでpiogetを探したら次のサイト様が見つかった。

G850V DTMFデコーダー - CURIOSITA - 好奇心

こちらはQ1~4の昔のボタン電話のプッシュ音(AD)を解析してくれるICで、4ピンで値を返してくれる。

ポケメモの本家様へのリンクと作り方を書いてあるので、11ピンを介して128KBメモリとしてBASICプログラムをファイル保存できる。

回路と写真のすぐ下の空白の部分に隠しソースがあるのでマウスで反転させると見えてくる。
回路とそのさらに下のマニュアルの解説によるとpiogetの使い方が載ってるので、
ポケメモ本家様のファームウェアも参考に調べるとよい。

ひさびさに「ポケコン」をYoutubeで検索すると、エミュレータ上で動作している動画も上がっており、結構最近もポケコンの記事があってうれしい。やっぱり初心に戻って電子回路工作したいな~
[PR]
by k1segawa | 2017-03-15 01:31 | ポケコン | Comments(0)

LEDの使い方 - マルツオンライン (5/11)

マルツのサイトにLEDの基本回路について優秀な説明があったので、
ソフト開発者向けにさらにやさしく翻訳してみる。

LEDの使い方 | マルツオンライン

マルツLED基本ガイド - 日本語翻訳(藁

1.LEDの基本―プラスマイナスの向き、抵抗の求め方
2.LEDを選ぶための基本用語
3.LEDを複数光らせる
4.タイマーICでLEDを点滅させる
5.【番外編】タイマーIC 555とは

1.LEDの基本
発光ダイオード(LED)は、身近なデジタル発光体で、赤、青などに光り、形も丸型、角型、デジタル数字などさまざまです。

LEDを光らせるためには「電流」を流します。以下に解説します。

★LEDの基本回路

図1a)にLEDを光らせるための基本的な回路を示します。

LEDには、プラスマイナスを考慮した向きがあり、

2本の金属の足をそれぞれ、
長い方を「アノード」→ A
短い方を「カソード」→ K
と一般的に記述します。

ダイオードと同じようにLEDも電流を流す向きに考慮する必要があり、図1a)のように足の長い方(アノード)に電源のプラスを、足の短い方(カソード)にマイナスを接続すれば光ります。

図1b)のように、LEDの向きを逆にすると電流が流れず光りません。

電流を流れる方向に接続する事を「順方向」、流れない方向を「逆方向」と言い、
LEDを光らせるためには「アノード」をプラス、「カソード」をマイナスに接続します。

なお、抵抗Rは電流を制限するためのもので、「電流制限抵抗」と呼ばれます。

図2は「やってはいけない回路」です。

図2a)は抵抗R(電流制限抵抗)がないので、LEDに過大な電流が流れ、LEDが破壊されます。

図2b)は電源に交流を流した場合です。
LEDもダイオードと同じように図1b)のような接続では電流は流れませんが、逆方向の電圧(これを逆電圧と言います)での最大電圧(絶対最大定格値と言います)が低いので、図2b)のような交流電圧では逆電圧がかかり(印加と言います)、これもLEDの破壊につながります。(一般的にLEDの逆電圧の最大定格値は、およそ3~5V)
このような場合、何らかのLED保護回路(主に電流制限抵抗)が必要です。

★LEDの特性

LEDの特性を図3に示します。

順方向で電圧をかけると、「ある電圧」以上から電流が流れ始め、これを順電流(記号ではIF)と言い、そしてLEDの明るさは電流に比例します。この時のアノード・カソード間の電圧を「順電圧VF - Voltage of Forward」と言い、電流値が大きくなるほど順電圧VFも大きくなります。

この説明では「電圧をかけた結果の電流」としましたが、「電流が流れた結果の電圧」とも言えます。

逆方向の場合は、電流はほとんど流れませんが、「ある値以上」の逆電圧で急激に電流が流れ始め、LEDを破壊する恐れがあります。

この逆電圧は最大定格という言葉で、LEDの「データシート」(取扱説明書)に書いてあります。
一般的にはおよそ3~5Vで、注意が必要です。
また、順電流IFも最大定格の項目の一つに挙げられていて、これも「絶対に超えてはいけない値」です。

表1に主な直径5mm LEDの規格を示します。

順電圧VFは、既定の順電流IF(例えば10や20mA)が流れた場合の値です。
表1は標準(英語でtypcal)値で、順電圧は発行色、型番により異なります。

(ここまで)

何度か言葉の不統一や重複する内容があったので言葉は統一し、重複はそのままにしてある。また、知らない単語はそのあとすぐに使わずに、何回か出現させて記憶にとどまった所で使うようにしている。(例えば法律の本とか難しい言葉でまどわされるよね?)

また「程度」→「およそ」に直しているのは、前方に修飾語が来る方が内容を予想しやすいというマニュアル作成のノウハウがあるため。鍵かっことかっこだけでダブルコーテーションは使っていないのも、かっこ種を2~3種に抑えるようにした方が特別感を醸し出すのに複雑になりすぎないから。「また」などの話の転回を示す語の後ろに句読点を置き、そのあとの句読点は少し長めに待ってから置いている。(マ開)での経験が生きるわ~
[PR]
by k1segawa | 2016-05-11 18:05 | ポケコン | Comments(0)

Raspberry Pi 3 と Zero の狂騒 (3/30)

今新しいラズパイは一瞬で売り切れて再入荷の目処も立たないくらい人気のようだ。
日本国内でもアーリーアダプタと一般の方(企業や教育、IoT応用分野を考えている人々)を合わせたら簡単に1万台ぐらい売れるだろう。

でも、PCを猫も杓子も買った時代を振り返ってみて、あの頃は何でもできると言われて買って何に使うかわからなかった。今ならインターネットの普及でネットショッピングでもSNSでも仕事にも趣味にも応用が果てしなくあるけど、あの頃はそれほどシステムが整っていなくてソフトやサービスが簡単に使えず充実していなかった。

せいぜい年賀状やワープロに使う程度だった。

今のラズパイもたくさんの書籍が出ていて、その通りにやればある程度の事はできる。
でもそれは、ラズパイならどうやるって事であって、その先にある目的はどう実現するか、何がやりたいかは提案していない。

ラズパイでやることが目的じゃない。ラズパイなら簡単に出来るし参考書もたくさんあるというだけで、目的は人それぞれなはずだ。

[目的の例]
1.ラズパイを使えるようになりたい:⇒Linuxを勉強したい、マイコンを勉強したい
2.ラズパイで電子回路を組みたい:⇒電子回路の基礎を勉強したい、自分で電子工作がしたい
3.会社でラズパイを使いたい:⇒簡単に使えるモノがほしい、安定して長く使えるモノがほしい
4.パソコンの代わりに使いたい:⇒1~2万円でインターネットを見たりSNSや掲示板やブログをしたい、プログラムを覚えたい、ワープロがしたい、年賀状が書きたい、鉄道模型を制御したい

ラズパイじゃなくてもできるのだから、本当に求めるべきはラズパイの本を読む(必要だが)事ではなく、その先(:⇒の右に書いてあること)にある知識を習得したり、行動したりするのが本来あるべき姿。
具体的には「電子工作入門」や「鉄道模型制御」などのキーワードでネットで調べたり、本を購入しよう!

だから、この狂騒曲が収まった暁には、ぜひとも右側に書いた項目について、興味をもってほしい。

-----
自分は”標準ロジックICによる””デジタル”電子回路の作成と入出力制御が出来ることが目的(アナログや高度な回路は無理だから条件を付けた)。それも、ロボットを動かしたり曲を再生したり、液晶を付けてポータブルにする事には興味がなく、外からのセンサー入力をデータとして取り込んで簡易表示したり、データをまとめて傾向を示したりしたいのです。
だからブログの最初ではポケコンでやっていた。
でも最近は自分もラズパイの流行に目がくらんでいたけど、やっぱり元々の興味の対象に立ち戻ると、消えかかっていたラズパイへの興味からまた電子工作をやろうという意欲が沸いてきた。

-----
あくまでもラズパイは道具。元々の自分のやりたいことに気が付いて、踊らされないようにしよう。
[PR]
by k1segawa | 2016-03-30 23:55 | ポケコン | Comments(0)

Raspberry Pi 3 (3/2)

新しいラズパイが出た。
Raspberry Pi 3。
お値段据え置きで、CPUが64ビットになって性能5割増し。
USB電源がMAX2.5AまでINPUT出来るようになり、通常は1.8Aで変わらないらしい。
メモリもストレージもGPUも形状も変わらない。
内蔵LEDの位置が異なるらしい。
しばらくは32ビットモードでサポートされ、数か月後に64ビットモードの意義を見出すとの事。
OSからパッケージまでリビルド必要だからね。どれぐらい意義があるかって事かな。

一番の注目はWiFiとBluetoothがオンボードになった事。
最初っからWiFiに繋げられ、余計な出っ張りや出費も無くなったし、試行錯誤しなくてよくなった。
Bluetoothはドングルいらずで無線マウスやキーボードを繋げる(たぶん)ので、USBを塞がず、USBを有効利用できる。
重要なのはBluetoothが標準になったので、今までBlueZなどをインストールしてスマホと繋ぐ手間も無くなり、益々活用されるようになる事。とにかくワイヤレスで使うためのあらゆる余計なものが不要になり、本体周りはすっきりとするだろう。

WiFiアンテナはMake:の以下の写真に詳しい。
The New Raspberry Pi 3 — With Wi-Fi and Bluetooth | Make:

The Raspberry Pi 3’s tiny on-board antenna for Wi-Fi and Bluetooth.

こうやってまとめてみると、それほどRPi2と変わらない。スマートになったけど、RPi2で出来ない事もない。着実な進化と言える。

RPi ZeroはZeroで、安いWiFiが買えれば、センサーを色々な場所に沢山設置できるし実績のあるLinuxボードなので超有望だ。(ハードは統一されてるし、開発もオンボードで出来るし、色々は決まり事がPCと同じで初心者~中級者に優しい。選択肢が多くてこれという主流が見えずらいけど)

(WiFi内蔵の安いArduinoでもWiFiのライブラリを入れればネットにもデータ送信できるらしい。ESP-WROOM-02は電源を自作して、WiFiと言っても実質シリアル通信だから、自分でシリアル通信のプログラムで、IPアドレス取得やHTTPデータを送受信する必要がある。安い分製品ごとに違った工夫と努力が必要な割と玄人向け。WiFiの無いアウトドア系はまた別に考えないと。どうしてもPCレスで開発できないけど開発環境がArudinoIDE1種類しかないから迷わない-ぴったりのIDEのsampleにあれば探し回らなくて済むからそういう意味ではソフト初心者向けかな)

WiFi、Bluetooth内蔵のRPi Zero 2が出ないかな?全部揃えても値段はArduinoより圧倒的に安いし。
あとRPiでもArduinoIDEのようなサンプルをどっさり付けた開発環境を用意できれば、ArduinoIDEのメリットを享受できるな~
[PR]
by k1segawa | 2016-03-03 00:09 | ポケコン | Comments(0)

ソフトオシロに100均イヤホンで苦戦(8/13)

ソフトオシロをPCのライン入力からの取り込みで計測しようとして、
100均のイヤホンをばらしてプローブを作るのがよく紹介されているが、
あの線はリッツ線といって、絶縁膜で覆われた細線を撚り合わせており、
はんだづけしてもちっとも導通しないので、苦労するよりイヤホンジャックのメスの部分(オスにもはんだ付け出来るけどむき身のままだと抜き刺しで力がかかる)と、3.5Φの両方オスのコードを組み合わせた方がいいです。(オスオスケーブルは加工しないから別の用途にも使えるし)

私はこれを使いました。
a0034780_18291225.jpg

イヤホンジャックの方を分解して、こんな風にしました。
はんだがくっつかないので、少し紙やすりでこすって、フラックスを塗ってからたっぷりはんだを盛って。
a0034780_1834396.jpg
先端にはプローブの代わりにICクリップを付けます。(ICクリップの写真は後述)

イヤホン オスオスのコードはこんなやつ。
a0034780_18405942.jpg
これを上の自作ケーブルと繋ぎ、ライン入力に差し込むわけです。

作ったケーブルは1CH(1つ)ですが、イヤホンジャックの分解写真で、もう一つピンが空いているのでそれにも付ければ2CH(2つ)になります。まあ、使わないけどね。(前の写真の緑の線がGNDに繋ぐプローブだと覚えておく事)

ソフトオシロは有名どころのHandyOscillo。ベクターで落とせます。
Windows10でも動いてますが、設定変更後、終了時にOCXモジュールがどうのこうのってエラーが出るので、変更後はアプリの再起動した方がいいです。

【使い方】
スタートメニュー>すべてのアプリ>(ひらがなの”は”)>ハンディ・オシロスコープで起動し、設定変更>デバイス・周波数>サウンドデバイスで、「2.ライン入力(XXXXXXX)」を選びます。(一つしかサウンドボードがなければ1.のプライマリサウンドキャプチャでもいいかも)
ライン入力に自作ケーブルを差し込むと、インストールドライバによっては選択画面が出るので「ライン入力」を選んでおきます。オシロスコープ画面では2つ水平線が出てるけど、どちらかがプルプル震えていればうまくいってます。

【計測】
今回arduinoのPWM出力スケッチである、01.Basicの下にあるFadeを使いました。(LED1個の明るさをゆっくり変化させるプログラム)
IDEは1.6.5をインストール。arduinoはJapaninoを持っていたので、設定(ボード、プロセッサ、書き込み装置)を次のようにした。
a0034780_195479.png

スケッチを見るとLED=9とあるので、GNDとD9ピンをプローブで挟めばいい。
Japaninoの回転ハンドル兼LEDのコネクタをちょっと浮かせて、挟んだのがこちら。
a0034780_19121199.jpg

オシロスコープには下のようにPWM特有のパルスが表示される。
a0034780_191675.png

実際にはこのパルス幅がゆっくりと変化する様子を見ることができます。

最初いくらやっても波形が出ないので、なぜ?と思ったら、リッツ線にやられました。
質問箱でも良い回答はなかったです。急がば回れ。

電子工作で5Vレベルの入出力なら、今回のケーブルのようにライン入力直結でもOK。
12Vとか車載に使う時は、バッファと言われるオペアンプで出来た回路をかました方がいいでしょう。
まあやらないけどね。(部品を買って準備済みなのは内緒)
やっとこれでI2Cで初期化コマンドがうまく送信されているかチェックできるぞー
[PR]
by k1segawa | 2015-08-13 19:17 | ポケコン | Comments(0)

AND回路(8/11)

ちょっと時間が空いた。
少しI2Cで苦労してるので、一旦休止。

で、AND回路を実際の電子部品で実装してみる。
a0034780_1465383.jpg
左上、右上、右下の順で、論理記号、回路図、実体配線図となる。
動作させるためには点線の部分を必要とし、めんどうといえばめんどう。
(マイコンも結局内部でこう繋がっている)
※抵抗値は電源やLEDの種類で異なる。

0/1の信号を入れるためには、電源に繋いで3V流すか、GNDに繋ぐかをスイッチで切り替える。GNDに繋げば、LEDの内部抵抗値を嫌ってダイオードの方へ電源から電流が流れるから、LEDの方へは流れず点灯しない。電源にスイッチを切り替えれば、ダイオードの方には電流は流れず、LEDの方に流れ点灯する。
つまりどちらか一方がGNDなら電流がダイオードの方に流れてしまうのでLEDは点灯しない。
結果スイッチを電源に切り替える方を1、LEDに電流が流れて点灯するのを1とすると、AND回路が実現される。

Fritzingで描いた配線図は次のようになる。
a0034780_1281415.jpg
1や2の線はスイッチの代わりに+や-に切り替えて繋ぐ。
実際の写真はこれ。
a0034780_135334.jpg
ICにはこういうのが一杯入っていて、実際にはこんなに色々考えて繋ぐ必要がある。
[PR]
by k1segawa | 2015-08-11 02:06 | ポケコン | Comments(0)

ポケコン PC-G850Vで電子回路工作(6/11)

MCP3002で2ch分A/D変換で取り込んでみた。
2chアナログ値を発生させるのはArduino界隈で使われているPARALLAX inc.の2-Axis Joystick。
データシートはこれ
参考にした配線図はこちらのサイト様のArduino Unoの図。

配線図はCH1と書いてある3ピンもアナログ入力として使用。
a0034780_2365478.jpg
5/31のSPI通信のコマンドで、ODD/SGNが0だとCH0選択なので1でCH1選択にする。
google sheetのタイミングチャートで表のH4,I4が0→1になるので、データとしては最初の方の0,4→2,6になる。

【Cプログラム】
10  main() {
15 unsigned char a[34]={0,2,6,2,6,0,4,2,6,0,5,0,5,
0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,5,8,12,99};
20 char b[3][21]={"003C7EFFFFFDFD723C00",
"003C4EFFFFFDFD723C00",
"003C7EFFFFCDFD723C00"};
21 char u[21]="00000000000000000000";
22 int c,d,i,f=0;
23 unsigned char r;
24 int x=-1,x1=-1,x2=-1,w,m=0,k=0;
28 clrscr();
30 outport(0x60,1);
40 outport(0x61,1);
45 do {
50 c=10;d=0;i=-1;
70 /* while(a[++i]!=99) {*/
80 do {
90 outport(0x62,(a[i] & 0xFE));
100 if((a[i] & 1)!=0){
120 r=inport(0x62);
140 if(c!=10) {
150 if(r==1)
155 d+=(1<<c);
160 if(c==0) { w=(int)(d/8);if(f==0) x=x1; else x=x2;
162 if(x!=w) {
163 gcursor(70+(k++%50),25);
164 if(k==49){gcursor(70+48,25);gprint(u);k=0;}else gprint(b[m++%3]);
165 gotoxy(f*5,4);printf("% 5d",d);
166 line(x+(x<w),f*8,w+(x>w),7+f*8,2,0xFFFF,2);
167 if(f==0){a[5]=2;a[6]=6;x1=w;}else{a[5]=0;a[6]=4;x2=w;}f=1-f;}
168 /*pset(x++,d/22,1); */
169 /*x=(x<144)*x;*/
170 }
175 }
180 c--;
185 }
190 } while(a[i++]!=99);
200 } while(1);
210 }
配列データのアンダーラインの所がCH番号の部分。ここを167行目で書換え、フラグfで0/1でCH番号用に制御する。コマンドをかわりばんこに投げてCH0とCH1を交互に取り出す。x1,x2は前回のx座標、CH0/1用を保存。数字は最大1023なので符号を入れて5桁左詰め。
ちなみにボールはA/D値に変化があれば1ドットずつ右へ転がり50ドット移動したら70ドット目に戻る。

Youtube:ポケコンによる2軸アナログ入力
a0034780_23511766.jpg

動画の縦横が回転してしまった。
[PR]
by k1segawa | 2015-06-11 22:22 | ポケコン | Comments(0)

ポケコン PC-G850Vで電子回路工作(6/10)

ビジュアライゼーションを少し。

BALLを8x8で書いて動かしてみる途中のプログラム。
転がる様子をパターンにしてそれっぽく動かすのは、やっぱりセンスと手間がかかるね。
10  main() {
15 unsigned char a[34]={0,2,6,2,6,0,4,2,6,0,5,0,5,0,5,0,5,
0,5,0,5,0,5,0,5,0,5,0,5,0,5,8,12,99};
20 char b[3][21]={"003C7EFFFFFDFD723C00",
"003C4EFFFFFDFD723C00",
"003C7EFFFFCDFD723C00"};
21 char u[21]="00000000000000000000";
22 int c,d,i;
23 unsigned char r;
24 int x=-1,w,m=0,k=0;
28 clrscr();
30 outport(0x60,1);
40 outport(0x61,1);
45 do {
50 c=10;d=0;i=-1;
70 /* while(a[++i]!=99) {*/
80 do {
90 outport(0x62,(a[i] & 0xFE));
100 if((a[i] & 1)!=0){
120 r=inport(0x62);
140 if(c!=10) {
150 if(r==1)
155 d+=(1<<c);
160 if(c==0) { w=(int)(d/8);
162 if(x!=w) {
164 gcursor(70+(k++%50),25);
165 if(k==49){gcursor(70+48,25);gprint(u);k=0;}else gprint(b[m++%3]);
166 gotoxy(0,3);printf("%d",d);
167 line(x+(x<w),0,w+(x>w),15,2,0xFFFF,2);x=w;}
168 /*pset(x++,d/22,1); */
169 /*x=(x<144)*x;*/
170 }
175 }
180 c--;
185 }
190 } while(a[i++]!=99);
200 } while(1);
210 }
ポケコンのプログラムをエディタに貼り付けて保存していたのをそのまま貼り付けてみた。まだ改善絶賛進行中なので期待しない事。
[PR]
by k1segawa | 2015-06-10 13:04 | ポケコン | Comments(0)

ポケコン PC-G850Vで電子回路工作(6/8)

I2Cでは出力ピンになるので、入力ピンをプルアップ抵抗に繋ぐように変更。
理由はちょっと難しいので後で書く。

【回路図】
a0034780_21352761.jpg


【配線図】
a0034780_214030100.jpg


【Cプログラム】
main() {
unsigned char a[34]={0,2,6,2,6,0,4,2,6,0,5,0,5,0,5,0,
5,0,5,0,5,0,5,0,5,0,5,0,5,0,5,8,12,99};
int c,d,i;
unsigned char r;
int x=-1;int w;

clrscr();
outport(0x60,1);
outport(0x61,1);

do {

c=10;d=0;i=-1;
do {
outport(0x62,(a[i] & 0xFE);
if((a[i] & 1)!=0) {
r=inport(0x62);
if(c!=10) {
if(r==1)
d+=(1<<c);
if(c==0) {
w=(int)(d/8);
if(x!=w) {
gotoxy(0,3);printf("%d\n",d);
line(x+(x<w),0,w+(x>w),15,2,0xFFFF,2);
x=w;
}
}
}
c--;
}
} while(a[i++]!=99);
} while(1);
}
CDSを隠すと、グラフィックの棒グラフが伸びる方向に逆転した。
値は200台から800台で変化するように変わった。あれ?
なぜか調べるのに文字を(0,3)から表示する。
いやいや信号が逆転すると思ってr==1→0に修正したんだけど元に戻した。それにwを表示してたし。
気のせいでした。
a0034780_22255829.jpg


【マイコンとの配線例】
マイコンにRC用サーボモーターを繋げる場合の電源投入時における挙動様の図が、一般的なプルダウン抵抗の説明の図がスイッチを使っているのと違って、今回の場合と似ていて分かり易い。
a0034780_22564363.jpg

左のPortがMCP3002のDoutで出力。右のSignalがポケコンの4ピンで入力に相当。
この時どうやってプルアップ抵抗を付けるのが正しいか、不安だったのだが、こちらのサイト様と偶然同じだった事でこれでよかったんだと一安心。

【蛇足】
ついでにサイト様の一瞬動くというのは、たぶんステッピングモーターであってもHI→LOWになるとモーターがコイルに残っている磁力で逆電流を起こすから、Signalに入力ピンであるにもかかわらず、出力のような電流が流れるのだと思う。つまりI2Cの懸念でプルアップ抵抗に変更した理由と同じ。そしてプルアップであってもPortがLOWになっているという事は、PortがGNDにmicro controller内部で繋がっているという事(ここが私も忘れてしまうところ:重要)なので、その逆電流がPortに流れ込んでしまい、一瞬動くのだと思う。(HIならVCCもHIでSignalから来たHIはどこにもいかず抑え込まれる)
しかしLOWにしないわけにもいかないから、モータサイドで対策する必要がある。
またPortが出力(入力モードならたぶん内部で抵抗がかまされているはず)ピンでLOWになっていると抵抗なしでGNDに繋がっているはずなので、一瞬でもmicro controllerには5Vが直結する事になるので、やはりSignalのピンの直前に1kΩ程度の抵抗をかませた方がいい。(マニュアルは大事)
結局モータの逆電流に関してはモータのユニットの方でダイオードやコンデンサで逆流しないようにするほか無いけど、こういう検討も必要かな。I2Cで入力ピンを出力にもするなら4ピンも1kΩの抵抗が必要。
[PR]
by k1segawa | 2015-06-08 22:04 | ポケコン | Comments(0)

ポケコン PC-G850Vで電子回路工作(6/8)

SPI通信について。

スレーブ(SPIモジュール)によってSPI通信のサポートする種類が異なるようだ。

SPI通信といってもクロックの立上がり・立下りでデータを取り出すようにインプリメントするケースや、
最初のMSBFをクロックの最初から取り出すか、1CLK待ってから取り出すようにインプリメントするかを、スレーブが選べるようにしている。

従って4種類あって、MCP3002はそのうちMODE0,0(モード0)とMODE1,1(モード3)の形式のSPI通信をサポートしているようだ。

MCP3002データシート15ページ目図6-1,2

だからと言ってモード0と3を切り替えられるわけではなく、両方とも立上がりでデータを取り出すモードなだけだ。
MSBFも余り神経質にならずにその前に続くStartビットからの流れで取り出せばよく、モード0と3の違いが余りわからない。(下記サイト様のSPIの罠様にはきちんと書いてある)

SPI通信のモードに関しては、以下のサイト様が参考になった。
SPIについて
SPI Transfer Modes | USB-I2C/SPI/GPIO Interface Adapters
SPIの罠

0,0と1,1は立上がり、0,1と1,0は立下りでデータを読み書きする。

SPI通信ができたといってもMCP3002の場合だけなので、別のSPIモジュールの時は同じ手順とは限らないという事。
さらにモードの呼び方まで統一されてないらしい(SPIの罠様参照)ので、きちんとタイミングチャートとモードの対応をデータシートで確認する事。

SPI通信は同期(外部クロックが要らない―自分でクロックを作って送り込める)通信で、かつ単方向信号(双方向でない)なのに、信号線が独立しているからスピードも出る。なのでSDカードの読み書きもSPI通信。
SDカードの構造と内部レジスタ(その1) | ミームス(MEMEs)のサポートページ様や浅草ギ研 A33FでMicroSDカードにアクセスしてみる様などでは、詳しいSD用コマンドが解説されているので、SPI通信の応用にいいかもしれない。
[PR]
by k1segawa | 2015-06-08 19:51 | ポケコン | Comments(0)