2022年01月19日

Pic24MC68Kマイコン(その6)プリント基板で動作OK

 前回の記事から時間が経ってしまいましたが、元旦に製造依頼したプリント基板はとっくに届いているので部品を実装してみました。

 ブレッドボードで確認した回路なのでいつものようにすぐ動くと思っていましたが今回は PIC24 の OneBitLoader すらまともに動かず、原因調査&対処して無事動くようになりましたので調査内容や対処などについてメモとして記録しておきたいと思います。

 最初に Pickit で PIC24 に OneBitLoader を書き込んで起動してみました。
通常であれば"Welcome" メッセージを表示後に、押されたキーを表示するのですが、下図のように文字化けが酷い状態でした。











OneBitLoader 起動時の文字化けの様子







 文字化けの状態は安定せず、変化するようなのですが、'1'(0x31)の入力が'q'(0x71)に化けたりするのでシリアル通信のクロックが少しずれているようです。
 原因が USB/シリアルI/Fの PL2303 と PIC のどちらなのか切り分けるためにまずは PIC のシリアル受信と送信部の信号を確認しました。
 下図が PIC 側の受信信号例ですが、マーカー間が3bit分で 37.86(=12.62 x 3)Kbpsで通信速度は 38400bps なので許容範囲内です。信号自体もエッジの鈍り等は無く問題無いようです。











PIC 受信時のシリアル波形例(0x31受信時)







 下図が PIC の送信信号波形例でマーカー部の 1bit 分が 41.29KHz で設定値(38400bps)より結構高めの値です。これで PIC 側が問題の原因であることが判明しました。











PIC 送信時のシリアル波形例







 念のためにロジアナでも確認しましたが、受信側はokですが、送信側はバケバケでした。











PIC 送受信のロジアナ波形例







 問題個所が特定できたので PIC24 を交換する必要がありますが、ヒートガンでは近くの SDコネクタなどが影響を受けそうだったので、PIC のピンを切断してからピンを半田ごてで取り外しました。
 しかし、PIC を外す時に 43 番ピンのパターンが逝ってしまいましたorz
 このピンは D05(データバス)で接続先は基板の淵の方にあり距離があるので、直ぐ近くのスルホール部のレジストを剥がし、そこに半田付けするという難易度C? の技を試みてみましたw(クリックで拡大写真になります)











PIC43 番ピンのジャンパー接続







 ジャンパー部はアルコール洗浄後に保護のためにホットボンドで固めました。PIC を交換した結果、PIC で OneBitLoader が動き、自作の picleコンパイラ環境も問題無く導入できて、68K の動作試験プログラムである Hello 表示もできました(^^)/
 勿論、前回の記事で書いたS-record ローダーも動きました。

 更にうれしいことに、蟻さんから 5個組で買った MC68HC000P16 が最近届いたのですが、今回はいろんなものが混在していて、アルコールで拭くと P8(8MHzバージョン)に変身するものもありましたが、なんと 16MHz で動くものを1個見つけました(^^)/

 動作するようになった状態での写真等を貼っておきます。下の写真は 68K を実装前の TOP面です。











Pic24MC68K トップ面(MC68K実装前)







 次にボトム面です。











Pic24MC68K ボトム面







 MC68K 実装後は下の写真のようになります。アルコールで拭いて刻印が薄くなっているので刻印が見えるように斜めからストロボを当てています。











Pic24MC68K トップ面







 下の写真はUSBケーブルを接続して動作確認をしている様子で今までのブレッドボードよりはるかにコンパクトになっています。











動作試験中のPic24MC68K







 最後にreset直後から、68K の動作確認試験である "Hello" 表示のプログラムを実行した際のログを貼っておきます。68K は 16MHz で動作しています。あれ picle の起動メッセージが86のままになっていますねw








68K 試験のHello表示の実行状況

picle compiler CP/M-86 Ver0.01 2019/07/03 by skyriver

:¥¥

+B000-B739 # HelloTest for Pic24MC68K
+C000-CB3E #LibCpm for Pic24MC68K v0.01 2021/12/09
+D000-DEE9 #LibSpi SPI lib for Pic24MC68K V0.01 2021/12/07

:¥<
1849
:l

