SSブログ
English Version

レトロマイコンZ80ボードの構想(その5)ピンアサイン [Z80]

 前回の記事で書いたように PIC24FJ64GA004 のDIP化変換基板が出来たのでピンサインの検討とSPIの簡単な実験を行ってみました。

 「レトロマイコンZ80ボードの構想(その2)」の記事で書いたように今回は128KBytesの外部メモリも制御するので44pinのPIC24FJ64GA004でもピンが不足します。

 従って外部メモリとSPI等、同時に使うことがないものは同じピンに重ねてアサインすることになります。
 現時点でのピンアサインの構想をまとめたものが下表になります。外部メモリが外部ピンを大食いしている状態です w
 左端のカラムには使用済みの場合に自動でマークが表示されます(全て使用済みの状態)。

PIC24FJ64GA004 Pin Assign

★2018/01/30 変更 Z80とのI/Fが抜けていたので追記しました。
★2018/02/25 変更 Z80のアドレスとデータを追記
★2018/03/03 変更版をその11に記載

 SDカード制御のための SPI についても軽い実験をしてみました。
 'A'と'B'の文字コードを送信しているだけのものですがSPIのモード等はSDカードに合わせたつもりです。
 SPIのチップセレクト(PPS_SS1OUT)はRP出力にアサインしても想定した信号が出ない(ピンとしては入力状態のままになっている)ので少し悩みましたがmasterモードの時はSPIのCSはI/Oを使って自分で制御する必要があるみたいです(複数のslaveを接続する場合を考えれば当然のことかも)

 今回のZ80ボードではクロックを16MHzか8MHzにする予定なので信号の確認作業を効率化するために最大100MHzサンプリング(3入力時)の16chのロジアナを購入しました ^^
 SPIでの送信時の画面サンプルが下のキャプチャです。

ロジアナ画面(SPI送信)


 このような実験の際には手軽にソース変更ができ、コンパイル&フラッシュメモリへの書込みがオンチップで瞬時に完了する picle言語の環境が威力を発揮します。(ちょっと宣伝w)

 実験で作ったpicleソースは下記のとおりです。
 今回はソースをhtmlに成形してみました。(私はエディタではタブサイズを4にしているのでコメントのインデントが少し乱れています)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# SPI test for PIC24FJ64GA004 with picle
#  Ver 0.01 by skyriver 2018/01/29

var SPISTAT,SPIBUF;
var _RPINR20,RPOR1;
var _REG,AD1PCFG;
var TRISA,LATA;


proc TmWait( n ) {
	var i;
	for (; n ; n=n-1) {
		i = 123 + i;
	}
}

		
proc init() {
	SPISTAT = $0240;	# SPI1 status
	SPIBUF = $0248;
	RPOR1 = $06c2;
	AD1PCFG = $032c;
	AD1PCFG[0] = $ffff;	# I/O
	TRISA = $02c0;
	LATA = TRISA + 4;

	SPISTAT[1] = $0039;	# SPI1CON1 prescale2:2,prescale1:16 = 32:1
	SPISTAT[2] = 0;		# SPI1CON2
	SPISTAT[0] = $8000;

	_RPINR20 = $06a8;
	_RPINR20[0] = 18;		# SDI -> RP18
	RPOR1[0] = $0708;		# CLK -> RP2, SDO ->RP3
	TRISA[0] = TRISA[0] & $fffb;
	LATA[0] = $0004;
}


proc main() {
	var c,i;
	init();
	c = 'A';
	for (i=0; i<2; i=i+1 ) {
		TmWait( 20 );
		LATA[0] = 0;
		SPIBUF[0] = c;
		c = c + 1;
		if ( c > 'Z' ) { 
			c = 'A';
		}
		TmWait( 18 );
		LATA[0] = $0004;
	}
}


 因みにXC16コンパイラ用に書き直すと次のようになります。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
// SPI test
// Ver 0.01 by skyriver 2018/01/29

