So-net無料ブログ作成
English Version
前の5件 | -

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

 86ボード制作ですが、PIC24FJのPMP(パラレルマスタポート)機能について実験してみました。

 今回はシリアル通信をアサインするピンを変更するのでブートローダー側のシリアルも変更が必要でPic24FJ用ブートローダーのOneBitLoaderを入れるところからです。
 久々にOneBitLoaderの最初の立ち上げ画面を見ました。
 次にローダーを使ってpicleコンパイラを書込み、その後はpicleのセルフコンパイル環境でソースを変更し、コンパイルの繰り返し作業なのでローダーすらほとんど使いません。

OneBirLoaderの最初の立ち上げ画面


 V20(8088相当品)を使用することを想定しているので8bitのデータバスに下位アドレスがマルチプレクスする半多重化アドレッシングモードを使用します。
 データ線とアドレス線がマルチプレクスされることでPIC24側のI/Oに少し余裕ができます。
 PMP機能では下図のようにタイミングをパラメータにより色々設定可能なので数通りのパラメータパターンについてロジアナで確認してみました。

PMP半多重化アドレッシングタイミング


 タイミングの調整要素としては上図に書かれているように WAITB,WAITM,WAITE(それぞれBegin、Middle、Endの略だと思う)があり、全てゼロの場合の最速タイミングが下図です。PIC24のクロックは内蔵クロックを使用して32MHzにしています。
 モニタした信号はメモリアクセスのための下記の信号です。
  • MCS/ チップセレクト
  • OE/ リードストローブ
  • WR/ ライトストローブ
  • LATCH 下位アドレスラッチ用のHC573へのG信号
  • AD0 データ線のLSBビットの信号

PMPライトタイミング(wait無し)


 今回もアクセスタイムが70nsのメモリを使用する予定なので WR/ はもっと広げないと駄目ですね。LATCHもマージンを大きくし、ノイズの発生も少なくするためにもっと広げたいと思います。
 下の図が3通りのパラメータで設定した場合のロジアナ波形です。WR/幅が140nsでlatch幅が80nsでlatch後20ns程度アドレスを保持しているWAITB:1,WAITM:2,WAITE:1 を採用することにします。
 その時、PIC の PMCON と PMMODE のレジスタの設定値はそれぞれ 0x0ba0、0x0a49 になります。
★2019/07/15 修正
 採用パターンのWAITEを0から1に修正(latch後のアドレス保持時間の確保のため))

PMPライトタイミング(WAITB:1, WAITM:1, WAITE:1)


PMPライトタイミング(WAITB:1, WAITM:2, WAITE:1)


PMPライトタイミング(WAITB:1, WAITM:2, WAITE:0)


 参考として WAITB:1,WAITM:2,WAITE:1 時のメモリリードタイミングが下図です。

PMPリードタイミング(WAITB:1, WAITM:2, WAITE:1)


 今回の確認に使用したpicleソースと実行結果を貼っておきます。

