<紙>さんLOG

「パソコンヲタクの雑記帳」
 PC/Linux系/物理・化学で遊んでいます。
思いついたことを綴っています。

78K0マイコン:ブートローダ

2008年08月06日 | PIC・マイコン
昨日までの累計アクセス数=5,907。 ご訪問頂き、ありがとうございます。         日記@BlogRanking

78K0マイコンとは、トランジスタ技術8月号(まだ、最新号? 10日発売)の付録として付いている基板で、
PCから見れば、PIC(6) USB・Genで列挙した内の、CDCデバイスにあたります。
付録のままでも、PCにUSB(延長)ケーブルで繋いで使えます。

ちょっとしたプログラムを作れば、USB-IOもどきにすることができますね。

発売翌日の、JA1OHP さんのブログ小さなマイコンが雑誌の付録に付いてた ~ 動きました ~に刺激されて、
2週間遅れで買っていました。

活用例は、JJ1WKN さんのブログトラ技 付録 NEC 78K0 マイコン その1(続きあり)に詳しく載っています。

<紙>も、ツール(アセンブラ、Cコンパイラ、+α)をインストールして、
(最初に作ってみる)1秒毎のLED 点滅プログラムを CC78K0 コンパイラで作ってみました。

時間待ちとして、インラインアセンブラを使って NOP命令を入れてみたが、
リンカで .rel ファイルが無いとか出て悩みました。
結局、空の while ループで約1.4マイクロ秒が作れたので、それで誤魔化しています。

そして、トラ技BIOS対応のブートローダを作りました。(Active BASICで。)
プログラム名は、AB_78K0.abp です。(下記)

使い方は、CC78K0 でビルドした結果を a,hex とし、AB_78K0.exe と同じところに置く。
78K0 ボードを繋いでから、AB_78K0.exe を実行すると、a.hex が書き込まれて実行される。
というものです。
78K0 ボードは、COM8 と決めうちしています。(パラメータ化は可能ですね。)
a.hex の実行でUSB 通信する場合は、追加のコーディングをします。

AB_78K0.abp でのシリアルIO処理は、PC:PIC 接続[シリアル編]で作ったものを改造しました。


' ------------------------- AB_78K0.abp
#include "RS232Cdecl.sbp" ' RS232Ctest.sbp を含む
#prompt ' 無くてもいい
'
Dim hComm As HANDLE, a$ As String
Dim buf[255] As Byte, k As Long, v As Long
'
a$=GetOneselfFileNameStr() : a$=Left$(a$,Len(a$)-11)
ChDir(a$) ' 自分自身("AB_78K0.exe")のディレクトリへ
'
hComm=CommOpen("COM8",115200,8,0,1) ' オープンCOMポート=コネクト78K0
'
' ------------- トラ技BIOS 開始
buf[0]=13 : buf[1]=0 : WriteFile(hComm, buf, 1, VarPtr(k), ByVal 0)
Sleep(15) : ReadFile(hComm, buf, 255, VarPtr(k), ByVal 0)
'
' ------------- load   a.hex
buf[0]=&H6C : buf[1]=&H6F : buf[2]=&H61 : buf[3]=&H64 : buf[4]=13 : buf[5]=0
WriteFile(hComm, buf, 5, VarPtr(k), ByVal 0)
Sleep(15) : ReadFile(hComm, buf, 255, VarPtr(k), ByVal 0)
Open "a.hex" For Input As #1
While Not(Eof(1))
Input #1,a$
v=len(a$) : memcpy(buf,StrPtr(a$),v)
buf[v]=13 : v++ : buf[v]=0
WriteFile(hComm, buf, v, VarPtr(k), ByVal 0)
Wend
Close #1
Sleep(15) : ReadFile(hComm, buf, 255, VarPtr(k), ByVal 0)
'
' ------------- jmp f000
buf[0]=&H6A : buf[1]=&H6D : buf[2]=&H70 : buf[3]=32
buf[4]=&H66 : buf[5]=48 :buf[6]=48 : buf[7]=48 : buf[8]=13 : buf[9]=0
WriteFile(hComm, buf, 9, VarPtr(k), ByVal 0)
Sleep(15) : ReadFile(hComm, buf, 255, VarPtr(k), ByVal 0)
'
' ======= 78K0 とのIO処理は、ここに追加する ========
'
*fin:
CloseHandle(hComm) ' クローズCOMポート
End
'
' ----------------------------------------
Function GetOneselfFileNameStr() As String
Dim buf[255] As Byte, length As Long
length=GetModuleFileName(NULL,buf,MAX_PATH)
GetOneselfFileNameStr=ZeroString(length)
memcpy(StrPtr(GetOneselfFileNameStr),buf,length)
End Function
' ================================= End Prog. ==============
ReadFile はすべてダミー(バッファ・クリアの為)です。