#include <xc.h>
#include <spi.h>
#include <pps.h>
#include <libpic30.h>

 
#define FCY 32000000UL
#define SPI1_CS LATAbits.LATA2


// CONFIG2
#pragma config  POSCMOD   = NONE,\
                I2C1SEL   = PRI,\
                IOL1WAY   = ON,\
                OSCIOFNC  = ON,\
                FCKSM     = CSDCMD,\
                FNOSC     = FRC,\
                SOSCSEL   = SOSC,\
                WUTSEL    = LEG,\
                IESO      = OFF
 
// CONFIG1
#pragma config  WDTPS     = PS1,\
                FWPSA     = PR128,\
                WINDIS    = OFF,\
                FWDTEN    = OFF,\
                ICS       = PGx1,\
                GWRP      = OFF,\
                GCP       = OFF,\
                JTAGEN    = OFF

void delay_us( unsigned int usec )
{
	for( ; usec ; usec-- ) {
		asm("repeat #9" );
		asm( "nop" );
	}
}


void init()
{
	_RCDIV = 0;	//PostScaler   ( 0 : 32MHz   1 : 16MHz )
	OpenSPI1(
        // config1
		ENABLE_SCK_PIN &	// enable SPICLK
		ENABLE_SDO_PIN &	// enable SDO
		SPI_MODE8_ON &      // set 8bit mode
		SPI_SMP_OFF &
		SPI_CKE_OFF &
		SLAVE_ENABLE_OFF &	// set slave SS off
		CLK_POL_ACTIVE_HIGH &	// set CLK to Active High
		MASTER_ENABLE_ON &      // set master mode
		SEC_PRESCAL_2_1 &
		PRI_PRESCAL_16_1,

		FRAME_ENABLE_OFF,
 
		SPI_ENABLE &
		SPI_IDLE_CON &
		SPI_RX_OVFLOW_CLR
	);
	PPSInput( PPS_SDI1, PPS_RP18 );
	PPSOutput( PPS_RP3, PPS_SDO1 );
	PPSOutput( PPS_RP2, PPS_SCK1OUT );
//	PPSOutput( PPS_RP17, PPS_SS1OUT );	// not effect in master mode
	TRISAbits.TRISA2 = 0;		// set output
	SPI1_CS = 1;	// set unselected
}


int main(void)
{
	init();
	delay_us( 50 );
	SPI1_CS = 0;	// set selected
	_SPI1IF = 0;	// clear Interrupt flag
	WriteSPI1('A');
	delay_us( 18 );
	SPI1_CS = 1;
	for(;;);
	return( 0 );
}


★2018/01/31 追記
 実験中に次の2つの問題が発生したのでメモしておきます。
  1. SDカードとの接続
     インターネット上の情報では MCU と SDカードのSDI及びSDOをそれぞれ同じ名称同士をつなぐように書いてあるものが多い?ですが、PIC24FJの場合はテレコに繋ぐ必要がありました。

  2. アイドル時のクロック状態
     参考にしたwebページではアイドル時にクロックが low 状態だったのでそれに合わせましたが、次に問題が発生しました。

    • web上にある情報に従いクロック立上りでラッチ(サンプリング)できるタイミングでコマンドを送信してもSDカードが反応しない。立下りでラッチするように送信するとSDカードが反応する。

     別のサイトの情報を見るとアイドル状態でクロックは high になっているタイムチャートを見つけたのでアイドル時にクロックを high になるように変更したところ、立上りラッチのタイミングでコマンドを送信するとSDカードが反応するようになりました。

 SDカードに cmd0 送信後、応答(0x01)を受けるまでのロジアナ画面を貼っておきます。

CMD0送信シーケンス


 picleソースのリスト表示と実行結果も付けておきます。クロックは333kにしていますが、500kでも動作しました。
 (html化するとiPhoneのChromeでは行番号が崩れて表示されたので今回は従来通りの貼り方にします)
★2018/02/03 リスト表示部がスクロールするようにしてみました。

