SSブログ
English Version

ニクロム線樹脂板カッター [その他]

3チップ構成Pic24CPMマイコン(CP/M起動までの作業まとめ)」の記事で書いた3チップ構成のCPMボードのケースを検討中です。
 いつもは3Dプリンタでケースを作っていますが、表面処理などをしないと見た目がイマイチなこともあり、趣向を変えてLED表示部や基板自体も見えるように透明の樹脂も使おうかと考えています。

 濃い色のついたアクリル板であれば、レーザーカッターで切断できるのですが着色していないアクリルはカットできません^^;
 CO2レーザーカッターが欲しいところですが、中華製でも結構な値段がします(アクリルをスパスパ切断できる環境があればどれだけ工作範囲が広がることか)
 また、アクリル自体は3Dプリンタで使うABS樹脂に比べたら値段が高いです・・

 百均でこんなものを見つけたので買ってきました。原料樹脂はスチロール樹脂と書いてあります(ほんとは曲げ加工していない板をそのまま売ってもらった方がありがたい)

ディスプレイスタンド


 平面の板部分の材料取りするためにノコギリで切ってみたら摩擦で樹脂が溶けるので結構大変でした。また、強く抑えた状態で擦れたため、抑えた部分に無数の傷が付いてしまいました^^;
 ヒートガンかアセトンで細かい傷が消せるか後で試してみたいと思います。

 カットするだけだったら直径0.2mmのニクロム線が手持ちであるので簡易的なカッターを作ってみました。
 部品は全部手持ちの物(しかも百均からの購入品w)を使い、木板とMDF合板と定規を両面テープで一体化してみましたw

 ニクロム線は熱くなると少し膨張するのである程度テンションをかけた状態にしておく必要があります。
 部屋で周りを見渡すと金属製の定規が目にとまったというわけですw

シンプルな樹脂板カッター


 ニクロム線の部分の拡大が下の写真です。
 安定化電源で3.3V給電時に1.47A程度の電流値(5W弱)でニクロム線がほんのり赤くなります。
 樹脂の板をあててゆっくり動かすと切れていくのでノコギリで切るよりかなり楽です。冷えると固まるので切り終わっても板自体はくっ付いたままですが、力を加えると簡単に分離しました(でも細かい形状のカットは無理だと思います)

 平板の切出しが出来たので次はCNCで加工する予定です。

★2018/06/05 追記
 「3チップ構成Pic24CPMマイコン(その2)ケース作成」の記事にDesignSparkMechanicalとEstlcamを連携させてCNCを使ったケース作成の状況を記載しました。

ニクロム線部の拡大


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

3チップ構成Pic24CPMマイコン(CP/M起動までの作業まとめ) [Z80]

 今回作成した3チップ構成のワンボードマイコン(下の写真)でCP/M-80が動作し、スイッチ入力処理等も実装が完了したのでCP/Mを立ち上げるまでに必要な作業を整理しました。

 チップ構成はZ84C0020PEG(20MHz版のZ80、PICからクロック供給する関係で16MHzで動作)、HM628128ALP-7(128kBytesのSRAM、アクセスタイムは70ns)、PIC24FJ64GA004の3チップのみで汎用ロジックICやPLD等は使っていません。

