2016-10-25 22:01 | カテゴリ:コンピュータ

先日、夕方にデスクトップPCを立ち上げようとしたら、HDDが読めません、とのエラーが。
数か月前に、使用中に何度がフリーズになり、温度暴走かと思い内部の埃をとって、使っていました。
念のため、1TBのHDDも購入して、使い始めていましたが、やっぱり寿命だったみたいです。
PCに付いていたHDD(日立製)で、2010年9月購入でした。

そこで、HDDを交換して、フォーマットもして、1TBをすべてCドライブに設定し、WIN10のインストールディスク(DVD:後述)でWIN10のクリーンインストールを試みました。
結果は、失敗。
WIN10をインストールするパーティションが見つからない、とか、作成できないとかのエラーで、先に進めません。

次に、手持ちのWIN7の正式DVDから、WIN7をクリーンインストール。
これは、うまくいきました。
その後、すぐにWIN10のインストール(バージョンアップ)を行いました。

プロダクトキーの入力を求められましたが、「以前にWIN10を使用していた」を選択して、キーの入力をパス。
そのまま、インストールは順調に進みました。

結局、WIN10が使用できるように。

これは、後から、「代金を払わないと使わせないぞ!」と、言われるかと思い、WIN10のインストール情報を確認したら、「認証済」になっていました。

Win10.jpg

今思えば、最初にいきなりWIN10のクリーンインストールをした際に失敗したのは、ひょっとしたら、LANケーブルを抜いていたので、オンライン認証確認ができなかったせいかもしれません。(HDDを外すのにLANゲーブルが邪魔だったので)
そうなら、いきなりWIN10にした方が簡単です。

そうそう、一番大切なことを忘れていました。
WIN10にされたなら、マイクロソフトのWEBから、WIN10のインストールメディアの作成をして、USBかDVDを作成しておくのを忘れないようにしてください。
これが無ければ、WIN10の再インストールはできません。

2016-10-24 13:34 | カテゴリ:PIC応用回路


昨年にハンディーケースにGPSセンサーとLCDを組み込んで、ポータブルGPS受信機を製作しました。
今回、これを車載に改造、というか、作り直すことにしました。

じつは、10月末に、家族4人で信州へドライブ旅行に行く予定があり、ドライブ中に何か楽しめるものはないかと考えて、このGPSトラッカーを製作することにしました。
息子たちは社会人ですので、お休みを事前に調整して、十年ぶりくらいの旅行で、楽しみにしています。

以前に制作したポータブルGPS受信機は、16文字X2行の液晶表示器(バックライト無し)を10cmx5cm位のプラケースに組み込んで、Nicdバッテリーで駆動するものです。

ハンディーGPS1


あまり使用する機会がなく、半ばお蔵入り状態でした。
今回は、それを車載にしようという計画です。

【ジャンル】:趣味・実用 【テーマ】:電子工作
コメント(4)
2016-10-22 11:56 | カテゴリ:1/100
PICの電子工作が一息ついたので、以前に購入したプラモの製作を始めたのですが、ちょっと考える所があって、なかなか完成させることが難しい状況になっています。

ネタばれですが、他の工作と並行して根気よく少しずつ進める予定です。

SS04.jpg

何かは、また後日に。

2016-10-19 22:27 | カテゴリ:PIC応用回路

前回はご参考までにと、プログラムを単にUPさせていただいただけでしたので、多少皆様のお役に立てそうな処理の一部をご紹介させていただきます。

細かなネタですので、PICのプログラミングにご興味のある方はどうぞ。(笑)


ライフゲームでは、各ドットについて、その周りのドットの状況を調べて、自分自身の次の世代の生死が決まります。
したがって、二次元平面の自分の位置の上段の3か所、同じ段の左右、下段の3か所の合計8か所のドットのON/OFFを連続的に調べ、そのONの数をカウントしなければなりません。
内部では、(X,Y)座標で、ドットを指定できるようにしていますので、そのXとYをそれぞれ、プラス、マイナスして目的のドットを調べるのですが、その際のX,Yの指定を次のような方法で行いました。