お手数をおかけしますが、2クリック(投票を)して頂けるとうれしいです。 ⇒ 日記@BlogRanking
お引き立て頂き、「60代~日記@BlogRanking」で上位になれています。ありがとう御座います。

ロータリースイッチの入力

2008年08月05日 | PIC・マイコン
昨日までの累計アクセス数=5,690。 ご訪問頂き、ありがとうございます。    日記@BlogRanking
お引き立て頂き、「60代~日記@BlogRanking」で上位になれています。ありがとう御座います。
やっと、アクセス数(IP)の累計で2千を超えました。

さて、ロータリースイッチ(SW)といっても、例えば1回路8接点のようなものではなく、
正確にはエンコードSWのことです。
例えば0~7の8通りの状態を3ビットで表現するようなSWのことです。

純粋なロータリーSWの値の読み取りでは8ビット必要ですね。
で、エンコードSWの状態をPICで読み取る場合、下図左のようにデジタルで入力すると3ビット必要となる。
しかし、AD変換機能のあるPICで、右のようにアナログ入力にすると1ビットでできる。



共通側に 22kohm を繋ぎ、1、2、4 側にそれぞれ 10kohm、22kohm、47kohm を繋ぐとすると、

1~7の場合の合成抵抗値は、
1:10-----10.00kohm
2:22-----22.00kohm
3:(22,10) -- 6.88kohm
4:47-----47.00kohm
5:(47,10) -- 8.25kohm
6:(47,22) --14.99kohm
7:(47,22,10)- 6.00kohm  となり、

これと共通部分の 22kohm との電圧分割比は、
0:1.000
1:0.313
2:0.500
3:0.238
4:0.681
5:0.273
6:0.405
7:0.214 となる。

PICのAD変換機能は10ビット以上あるが、8ビットで考えると
0:255
1: 80
2:128
3: 61
4:174
5: 70
6:103
7: 55  である。

これを並べ替えると
0:255
4:174
2:128
6:103
1:80
5:70
3:61
7:55  となり、
差の最小は3の場合と7の場合の差6である。

測定誤差は高々1(一定な電圧環境であれば8ビット分解能では誤差は無い?)であるから、
判定値を中間の値
58、65、75、92、115、151、224
とすれば、十分識別できることになる。

<紙>は、この方式で、電源ON又はRESET直後に値0~7を読み取り、
8種類のプログラムを起動するようなものを作ってみた。OK。メデタシメデタシ。

なお、エンコードSWには2種類あって、正論理のものと負論理のものがある。
この話しは、正論理(?)のものかな。


お手数をおかけしますが、2クリック(投票を)して頂けるとうれしいです。 ⇒ 日記@BlogRanking

PCクリニック(3) 突然死

2008年08月04日 | PCクリニック
昨日までの累計アクセス数=5,482。 ご訪問頂き、ありがとうございます。    日記@BlogRanking
お引き立て頂き、「60代~日記@BlogRanking」で上位になれています。ありがとう御座います。


さて、PCを立ち上げてしばらく使っていると、突然シャットダウンする、という症状がでるとのこと。
動かしているAPは一定ではない。

この場合考えられる原因としては、
1.ウイルスに感染している。
2.システムファイルが壊れている。
3.熱暴走(車で言うところのオーバーヒート)。
4.APに欠陥がある。(この場合はシャットダウンでなくリセットのケースが多い)
などなどである。

電話では良く分からないので、出張診察することにした。

立ち上げ、暫く面談していたら案の定シャットダウンした。
直ぐに立ち上げ直そうとするが、立ち上がらない。
・・・・・

