人気ブログランキング |

体重と今日食べたもの

k1segawa.exblog.jp

ダイエット

ブログトップ

2015年 05月 31日 ( 3 )

プログラムの前に、回路を考えた。

今までCADLUSサーキットを使っていたのだが、MCP3002の部品がないので、簡単に部品が作れるというBSch3Vを使ってみる。

有名なので、どうかと思っていたが、案外使い方はすっと入っていけて、なんで最初からこっちにしなかったのかと(日本語も自由自在なので)ちょっと後悔。

部品も自作でき、前回のサイト様(ラズパイ用だったが)を参考に描いたのがこれ。
ポケコン PC-G850Vで電子回路工作(5/31)_a0034780_16543034.jpg


CDSを使ったA/D変換という事で、CDSを繋いでいるが、別に固定抵抗や可変抵抗でもよい。
10kΩを直列につないでいるのは「分圧」。(あんまりわかってない)なのでこの値にこだわる必要はない。
CH1は使わない時はいろいろぐぐるとGNDに落とすらしい。で3ピンはGNDへ。
ポケコン側の4ピンは入力なので、いわゆるプルダウン抵抗(10kΩ程度)を接続。勉強の成果。
これがあるとLOWがはっきりGNDに繋がって安定するのだ。

あとはポケコン側の2、3ピンをショートカットっぽく描いてあるがこれでいいのかな~

MCP3002部品もデータシートを見て描いたので一応ちゃんとしているはず。

さて結線してプログラム組むぞー
by k1segawa | 2015-05-31 17:02 | ポケコン | Comments(0)
これ(前頁)を元に、いつものように、BASICのDATA文やCの配列データを組み立てる。(もちろんデータ駆動っぽくするため。別に手続型っぽく書いてもいいが)

以下の図はGoogle Sheetで記述。
ポケコン PC-G850Vで電子回路工作(5/31)_a0034780_16293851.jpg

タイミングチャートのHI/LOWを1/0に変えて表現。

行2~5がタイミングチャートの青文字のピンに当たるところ。
B列C列が、行3のCLKの2拍分余計にLOWを出力している感じを表している。
C2がCSがCLKの1拍前にLOWになっているのを示す。

M5がNullBitをCLK=HIの時のみ読み出す事を示している。
以下は同じタイミングでB9~B0の値を読み出すタイミングを示す。

赤線の長いのが、データ列になるのだが、そのまま渡すのではなく、ちょっと加工しておいた。
4ピンのビット(0x62で最下位ビット)が読み出しなので、空いているのでそこを1にして読み出しタイミングを知らせようと画策した。
(別に14番目とか16番目のデータであるとかカウンタで制御してもいいのだが)

で、行9のようにビットを立てたデータ列を使う事にする。最下位ビットは0にして出力。

最初の最下位ビットが立っている場合はNullBitなので0が読み出されることを確認し、それ以降はそのタイミングで読んだデータを2の9乗~0として扱えば、シーケンシャルに10ビット入力したことになる。

最後に青線の部分だが、CSをHIに戻すのもCLK2拍分でいいかなと思い、倍加している。この36セットを1組にして繰り返せば、MCP3002からA/D変換したデータを10ビットの解像度で取得できるハズ。
by k1segawa | 2015-05-31 16:45 | ポケコン | Comments(0)
A/D変換の準備を行った。

まず、MCP3002を購入してあったのでそれを使う。
データシートはこれ
参考にしたサイト様はこちら。
ADコンバーターとフォトレジスタを使って部屋の明るさを取得しよう。 - Raspberry Pi 電子工作
[電子工作]ADコンバーター MCP3002 を使ってみた

最初SPI通信というのが、シリアル通信と勘違いし、シリアル通信ができないとインプリメントできないと思っていたのだが、たぶんそんなことはない。
単に同期クロックに合わせて、「コマンド」と言われる信号列をポケコン側から出力(MCP3002からみると入力)、クロックに合わせて変換データをシーケンシャルに入力(MCP3002からみると出力)すればいい。

そのタイミングチャートがこちら。
ポケコン PC-G850Vで電子回路工作(5/31)_a0034780_15351385.jpg

この中でコマンドと言われるデータ列はサイト様を参考に「1101」とした。
スタートビット=1、シングルエンド(差動入力でない方)=1、CH0使用=0、MSB(最上位ビット)から入力=1、だ。
ポケコン PC-G850Vで電子回路工作(5/31)_a0034780_1543431.jpg

この赤線で引いたところを選択した。

さてタイミングチャートを自分なりに解析した。
ポケコン PC-G850Vで電子回路工作(5/31)_a0034780_15452834.jpg

クロックに合わせて縦線を引き、その時にどの信号をあらかじめタイミングよく立ててやるか、そして信号をどのポケコンのピンに割り当てるかを決めた。
青い字がポケコンのピンで、7~5が出力、4ピンを入力モードで使う。赤い線が実際にピンに与える値で、ちょっとずつずれている。

まず元の図からは、CSは最初のクロックがLOWになる直前より少し前にLOWに落としてやらないといけないという風に読める(つまりCS=LOWとCLK=LOWは同じタイミングではない)ので、じゃあクロックでいう一拍分前からLOWにしてやることに。
それが7ピンの最初の前倒しでLOWの理由。

次に灰色の所は何でもいいようなのでLOWにし、そうするとCLKはCSの前倒しに引っ張られて2拍前からLOWに。

5ピンは、前回(だいぶ前3/下)までのHPで解説したように、クロックの立上がり前からHI/LOWにしておくという事でStartのHIを最初のCLK=LOWの時からHIにしておく。CLK=HIの間もHIをキープ(つまり2拍分)。以下同様にSGL=HI、ODD=LOW、MSBF=HIもCLK2拍分キープ。

最後に、ポケコンの4ピンは入力ピンなのだが、最初のNullBitも同じ考え方で、CLK=LOWになったらNullBit=LOWになり、CLK=HIの間はキープされ、次のCLK=LOWの立下り直前まで安定していると読めるので、CLK=LOWの時はあえて読み出さず、CLK=HIの時に読み出す。それが4ピンが赤の点線になっている理由。

もちろんB9以降は点線が2本になっているがHI/LOWのどちらかという意味。NullBitはLOWだからね。
by k1segawa | 2015-05-31 16:04 | ポケコン | Comments(0)