まず、配列を定義して、そこに、必要なXとYのプラスマイナスの値を格納して、

int mtrx[8][2] = {
{-1, -1},
{-1, 0},
{-1, 1},
{0, -1},
{0, 1},
{1, -1},
{1, 0},
{1, 1}
};

それを以下の関数で呼び出して、自分のまわりのONのドット数を計測します。


//-------------------------------------------------
// X, Y, pnで指定されたポイントの周りののDOTのON数を返す
//-------------------------------------------------

int Dot_cnt(int x0, int y0, int pn) {
int xc, yc, i, ttl_no, x1, y1;

ttl_no = 0;
for (i = 0; i <= 7; i++) {
xc = mtrx[i][0];
yc = mtrx[i][1];
x1 = x0 + xc;
y1 = y0 + yc;
if (x1 < 0) x1 = 15;
if (x1 > 15) x1 = 0;
if (y1 < 0) y1 = 15;
if (y1 > 15) y1 = 0;

ttl_no = Dot_chk(x1, y1, pn) + ttl_no;
}
return ttl_no;
}

ここで、pnは、プレーン番号で、実は今回のライフゲームは4つのプレーン(X,Y)を持っていて、4世代を管理しています。
もし、ドットがONになると、そのプレーンのドットのみがONにされます。
次の世代でもONが維持されれば、そのプレーンでもONとなります。
こうすることで、4世代ONになれば、その点は、ダイナミック表示で毎回表示されますので、より明るく、また、一つのプレーンでしかONでないドットは、スキャンが1/4なので、くらいドットとして表示されます。

実際には、それほど明暗の差は付きませんが、なんとなくわかります。


また、指定されたドット(X,Y)をONにしたりOFFにしたりする関数はこれです。


//--------------------------------------------------
// Dot ON 指定ビットを0に
//--------------------------------------------------

void Dot_on(int xc, int yc, int pn) {
int temp;
temp = 1;
temp = temp << xc;
temp = ~temp;
Dot_data[yc][pn] = Dot_data[yc][pn] & temp;
}


//--------------------------------------------------
// Dot OFF 指定ビットを1に
//--------------------------------------------------

void Dot_off(int xc, int yc, int pn) {
int temp;
temp = 1;
temp = temp << xc;
Dot_data[yc][pn] = Dot_data[yc][pn] | temp;
}

マトリックスのプレーンは整数変数の配列(16ビットx16個)x4プレーンで構成されています。
したがって、ドット単位のON・OFFは、整数変数の内部のビットをON・OFFしなければなりません。
たぶん、構造変数を用いて、多重定義すればビット単位で扱えると思うのですが、よくわからなかったので、整数変数を左右にビットシフトして、ANDやORを取ることで、ビット操作しています。


16ビットX16行X4プレーンのドットデータをダイナミック表示するわけですが、HWの配線を簡単にするために、変則的なレジスターアサインになってしまい、結果、ものすごく面倒なダイナミック表示関数になっています。
書き込む整数データ16ビットを、各レジスターの対応するビットに分解して、それをレジスターに一ビットずつ書き込み、8ドットそろったら、対応する行のTRをONにし、残りの8ビットをそろえて、別のTRをONにして、という面倒な作業をしています。

お時間がありましたら、下記、ご参考まで。


//----------------------------------------------------------
// 配列のDOTデータ(4プレーン)をLEDにダイナミック表示する
// コールされるとLEDを消灯し、mで指定されたLEDを点灯して戻る
// TMR0を設定して100usec毎に実行
//----------------------------------------------------------

