<   2015年 05月 ( 16 )   > この月の画像一覧

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

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

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

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

部品も自作でき、前回のサイト様(ラズパイ用だったが)を参考に描いたのがこれ。
a0034780_16543034.jpg


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

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

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

さて結線してプログラム組むぞー
[PR]
by k1segawa | 2015-05-31 17:02 | ポケコン | Comments(0)

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

これ(前頁)を元に、いつものように、BASICのDATA文やCの配列データを組み立てる。(もちろんデータ駆動っぽくするため。別に手続型っぽく書いてもいいが)

以下の図はGoogle Sheetで記述。
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ビットの解像度で取得できるハズ。
[PR]
by k1segawa | 2015-05-31 16:45 | ポケコン | Comments(0)

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

A/D変換の準備を行った。

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

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

そのタイミングチャートがこちら。
a0034780_15351385.jpg

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

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

さてタイミングチャートを自分なりに解析した。
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だからね。
[PR]
by k1segawa | 2015-05-31 16:04 | ポケコン | Comments(0)

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

次にA/D変換でMCP3002を使ってみるので、前回の回路をfritzingで描いておく。
a0034780_1914855.jpg

[PR]
by k1segawa | 2015-05-30 19:14 | ポケコン | Comments(0)

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

しばらく間が空いてしまった。

リハビリを兼ねて5/6のBASICプログラムをC にしてみる。

【BASICプログラム】
10:OUT &H60,1
20:OUT &H61,1
30:A=INP &H62
40:IF A=1 THEN OUT &H62,2 ELSE OUT &H62,0
50:PRINT A;
60:GOTO 30

TEXTモードにして入力(メニューからEditを選ぶ)。

【Cプログラム】
10  main() {
20 unsigned char a;
30
40 outport(0x60,1);
50 outport(0x61,1);
60 loop:
70 a=inport(0x62);
80 if(a==1) {
90 outport(0x62,2);
100 } else {
110 outport(0x62,0);
120 }
130 printf("%d",a);
140 goto loop;
150 }
念の為、TEXTモードでセーブ(メニューからSAVEを選ぶ。)
FileName=SW.C とする。

Cモード(Shift+TEXTボタン)にして、コンパイル(メニューからCompile)して実行(メニューからGo)すると、画面には0がずらーっと。SWを押すと0の後に1が続けて表示。押すのをやめると、0に戻る。
a0034780_20571068.jpg

BASICよりは全然早いが目に留まらぬほどでもない。画面表示が遅いのか?
従ってチャタリングによるSW押下時の101010みたいなSWの接点バウンド(バウンダリング)は、見られなかった。
[PR]
by k1segawa | 2015-05-27 21:03 | ポケコン | Comments(0)

ポケコン PC-E500系 256/512KB RAMカードの使い方 (5/15)

512KRAMカードを購入した。

使い方がわからないので、メモ。
・買ったばかりはバックアップ電池が付いているのでCR1616は買わなくてよい。
・バンク1、書込み可にSWはなっているのでそのまま差し込めばよい。
・RAM用裏蓋を開けたら、本体の右側の矢印のついた引っかけ器具をしっかり引っ張って引っかける事。すこしやりずらい。
・電源ONしてもなにもでない。
・FRE0でも増えない。
・でもFiles"S2:"とやると空で、SAVE"S2:XXX.BAS"とやるとFiles"S2:"でXXX.BASが表示される。
Files"S1:"でデフォルトのファイル(DATA/TEXT/AER/KEY?)が保存されているのがわかる。

念の為、電源OFFにして、電源ONキーを押しながらリセット穴を突き、突きをやめてから電源ONキーから手を放す。
ナイゾウメモリ(S2:)
シヨウシマスカ?(Y/N)・・・1
ショキカシマスカ?(Y/N)・・・2
ナイゾウメモリ(S1:)
ショキカシマスカ?(Y/N)・・・3

と出てくるようになる。
1でY,2はXXX.BASを消したくなかったのでN,3はNでデフォルトのファイルを残した。

相変わらずメモリは増えない。(3.2万/6.6万)

ところが、
MEM$="S2"
としたら、Files"S2:"でデフォルトのファイル(DATA/TEXT)が自動作成された。
これは!と思って、
FRE0とやると26万ぐらいの値に増えた。
やったー!
Files"S1:"とやるとデフォルトのファイルは残っている。

つまりMEM$="S2"は256/512KBRAMではMEM$="B"と同じらしい。(MEM$="B"は出来ないらしい)
ただし本体のメモリは統合されず、256KB。(+32/64KBではない)
でもその代り、Files"S1:"で本体の32/64KBのエリアにファイルを置くことはできる。

つまり、
【MEM$="S1"実行後】
S1=32/64KBが本体メモリ(プログラムエリア)とファイルデータエリア。
S2=256KBがファイルデータエリア。

【MEM$="S2"実行後】
S1=32/64KBがファイルデータエリア。
S2=256KBが本体メモリ(プログラムエリア)とファイルデータエリア。

