IC・トランジスタで出来たコンピューターを設計・製作するためのブログ

Jeans & Development 電子ブロック工房 三日坊主 フロントページ

18F14K50で、簡易オシロスコープ その2 [PIC]

2011年11月14日

先の記事で、「家庭用のコンセントの周波数60 Hzを読み取ることが出来た」と書いた。PC側の制御プログラムを完成させようと、この結果を解析してみると、少し問題があることがわかってきた。

まず、PICに1秒間、1ミリ秒当たり24回の測定をさせて、1ミリ秒ごとにデーターを送信させてみた。得られた結果を、Excelでグラフにすると、下のようになった。
2011-11-14-oscillo1.png

18F14K50で、簡易オシロスコープ [PIC]

2011年11月13日

18F14K50で、USB通信の続き。

先の記事で、とりあえずHIDでの通信ができるようになったと書いた。USBの仕様は膨大かつ複雑であり、これをブラックボックスとして扱わないと、先に進めない。当分の間、この複雑な仕様の部分は「改訂新版 PICで楽しむ USB 機器自作のすすめ」に頼って進めることにする。

HIDでは、一定のタイミングで、PCからPICへ、PICからPCへ、通信が行われているらしい。これは、デスクリプタでもそう宣言しているし、ネットで色々調べてみても、普通はそのような形で行くようだ。

18F14k50で、USB通信 [PIC]

2011年11月7日

現在、週末はパチパチマイコンのプログラミングで楽しんでいる。16ビットのかけ算ルーチンが完成したので、次は円周率の計算に行こうと、電源を切らずに置いておいた。が、週の半ばで突然の停電。ここカリフォルニアでは、しょっちゅう停電する。為に、プログラミング途中のコードが全部失われてしまった。また一から打ち込まなければならない。

こんな事になる前に、まずカセットテープインターフェースなどの、保存装置が必要だ。もっとも、カセットテープからのデータを読み込むためのプログラムは、電源を切らずにRAMに置いておくか、毎回手打ちするか、この部分はPROMに焼くかをしないといけないのだけれど。

カセットテープインタフェースの回路設計のため、手持ちの部品で、CMOS-ICからの出力をパソコンで録音して、その録音した音をCMOS-ICに認識させるなどのテストを行ったが、どうやらオシロスコープが必要だということが分かった。

オシロスコープも最近は一万円ほどの値段からあるが、今回のインターフェースが完成すれば後は使うことはなくなるかもしれないし、今回の用途は最小限の性能の物で良さそうなので、自作することにした。MicrochipのPICマイコンにはA/Dコンバーターが付いているので、その値を逐次読み取って、PCに送信するだけの簡単な回路で良さそうだ。

そこで、先延ばしになっていた、PCとPICの間を、USBで通信する手法の会得に着手することに。

先日、日本に一時帰国にしたときに、「改訂新版 PICで楽しむ USB 機器自作のすすめ」を買ってある。しかも、パチパチマイコンの部品を購入する際、ついでにPIC18F14k50と、12 MHzの水晶やUSBプラグ差し込み口等も購入してある。お膳立ては出来ている。

JavaScript Z80 tiny assembler [Z80]

2011年10月27日

Z80パチパチマイコン用に、簡易なアセンブラーを作成した。HTMLとJavaScriptで出来ているので、どこででも使えるのが特徴。

z80V07.html
z80V08.html

z80v095.html
z80v096.html

スナップショットはこちら。

パチパチマイコンが完成した始めの頃、紙の上でハンドアセンブルしていた。最初のうちはこれも趣があってよかったのだけれど、少し規模の大きいプログラミングだと、アセンブラが欲しくなってくる。作成した物は2進数表示もするので、入力したプログラムの確認が容易にできる。暇を見て、エミュレーターも追加するかもしれない。

パチパチマイコン [Z80]

2011年10月26日

少し思うところ在って、Z80のマイコンを作りたくなった。必要最小限の構成で。回路図は、以下の通り。
2011-10-26-Z80.png

Verilogを使ってみた [シミュレーション]

2011年7月2日

今の時代、デジタル回路を考える際、HDL (Hardware Description Language)を会得するのは必須のようらしい。FGPAなどの応用範囲もある。覚えておいて損はない、言語だろう。

VHDLとVerilogの両方を試してみたが、Verilogの方が自分には合っているようだ。

Low Pin Count USB Development Kit [PIC]

2009年10月13日

PICをUSBでPCにつなげたい。日本に住んでいれば、PICで楽しむ USB機器自作のすすめ、この一冊を購入することから始めるのだろうけれど…。

とりあえず、Microchipの『Low Pin Count USB Development Kit』を試してみることにした。

実際にはこのキットは購入していない。購入せずとも、『Low Pin Count USB Development Kit User's Guide』が上記リンクからダウンロードできる。これを読んでみた所、PICkit2があればプログラミングできるようなので、とりあえずPIC18f14k50でのプログラミングがどんなものなのかを体験してみた。

CPU ver 0.0.7.1 [CPU]

2009年10月7日

CPUの規格を、変更。

data line: 8 bits
address line: 14 bits (8 bits + 6 bits; 256 x 64; 16K bytes)

registors A(8), F(8), PC(12), SP(8)
F: Z, C, S5, S4, S3, S2, S1, S0 (Z, C: zero and carry flags; S: segment registor)
stack segment is always 0x3f
program can be written from 0x0000 to 0x0fff (total 4K bytes)


All 2 byte commands