void interrupt Dot_disp(void) {
GIE = 0;

//---- LED Off -------
PORTA = 0b11111111; // SW1 = RA4
PORTB = 0b11111111; //
PORTC = 0b11111111; //
PORTD = 0b11111111; //
PORTE = 0b11111111; //


if (flg == 0) {
if (n == future) goto last;
// 上段下位バイト
Dot_work1 = Dot_data[m][n];
RC4 = Dot_work1 & 1; // dotデータをポートに移す 0->0, 1->1
Dot_work1 = Dot_work1 >> 1;
RD1 = Dot_work1 & 1; // dotデータをポートに移す 0->0, 1->1
Dot_work1 = Dot_work1 >> 1;
RC5 = Dot_work1 & 1; // dotデータをポートに移す 0->0, 1->1
Dot_work1 = Dot_work1 >> 1;
RC6 = Dot_work1 & 1; // dotデータをポートに移す 0->0, 1->1
Dot_work1 = Dot_work1 >> 1;
RD0 = Dot_work1 & 1; // dotデータをポートに移す 0->0, 1->1
Dot_work1 = Dot_work1 >> 1;
RD2 = Dot_work1 & 1; // dotデータをポートに移す 0->0, 1->1
Dot_work1 = Dot_work1 >> 1;
RC7 = Dot_work1 & 1; // dotデータをポートに移す 0->0, 1->1
Dot_work1 = Dot_work1 >> 1;
RD3 = Dot_work1 & 1; // dotデータをポートに移す 0->0, 1->1

// 下段下位バイト
Dot_work2 = Dot_data[m + 8][n];
RB3 = Dot_work2 & 1;
Dot_work2 = Dot_work2 >> 1;
RD4 = Dot_work2 & 1;
Dot_work2 = Dot_work2 >> 1;
RB2 = Dot_work2 & 1;
Dot_work2 = Dot_work2 >> 1;
RB1 = Dot_work2 & 1;
Dot_work2 = Dot_work2 >> 1;
RD5 = Dot_work2 & 1;
Dot_work2 = Dot_work2 >> 1;
RD6 = Dot_work2 & 1;
Dot_work2 = Dot_work2 >> 1;
RB0 = Dot_work2 & 1;
Dot_work2 = Dot_work2 >> 1;
RD7 = Dot_work2 & 1;
Dot_work2 = Dot_work2 >> 1;
last:

//-- TR on ----------
TR_drive_onL(m); // mによってドライブTRをon
cnt = cnt + 1;


} else {
if (n == future) goto last2;

// 上段上位バイト
Dot_work1 = Dot_data[m][n];
Dot_work1 = Dot_work1 >> 8;
RC4 = Dot_work1 & 1;
Dot_work1 = Dot_work1 >> 1;
RD1 = Dot_work1 & 1;
Dot_work1 = Dot_work1 >> 1;
RC5 = Dot_work1 & 1;
Dot_work1 = Dot_work1 >> 1;
RC6 = Dot_work1 & 1;
Dot_work1 = Dot_work1 >> 1;
RD0 = Dot_work1 & 1;
Dot_work1 = Dot_work1 >> 1;
RD2 = Dot_work1 & 1;
Dot_work1 = Dot_work1 >> 1;
RC7 = Dot_work1 & 1;
Dot_work1 = Dot_work1 >> 1;
RD3 = Dot_work1 & 1;
Dot_work1 = Dot_work1 >> 1;

// 下段上位バイト
Dot_work2 = Dot_data[m + 8][n];
Dot_work2 = Dot_work2 >> 8; //上位バイト
RB3 = Dot_work2 & 1;
Dot_work2 = Dot_work2 >> 1;
RD4 = Dot_work2 & 1;
Dot_work2 = Dot_work2 >> 1;
RB2 = Dot_work2 & 1;
Dot_work2 = Dot_work2 >> 1;
RB1 = Dot_work2 & 1;
Dot_work2 = Dot_work2 >> 1;
RD5 = Dot_work2 & 1;
Dot_work2 = Dot_work2 >> 1;
RD6 = Dot_work2 & 1;
Dot_work2 = Dot_work2 >> 1;
RB0 = Dot_work2 & 1;
Dot_work2 = Dot_work2 >> 1;
RD7 = Dot_work2 & 1;

last2:
//-- TR on ----------
TR_drive_onH(m); // mによってドライブTRをon
cnt = cnt + 1;

}

TR_no = m; // TR_noにmを保存

m = m + 1; //表示するLEDの行を+1する

if (m >= 8) {
m = 0;
if (cnt >= 16) {
cnt = 0;
n = n + 1;
}
if (n >= 4) n = 0;
flg ^= 1; //flgを反転
}
T0IF = 0;
GIE = 1;
}