:l 1:# SPI test to connect SD card for PIC24FJ64GA004 with picle 2:# Ver 0.01 by skyriver 2018/01/31 3: 4:var SPISTAT,SPIBUF; 5:var _RPINR20,RPOR0; 6:var _REG,AD1PCFG; 7:var TRISA,LATA; 8: 9:var _Buf,Bcnt; 10: 11: 12:proc init() { 13: SPISTAT = $0240; # SPI1 status 14: SPIBUF = $0248; 15: RPOR0 = $06c0; 16: AD1PCFG = $032c; 17: AD1PCFG[0] = $ffff; # I/O 18: TRISA = $02c0; 19: LATA = TRISA + 4; 20: 21:# SPISTAT[1] = $0079; # SPI1CON1 prescale2:2,prescale1:16 = 32:1 500k 22: SPISTAT[1] = $0075; # SPI1CON1 prescale2:3,prescale1:16 = 48:1 333k 23: SPISTAT[2] = 0; # SPI1CON2 24: SPISTAT[0] = $8000; 25: 26: _RPINR20 = $06a8; 27: _RPINR20[0] = 18; # SDI -> RP18 28: RPOR0[0] = $0708; # CLK -> RP0, SDO ->RP1 29: TRISA[0] = TRISA[0] & $fffb; 30: LATA[0] = $0004; 31: 32: _Buf = Array_(0); 33:} 34: 35: 36:proc SpiRcv() { 37: if ( SPISTAT[0]&1 ) { 38: _Buf[ Bcnt ] = SPIBUF[0]; 39: Bcnt = Bcnt + 1; 40: } 41:} 42: 43:proc SpiSnd( dat ) { 44: while ( SPISTAT[0]&2 ) { 45: SpiRcv(); 46: } 47: SPIBUF[0] = dat; 48:} 49: 50:# wait about 2us * n 51:proc TmWait( n ) { 52: var i; 53: for (; n ; n=n-1) { 54:# i = 123 + i; 55: SpiRcv(); 56: } 57:} 58: 59: 60:proc main() { 61: var i; 62: 63: init(); 64: 65: TmWait( 50 ); 66: LATA[0] = 0; 67: SpiSnd( $40 ); 68: SpiSnd( $00 ); 69: SpiSnd( $00 ); 70: SpiSnd( $00 ); 71: SpiSnd( $00 ); 72: SpiSnd( $95 ); 73: SpiSnd( $ff ); 74: SpiSnd( $ff ); 75: TmWait( 30 ); 76: 77: LATA[0] = $0004; 78: for ( i = 0; i<Bcnt; i=i+1 ) { 79: PrnHexB_( _Buf[i] ); 80: PrnStr_( " " ); 81: } 82: PrnStr_("status:"); 83: PrnHex_( SPISTAT[0] ); 84:} :run FF FF FF FF FF FF FF 01 status:8000 :



★2018/02/02 追記
 SPIでのSDカードとの通信ですが、データ送信時のクロックに対応した受信データ(ない場合は0xff)を確認しながらコマンド送信しようとすると1バイト送信後、1バイト受信するまで待つことになります。
 このため送信データと次の送信データの間に受信データチェックのための時間分、クロックが停止する無駄な時間が発生してしまいます。
(上記の追記では逐次受信フラグをチェックしています・・最終実装としては割込みで受信するイメージ)

 しかしSDカードとの通信は半二重なのでコマンド送信終了してから受信バイトが来るはずなのでコマンド送信中は受信フラグを気にせず、SDカードからの受信応答を読む時に0xffを送信しながら受信フラグをチェックし、受信があったらCSをdisableにするのが実装も簡単で通信時間も短くなります。(CSをdisableにした後に約1バイト分クロックが出続きますが悪影響はないと思う)
 CS信号をdisableにするタイミングも気にしなくて良くなりました。

 下図はこのような処理にした場合のロジアナで観測した波形です。(クロックを500MHに上げています)

通信簡略化でのロジアナ波形


 picleでのソースは下記のようになります。
 かなりすっきりしたソースになりました。