Pic24CPMボード


  1. 事前にダウンロードするもの

    1. 今回作成したPic24CPM用のファイル
       PICファーム全体のhexファイル(これを書込めばPIC側の準備は完了)とIPL、bios及びpicleソース等をアーカイブした下記のファイルをダウンロードする。
      • Pic24CPM20181111.zip
        ★2018/11/11 変更
        SDアクセス部でSDタイプによりエラーになることがあったので修正(Pic24CPM68Kからのフィードバック)
        ★2018/05/19 変更
        電源ON時の不要なメッセージ等に対する対処版

    2. CP/Mのソース
       メモリサイズが64K版のCP/Mのバイナリファイルを作成するため、CP/Mのソースが必要になります。
       The Unofficial CP/M Web siteのサイトで
      Digital Research Source Code -> CP/M2.2 ASM80 Source

    3. cpmtools
       the Wonderfully Ancient World of CP/Mのサイトでhttp://www.cpm8680.com/cpmtools/cpmtoolsWin32.zipのリンクからダウンロード

    4. DD for Windows
       作成したCP/MディスクイメージをSDカードに書込むユーティリティ
       DD for Windowsからダウンロード。
      ※2018/05/12現在での最新版はVer.0.9.9.8です(これを使用しています)

    5. hex2bin
       hexファイルをバイナリファイルに変換するツール。CP/Mのメモリサイズの変更時に使用します。検索すればいろいろ見つかりますが、ここからダウンロードしたものを使わせて戴きました。

    6. その他
       CP/Mシステム部分のディスクイメージの作成時にバイナリファイルの連結が必要となります。
       私はWindows10上のMinGW/msys環境(windows上のlinux環境)でddコマンドを使いました。Windows用のddコマンドも検索すれば見つかるはずです。

  2. PIC24FJ64GA004側の準備
    • ワンボードマイコン基板
       回路図は下記のとおりです。詳細は「レトロマイコンZ80ボードの構想(その16)回路図とPCB化」の記事を参照してください。
       私はPCB化しましたが汎用基板やブレッドボードでも気軽?に作成できる回路規模だと思います。
       MONのLEDが回路図では赤色になっていますが、黄色に変えました(抵抗値はそのままでもok)。
       また、SDカードホルダはebayで購入したものを使っていますが、秋月電子通商さんで販売している「SDカードコネクタ SD381200-S304」も使えるはずです。
      ★2018/05/17 追記 {
       メモリはアクセスタイム70nsのもの(HM628128ALP-7)を使用
      }

      Pic24CPMの回路図 Ver0.01

    • PICのファーム
       上記でダウンロードした「Pic24CPM用のファイル」に入っているPICディレクトリ直下のhexファイルをPIC24FJ64GA004に書き込めば準備完了です。

      1. PICにPICKIT3等で書込みを行う場合はPL2コネクタに接続してください。
         書込み時に使用するピンはSDカードと兼用しているので、SDカードを抜いた状態で書込んでください(Z80やメモリは挿した状態でOKです)。
         書込み器を接続した状態ではSDカードのアクセスエラーが発生するので、書込み器を外してからCP/Mを起動してください。

      2. Z80との連携処理等はpicle言語で記述していて、自動起動状態にしているので電源ONでCP/Mが起動します。

      3. Pic24CPM用のファイルに入っている「exit.com」をCP/M上で起動するとCP/Mから抜けてpicleコンパイラの世界に戻ります(runコマンドでCP/M再起動)

      4. picleのソースも「Pic24CPM用のファイル」に入れてあるのでセルフコンパイル環境で機能変更が可能です。
         尚、picleソースの先頭にはTeraTermでコピペし易いように「new」と「i」コマンドを付けているのでそのままコピペすればソースが登録されます。
         自動起動の場合、ソース先頭アドレスがフラッシュメモリ上になっているので、「"src" + リターン」の操作でソース先頭アドレスをSRAM上にしてからコピペしてください。
         詳細は「独自言語 picle compiler on PIC24FJ」を参照してください。

      5. TeraTermのシリアル設定は38400bps、8bit、Parity無しです。また、コピペで取りこぼしが発生しないように
        SetUp -> Additional Settings -> Copy and Paste -> Paste delay per line
        を10ms程度に設定してください。

      6. OneBitLoaderをコンソール接続のUART対応した状態で導入しています。
         OneBitLoaderをダウンロードし、Device欄で「PIC24FJ64GA_CPM」を選択すれば、PICKIT3等の書込み環境無しにPIC内フラッシュメモリの書換えが可能です。
         書込み操作としては、シリアルポートを開放するためにTeraTermを終了させてからOneBitLoaderを起動し、「Write」ボタンを押下後ワンボードのresetボタンを押すことで書込みができます。

      7. SDカードの抜き差しをPICが監視しています。抜いた状態ではMONのLEDが点滅します。SDカードを抜いてから挿入するとSDカードを再度イニシャライズ(保存データは消えない)するので継続してSDカードのアクセスが可能です(これによりSDカード間でのメモリを介してのファイルコピー等ができます)。

      8. 「OPE」スイッチでコンソールのエスケープシーケンスの有効/無効を切り替えられます。
         無効にした場合、PIC側の処理でコンソールデータの書換えが発生しないのでコンソール用シリアル通信でバイナリデータの透過性が保証できるようになります(バイナリデータ転送時に利用)。

  3. CP/Mブート用SDカードの作成
    1. CP/Mのメモリサイズを最大の64Kに変更
       CP/Mのソース「CPM22.ASM」の最初の方にあるメモリサイズの部分を64に変更する。

      MEM EQU 64 ;for a 64k system (TS802 TEST - WORKS OK).

       末尾の「B I O S J U M P T A B L E」にあるジャンプ命令はBIOSの部分なのでアセンブル後にBIOSとオーバーラップしないようにジャンプ命令をEQUステートメントに変更する。

      ;**************************************************************
      ;*
      ;* B I O S J U M P T A B L E
      ;*
      ;**************************************************************
      ;
      ; change jmp to equ statement by skyriver 2018/02/19
      BIOS equ (MEM * 2 - 3) * 512
      BOOT equ BIOS ;NOTE WE USE FAKE DESTINATIONS
      WBOOT equ BIOS + 3
      CONST equ BIOS + 6
      CONIN equ BIOS + 9
      CONOUT equ BIOS + 12
      LIST equ BIOS + 15
      PUNCH equ BIOS + 18
      READER equ BIOS + 21
      HOME equ BIOS + 24
      SELDSK equ BIOS + 27
      SETTRK equ BIOS + 30
      SETSEC equ BIOS + 33
      SETDMA equ BIOS + 36
      READ equ BIOS + 39
      WRITE equ BIOS + 42
      PRSTAT equ BIOS + 45
      SECTRN equ BIOS + 48

       以上でCP/Mのソース変更が完了したので下記の例のようにasm.comでアセンブルし、hex2binでバイナリファイル化する。
       cpmはwindows上で動作するCP/Mエミュレータです。

      C:¥src¥CPM>cpm asm cpm22
      CP/M ASSEMBLER - VER 2.0
      FA00
      019H USE FACTOR
      END OF ASSEMBLY

      C:¥src¥CPM>hex2bin cpm22.hex
      hex2bin v2.5, Copyright (C) 2017 Jacques Pelletier & contributors

      Allocate_Memory_and_Rewind:
      Lowest address: 0000E400
      Highest address: 0000F9FF
      Starting address: 0000E400
      Max Length: 5632

      0 byte length Data record ignored
      0 byte length Data record ignored
      Binary file start = 0000E400
      Records start = 0000E400
      Highest address = 0000F9FF
      Pad Byte = FF

      C:¥src¥CPM>
      ★2020/09/05 表示内容をアップデート

    2. IPL,CPM,BIOSファイルの連結
       linux環境でのddコマンド(またはWindowa用のddコマンド互換ツールを使用)を使って下記の操作でIPL、CPM、BIOSのファイルを連結します。(IPLとBIOSのバイナリファイルはダウンロードしたPic24CPMのアーカイブファイル内にあります)

      dd conv=sync bs=128 count=1 if=IPL.bin > cpm64k.img
      dd conv=sync bs=128 count=44 if=cpm22.bin >> cpm64k.img
      dd conv=sync bs=128 count=10 if=bios64.bin >> cpm64k.img
      ★2018/08/28 IPL.bin部のcountを2から1へ修正^^;
    3. ディスクイメージの作成
       ダウンロードしたcpmtoolsを展開したフォルダに上記操作で作成したcpm64k.imgを置きます。
       またダウンロードしたPic24CPM用ファイル内にあるdiskdefs、SDImageSpliter.exe及びsysgen.batファイルもフォルダに置きます。
       sysgen.bat内の「../FolderA/*.*」部分をディスクイメージファイルに入れたいCP/Mファイルが入ったフォルダに変更します。
       同様に「../FolderD/*.*」まで変更します。
      (ディスクドライブは A~Eでeは空になる設定ですが、必要に応じて変更してください)
       変更後、sysgenを実行すると「diskimage_exp.img」というファイルができます。

    4. SDカードへの書込み
       SDHCタイプ(2GBより大きく32GB以下)のSDカードに、上記操作で作成した diskimage_exp.img を DD for Windows で書き込みます。
       SD書込みソフトは実行ファイルを右クリックして表示されるポップアップメニュで「管理者として起動」を選択して起動する必要があります。

  4. CP/Mの起動
     上記で作成したSDカードを入れた状態で電源を入れれば、自動的にCP/Mが立ち上がります。
     ダウンロードしたPic24CPMファイルに入っている「exit.com」を実行することで、CP/Mから抜け、PIC上のpicleコンパイラの環境に戻ります。
     Pic24CPMにはpicleソースも入れていますので処理内容の確認や改造が可能です。


【参考リンク】
 下記のwebサイトを参考にさせて頂きました。


★2018/05/17 追記
 Pic24CPMボードが増殖しましたw
 プリント基板を作ってもらうと簡単に増殖できてメッチャ楽^^
 CNCでのプリント基板作成のモチベーションが下がってしまうw
 右側がさっき完成したものでTQFO(PIC24FJ64GA004)を今回は事前に半田盛りはしないで半田付けしました。余分な半田は半田吸い取り線で除去。パッド間の間隔をCNC用にかなり狭くしたので心配でしたが、大丈夫でした。最初の物より綺麗にできた^^

Pic24CPM基板増殖^^


★2018/11/03 追記
 ガーバーデータをseeedさんの「Fusion gallery」の「Geek product」コーナーで公開しました。
https://www.seeedstudio.com/Pic24CPM-developed-by-skyriver-Z80-board-constructed-with-only-3-chips-in-which-CP-M-80-work-g-1121278

★2020/07/15 追記
 同様に3チップ構成でCP/M-68Kが動作するPic24CPM68Kの作成手順を下記の記事にまとめています。
  3チップ構成Pic24CPM68Kマイコン(CP/M-68K起動までの作業まとめ)

★2023/12/26 追記
 同様にV20を使った3チップ構成でCP/M-86が動作するPic24V20の記事は下記です。
  レトロマイコン86ボードの構想(その25)回路図アップデート

 更にUSB機能を有した20ピンのPICを使用し40ピンのZ80を使用した世界最小のZ80 CP/Mボードを目指した3チップ構成のZ80PicCompactの記事は下記です。
  超小型Z80マイコン(その12)PCBへの部品実装



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

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

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

CNCルータでの両面基板制作 HeightMap」の記事にも書いたようにCNCでの両面基板化の作業が難航しています・・・

 そうこうしているうちにSeeedさんのFusion PCBに注文していた基板が届いてしまいました^^。5枚作って送料込みで千円以下なのでついポチってしまったw

 4/9の夜に注文して5/1の昼前に届きました。
 時間はかかるものの自分で生基板から作るより遥かに綺麗で素晴らしい ^^)

 まずはできた基板の写真が以下です。
 回路図は「レトロマイコンZ80ボードの構想(その16)回路図とPCB化」の記事を参照してください。
 ん~ソルダーレジストは赤より緑の方が良かったかも・・(通販での格安基板はほとんどが赤色なので安っぽく感じるw)

作ってもらったPCB(トップ面)


作ってもらったPCB(ボトム面)


 PCBがあれば、数点の部品を実装するだけなので簡単です^^
 PIC24のTQFPのピンパッドはCNC用に大きめにしたので隣接するパッドとの隙間が小さすぎた・・
 隙間が小さいのでPIC24のピンにあらかじめ半田をもってから基板に半田ごてで半田付けする方法にしました。
 PIC以外のSMD部品は爪楊枝でソルダーペーストを塗り、ヒートガンで半田付けしています。

 「ヒートガン購入」の記事で書いたヒートガンは部品単位で加熱できる(設定温度は220℃)ので大活躍でした^^

 部品実装後の状態が下の写真です。あれ、インダクタが少し傾いていますね^^;

部品実装後(トップ面)


部品実装後(ボトム面)


★2018/05/02 追記 {
 今回のPCBで気が付いたことをメモっておきます。
  • TQFPのパッド間隔
     上でも書いたようにCNC前提でフットプリントを加工したのでPAD間の隙間がメチャ小さい。念のため届いたPCBでPAD間の導通チェックをしてみましたが、きちんと分離されていました。
  • Z80のフットプリント
     Z80のフットプリントはDesignSparkさんのwebからダウンロードしたものを使っていますが、DIP間の幅が少し大きいようでソケットの足を若干広げて実装しています(ソケット無しでZ80を直付けする場合は丁度良いのかも)
  • SMD部品配置
     CNCでPCB作成することを前提にしていたのでVia数削減の観点で実装面を決めていましたが、写真を見ても感じるようにトップ面がスカスカ感があり、もっとトップ面に実装した方がよかったかなぁ(PCBの製造を頼むのであればVia数は関係ないしね)
  • シルク印刷
     ボトム面のSMD部品で何個かシルク印刷の文字角度があっていなかった・・。またコネクタ部の印刷はコネクタの大きさやタイプも加味して位置決めした方がいいですね(今回、シリアル部はコネクタで文字が半分隠れてしまった)
  • PCBのサイズ
     縦方向は横方向の配線でほとんどのスペースが埋まっていますが、横方向は一部横方向の配線で占有されている(TQFPの左側)ので横方向はもう少し小さくできたものと思います。(まぁパターンを引く前の部品配置の時点でそこまで推測できるかどうかはありますが)
}

 下は動作中の写真です。

CP/M 動作中



 数点の部品を実装した小さなワンボードマイコンでCP/Mが動き、C言語やBASICが使えるというのは感慨深いものがあります。

 「レトロマイコンZ80ボードの構想(その18)BDS-C」の記事でかいたことをフリーソフトになっている HI-TECH C でやってみました。
 BDS Cの時はstdio.hのインクルードもなしに動いていましたが、HI-TECH Cでlife.cのコンパイルを通すにはstdio.hとstdlib.hのインクルードが必要でした。
 各種のヘッダファイルも結構そろっています。
 でもコンパイルするのに43秒(BDS Cは3秒くらい)掛かりました。(warningは出ていますが動作しました^^)
 Z80のBUSACKでLEDを点灯(Z80が処理を実行中は消灯)していますが、BDS Cのコンパイル中はほとんどLEDが消灯している時間があります(今までこんなにLEDが暗かったことは無かった)がHI-TECH Cではコンパイル中も結構LEDが光っています(インメモリ処理ではなくファイル渡しでの処理ということ)。
 でもHI-TECH Cの方が今のCにかなり近い感じです。

HI-TECH Cでライフゲームのソースをコンパイル(電源オンから)
picle compiler CP/M Ver0.08 2017/12/17 by skyriver :\\ +B000-BDA4 # CP/M boot v0.04b 2018/05/03 +C000-C809 #LibCpm CP/M(PMP) lib v0.02 2018/05/03 +D000-DFDE #LibSpi SPI lib V0.03 2018/05/03 :\< 3492 :run loading... 64k Pic24 CP/M Version 2.2 COPYRIGHT (C) 1979, DIGITAL RESEARCH a>b: b>dir B: $EXEC COM : ASSERT H : C COM : CGEN COM B: CONIO H : CPM H : CPP COM : CREF COM B: CRTCPM OBJ : CTYPE H : DEBUG COM : DEHUFF COM B: EXEC H : FLOAT H : HITECH H : LIBC LIB B: LIBF LIB : LIBR COM : LIMITS H : LINK COM B: MATH H : OBJTOHEX COM : OPTIM COM : OPTIONS B: P1 COM : READ ME : RRTCPM OBJ : SETJMP H B: SIGNAL H : STAT H : STDARG H : STDDEF H B: STDIO H : STDLIB H : STRING H : SYS H B: TIME H : UNIXIO H : ZAS COM : LIFE COM b>dir c: C: LIFE BAK : LIFE C : HELO C : MAZE COM C: LIFE COM : HELO COM b>c c:life.c HI-TECH C COMPILER (CP/M-80) V3.09 Copyright (C) 1984-87 HI-TECH SOFTWARE C:LIFE.C:116: constant relational expression (warning) b>a:stat life.com Recs Bytes Ext Acc 43 6k 1 R/W B:LIFE.COM Bytes Remaining On B: 1484k b>



★2018/05/02 追記
 この記事に書いたようにWordStarが動くようになったのでCP/MでのエディタはWordStarを使っています。
 WordStarでlife.cのソースをエディットしている画面を貼っておきます。

 上記で発生していた
C:LIFE.C:116: constant relational expression (warning)
を確認したところ永久ループの「while (1)」の部分でした。「for (;;)」に変更したところwarningがなくなりました。

※「for (;;)」は少しトリッキーな表現(何も実行しない結果が何故 true なの?)なのであまり好きじゃありません。
 因みに picle言語では「for (;1;)」としないと永久ループになりません(こういう時はwhile (1)を使うけどね)

WordStarで編集中の画面



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

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