PMP機能確認用picleソース
:l 1:# V20 memory test 2019/07/13 2:# by skyriver 3: 4:use LibCpm; 5:use LibSpi; 6: 7:var Pcon; 8: 9:proc initP() { 10: PMCON=$0600; #PMMODE[1],PMADDR[2] 11: PMMODE=$0602; 12: PMADDR=$0604; 13: PMDAT=$0608; 14: PMAEN=$060c; 15: PMSTAT=$060e; 16: 17: Pcon=$0ba0; # 0000 1011 1010 0000 18: PMCON[0]=Pcon; 19: PMMODE[0]=$0a49; #0000 1010 0100 1001 20: PMAEN[0]=$4701; # PMAEN 0100 0111 0000 0001 21:} 22: 23: 24:proc PmOn() { 25: BusReq(); 26: while ((LATC[-1]&$100)=0) {} # wait HOLDAC 27: PMCON[0] = Pcon|$8000; 28:} 29: 30: 31:proc PmOff() { 32: PMCON[0] = Pcon; # PMP off 33:} 34: 35: 36:proc MemDsp( adr ) { 37: var i,j; 38: PmpSetAdr( adr ); 39: i = MemRd(); 40:# for ( i= 0; i < 16; i=i+1 ) { 41: for ( i= 0; i < 1; i=i+1 ) { 42: PrnStr_( "\n" ); 43: PrnHex_( adr ); 44: PrnStr_( " :" ); 45: for ( j=0; j< 8; j=j+1 ) { 46: PrnStr_( " " ); 47: PrnHexB_( MemRd() ); 48: } 49: adr = adr + 16; 50: } 51:} 52: 53:proc main() { 54: var adr; 55: init(); 56:# initPmp(); 57: initP(); 58:# initSpi(); 59:# initSd(); 60: 61: LATA[0]=LATA[0]|1; # on reset:a0 62: 63:# PmpOn(); 64: PmOn(); 65: PmpSetAdr(0); 66: MemWr($01); 67: MemWr($02); 68: MemWr($04); 69: MemWr($08); 70: MemWr($10); 71: MemWr($20); 72: MemWr($40); 73: MemWr($80); 74: 75: MemDsp(0); 76: 77:# BusRelease(); 78: LATA[0]=LATA[0]&$fffe; # off reset:a0 79:} :run 0000 : 01 02 04 08 10 20 40 80 :



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

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

Z80での10の高速除算方法 [Z80]

 今回はtwitterで見かけたZ80で10で割る処理に関するお題について書いてみます。

 お題としてはZ80で100未満の数値を10で除算処理する場合、如何に高速にできるか?というもので

    Breg ÷ 10 = Hreg ... Areg

という処理です。

 具体的な処理例も挙げられていて次の処理を高速化できるか? という問題です。
 100要素分の回答の配列から引っ張るのが一番速いですがそれは無しという条件付きです。
 尚、以下に示す各処理は0..99の入力に対するリターン値(AregとHreg)が全て同じであることを確認済みのものです。

処理例
; +++ asking method +++ 78 chk10: ld a,b ; input value 21 00A0 ld hl, 10 SHL 4 BD cp l 38 03 jr c,chk0 95 sub l 26 10 ld h,16 CB 0D chk0: rrc l BD cp l 38 03 jr c,chk1 95 sub l CB DC set 3,h CB 2D chk1: sra l BD cp l 38 03 jr c,chk2 95 sub l CB D4 set 2,h CB 2D chk2: sra l BD cp l 38 03 jr c,chk3 95 sub l CB CC set 1,h CB 2D chk3: sra l BD cp l 38 03 jr c,put2 95 sub l CB C4 set 0,h C9 put2: ret


 上記の処理内容を見ると通常の割算処理のループを展開したような形になっています。
 ループが展開されているので被除数が小さい場合には上位桁の演算をスキップするショートカット方式を最初に思いつきました。
 ショートカットすることで

    0~39なら -54clk
   40~99なら+18clk

となり平均すれば-10.8clk分速くなりそうです。

最初に思いついたショートカット方式
; +++ my first method +++ ; when 40..99 0..39 78 my1_10: ld a,b ; input value 4 4 21 0028 ld hl, 10 SHL 2 ; 10 10 BD cp l ; add 4 4 38 18 jr c,my1_2 ; add 7 12 2E A0 ld l,10 SHL 4 ; add 7 BD cp l ; 0a0h ; 4 38 03 jr c,my1_0 ; 7 12 ave 15 95 sub l ; 4 26 10 ld h,16 ; 7 CB 0D my1_0: rrc l ; 4 BD cp l ; 050h ; 4 38 03 jr c,my1_1 ; 7 12 ave 15.5 95 sub l ; 4 CB DC set 3,h ; 8 CB 2D my1_1: sra l ; 4 BD cp l ; 028h ; 4 38 03 jr c,my1_2 ; 7 12 ave 15.5 95 sub l ; 4 CB D4 set 2,h ; 8 CB 2D my1_2: sra l ; 4 4 BD cp l ; 014h ; 4 4 38 03 jr c,my1_3 ; 7 12 ave 15.5 15.5 95 sub l ; 4 4 CB CC set 1,h ; 8 8 CB 2D my1_3: sra l ; 4 4 BD cp l ; 00ah ; 4 4 38 03 jr c,my1_4 ; 7 12 ave 15.5 15.5 95 sub l ; 4 CB C4 set 0,h ; 8 C9 my1_4: ret


 しかし、既に下記のバイナリサーチのような処理案(「引き放し法」と言うそうです)が出ていて処理内容が複雑そうですが確かに速そうです。