:l 1:# SPI test to connect SD card for PIC24FJ64GA004 with picle 2:# Ver 0.02 by skyriver 2018/02/02 3: 4:var SPISTAT,SPIBUF; 5:var _RPINR20,RPOR0; 6:var _REG,AD1PCFG; 7:var TRISA,LATA; 8: 9:var _Buf,Bcnt; 10: 11: 12:proc init() { 13: SPISTAT = $0240; # SPI1 status 14: SPIBUF = $0248; 15: RPOR0 = $06c0; 16: AD1PCFG = $032c; 17: AD1PCFG[0] = $ffff; # I/O 18: TRISA = $02c0; 19: LATA = TRISA + 4; 20: 21: SPISTAT[1] = $0079; # SPI1CON1 prescale2:2,prescale1:16 = 32:1 500k 22:# SPISTAT[1] = $0075; # SPI1CON1 prescale2:3,prescale1:16 = 48:1 333k 23: SPISTAT[2] = 0; # SPI1CON2 24: SPISTAT[0] = $8000; 25: 26: _RPINR20 = $06a8; 27: _RPINR20[0] = 2; # SDI -> RP2 28: RPOR0[0] = $0708; # CLK -> RP0, SDO ->RP1 29: TRISA[0] = TRISA[0] & $fffb; 30: LATA[0] = $0004; 31:} 32: 33: 34:# wait about 1us * n 35:proc TmWait( n ) { 36: var i; 37: for (; n ; n=n-1) { 38: i = 123 + i; 39: } 40:} 41: 42: 43:func SpiRcv() { 44: return = $ff; 45: SPISTAT[0] = $8000; # clear over flow flag 46: do { 47: if ( SPISTAT[0]&1 ) { 48: return = SPIBUF[0]; 49: } 50: else if ( (SPISTAT[0]&2 ) = 0 ) { 51: SPIBUF[0] = $ff; 52: } 53: } while ( return = $ff ); 54:} 55: 56: 57:proc SpiSnd( dat ) { 58: while ( SPISTAT[0]&2 ) {} 59: SPIBUF[0] = dat; 60:} 61: 62: 63:proc main() { 64: var ans; 65: 66: init(); 67: 68: TmWait( 30 ); 69: LATA[0] = 0; 70: SpiSnd( $40 ); 71: SpiSnd( $00 ); 72: SpiSnd( $00 ); 73: SpiSnd( $00 ); 74: SpiSnd( $00 ); 75: SpiSnd( $95 ); 76: ans = SpiRcv(); 77: LATA[0] = $0004; 78: 79: if ( ans = 1 ) { 80: PrnStr_( "ok" ); 81: } else { 82: PrnStr_( "Ng:" ); 83: PrnHexB_( ans ); 84: } 85: PrnStr_( " status:" ); 86: PrnHex_( SPISTAT[0] ); 87:} :run ok status:8001 :




[TOP] [ 前へ ] 連載記事 [ 次へ ]

nice!(0)  コメント(2) 
共通テーマ:趣味・カルチャー