1:# HelloTest for Pic24MC68K
2:# Ver 0.01 2021/12/15 by skyriver
3:
4:use LibCpm;
5:use LibSpi;
6:
7:var ProgStart,ProgWrk,WrkVal,_WrkVal,_PicDma,WrkTrk;
8:var EscFlg,EscY;
9:
10:
11:proc PicSrv() {
12: var i,fno,rval;
13:
14: while (1) {
15:# while (LATA[-1]&1) {} # wait reset
16: while ((LATA[-1]&3) = 3) {} # wait reset
17: if ( (LATA[-1]&2) = 0 ) {
18: PrnStr_( "¥nHALT!" );
19: break;
20: }
21: PmpOn();
22: PmpSetAdr(ProgWrk);
23: fno = MemRd(); # dummy
24: WrkVal[0] = MemRd();
25: WrkVal[1] = MemRd();
26: fno = _WrkVal[1]; # Func No
27: rval = 0;
28:
29: if (fno=1) { # CONST
30: if (InpChk_()) {
31: rval = $ff;
32: }
33: }
34: else if (fno=2) { # CONIN
35: rval = InpChar_();
36: }
37: else if (fno=3) { # CONOUT
38: PrnChar_( _WrkVal[0] );
39: }
40: else if (fno=0) {
41: break;
42: } else {
43: PrnStr_("¥nFunc err:");
44: PrnHexB_( fno );
45: break;
46: }
47: _WrkVal[3] = rval;
48: PmpSetAdr(ProgWrk+1);
49: MemWr(WrkVal[1]);
50:
51: PmpOff();
52: BusRelease();
53: }
54:}
55:
56:
57:proc m( dat ) {
58: MemWr( dat );
59:}
60:
61:
62:proc main() {
63: init();
64: initPmp();
65: initSpi();
66:# initSd();
67:
68: ProgStart = $0600; # start addr(68K:0ffc00)
69: ProgWrk = $06f8; # work addr(68K:0ffdf0)
70: _PicDma = $0700; # Dma addr(68K:0ffe00) 512
71: WrkVal = Alloc( 2 );
72: _WrkVal = WrkVal;
73: WrkTrk = Alloc( 2 );
74:
75: LATA[-2]=LATA[-2]&$fffc; # on reset:a0 halt:a1
76:
77: PmpOn();
78: PmpSetAdr(0);
79: MemWr($000f);# stack
80: MemWr($fc00);
81: MemWr($000f); # PC
82: MemWr($fc00);
83:
84: PmpSetAdr(ProgStart);
85:
86:
87: m($2c7c);m($000f);m($fc20);m($4241);
88: m($121e);m($6700);m($0008);m($6100);
89: m($0022);m($60f4);m($13fc);m($0000);
90: m($000f);m($fdf0);m($4e70);m($60fe);
91: m($0d0a);m($6865);m($6c6c);m($6f2c);
92: m($2077);m($6f72);m($6c64);m($0d0a);
93: m($00ff);m($0041);m($0300);m($33c1);
94: m($000f);m($fdf0);m($4e70);m($4e75);
95:
96: dump(0);
97: dump(ProgStart);
98: PmpOff();
99: BusRelease();
100: LATA[-2]=LATA[-2]|$3; # off reset:a0, halt:a1
101:
102: PicSrv();
103:
104: PmpOn();
105: LATA[-2]=LATA[-2]&$fffc; # on reset:a0 halt:a1
106:}
:run

0000 : 000F FC00 000F FC00 28E3 8967 82B6 7F5C
0008 : 68B7 8A57 EA55 06B1 F27D 6BCF 80B5 DAD7
0010 : 3A78 3231 9CCF A855 BA59 B691 AA53 AF21
0018 : 873C 2E44 0FD9 A045 AE4F FC04 4E7D AA34
0020 : 0155 D367 AFEF 4D31 A8E2 EA74 6EB5 9BB4
0028 : 8A29 C311 2FF5 AAF7 CAE6 AB34 AC09 A5C4
0030 : AED4 6E5C BA56 EB0C 1F5D 04BB F377 6A5F
0038 : 1B5F 2463 785F E65C 0E11 BAFB BE9C 9ADE
0600 : 2C7C 000F FC20 4241 121E 6700 0008 6100
0608 : 0022 60F4 13FC 0000 000F FDF0 4E70 60FE
0610 : 0D0A 6865 6C6C 6F2C 2077 6F72 6C64 0D0A
0618 : 00FF 0041 0300 33C1 000F FDF0 4E70 4E75
0620 : 5303 51CA FFF4 2044 6100 0022 10C0 51CB
0628 : FFF8 60B2 6100 0034 B03C 0039 6E00 0008
0630 : 0400 0030 4E75 0400 0037 4E75 61E6 2200
0638 : E909 61E0 8041 4E75 6100 0010 B03C 000D
hello, world

:




[TOP] [ 前へ ] 連載記事 [ 次へ ]
posted by skyriver at 19:56| Comment(3) | 68K | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
This looks like a very fun project.
Is it possible to get the gerber files for this board so I may try to make my own?
Posted by John Gay at 2022年05月18日 21:58
I am considering how to publish the printed circuit board and software. However, I give priority to new manufacturing based on new ideas, so I think it will take some time before it is published.
Posted by skyriver at 2022年05月19日 00:20
I've used jlcpcb.com to make printed circuit boards from zipped gerber files from other peoples projects before.

But I also understand that working on new projects is more fulfilling than re-visiting old projects you have moved on from.

Either way this does look like a fun project and I'll dig deeper into your blogs.
Posted by John Gay at 2022年05月19日 02:20
コメントを書く
コチラをクリックしてください