引き放し法
; +++ twitter's solution +++ DIV10: 78 LD A,B ; 4 D6 50 SUB 80 ; 7 38 15 JR C,ADD40 ; 7,12 26 08 LD H,8 ; 7 D6 28 SUB 40 ; 7 38 15 JR C,ADD20 ; 7,12 SUB20: CB D4 SET 2,H ; 8 D6 14 SUB 20 ; 7 38 13 JR C,ADD10 ; 7,12 SUB10: CB CC SET 1,H ; 8 D6 0A SUB 10 ; 7 38 11 JR C,NEG_EX ; 7,12 POS_EX: CB C4 SET 0,H ; 8 C9 RET ; 10 ADD40: 26 00 LD H,0 ; 7 C6 28 ADD A,40 ; 7 38 EB JR C,SUB20 ; 7,12 ADD20: C6 14 ADD A,20 ; 7 38 ED JR C,SUB10 ; 7,12 ADD10: C6 0A ADD A,10 ; 7 38 EF JR C,POS_EX ; 7,12 NEG_EX: C6 0A ADD A,10 ; 7 C9 RET ; 10


 ぱっと見は処理内容が解り辛いですが、10 x (2のべき乗) の大きい方(80)から引いていき(キャリが出たら次は足す)、10未満になったら終了するような処理が見えてきます。
 最初に書いた処理例では比較(CP)で確認後減算(SUB)していますが、比較による確認無しに減算し、マイナスになっても元に戻さず(だから「引き放し法」)次に半分の値を足すことで結果として半分の値を引いたのと等価になるというものです。

 しかし、入力値の条件が100未満なので80を引けた場合、直後に40を引いているのは無駄なように見えます。
 80を引いた後は0..19の範囲内なので10を引けるかのチェックをした方が早く収束するはずなので改善してみたものが下の処理です。

引き放し法の改善案
; +++ my improve method +++ MDIV10: 78 LD A,B ; 4 D6 50 SUB 80 ; 7 38 14 JR C,MADD40 ; 7,12 26 08 LD H,8 ; 7 ; SUB 40 ; 7 del ; JR C,ADD20 ; 7,12 del C3 0512 JP MS10 ; 10 add MSUB20: CB D4 SET 2,H ; 8 D6 14 SUB 20 ; 7 38 13 JR C,MADD10 ; 7,12 MSUB10: CB CC SET 1,H ; 8 D6 0A MS10: SUB 10 ; 7 38 11 JR C,MNEG_EX ; 7,12 MPOS_EX: CB C4 SET 0,H ; 8 C9 RET ; 10 MADD40: 26 00 LD H,0 ; 7 C6 28 ADD A,40 ; 7 38 EB JR C,MSUB20 ; 7,12 MADD20: C6 14 ADD A,20 ; 7 38 ED JR C,MSUB10 ; 7,12 MADD10: C6 0A ADD A,10 ; 7 38 EF JR C,MPOS_EX ; 7,12 MNEG_EX: C6 0A ADD A,10 ; 7 C9 RET ; 10


 発想を変えて、お題がZ80なのでBCD関連の命令をうまく利用できないか考えてみた結果が次の処理です。