レトロマイコンZ80ボードの構想(その4)TQFP変換基板の作成2 [Z80]

 「レトロマイコンZ80ボードの構想(その3)TQFP変換基板の作成」の記事で自作した PIC24FJ64GA004 用のTQFP用DIP変換基板について書きましたが、色々問題(下記)があったので作り直しました。

  1. ピンヘッダの間隔
     ピンヘッダの間隔(上下の列の間隔)が2.54mmの倍数ではなかったのでブレッドボードに実装する際、ピンヘッダの足が少し斜めになってしまいました ^^;;

  2. ブレッドボードに入れ辛い
     手持ちのピンヘッダを使いましたが、ブレッドボードに取付ける際、結構きつく、無理に押し込むとピンヘッダのピンが上にずれて、変換基板のパターンが断線してしまいました ^^;;;

  3. TQFPパッケージの半田付け
     クリーム半田とホットガンをつかってTQFPパッケージを半田付けしていましたが、ステンシルを作っていなかったのでクリーム半田をきれいに塗布できず(多めに塗って余分な半田を取り除いた)、見た目も汚いし結構手間がかかりました。

 それぞれの問題に対する対策は次のようになります。
  1. ピンヘッダの間隔
     DisgnSparkPCBで44ピンのDIPのフットプリントを修正しました。パターンスペース的にはもう少し幅を狭くできそうですが2.54mmの倍数という条件ではこのサイズが限界です。
     一番外側の枠はレーザーカッターで刻印する際に基板の位置合せのためにTop Documentation レイヤーに書いた枠です。FlatCAMでNCファイルに変換してレーザーカッターで読込んでいます。

    修正パターン

  2. ブレッドボードに入れ辛い
     ブレッドボード用の細いピンのピンヘッダがあるみたいなので秋月電子さんから購入しました。
     また、ピンヘッダの樹脂部分の保持力が弱く(通常の太さのピンヘッダも同様)、ある程度力が加わるとピンがずれてしまいます。
     今回は基板のホールを 0.6mm にして、ピンヘッダがやっと入る状態にしたので半田付け後のピンの保持力はかなり強化されたものと思います。

  3. TQFPパッケージの半田付け
     前回、半田付けのリカバリ作業をしていてTQFP程度であれば、半田ごてで十分対応できると感じたので今回は事前にパターンに半田を盛り、その後にTQFPのピンを半田ごてで加熱して半田付けしました。
     予想通りこの方が作業的には楽で半田付け後の見た目も奇麗になります。


 CNCルーターでのミリング後が下の写真です。パターンが見易くなるように反射した状態で撮影しました。
 作業方法については前回の記事と同様です。但し、今回は切削時のZ位置を -0.04mm (前回は-0.06mm)にしています。
 前回と比較し、切削幅が少し細くなったのと切削時の抵抗が軽減したことから切削パターンもNCファイルの内容により忠実になっています。

ミリング結果



 下がソルダーレジスト後の写真です。左下が少し剥がれてしまっています^^;
 ミリング後、サンドペーパーをかけていますが、角の部分の銅が擦り減り易く、その部分にソルダレジストが付きにくいようです。

ソルダーレジスト後


 レーザーカッターで刻印後、シルバーのマジックを塗ったものが下の写真です。今回は、レーザー刻印後、無水アルコールで拭いて焦げた粉を取り除いたので前回よりは綺麗にできています。

レーザー刻印(疑似シルク)


 下の写真はPIC24FJ64GA004を実装後のものです。
 上記のように今回はクリーム半田を使わずに半田付けしました。前回よりは見た目も綺麗になっています。
(でも拡大写真にすると肉眼で見たよりも圧倒的に汚い・・・)

チップ実装後



★追記 2022/05/10
 TQFPとTSOP兼用の変換用プリント基板の作成について下記の記事に記載しました。


[TOP] [ 前へ ] 連載記事 [ 次へ ]

nice!(0)  コメント(0) 
共通テーマ:趣味・カルチャー

CNCルータ DCジャックの修理 [修理]

 プリント基板の製作のためにCNCルーターをいじっていたらステッパーモーター用の12V電源が突然OFFになる現象が発生しました。^^;;

 ACアダプタが接続されているDCジャックを触ったら復旧したのでDCジャックの接触不良が発生しているようです。

 コントロール基板の写真が下の写真で左上の隅に二つ並んでいるDCジャックの下側がステッパー用の12V入力です。よ~く見ると中央部分が少し膨らんでいます。(クリックすると問題部分の拡大写真になります)
 エンドミルを動作範囲外のところまで移動してしまった際(ステッパーが回転できず「ガガガ」の状態)等に大きな電流が流れ、抵抗の大きいDCジャック部分が発熱し変形したものと思います(私の安価なCNCミニルーターにはリミットスイッチは付いていない)

 以前、プリント基板作成作業中に何度かゼロ点がずれることがありましたが原因が不明のままでした。DCジャックの接触不良が原因だったのかもしれません。しばらく様子を見たいと思います。

