自作CPU #2

今日はスタック用のメモリ周りとプログラムカウンタとジャンプ先のアドレスを格納するためレジスタ(ジャンプレジスタ)周りを配線しました。レトロな感じをだしたいのでなるだけDIPのICを使いたかったのですが、スペースと入手性の都合上、レジスタとメモリは表面実装です。

このあたりを配線しました。

f:id:Hamakita:20171128203648p:plain

ジャンプレジスタとプログラムカウンタを裏表の同じ位置に配置したので、特にそのあたりの配線がきつかったです。

自作CPU #1

今趣味でロジックICを主に使った自作CPUを作っているので、せっかくだから日記としてブログにやったことを記録していく事にします。次の二つを参考にさせていただきました。

渡波 郁 CPUの創りかた

・中日電工さんのホームページ

TTLでCPUを作る組立てキット・トランジスタでCPUを作る組立てキット・TK−80互換マイコン組立キット・Z80マイコンボード・BASIC制御マイコンボード

 

 

回路図はほぼ完成しており、今基板図を製作中です。昨日はクロックジェネレーター周りとINPUTのトライステート周りを配線しました。

このあたりを配線しました。

f:id:Hamakita:20171127113714p:plain

 

 

現在の基板図全体です。スペースが足らないのでさらにこの上に基板をくっつける予定

f:id:Hamakita:20171127113717p:plain

 

試しに上の状態から自動配線を試してみました。

f:id:Hamakita:20171127114352p:plain

 左半分を配線するのにかなりの時間を使ってしまって疲れていたのか、もうこれでいいんじゃね?

と思ってしまいました。しかし自分で配線したほうがきれいになるので頑張ろうと思います。

ジャンクPS3(YLOD,8002F14E)修理

ジャンクなPS3を入手しました。1080円でした。

とりあえず電源をつけてみましたが

まったく起動しませんでした。

調べてみると結構有名な故障らしくYLODと呼ばれるものだとわかりました。

原因はCPU,GPUの発熱による半田クラックらしいので、

グラボを焼く手順でオーブンで焼いてみました。

CPU、GPU以外はアルミホイルでつつんでおきます。

そうすることで起動することができました。

ドライヤーやヒートガンでYLODを修理する人が結構いるみたいですが、

個人的にはオーブンで焼いたほうがいいと思います。

オーブンだと温度管理ができるので。

その後HDDがついてなかったのでシステムソフトウェアをインストール

しようとしましたが、ここで問題がおきました。

システムソフトウェアはUSBメモリにいれて読み込ませようとしましたが、

異様に探索が遅いのです。

USBケーブルでコントローラをつなぎPSボタンを押す

スタートボタンとセレクトボタン同時押しでシステムソフトウェア探索

↑これが異常にながい

結局数時間放置することでアップデート画面に移行することはできましたが。

何度やっても8002F14Eというエラーが出るようになりました。

電源をいれたとき光学ドライブの調子が悪い

(ディスクが吸い込まれないし内部にディスク入ってないのにディスク入ってると認識してる)のが分かったのでそいつがあやしいとは思ってたのですが案の定でした。

このエラーはBDドライブのエラーらしいです。

ここからが時間がかかりました。BDドライブを何度も開けたり閉めたりしました。

結局コネクタの接触不良だったらしくドライブ側のフレキケーブルコネクタがはずれかけており、こいつを差し込み直したらアップデートに成功し無事ゲームができるようになりました。

時間がかかった理由としては、このエラーはよくコネクタの接触不良で起きているようなのですが、マザボ側のフレキケーブルコネクタばかり見ていました。

だって、ドライブ側はテープで覆われてたし、だいたい電源を付けた時ドライブが動こうとしたり、レーザーが光ってたり、強制イジェクトは動作したんですよ。

なので最初に接触不良ではないと決め付けたのがいけませんでした。

 

ジャンクマザーボードH170M-PLUS修理

ジャンクなLGA1151世代マザーボードをゲットしました。

お値段なんと500円でした!!

ASUS H170M-PLUS

ゆーやつです。

 

f:id:Hamakita:20170812011257j:plain

お家に持って帰ってまずやったことはマザーボードを眺めることです。

舐めるように眺めます。

外見から故障箇所が解れば儲けもんです。

購入時CPUソケットをチェックしてみましたが、

ピン折れはなさそうでした。

他の箇所も特に怪しいところはありませんでした。

 

動作確認をしてみます。

 

f:id:Hamakita:20170812012411p:plain

おっ画面映ったぞ、これは当たりか??

と思ったらすぐにシャットダウンしてしまいました。

なにかエラーを吐いてたみたいなので確認してみると

USB Device Over Current Status Detected !!

と表示されていました。

USBデバイスに電流が流れすぎてます‼

というエラーみたい

USBがショートしてるのかな??

 

今度はUSBに繋いでいたマウスとキーボードをはずして起動してみました。

 

USB Device Over Current Status Detected !!

同じエラーがでました。orz

 

マザーボードにほこりがつまってショートさせることもあるので

エアーダスターできれいにしてから起動してみました。