0x00, 0x01, ... , 0x0f: goto, operand: 12 bits.
0x10, 0x11, ... , 0x1f: call, operand: 12 bits.
0x20, 0x21, ... , 0x27: A=A+XX, A=A-XX, A=(XX), [A]=(XX), A=A&XX, A=A|XX, (XX)=A, (XX)=[A] 
0x2800 - 0x28ff: A=XX
0x2900 - 0x29ff: stack-using processes
    bit 0-1: A, reserved, F, or none
    bit 2: use also c7 for read/write
    bit 3: SP++ or SP-- at c4
    bit 4: SP++ or SP-- at c6
    bit 5: SP++ or SP-- at c8
    bit 6: 0: SP++, 1: SP--
    bit 7: 0: read, 1: write (c5)
0x2900 - 0x2907: A=[SP], reserved, F=[SP], reserved
0x2908 - 0x290f: [SP]=A, reserved, [SP]=F, reserved
0x2910 - 0x2917: pop A, reserved, pop F, SP++
0x2918 - 0x291f: [++SP]=A, reserved, [++SP]=F,
0x2920 - 0x2927: A=[SP++], reserved, F=[SP++],
0x2928 - 0x292f: [SP++]=A, reserved, [SP++]=F,
0x2930 - 0x2937: A=[++SP++], reserved, F=[++SP++], SP+=2, , , , return
0x2938 - 0x293f: [++SP++]=A, reserved, [++SP++]=F,
0x2960 - 0x2967: A=[SP++++], reserved, F=[SP++++], 
0x2968 - 0x296f: [SP++++]=A, reserved, [SP++++]=F,
0x2970 - 0x2977: A=[++SP++++], reserved, F=[++SP++++], SP+=3
0x2978 - 0x2978: [++SP++++]=A, reserved, [++SP++++]=F,
0x2990 - 0x2997: A=[--SP], reserved, F=[--SP], SP--
0x2998 - 0x299f: [--SP]=A, reserved, [--SP]=F,
0x29a0 - 0x29a7: A=[SP--], reserved, F=[SP--],
0x29a8 - 0x29af: push A, reserved, push F,
0x29b0 - 0x29b7: A=[--SP--], reserved, F=[--SP--], SP-=2
0x29b8 - 0x29bf: [--SP--]=A, reserved, [--SP--]=F,
0x29e0 - 0x29e7: A=[SP----], reserved, F=[SP----],
0x29e8 - 0x29ef: [SP----]=A, reserved, [SP----]=F,
0x29f0 - 0x29f7: A=[--SP----], reserved, F=[--SP----], SP-=3
0x29f8 - 0x29ff: [--SP----]=A, reserved, [--SP----]=F,
0x2a00 - 0x2a03: A=A (NOP), reserved, A=F, A=SP
0x2a04 - 0x2a07: reserved
0x2a08 - 0x2a0b: F=A, reserved, resreved, F=SP
0x2a0c - 0x2a0f: SP=A, reserved, SP=F, reserved
0x2a10 - 0x2aff: reserved
0x2b00 - 0x2dff: reserved
0x2e00 - 0x2eff: (XX)++
0x2f00 - 0x2fff: (XX)--

0x30, 0x31, ... , 0x38: A=A+(XX), A=A-(XX), A=A+(XX)+C, A=A-(XX)-C, A=A&(XX), A=A|(XX), A=A^(XX), A=~(XX)
0x39, 0x3a, ... , 0x3f: (XX)=(XX)+A, (XX)=(XX)-A, (XX)=(XX)+A+C, (XX)=(XX)-A-C, 
                        (XX)=(XX)&A, (XX)=(XX)|A, (XX)=(XX)^A, (XX)=~A
0x40, 0x41, ... , 0x4f: jz, operand: 12 bits.
0x50, 0x51, ... , 0x5f: jc, operand: 12 bits.
0x60, 0x61, ... , 0x6f: jnz, operand: 12 bits.
0x70, 0x71, ... , 0x7f: jnc, operand: 12 bits.
0x80, 0x81, ... , 0x8f: reserved
0x90, 0x91, ... , 0x9f: reserved
0xa0, 0xa1, ... , 0xaf: reserved
0xb0, 0xb1, ... , 0xbf: reserved
0xc0, 0xc1, ... , 0xcf: reserved
0xd0, 0xd1, ... , 0xdf: reserved
0xe0, 0xe1, ... , 0xef: reserved
0xf0, 0xf1, ... , 0xff: reserved

(XX) = [3Fh:XX]; used as registors; genelary, F8-FF (8 registors) are used.

PIC16f690とMAX232でシリアル通信 [PIC]

2009年9月27日

PCとPICとの間で通信ができれば、マイクロコントローラを用いた回路の可能性が広がる。今時のコンピューターでは外部回路との通信にはUSBがメインだが、PIC18f14k50などを用いれば、これができるらしい。他には、FT232Rなどを用いた方法があるようだ。これらの方法は、USB用のドライバを用意する必要があるという点で、少し敷居が高い。少し勉強して、後ほどトライすることにしたい。

今やろうとしているのは、MAX232を用いてRS232Cで通信する方法。今使っているノートパソコンにはRS232Cの端子は無いのだが、USB→RS232C変換機を用いてRS232Cのシリアル通信を行うことができる。

PIC16f690とMAX232

PIC16f690を使った周波数測定器と発振回路 [PIC]

2009年9月19日

色々と考えるところ有って、PIC16f690を用いて、1 Hzから50 MHzまで測定できる簡易周波数測定器と、その動作検証のための発振回路を作成した。

周波数測定器/PIC16f690
<<前の記事   後の記事>>