★2019/07/13 追記 {
 思考の順番としては100要素の回答テーブルの各要素の規則性は単純なのでもっと短いテーブルにできないものか?という発想から考えた結果として上位ニブルに対するBCDテーブルに行き着きました。
}
 RRD命令のクロック数が多いのが気になりますがこれも結構速そうですね^^

 気合を入れれば平均クロック数を算出して上の処理と比較できますが夜の作業としては他の作業をしたい(上の処理は分岐確率が50%でないところがあるので更にややこしい)

 今時のマイコンであれば統合開発環境内で実行時のクロック数はシミュレータですぐに確認できるのですが、Z80のシミュレータで実行クロック数を確認できるものを少し探しましたが見当たりませんでした。
 0..99をループで回し開始/終了時にI/O命令を実行してロジアナで確認することはある程度容易にできますが、それもやぼったいので、クロック数をモニタできるシミュレータが見つかったら比較してみたいと思います。

現時点で最新の高速処理案
; +++ my method +++ mydiv: 21 0707 ld hl,wrk ; 10 70 ld (hl),b ; 7 set input value AF xor a ; 4 ED 67 rrd ; 18 6E ld l,(hl) ; 7 set high nible 86 add a,(hl) ; 7 add high nible's BCD to low nible 27 daa ; 4 BCD B7 or a ; 4 clear flag 27 daa ; 4 BCD(for high nible) 2E 07 ld l,wrk and 00ffh ; 7 77 ld (hl),a ; 7 AF xor a ; 4 ED 67 rrd ; 18 66 ld h,(hl) ; 4 C9 ret ; 10 org ($ + 255) and 0ff00h ; BCD 00 tbl: db 000h ; 00h 16 db 016h ; 10h 32 db 032h ; 20h 48 db 048h ; 30h 64 db 064h ; 40h 80 db 080h ; 50h 96 db 096h ; 60h wrk: ds 1


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

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

 今回作成した3チップ構成のワンボードマイコン(下の写真)でCP/M-68Kが動作しているようなのでCP/M-68Kを立ち上げるまでに必要な作業を整理しました。

 使用しているチップは下記のとおり、3チップ構成で汎用ロジックICやPLD等は使っていません。
  • MC68008P10
    10MHz版のバスが8bit幅の68Kチップ。PICからクロックを供給する関係で8MHzで動作。
  • K6T4008C1B-DB70
    512KBのSRAM。アクセスタイムは70ns。
  • PIC24FJ64GA004
    16bitPICマイコン。セルフコンパイラの独自言語picleを使って制御

Pic24CPM68K

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

    1. 今回作成したPic24CPM68K用のファイル
       PICファーム全体のhexファイル(これを書込めばPIC側の準備は完了)とIPL、bios等のCP/M関連のソース等をアーカイブした下記のファイルをダウンロードする。

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

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


  2. PIC24FJ64GA004側の準備
    • ワンボードマイコン基板
       回路図は下記のとおりです。詳細は「3チップ構成68Kマイコンの構想(その11)回路図整理とパターン設計」の記事を参照してください。
       SDカードホルダはebayで購入したものを使っていますが、秋月電子通商さんで販売している「SDカードコネクタ SD381200-S304」も使えると思います。

       今回作成したプリント基板のガーバーデータをseeedさんの「Fusion gallery」の「Geek product」コーナーで公開しました。
      CP/M-68K board consisting three chips

      3チップ構成の68Kマイコンボードの回路図
      ※R3は+5Vにプルアップするつもりでしたが3.3Vへのプルアップでも動作することを確認しました^^;

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

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

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

      3. cpmディレクトリに入っている「EXIT.68K」をCP/M上で起動するとCP/Mから抜けてpicleコンパイラの世界に戻ります(runコマンドでCP/M再起動)

      4. picleのソースもpic用hexファイルに入れてあるのでセルフコンパイル環境で機能変更が可能です。
         picleソースの表示方法やpicleの使用方法については「独自言語 picle on PIC24FJ」や「独自言語 picle compiler on PIC24FJ」を参照してください。

      5. TeraTermのシリアル設定は38400bps、8bit、Parity無しです。

      6. SDカードの抜き差しをPICが監視しています。抜いた状態ではERSDのLEDが点滅します。SDカードを抜いてから挿入するとSDカードを再度イニシャライズ(保存データは消えない)するので継続してSDカードのアクセスが可能です。

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


  3. ディスクイメージの作成
     ダウンロードしたcpmtoolsを展開したフォルダにPic24CPM68K用アーカイブ内にあるdiskdefs、cpmboot.img及びsysgen68.batファイルを置きます。
     上記でダウンロードしたCP/M-68K Ver1.3のアーカイブ内にある「DISK1」~「DISK9」のフォルダをcpmtoolsを展開したフォルダ直下にコピーします。
     DISK1フォルダにはPic24CPM68K用アーカイブ内にあるCPM.SYSを上書きでコピーします。
     sysgen68.bat内を見れば判るように「DISK10」(Jドライブ)までのファイルイメージを作成するようになっているのでDISK10のフォルダを作成し、Pic24CPM68K用アーカイブ内にあるSKED.RELやEXIT.68K(その他、CP/MのJドライブに入れたいファイル)を「DISK10」フォルダに入れます。
     DISK1~DISK10までのフォルダの準備ができたら、sysgen68を実行すると「diskimage」というファイルが生成されます。


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


  5. CP/Mの起動
     上記で作成したSDカードを入れた状態で電源を入れれば、自動的にCP/Mが立ち上がります。
     ダウンロードしたPic24CPM68Kファイルに入っている「EXIT.68K」を実行することで、CP/M-68Kから抜け、PIC上のpicleコンパイラの環境に戻ります。