USB Device Over Current Status Detected !!

同じエラーがでました。orz

 

こういうときはとりあえずcmosクリアを試してみます。

ボタン電池を外して数十秒放置すればOKです。

USB Device Over Current Status Detected !!

同じエラーがでました。orz

 

うーんとりあえずどっかのUSBがショートしているのは間違いなさそうなので

マザーボードからでてるUSBの電源を1つずつチェックしていったら

電源がきてないやつがあるはずだ!!と思ってチェックしてみたら

 

ありました!!

 

f:id:Hamakita:20170812011329j:plain

このUSBポート2つです。起動している時、他のUSBは電源がきてるのに

こいつらだけきてないです。

 

USBの電源供給の切り替えを行うFETがどっかにあるはずなので

そいつが壊れてショートしてると目星をつけました。

 

みつからない……どこにあるの??

 

さんざん探しましたが結局分かりませんでした。

しばらく悩みましたが。

思い切って逆に電源を供給してみる事にしました。

 

テスターでチェックしてみると

電源がきてないUSBポートは、ショートしているわりには

電源とGND間の抵抗が髙かったのです。

本当にショートしてたら、電源を供給するのはまずいですが、

どーせジャンクだし、このまま動かないよりは試してみよう!

とゆー事でお隣のUSBからジャンパーして電源を引っ張ってきます。

f:id:Hamakita:20170812011021j:plain

 

そして電源おーーん

 

 

 

 

f:id:Hamakita:20170812011045j:plain

きたあああああああああああああああああああああああああああああああああああああああああああああああああ

BIOSに入りましたあああ

やったーーーーーーーーーー

最近のBIOSは近未来的でかっこいいなぁぁぁぁぁぁああああいえええええええいい

 

windows入りのHDDを繋いだら無事windowsまで起動してくれました。

一通り周辺機能を確認してみましたが問題なく動いているみたいです。

結論として電流が流れすぎてますよーというエラーは今回の場合

USB電源の供給部分が壊れていて電源きてなかったから起きてたみたいです。

 

最終的に壊れたUSBポートの電源はお隣から鈴メッキ線で引っ張ってきました。

f:id:Hamakita:20170812011031j:plain

この状態で問題のUSBポートにデバイスを刺したら

問題なく動いてくれたました。

 

 

ジャンクGTX1070修理

ジャンクなGTX1070搭載グラボをゲットしました。

お値段なんと5000円でした!!(桁間違えてないです)

意気揚々と購入し早速PCへ刺してみました。

 

わーーLED光ったあああああああ通電はするぞ

きたか?

 

 

映らない…

うーん

 

あっ電源が足らないのかな??

デュアル電源にしてみよう!

 

グラボ専用に550w電源をつけて

スイッチおーーーん!!!

 

映らない…

 

あれ??これもしかしてPCIe用電源ピン6ピン刺してもダメなのかな??

でも使っている電源に8ピンPCIe電源コネクタはないなー

創ろう!!

 

f:id:Hamakita:20170809024934j:plain

こんどこそ!!

 

映らない…

 

あああああああああああああああああああああああああああああああああああああああああああああああああああああああああああダメなのかーー!!!

5000円損したのかあああ

 

グラボのヒートシンクをはずしてコンデンサがぶっ飛んだりしてないかチェック

してみたけど

f:id:Hamakita:20170809024954j:plain

怪しいところはとくになし…

 

こうなったら最終手段でジャンク界では有名なグラボ修理法をためしてみよう

オーブンレンジで焼きます!

 

先人達のブログを拝見させていただき焼き時間を決めました。

主にこちらのブログを参考にさせていただきました。

 

PCが起動しなくなったのでグラボ(R9 270X)をオーブンで焼いて修理した話 | SmartAll(スマータル)

 

今回は190℃で4分ほど焼いてみたいと思います

焼きたいGPU以外はアルミホイルで保護します

f:id:Hamakita:20170809024944j:plain

焼き終わったら急には冷まさずゆっくり冷まします。

オーブンレンジ内に1時間程放置しておきました。

 

動作チェックしてみます…

 

 

 

f:id:Hamakita:20170809024925j:plain

映ったーーー!!!

ん?どうやらPCIe電源を刺し忘れていたようですね。

グラボに補助電源を投入したら無事windowsが起動してくれました。

ちゃんと映ってます。画面にノイズがあるわけでもないです。

ゲームもできました!

やったああああああああ!!!!!!!

 

 

 

 

 

acerP223Wd 修理

パソコンディスプレイとして使っていた

acerP223Wdというディスプレイが壊れて電源がつかなくなったので

分解して修理してみました。

まず本体を覆っているカバーを外しました。

これが曲者でなかなか分解に手間取りました。

結局綺麗に分解することができず

一部破壊してしまいました。(;_;)

 

f:id:Hamakita:20170711022349j:plain

中には基板が二枚入っており

映像信号をディスプレイへ表示する基板と

AC100vから基板の電源とバックライトの電源を作る基板です。

この2枚目の基板をよく見てみるとコンデンサが2つ膨らんでいました。