CNCルーターのコントロール基板


 最近、PIC24FJ64GA004(44ピンのTQFPパッケージ)を秋月電子さんから通販で購入した際、運よくDCジャックも購入していました ^^
 秋月電子さんから購入したDCジャックと交換後が下の写真です。左側に転がっているのは取り外したDCジャックです。

修理後のコントロール基板


[TOP] [ 前へ ] 連載記事 [ 次へ ]

nice!(0)  コメント(0) 
共通テーマ:趣味・カルチャー

レトロマイコンZ80ボードの構想(その3)TQFP変換基板の作成 [Z80]

 前回の「レトロマイコンZ80ボードの構想(その2)」の記事の最後の方で書いたように PIC24FJ64GA004 を使う予定ですが基板を作成する前にブレッドボードで試したいので TQFP を DIP に変換する基板を作成しました。

 回路図といってもTQFPとDIPの対応するピンを結線するだけですが、DesignSparkPCB を使って回路図作成とパターン設計をしています。

 回路図は下図で今回初めて DesignSparkPCB のバス描画機能を使ってみました。
 TQFPサイズのPIC24FJ64GA004と44ピン DIPソケットのフットプリントと回路シンボルデータは今回自作しています(探せばどこかにあるんだろうけど)。
 回路図と言っても単純な結線なので文字サイズ等、見易いようにするための調整はしていません。

TQFP->DIP変換回路


 基板サイズを小型化するため、TQFP を45°回転して実装しました。
 回路図はいいとしてこのような単純な結線でもパターン作成は自動ではうまく行きません。自動ルーティングは基本的にX-Y軸でパターンを引いていくので、基板全体を45°回転してパターン密度の高い TQFPパッケージが傾かないようにしましたが自動ルーティングでは下図左側のように斜めのパターンは引かないので予想通り途中で行き詰り、未結線部分が発生してしまいます。
 このような部分は人工知能を使って人間よりうまくルーティングして欲しいものです(言うのは簡単だけどw)。
 というのは冗談で使用制限無しで自動ルーティング機能までついていることに感謝です。
 下図右側が手動でパターンを引いたものです。

パターン図(自動ルーティング) パターン図(手動ルーティング)


 パターン設計が完了したら、ガーバーファイルに出力して FlatCAM で CNCルータ用のNCファイルを作成します。
 使用した基板は厚さ 1.6mm の片面ベークライトです。
 綺麗に仕上げるためと発生音を抑えるためにfeed速度等、全体的に遅めにしています。
 また、パターン作成時に使用したエンドミルは直径 0.1mm のピラミッドタイプのものですが実際の削り幅はエンドミルのZ位置にも依存するので設定上は 0.2mm としています。

 アウトラインでの基板切り出しの際は流石に夜はできないくらい音がするので昼に作業しました。音の大きさは基板の固定方法にもよるなぁ~と思ったので次回からは消音観点も入れた基板固定方法にしたいと思います。

 NCファイル作成のために FlatCAM で設定した主要な項目の値は次のとおりです。
  1. 回路パターン
    • isolate
      • Tool Dia : 0.2
      • Width : 1
      • Pass overlap : 0.15
      • Conbine Passes : no checked
    • Generation
      • CutZ : -0.06
      • Travel : 2.5
      • FeedRate : 45
      • Tool Dia : 0.2
    • Genelate NC
      • Tool Dia : 0.2
  2. drill
    • CutZ : -1.8
    • Travel Z : 2.5
    • Feed Rate : 60
  3. Outline
    • Board Ciut Out
      • Tool Dia : 1
      • Margin : 0.1
      • GapSize : 0.15
      • Gaps : 4
    • Plot Option
      • CutZ : -1.6
      • TravelZ : 2.5
      • FeedRate : 60
      • Tool Dia : 1
      • MultiDepth : ON
      • Depth/Pass : 0.2

 NCファイルを作成後はCNCルーターでの基板加工ですね。
 プリント基板作成は「両面プリント基板の制作実験(その7)オブラート転写方式」の記事で書いたオブラート転写方式の方が細かいパターンまで対応できますが、今回のものであれば「CNCルータでの両面基板制作(その2) Via処理と基板制作」の記事で書いた手法でCNCルーターでも対応でます。

 CNCルーターを使った方がエッチングも不要だし、片面であればCNC側の作業を連続してできるので基板の再取付時の位置合せも不要で作業が簡単になります(エッチングする場合でも穴開けや基板切り出しにCNCを使います)。

 パターン作成中の grblControlの画面表示が下図です。