ここでいう256KBは256KBRAMカードの事。512KBRAMカードのバンク1/2でもある。

~RAMファイルというのとは違う。RAMファイルとはRAM上にランダムアクセスできる仮想のデータファイルを作ること。ファイルエリアは領域確保(HDDのようなもの)だが、RAMファイルはファイルの確保。~
(まあRAMファイルはめったに使わないので忘れてよい―住所録のような”データ”を保存するのにファイルオープン関数を使う時ぐらい)
[PR]
by k1segawa | 2015-05-15 00:57 | ポケコン | Comments(0)

Windows 8.1 64bit Logitech Cordless Mouse M-RM67A(Receiver) のdriver (5/10)

上記のロジテックのワイヤレスマウス M-RM67AをWindows8.1 SP1 64bit で使う。

最新版のkeyboard & Mouse のpear の製品のドライバである、Cordless Desktop MX 5500 RevolutionのdriverをInstallする。
http://support.logicool.co.jp/product/cordless-desktop-mx-5500-revolution

a0034780_1595246.jpg

[SetPointDetails Smart Install]

SetPoint6.65.62_smart.exe

Download Link:
http://download01.logitech.com/web/ftp/pub/techsupport/mouse/SetPoint6.65.62_smart.exe
a0034780_201011.jpg

勝手にインストール後、一旦Device Managerでunknown DriverをDelete後、USBを再度差し込む。
するとLogicool HID-compliant Gaming Mouse G90/G100/G100s とLogitech HID-compliant Cordless TrackballというのがDevice ManagerでAppendされる。

この後Receiver側のconnectボタンをpushすると、接続されて使えるようになる。

たぶんWindows XP用かWindows 2000用に買ったので、まだ使えるとは思わなかった。
[PR]
by k1segawa | 2015-05-10 01:56 | Comments(0)

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

プルダウン抵抗でのタクトスイッチ入力をBASICで検出した時、チャタリングを解消できるか確認した。
ポケコン PC-G850Vで電子回路工作(4/12)の回路を繋ぎ、前回の教訓に従い、Vcc(+5V)側に10kΩの抵抗を挟んで、BASICで次のように組む。

10:OUT &H60,1
20:OUT &H61,1
30:A=INP &H62
40:PRINT A;
50:GOTO 30

これを実行してタクトスイッチをOFF/ONすると、画面には
0. 0. 0. (...) 1. 1. 1.(...)
とOFFの間0、ONの間1で表示された。

チャタリングは見られない。
BASICでは遅すぎる?ようで、マシン語レベルでないとチャタリングは検出できないようだ。
第1章 電子回路の基礎知識様の末尾にもあるように、遅くていいアプリケーションで標準ロジックICで作った回路レベルならBASICでも確実に動くのだろう。

まあいいか。

じゃあこの際、ついでに出力ピンを繋いでAの値によってON/OFFするようにしてみる。出力ピンの先にはLEDを接続する。

【タクトスイッチでLED ON/OFF(ソフトウェア制御)】
一旦ポケコンに入力を取り込んでからLEDをON/OFFするので、ソフトウェア制御と題した。
a0034780_224542.png

結線は上記のようにした。太線の所が前回からの追加箇所。Vccに10kΩの抵抗追加、5番ピンにLED接続。4番ピンが入力で、5番ピンが出力。GNDは3番ピンで共通。点線内部は自分で仮想的に考えた回路なので無視してよい。

BASICは先ほどのやつに5番ピンを出力モードにして、Aの値で62Hの5番ピンのビット(下位2ビット目)をON/OFFする。(出力モードには既になっている)

【SWによるLEDソフトウェア制御:プルダウン抵抗版のBASICプログラム】
10:OUT &H60,1
20:OUT &H61,1
30:A=INP &H62
40:IF A=1 THEN OUT &H62,2 ELSE OUT &H62,0
50:PRINT A;
60:GOTO 30

(PC-G850V取扱説明書によるとP.368にPIOPUT・・・パラレルアウトプットというコマンドがあり、その注釈に●OPEN"PIO:"により8ビット制御が指定されているときに、PIOSET命令で出力モードに設定された端子からデータを出力します。1回の命令実行で0~255の範囲内の値を1回だけ返します。●PIOSETで指定した出力端子のうち、式で指定したビット分だけマスクして出力します。~●PIOSET命令で入力モードに設定されている端子は無視されます。とあるので、OUT &H60,1はOPEN、OUT &H61,1はPIOSETと同じことなので、2ビット目の値を出力する際には1ビット目の入力モードに指定したピンへはマスクされて出力されないらしい。よかった。入力ピンに出力しないか?と勘ぐってしまった。ちなみに取説にはこの後(注)●8ビット制御を行うための入出力機器を製作する場合は、入出力ライン(EX2~Busyライン)に必ず保護抵抗(1kΩ以上)を取り付けてください。とある。EX2~Busyラインというのは62Hのビット7から0の事とPIOSETコマンドに書いてあって4~11番ピンには1kΩ以上の抵抗を入れろと言っている。なるほど~)