★2019/07/07 追記 {
 Pic24CPM68Kのアーカイブファイルに入れた方が良かったかもと後で思いましたが、CP/M-68Kとパソコン間でファイル送受信したい場合には「3チップ構成68Kマイコンの構想(その10)XMODEMアプリの作成」の記事に書いた拙作のCP/M-68K用のxmodemアプリを使用するとメチャ便利です。パソコン側ではTeraTermのxmodem機能を使います。
 コンソール出力はPIC側でCP/M時代のエスケープシーケンスの一部をANSIエスケープシーケンスに変換しているのでTeraTermのディフォルトターミナルであるVT100でもWordMasterやWordStarが動きます。
 しかし、このためにコンソール出力データがPICの変換処理で変更されてしまい、バイナリデータの透過性が保証されません。

 Pic24CPM68KではBIOSの汎用入出力(CP/M-80で言うPUN/RDRデバイス)をコンソール用のシリアルを使い、バイナリデータの透過性を保証できるように実装しているので xmodem 使用時に /p のオプションを付けることでファイル送受信をバイナリ透過性のある汎用入出力で行えます。
 また、Pic24CPM68KのOPEスイッチを押すことで上記のPIC側でのエスケープシーケンス変換を有効/無効に切り換えれるのでxmodem使用時に変換処理を無効状態にして /p オプション無しで使うことも可能です。
}

★2019/07/08 追記
 上記の「WordMasterやWordStarが動きます」はCP/M-80(Pic24CPM)での話です^^;
 Pic24CPM68Kでも同様にエスケープシーケンスの変換処理が実装されています。


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



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

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