パターン作成中の画面


 パターン作成中のCNCルーターの様子が下の写真です。
 手前にある部分的なパターンは調整時の(というか失敗したw)ものです。

パターン作成中の写真


 パターンの次は穴開けです。
 穴開け時のgrblControlの画面表示は次のようになります。

穴開け時の画面


 CNCでの作業の最後が基板切り出しです。
 画面は次のとおり。

基板切り出し時の画面


 CNCでの作業中はほとんどが待つだけの状態で楽(特に穴開け作業)です。
 今回はベークライト基板なのでガラエポ基板よりは難易度が低いです。
 CNC1610での基板作成を説明しているYouTube動画でガラエポは(硬いので)使わないと説明しているものもありました。

CNCルーターでのミリング結果


 次はソルダーレジスト処理ですね。
 処理方法は「両面プリント基板の制作実験(その7)オブラート転写方式」の記事の最後の方に書いている方法と同じです。
 結果は次の写真です。

ソルダーレジスト処理後


 おまけで FlatCAM で変換した NCファイルをレーザーカッターで読込んでシルク処理もどきをやってみました。
 レーザーカッターで刻印した後、シルバーのマジックで刻印部分を塗った後、アルコールを染み込ませたティッシュで余分なインクを拭き取りました。
 位置が少しずれているのとレーザーで焦げた黒い粉をきれいに拭きとってからマジックを塗った方が良かったかなぁ(刻印文字に見えにくい)というのが今回の反省点であり、今後の課題です。

 最後に PIC24FJ64GA004 チップをクリーム半田とホットガンを使って半田付け後、ピンヘッダを半田付けし、TQFPからDIPへの変換が完了です。^^

TQFP DIP変換基板完成写真



★2018/01/15 追記 {
 PIC24FJ64GA004 を今回作成した変換基板に半田付けした状態で端子間が短絡していないかチェック済みで問題ない状態ですが、切削した基板のパターン写真を拡大してよく見るとTQFPの端子間に切削対象外のベタパターンが細く残っています。
 この細いパターンに PIC24FJ64GA004 の複数の端子が接続状態になった場合、相互に導通することになります。

 切削対象外のベタパターン部を意図的に DesignSparkPCB で cupperのベタパターン化すればベタパターン部の輪郭部分も切削されるので今回のような切削対象外の細いパターンは他の広いベタパターンから分離された状態になるはずです。
 今、DesignSparkPCB で確認してみたら信号を割り振らなくてもベタパターンは作れるみたいなので今後はベタパターンも意図的に作って置いた方が良さそうです(切削時間はかかるけど・・)。
}

★2018/01/18 追記 {
 上記の追記ではベタパターン追加で TQFP のピン間ショート対策と書きましたが、本質的な対策ではなかったと思い、考え直しました。
 ピンのフットプリントの問題ならフットプリントで対策すべきではないかと・・
 ということでピンのフットプリントの幅を若干大きくしてピン間に不要なパターンが入らないようにしました。

 また、外側のDIPのフットプリントも幅を小さくしてスリム化しました。
 レーザーカッターでのシルク印刷内容を刻印する際の位置ずれ対策として変換基板の外側に枠を追加したので、レーザーカッターで刻印する際の位置合せ時、固定した紙等に刻印後、枠を目印に位置決めすることで刻印ずれ対策にします。

 ぱっと見、違いが判りにくいですが、改善パターンの図を下に示します。

改善パターン

}