そうか、オーバーヒートしているのだ。PCの設置環境がよろしくない。埃が多い環境である。
CPU(PCのエンジン)を冷やすクーラーの効率が低下しているようだ。

CPUは温度が約70度を超えると動かなくなる。
ファンで強制冷却しているのだが、例えばファンが止まると直ぐに100度を超えてしまう。

結局、ファンは回っているが、埃が溜まっていて冷却効率が落ちていた。
掃除機で埃を吸い取ることで、回復した。

夏場、気温が高いので、PCも熱中症にかからないよう気をつけなければいけない。

お大事に。


お手数をおかけしますが、2クリック(投票を)して頂けるとうれしいです。 ⇒ 日記@BlogRanking

定期健康診断

2008年08月02日 | Weblog
昨日までの累計アクセス数=5,058。 ご訪問頂き、ありがとうございます。    日記@BlogRanking
皆様のお引き立てにより、「60代~日記@BlogRanking」でほぼ4位になっています。
まことにありがとう御座います。


年1回の定期健康診断を受けました。受けないと雇用主が罰せられるのだね。

で、最初はgoo じゃなくて身長体重計ですね。ついでにBMIが計算される。
昔はBMIは under だったが、最近は徐々に over に近づいて来ている。ヤバイ。

次は視力検査。両目で見ながらの覗き見検査機? 昔は1.5位で一定だったが、
ずいぶん低下し一時期0.3~4まで低下した。今回は0.9と1.2だったかな。
昨年と左右逆のような気がするが、気のせいか・・・

血圧測定も自動計測器。1回目はノイズが多くて計測不能。2回目は上が130超???。
昨年と違って、130超は精密検査だそうですね。(メタボ検診???)
人間(看護師)による検査では、低血圧?・・・パス。

その他、胸部X線撮影、心電図、聴力、採血、・・・
で、最後に腹囲の計測。昨年はなかったゾ。(これが、メタボ検診?)

最後はドクターによる問診。レントゲン写真を昨年分と比較しながら、聴診器で3回。
はい、おつかれさま。
トータル30分程で終了。メデタシメデタシ。
みなさまも、お体を大切に。

お手数をおかけしますが、2クリック(投票を)して頂けるとうれしいです。 ⇒ 日記@BlogRanking

スーパーπ

2008年08月01日 | PCクリニック
昨日までの累計アクセス数=5,058。 ご訪問頂き、ありがとうございます。    日記@BlogRanking
皆様のお引き立てにより、「60代~日記@BlogRanking」でほぼ4位になっています。
まことにありがとう御座います。

 やっと5千カウントに達しました。まだまだ駆け出しですね。
さて、スーパーπ とはもとは円周率を計算するためのプログラムであったが、
PCの処理性能測定(ベンチマーク)テスト用に改造されたプログラムで、
ベンチマークテストプログラムとして有名なものである。
vectorからダウンロードできる。(東京大学大型計算機センターの金田研究室で開発)
そこには、「Pentium 90MHz でメモリが十分にあれば、100万桁を40分ほどで計算できる。」とある。
Windows 95 の時代ですか。

これで<紙>が測定してきた値をまとめる。(いずれも、100万桁の場合)
約10年前に自作したマシンはクロック約300MHzであったが、10分位だった。
それ以前に使っていた PC9821Xa20(200MHzマシン)では15分位でした。
この頃は、Windows 95/98 の時代ですね。

それからどんどんCPU性能が向上し、(Windows Me ~ XP と進んで(?)いる)
H13(2001)年頃の PentiumⅢ 800MHz マシンでは、2分40秒
H14(2002)年頃の Pentium4 2GHz マシンでは、1分40秒
H17(2005)年頃の P4HT 3.2GHz マシンでは、40秒
H19(2007)年頃の Core 2 Duo 2.33GHz マシンでは、23秒
と、PCの演算処理性能が向上してきている。(今年のマシンはまだ使っていません。)

ほぼ5年で1桁違うくらい速くなっている。(10年で100倍?)
それでも滅茶苦茶速いとは思わないのは、Windows が重いから???

Linux は軽いけど、なかなか使いこなせていない。
不満を持ちながら Windows から抜け切れていない<紙>です。


お手数をおかけしますが、2クリック(投票を)して頂けるとうれしいです。(1日1回) ⇒ 日記@BlogRanking