実行すると、LEDは消灯状態で画面には0を出力し、SWを押すとLEDが点灯し画面には1が出力された。

おー、これで基本的には入出力制御ができた。これを拡張していけば複数SWの押し方で複数のLEDを任意パターンで点灯できる。押しっぱなしをソフトで検出すれば、カウンタで何回押したかプログラムで判定して、繋いだ7セグLEDに数字を表示する事ができる。デジタル入力はできた。次はA/D変換ICによるアナログデータの入力かな。
[PR]
by k1segawa | 2015-05-06 22:29 | Comments(0)

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

だいぶ間が空いたが、ポケコンに入力を行う回路の作成を再開する。

2つ方式があって、チャタリングをソフトで行う場合とハードで行う場合のケースがある。

回路を単純にするならソフトで行うのだが、ポケコンがチャタリングの短い読み出し間隔で処理できるかが、問題となる。もちろんC言語でコンパイルして速度を上げてもいいし、一部をマシン語で組んでもいい。

ハードならチャタリングを解消するのはシュミットトリガ・インバータ(74HC14)とRC回路という抵抗とコンデンサを合わせたものが必要になる。
第1章 電子回路の基礎知識様の下の方にRC回路の話とシュミットトリガ・インバータの話がある。

あと、再開前のポケコン PC-G850Vで電子回路工作(4/12)では、プルダウン抵抗、さらに前のポケコン PC-G850Vで電子回路工作(3/31)では、プルアップ抵抗を検討していたが、なんで両方ともVccやGNDに直結でいいのか疑問だった。よくある回路ではTTLだろうとMOS-FETだろうとVcc・GND側にも10kΩ程度の抵抗が入っていた。

教えて!goo の IC未使用端子処理のプルダウン/プルアップ抵抗でそのことが分かった。

結局直結でいいのだが、プルダウンかプルアップにするかはポケコン内部の回路がNPNかPNPかわからないと本来危ない。なのでどちらでも大丈夫なように?(この理由がわかるのが当然のように書かれているが私にはわからない)抵抗を入れるらしい。で1K~100KΩでよいのだが、のちの改造を考えて10kΩらしい。
さらにマイコンポートは出力との切り替えもできるから誤って出力(やりそう・・・)その時直結はまずいので抵抗を入れるというのはNo.1回答者の答えにある。

うーん、以前作った回路にはやっぱり10kΩを入れとこう。そしてチャタリングを解消するようなソフトを第一弾で作成する事にする。前回までのは、スイッチ離しっぱなしか押しっぱなしの時の入力値だからね。
[PR]
by k1segawa | 2015-05-06 13:33 | ポケコン | Comments(0)

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

さらに、MOS-FETトランジスタ(頭痛が痛いで気持ち悪いが)は、N型、P型の違いで特徴がある。

N型:ゲートに+を加えるとソース/ドレイン間に電流が流れる。
P型:ゲートに-を加えるとソース/ドレイン間に電流が流れる。

ソースはVssでGND、ドレインはVddで+3.3~の電源で、N型・P型で電流の向きが変わる訳では無い。あくまでもドレインの+からソースの-へ流れる。

これは、CMOSデジタル回路様の図を見るとわかる。
N型の説明だが、
N型だとゲート付近に「電子」が集まり、N型の間に電子の橋ができソース←ドレインの方向に電流が流れ、
P型だとゲート付近に「正孔」が集まり、P型の間に正孔の橋ができソース←ドレインの方向に電流が流れるのだ。

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

これを踏まえるとCMOSの原理がわかる。
CMOSのWikipediaより、CMOSによるインバータという図で、上の○があるのがそれ全体でP型MOS-FETであり、下の○無しがN型MOS-FETである。

A(IN)に+の電圧をかけると両方のゲートにかかる。P型だけ○で-になる訳では無いことに注意。
すると上記の特徴からN型のみ機能しVssへ電流が流れてQ(OUT)から電流が流れ込み-を示すことになる。
A(IN)に-の電圧をかけると、P型のみ機能しVddから電流が流れてQ(OUT)へ電流が吐き出され+を示すことになる。

つまり+をかけると-を示し、-をかけると+を示し、インバータ(反転)機能となる。

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

【プッシュプル回路】
MOS-FETで上記のWikiの回路を組むとCMOS(インバータ)と言われ、
バイポーラトランジスタで組むとプッシュプル「増幅」回路と呼ばれるようだ。
MOS-FETで組んで”プッシュプル回路”と呼んでいるのは一部の古い書籍だけのようだ。
よってプッシュプル回路はバイポーラトランジスタによる(コイルでもできるようだ)増幅回路の事であり、
最初に戻ってGPIOの出力回路に採用されているのは、CMOSインバータ回路と呼ぶべきだろう。
[PR]
by k1segawa | 2015-05-06 01:10 | ポケコン | Comments(0)