★2018/01/20 追記 {
 改善パターンをCNCで切削してみました。
 TQFP のピン間に残パターンは残っていません。でもその先の部分に細いパターンがあり、最悪ショートする可能性もあるのでやはり 上の1/15の追記のように DesignSparkPCB でベタパターンを作り、ベタパターンの周辺の輪郭も milling した方が安全そうです。(ソルダーレジスト処理すればショートの危険性はかなり少なくなるとは思うけど)

 今回はホールにピンヘッダを通し易いように 0.8mm のエンドミルで穴開けを行い、そのまま、0.8mm のエンドミルでアウトラインの切出しを行いました。
 ホールサイズが大きめですが流石にCNCではど真ん中に穴が開いています(手作業では到底こうはいきません)。

 下の写真はパターンが見易いようにわざと反射する状態で撮ってみました。

改善パターンの切削結果

}


★追記 2023/12/24 {
 「リバーシブルなDIP変換基板」の記事に TQFP 44 ピンを DIP 44 ピンに変換するプリント基板の製作について書きました。
}


[TOP] [ 前へ ] 連載記事 [ 次へ ]

nice!(0)  コメント(0) 
共通テーマ:趣味・カルチャー

レトロマイコンZ80ボードの構想(その2) [Z80]

 前回の「レトロマイコンZ80ボードの構想」で"PIC24FJはPMP(Parallel Master Port)モジュールをマスタポートモードにすることで外部メモリ制御が楽になるようなので機能を確認中"と書いたようにPIC24FJのPMP機能を確認しています。

 SRAMを読み書きする関係でピン数の多い44PinのTQFPパッケージのPIC24FJ64GA004を使う予定です。データシートのPMP機能の説明部分にはアドレス線は16bitまで対応するようなことが書いてありますが、ピンアサイン表を見るとPMA11:13(下表の赤枠部分)がパッケージのピンに出ていません orz

 PMCS1はレジスタ設定でアドレスのbit14にもできる(下表にもそう書いてある)けど、途中の11:13がないんじゃ上位ビットがあったとしても使い道が??です。

 因みに2007年版PIC24ファミリリファレンスマニュアル(日本語版)ではPMCONのbit7-6(CSF1:0)の設定で(赤色部分は逆ですね)
  11=予約済み
  10=PMCS1とPMCS2はチップセレクトとして機能する。
  01=PMCS2はチップセレクトとして機能、PMCS1はアドレスビット14として機能する
  00 = PMCS1とPMCS2はアドレス1514として機能する

と書いてありますが、2010-2013版「PIC24FJ64GA004 FAMILY」では

 bit 7-6 CSF<1:0>: Chip Select Function bits
  11 = Reserved
  10 = PMCS1 functions as chip set
  01 = Reserved
  00 = Reserved

となっています^^;;;
※下表のピンアサイン表は2010-2013版「PIC24FJ64GA004 FAMILY」に記載のもの

 PMP自体はデータ線とアドレス線のマルチプレクスにも対応する等、かなり汎用的に作られているのですが、今回は接続対象が普通のSRAMなのでソフト制御してもたいしたことはないと思います。
 でもアクセス速度的にはPMPを使った方が速そうなので使いたい気もする・・

 外部接続としてはコンソール用のUARTとSDカード用にSPIを使う予定でTQFPパッケージなら余裕だと思っていたらピン数が微妙な感じです。
 回路的には簡単なものを想定していますが、マニュアルの記載自体も少し怪しげなので一度ブレッドボードで確認してみた方が良さそうです。

 そのためにまずはTQFP-DIP変換基板を作らないと・・


PIC24FJ64GA004のピンサイン(PMP関連)



[TOP] [ 前へ ] 連載記事[ 次へ ]
nice!(0)  コメント(0) 
共通テーマ:趣味・カルチャー