どうやらこのコンデンサが原因のようです。

f:id:Hamakita:20170711022421j:plain

 

同じ容量のコンデンサを購入し交換しました。

f:id:Hamakita:20170711022412j:plain

仮組み立てをし電源を入れてみると動いてくれました。

f:id:Hamakita:20170711023518j:plain

ググってみると同じ製品でまったく同じところが壊れている記事をたくさん見かけました。

PIC18F23K20 電子工作を始めよう #5 LEDフラッシャー改

今回は前回のLEDフラシャーのプログラムに改良を加えます。

タイマー割込みを使うことで、点滅タイミング切り替え時

長押しをしなくてよくなります。

またスイッチを押している間点滅が停止することもなくなります。

 

PIC入門GUIプログラミング#5LEDフラッシャー改 - YouTube

【ゆっくり】PIC入門GUIプログラミング#5LEDフラッシャー改 by 電子ライダー ニコニコ技術部/動画 - ニコニコ動画

完成形のプログラムを提示します。

main.c

/**
Generated Main Source File

Company:
Microchip Technology Inc.

File Name:
main.c

Summary:
This is the main file generated using MPLAB(c) Code Configurator

Description:
This header file provides implementations for driver APIs for all modules selected in the GUI.
Generation Information :
Product Revision : MPLAB(c) Code Configurator - 4.15
Device : PIC18F23K20
Driver Version : 2.00
The generated drivers are tested against the following:
Compiler : XC8 1.35
MPLAB : MPLAB X 3.40
*/

/*
(c) 2016 Microchip Technology Inc. and its subsidiaries. You may use this
software and any derivatives exclusively with Microchip products.

THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, WHETHER
EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, INCLUDING ANY IMPLIED
WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS FOR A
PARTICULAR PURPOSE, OR ITS INTERACTION WITH MICROCHIP PRODUCTS, COMBINATION
WITH ANY OTHER PRODUCTS, OR USE IN ANY APPLICATION.

IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,
INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND
WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP HAS
BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO THE
FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL CLAIMS IN
ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT OF FEES, IF ANY,
THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS SOFTWARE.

MICROCHIP PROVIDES THIS SOFTWARE CONDITIONALLY UPON YOUR ACCEPTANCE OF THESE
TERMS.
*/

#include "mcc_generated_files/mcc.h"

/*
Main application
*/
#define LED0 PORTAbits.RA0
#define LED1 PORTAbits.RA1
#define LED2 PORTAbits.RA2
#define LED3 PORTAbits.RA3
#define SW0 !PORTBbits.RB0
#define SW1 !PORTBbits.RB1
#define SW2 !PORTBbits.RB2
#define SW3 !PORTBbits.RB3

void interrupt_10ms(void);
int mode=0;
void main(void)
{
// Initialize the device
SYSTEM_Initialize();

// If using interrupts in PIC18 High/Low Priority Mode you need to enable the Global High and Low Interrupts
// If using interrupts in PIC Mid-Range Compatibility Mode you need to enable the Global and Peripheral Interrupts
// Use the following macros to:

// Enable high priority global interrupts
//INTERRUPT_GlobalInterruptHighEnable();

// Enable low priority global interrupts.
//INTERRUPT_GlobalInterruptLowEnable();

// Disable high priority global interrupts
//INTERRUPT_GlobalInterruptHighDisable();

// Disable low priority global interrupts.
//INTERRUPT_GlobalInterruptLowDisable();

// Enable the Global Interrupts
INTERRUPT_GlobalInterruptEnable();

// Enable the Peripheral Interrupts
//INTERRUPT_PeripheralInterruptEnable();

// Disable the Global Interrupts
//INTERRUPT_GlobalInterruptDisable();

// Disable the Peripheral Interrupts
//INTERRUPT_PeripheralInterruptDisable();

TMR0_SetInterruptHandler(interrupt_10ms);
unsigned int i;
while (1)
{
// Add your application code
switch(mode){
case 0:
LED0=1;
LED1=1;
LED2=1;
LED3=1;
for(i=0;i<30000;i++);
LED0=0;
LED1=0;
LED2=0;
LED3=0;
for(i=0;i<30000;i++);
break;
case 1:
LED0=1;
LED1=0;
LED2=1;
LED3=0;
for(i=0;i<30000;i++);
LED0=0;
LED1=1;
LED2=0;
LED3=1;
for(i=0;i<30000;i++);
break;
case 2:
LED0=1;
LED1=1;
LED2=0;
LED3=0;
for(i=0;i<30000;i++);
LED0=0;
LED1=0;
LED2=1;
LED3=1;
for(i=0;i<30000;i++);
break;
case 3:
LED0=1;
LED1=0;
LED2=0;
LED3=1;
for(i=0;i<30000;i++);
LED0=0;
LED1=1;
LED2=1;
LED3=0;
for(i=0;i<30000;i++);
break;

}
}
}

void interrupt_10ms(void){
if(SW0) mode=0;
if(SW1) mode=1;
if(SW2) mode=2;
if(SW3) mode=3;

}
/**
End of File
*/