//---------------------------
// TRドライブ(on)
//---------------------------

void TR_drive_onL(int drv) {

switch (drv) {
case 0: RC3 = on;
break;
case 1: RC2 = on;
break;
case 2: RC1 = on;
break;
case 3: RC0 = on;
break;
case 4: RA3 = on;
break;
case 5: RA2 = on;
break;
case 6: RA1 = on;
break;
case 7: RA0 = on;
break;

break;
}
}


//---------------------------
// TRドライブ H (on)
//---------------------------

void TR_drive_onH(int drv) {

switch (drv) {
case 0: RE2 = on;
break;
case 1: RE1 = on;
break;
case 2: RE0 = on;
break;
case 3: RA5 = on;
break;
case 4: RB7 = on;
break;
case 5: RB6 = on;
break;
case 6: RB5 = on;
break;
case 7: RB4 = on;
break;

break;
}
}







【ジャンル】:趣味・実用 【テーマ】:電子工作
コメント(2)
2016-10-17 15:40 | カテゴリ:PIC応用回路

「ロードスター」プラモの製作が一段落しましたので、電子工作に戻ってきました(笑)

昔製作した、16X16ドットのLEDマトリクス基盤があります。
先日はこれを利用して、「アナログ時計」風の物を製作しました。
他に何かできないかと考えていたら、「ライフゲーム」をWEBで見つけて、久しぶりに製作してみようと。

DotTest.jpg
【ジャンル】:趣味・実用 【テーマ】:電子工作
コメント(4)
2016-10-14 18:39 | カテゴリ:1/24モデル
天候に恵まれて、クリアレッドとスーパークリアの塗装ができました。

デカールもインレッドも貼って、くみ上げました。
墨入れをどうしようかと迷っています。
おかげさまでボディーは研ぎ出しをしないでも結構よい光沢を出しています。
当初の目的の、マツダ「ソウルレッド」の表現も達成できたと自負しています。(笑)

とりあえずほぼ完成の状況を見てやってください。

LS38.jpg

LS32.jpg

LS33.jpg

LS34.jpg

LS35.jpg

LS36.jpg

LS37.jpg

マツダロードスター、塗装チャレンジはこれで一応完成とします。

最後に、さすが田宮さん、パーツの成型や合いは「パーフェクト」でした。
素晴らしい!

追伸
今日も朝から良い天気なので、塗装の比較写真を撮ってみました。

「田宮製、メタリックレッド + クリア」塗装のマクラーレン

「クレオス製、メタリック + クリアレッド + スーパークリア」塗装のロードスターです。

LSComp1.jpg
LSComp2.jpg
LSComp3.jpg
LSComp4.jpg

2016-10-11 17:01 | カテゴリ:1/24モデル

いよいよ、本題のボディー塗装です。
はたして、こんな感じの色合いに仕上がるのでしょうか?

LS01.jpg


続きは、、、、
2016-10-06 17:00 | カテゴリ:1/24モデル
ずいぶん前に購入して、「ソウルレッド」の発色をテストしたきりで、そのままになっていました、新型ロードスター製作を始めました。

LS01.jpg


続きはこちらで、、、、

2016-10-03 17:54 | カテゴリ:PIC応用回路

PIC16F1938を無事書き込みできるようになったので、このPICに装備されている静電容量検知モジュールの動作を確認してみました。

原理は、一言でいうと、指で触ったり、指を近づけたりしたことによる変化するピンの静電容量を、一定電流で充放電する事にかかる時間変化から、一定時間内にその回数をカウントし、カウント値をチェックして、触れたか否かをソフト側で判断するものです。
検知入力ピンが接続されたパッドに指を置くと、容量性負荷が増加し容量検知モジュールで充放電周波数シフトが生じることを応用したものです。

ブレッドボード


続きは、、、
【ジャンル】:趣味・実用 【テーマ】:電子工作
コメント(2)