レトロマイコン86ボードの構想 [8086]

 「3チップ構成Pic24CPMマイコン(CP/M起動までの作業まとめ)」と「3チップ構成68Kマイコンの構想(その11)回路図整理とパターン設計」の記事でPICを使ったZ80と68Kのワンボードマイコンについて書きましたが、同様にPICを使った8086のワンボードマイコンを作ってみたいと思います。

 今回も今までと同様に少ないチップ数で単独で動作するワンボードマイコンの実現を目指します。
 そのための構想は次のとおりです。

  1. データバス幅
     PICと連携時するためにPIC側とのインターフェースとしてPIC側が一時的にバスマスターになりメモリ操作する想定でデータバス幅は次の理由で8bit幅の8088系を採用することにします。
     [理由]
     PIC24FJ64GA004を使うのでI/O数的に16bitのデータバスの対応は難しい、かつチップ数削減のためにメモリチップも8bit幅のものを1個(512KB予定)使用した方がいい。

  2. アドレスとデータ
     8086/8088はデータバスがアドレスピンに多重化されているので分離するためにアドレスをラッチする必要があります。
     PICからメモリをアクセスする場合、分離後のバスを使用することも可能ですが、PICのパラレルマスターポート(PMP)機能はアドレスとデータの多重化にも対応しているのでPIC側の使用ピン数を削減する意味でも半多重化アドレッシングモードを使用し、ラッチで分離前のバスにPICが介入する予定です。

    PICのPMP機能の半多重化アドレッシングモード

  3. クロック
     インテル8086はクロックのデューティ比が1:2で専用のクロックジェネレータであるi8284を使用するケースが多いですが、デューティ比1:1のクロックにも対応しているNEC製のV20(uPD70708H)を採用することにします(eBayで300円弱で購入可能)。
     PICで1:2のクロックを生成する方法も考えられますが、V20(8088相当品)を16MHzで動作させたいのでCPU側でハード対応することにしました。

    NEC製Vシリーズのクロック規格(抜粋)

  4. PICとのインターフェース
     最も重要な検討事項の一つであるV20とPICとのインターフェースについてはZ80版検討時に考えた(結果としてはreset方式を採用)「レトロマイコンZ80ボードの構想(その17)HALT以外の方法」の記事にも書いたI/O命令によるWAIT方式を拡張したもので実現する予定です。
     実現方法としてはIO/M、INTA/、A15が全てHighの場合にV20がwaitするようにします。
     INTA/を条件に追加することでインターラプト受付時に反応することがなくなります。
     また8086はI/O命令でのアドレス指定として、DXレジスタまたは即値で指定可能ですが、即値の場合、上位アドレス(A8-A15)はゼロになるのでハード的にもI/Oアドレスとしては前半32Kにマッピングするケースが多いと推測されることからwaitする条件としてA15=highという条件も加えました。
     このためには3入力のNANDゲートが必要となりますが、チップ数削減策としてツェナーダイオードでダイオードORします。

    Wait信号生成

     V20のREADYピンに入力するためには上図の右上の信号を反転する必要がありますが、チップ数を削減したいのでトランジスタを使う・・いや、PIC内のコンパレータ機能を使って反転します。
     V20側ではPICと連携する場合は必要な情報をメモリに格納した後に上位アドレス(A15=1)に対するI/O命令を実行し、wait状態に入ります。
     PIC側ではWAIT信号を見張っていて(実際には上記のコンパレータ結果を監視)、WAIT状態になった場合にはバスリクエストし、処理結果をメモリに格納後、バスを開放し、READYをhighにしてwaitを抜けるようにします。

     参考としてV20のメモリリードタイミングを示します。

    メモリリードタイミング

     READY信号のサンプリングは下図に示すようにT2の立下りです。

    WAITサンプルタイミング



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

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

Bluetoothイヤホンの修理 [その他]

 今年になってから購入したBluetoothの左右分離型のイヤホンの右側がケースに入れても充電ランプがつかなくなり、電圧給電用のスプリングピン部分を確認しても電圧が出ていない状態でした。
 ケースを開けて確認したところ、充電電圧をON/OFF制御しているFET(SI2300)が駄目そうだったのでebayで注文(20個で108円)し、待ち状態です。

 そこで2年位前に買った左右分離式でないBluetoothイヤホンを使っていたのですが、数日前から左側から音が出なくってしまいましたorz

 最近の電子機器は小型化されネジが見当たらないものが多いですが、大抵はケースの隙間をこじ開けるとケースを分解できます。

 ケースを開けてみると左側のイヤホンのケーブルの半田付け部分が取れていました(クリックで拡大した写真の赤丸部分)

 半田付けし直して無事復活しました。
 まぁ今回のように原因が断線であれば、調査も修理もメチャ楽でいいんだけどね^^

イヤホンのコントローラ部



nice!(0)  コメント(0) 
共通テーマ:趣味・カルチャー
前の5件 | -