生涯童貞
メーカーがCD売れないとかDVD売れないって言ってるけど、この本で引用されていたデータを見るとCDの売り上げは落ちていても、着メロ/着うたなんかを合わせれば売り上げ伸びてるじゃないか、とか、作品あたりのDVD売り上げは減少傾向にあっても、総売り上げでは微増ってことは、メーカーが作品乱発しすぎってことだろ、とか思った本。
のり巻きつくった
半年くらい前に買った秋月電子のジャンクH8Sマイコン基板(その1)500円を少し調べてみた。
電源を入れてみたら表示が出た。7桁2行の7セグメント液晶と、グラフィック液晶。
ルネサスのサイトでハードウェアマニュアルにソフトウェアマニュアルと、評価版開発環境と評価版フラッシュ開発ツールキットをダウンロードしてくる。開発環境が高機能でマニュアルが膨大だ。大変だ。
液晶のコントローラは型番が見えないんだけど、たぶんこういうのって定番のLSIがあるんでしょ?と思って、同じような機能のLSIのデータシートを検索してダウンロードしてみた。
グラフィックLCDは
が見つかった。LH155とT6963Cは様子がだいぶ違う。それ以外は互換品。
7セグLCDは
一つしか見つからなかった。
基板の配線を追いながら、機能を想像してみる。AC138って何で2個ついてるんだろ?
ルネサスのサイトの半導体セミナー-サンプルプログラムにH8S用のモニタプログラムがあった。H8/300H Tiny用もあった。ありがたい。
H8を使った事無いので、まずは H8/300H Tiny(3664)でためしにモニタを動かしてみることにする。モニタをHEWでビルドして、Htermで書き込んでみるけど、書き込みにすごく時間がかかる上にエラーが出て書き込めない。3回試してみても同じだった。FDTでやってみるとすんなり書き込みできた。なんでかはしらない。
モニタはちゃんと動いて、メモリのダンプとかできた。これは便利だ。
クロスのシリアルケーブル無いから、コネクタを直接つないで電源入れたら、起動するようになった。何でだろ?どっかショートでもしたかな?
19200bpsでターミナルつないでみたら、なんか出た。エコーは返ってくるけど、そのほかは反応無い。
表示に出てきた、「省エネナビ」をgoogleで検索したら、製品が見つかった。
いよいよモニタを書き込んでみようと、リンケージサブコマンドファイルを修正したんだけど、ハードウェアマニュアルからメモリマップを探すのに一苦労。H8S/2144のアドバンスモードでは 000000 - 01FFFF まで内蔵 ROM、FFE080 - FFEFFF と FFFF00 - FFFF7F が内蔵 RAM だった。モニタのワークRAMはよくわからないけど、500バイトくらいでいいのか?、スタックって上に向かって増えていくんだっけ?とよく分からないままこうなった。
monitor.sub
INPUT ADVANCED,MONITOR
LIST MONITOR.MAP
SHOW SYMBOL
OUTPUT MONITOR.MOT
FORM STYPE
CHANGE INFORMATION=1320
NOOPTIMIZE
LIBRARY ADVANCED,2144
LIBRARY MONITOR
DEFINE $BRR=20
DEFINE $STACK=FFED00
START VECTOR/0,ROM/170,RAM/FFEE00,USER/FFE080,SCI/FFFFFF88
ビルドして転送したら、ちゃんと動いてるみたい。最初動かなくて悩んだんだけど、間違えて 3664 用のモニタプログラムを、この 2144 に書き込んでた。しばらく気づかなかった。
HEWでのプログラムはどう書けばいいんだ?とHEWのヘルプをいっしょうけんめい読んでも、どこにも言語仕様とかが載ってないぞ、と悩んだんだけど、マニュアルナビゲータってところで見る事ができた。
勉強中。
しばらく見ない間に、Visual Studio 2008 Express Editionsっていうのが出てた。無償版の開発環境って前は作ったソフトウェアの配布に制限があったり、Visual Basicしかなかったりしたけど、いつのまにかそういう制限がなくなってる。
HEW (High-performance Embedded Workshop) を使って、組み込みモニタ上で動くユーザープログラムを作る。
(デフォルトの設定でビルドすると、内蔵ROM領域で動くプログラムになってしまうので、設定方法をメモしておく。そうしないと忘れちゃう。)
CPU種別とツールチェインをあわせて、適当にワークスペースを作る。
CPUシリーズとCPUタイプを選んで[次へ]
動作モードをアドバンスドにして[次へ]
(動作モードについてはハードウェアマニュアルに書いてある)
I/Oレジスタ定義ファイル ハードウェアセットアップ関数生成のC/C++ source fileを選んで[完了]
I/Oレジスタ定義ファイル ( iodefine.h ) を生成しておくと、内蔵I/Oのポートやレジスタに、自分で名前を付けなくてもいいので便利。
intprg.c をビルドから除外。(intprg.c はROM上の割り込みベクタテーブルを記述している。ROM上のテーブルは使用しない(できない)ため除外。モニタプログラムに付属する説明書 monitor.htm の割り込み関係の説明を読もう。)
セクションの設定をします。プログラムやデータをどのアドレス空間に配置するかって設定。
こんな感じに設定する。メモリマップ状に表示されてて見やすい。
PとかCとかのセクションの名前については、コンパイラパッケージのユーザーマニュアル、9章のはじめの方に書いてある。
こんなでもいいんじゃないかな
test.c を編集してプログラムを書く。
コメントの付いている4行を追加しただけ。
/***********************************************************************/
/* */
/* FILE :test.c */
/* DATE :Sun, Jan 06, 2008 */
/* DESCRIPTION :Main Program */
/* CPU TYPE :H8S/2144F */
/* */
/* This file is generated by Renesas Project Generator (Ver.4.9). */
/* */
/***********************************************************************/
void main(void);
#ifdef __cplusplus
extern "C" {
void abort(void);
}
#endif
#include "iodefine.h" // 追加
void main(void)
{
P6.DDR=0x30; // P6のbit4,5を出力に
P6.DR.BIT.B4=1; // P6のbit4をセット 青LED点灯
P6.DR.BIT.B5=1; // P6のbit5をセット 赤LED点灯
}
#ifdef __cplusplus
void abort(void)
{
}
#endif
ビルドして、Hterm でロードして実行するとLEDが無事点灯。
実機上でブレークポイント設定したりステップ実行したり、ソースファイルを連動表示できたりと超便利。
ここまでできれば、あとはプログラム書き放題だ。
やっと表示出た。
グラフィック液晶のコントローラは日立HD61202と同等品だった。7セグのLCDは同じようなコントローラを見つける事ができなくて、googleで検索しまくったら、http://h8.or.tp/さんで、このジャンク基盤を解析して動かしているのを見つけて、その通りにやったら表示出た。
動いたソースza080110_LCD_TEST.c
秋月のジャンクH8Sマイコン基板(その1)、気に入ったので 6枚追加購入した。6枚買っても 3,000円。もうちょっと買っても良かった?
見た目で液晶破損しているのが一個あった。ジャンク品だから文句は無い。あとグラフィック液晶にバックライト付いているのがひとつ、7セグLCDはみんなバックライト付きだった。
なんだかモニタ上でプログラムを動かしていると、急に変な動きをするようになってきた。プログラムが大きくなってきて、スタックでも壊してるのかな?と思って、外部SRAM上でユーザープログラムを動かすように、モニタをビルドしなおした。
monitor.sub
INPUT ADVANCED,MONITOR
LIST MONITOR.MAP
SHOW SYMBOL
OUTPUT MONITOR.MOT
FORM STYPE
CHANGE INFORMATION=1320
NOOPTIMIZE
LIBRARY ADVANCED,2144
LIBRARY MONITOR
DEFINE $BRR=F
DEFINE $STACK=FFEE00
START VECTOR/0,ROM/170,RAM/FFEE00,USER/200000,SCI/FFFFFF88
monitor.c の INITIALIZE関数
#include "2144s.h"
void INITIALIZE(void)
{
// MSTPCR.BIT._SCI1 = 0; /* use SCI1 */
MDCR.BIT.EXPE=1; // 拡張モード
BSC.BCR.BIT.ICIS0=1; // アイドルサイクル挿入しない
BSC.BCR.BIT.BRSTRM=0; // 基本バスインターフェース
BSC.WSCR.BIT.ABW=1; // 8ビットバス
BSC.WSCR.BIT.AST=0; // 2ステートアクセス
BSC.WSCR.BIT.WMS=0; // ウェイトモード ウエイト入れない
BSC.WSCR.BIT.WC=0; // プログラムウェイト数
P1.DDR=0xff; // A0- A7 出力
P2.DDR=0xff; // A8-A15 出力
PA.EQU.DDR=0xff; // A16-A23 出力
monitor(); /* Goto Monitor Program */
}
外部SRAM上でプログラム動かしたら、おかしな動きは出ずとても調子いい。
時計ができた。
RTCにクロック出してるつもりで、7セグLCDにクロック出して「動かねー」と一日悩んだり、シフト間違えて読み出したデータが 1ビットずれてたり、1バイトの書き込んだあと RTCからのアクノリッジを検出できなかったり(これはまだ解決していない、ごく短いタイムアウト処理で逃げている。データ化けなんかは出ていない。長い間待っているとその後の受信でデータ化ける。)、いろいろあったけど動くようになった。
次はタイマー割り込みを使ってみたいのと、外部フラッシュの書き込みをしてみたい。
動いたソースza080113_RTC_test.c
PCの調子悪くなったので、HDDフォーマットしてOS入れなおした。OS入れて、アップデートして、バックアップ戻して、アプリインストールしたら、6時間くらいかかった。
最近電気使いすぎて、何回かブレーカー落としたせいで少子悪くなったんだろうか?
みんなかわいい
6巻面白かったので、また1巻読んだ。大河がすごくかわいい。1巻は、ほぼ大河しか出てこないんだけど。
RTCの読み出しでどうしてもACKを確認できない。オシロスコープで見ながらステップ実行してみると、SDAがLになってACK来てるのにプログラムでポートを読んでも0になってない。
ポートは入力にしてるしなんでだろ。なにか間違えてるはずなんだけどさっぱりわからない。
昨日、りんご入りのケーキ焼いて食べたらすごくおいしかったんだけど、残りを今日食べたらさらにおいしかった。ちゃんと冷めてから食べたほうがいいんだね。
小さくきったりんごに砂糖を加えて、電子レンジでやわらかくなるまで加熱したものをケーキの生地に混ぜて焼いただけ。おいしかったのでまた作る。
このあいだ、りんごのジャムも作ってみたけどこれもおいしかった。りんご1個を小さく切って、砂糖を大さじ4くらい加えて蓋をせずに電子レンジで加熱するだけ。煮詰まってきたら完成。簡単なのにおいしい。
間違い見つけた。
if (RTC_SDA=0) // ACK 待ち
じゃなくて
if (RTC_SDA==0) // ACK 待ち
だ。アホすぎる。こんなことで一ヶ月も悩んだよ。
グラフィック液晶用にと思って、8ドットフォントを描いてみた。
幅 7ドットで描くか 6ドットで描くか 5ドットで描くか考えたけど、幅狭くしても一行に 2文字増えるくらいだからと 7ドットにした。
せっかくだから、変換プログラムも書いた。初めて使う Visual C# 2008 Express Edition で 6時間もかかって作った。ライブラリの説明書が、どこ読んでいいのかさっぱりわからんです。
Visual C# 2008 Express Edition はマイクロソフトから無償でダウンロードして使えるのでありがたい。
namespace test
{
public partial class Form1 : Form
{
private Bitmap bmp = null;
public Form1()
{
InitializeComponent();
bmp = new Bitmap("8dot_font.bmp");
pictureBox1.Image = bmp;
}
private void button2_Click(object sender, EventArgs e)
{
int x, y, a,count=0;
richTextBox1.Text += "start\n";
for (y=0; y<12; y++)
{
for (x=0; x<128; x++)
{
a=0;
if (bmp.GetPixel(x, y * 8 + 0).G < 100) a += 0x01;
if (bmp.GetPixel(x, y * 8 + 1).G < 100) a += 0x02;
if (bmp.GetPixel(x, y * 8 + 2).G < 100) a += 0x04;
if (bmp.GetPixel(x, y * 8 + 3).G < 100) a += 0x08;
if (bmp.GetPixel(x, y * 8 + 4).G < 100) a += 0x10;
if (bmp.GetPixel(x, y * 8 + 5).G < 100) a += 0x20;
if (bmp.GetPixel(x, y * 8 + 6).G < 100) a += 0x40;
if (bmp.GetPixel(x, y * 8 + 7).G < 100) a += 0x80;
richTextBox1.Text += String.Format("0x{0:X2},",a);
count++;
if (count > 15)
{
richTextBox1.Text += "\n";
count = 0;
}
}
}
richTextBox1.Text += "\nend";
}
}
}
たった、これだけを書くのに 6時間。
でもこれだけしか書いてないのに、画像の読み込みとか表示とかできてる。なんかすごい。
とりあえず液晶に出して見た。
ついでに絵も出して見た。
print関数を作って文字列を表示できるようにした。
プログラムが長くなってきたので、7セグLCDとグラフィックLCDとRTCの機能ごとにソースを分割した。これまでソースを分割したことなんて無かったんで、どんなふうにヘッダファイルを書いたらいいのかわからず、時間かかった。
あと、時計がけっこう遅れるのでRTCの補正レジスタで調整してみた。
YTomo.WEBさんを参考に、インターバルタイマ割り込み使ってみた。ちゃんと動いた。
割り込みで変数をインクリメントして、液晶に表示させようと思ったんだけど、昨日作ったprint関数は文字列しか表示できないので、数値を文字列に変換する処理を作らなきゃならない、考えただけで超面倒だ。
そういえばコンパイラに標準ライブラリが付いてたはずと、マニュアル読んでみたらsprintf関数が使えることがわかった。これで書式付き表示ができるようになった。
タイマー使えるようになったし、次はストップウォッチってかラップカウンタを作ってみたい。
タイマー割り込みを使って時計を作ってみた。
最初プリスケーラを φ/2048に設定、タイマのカウンタをプリセットして 1/100秒ごとに割り込み掛けて時間を計ったんだけど、これだと誤差が大きくてちょっと使い物にならなかった。
プリスケーラを φ/512に設定、これだと6.5535ミリ秒ごとに割り込みがかかるので、long型の変数を用意して割り込みがかかるたびに 65535 づつ加算してやって時間を計ったら、いい感じに時計ができた。これだと一分ごととかに値を増減させるとかして微調整も簡単だ。
微調整しなくても、電源投入時と一日に一回くらいRTCから読み出した値をセットしてやれば十分かな。
ストップウォッチに使いたいから、1/100秒を計れる程度の精度が欲しくてこうなったんだけど、1秒とか1分を計れればいいならもっと割り込み間隔長くしてやれば忙しくなくていいと思う。
フラッシュメモリの書き込み処理とかを作ってみたんだけど、動かなかった。
例えばチップイレースはこんな感じに書いた。
eeprom_5555H=0xAA;
eeprom_2AAAH=0x55;
eeprom_5555H=0x80;
eeprom_5555H=0xAA;
eeprom_2AAAH=0x55;
eeprom_5555H=0x10;
eeprom_busycheck();
なんで動かないのかなとモニタでディスアセンブルしてコードを見たら、上の3行目がコンパイラの最適化で削除されてしまっていた。同じアドレスに続けて書き込みしているからだ。
最適化を抑制するのはどうするんだっけ?
#define eeprom_address 0x00400000
#define eeprom_5555H *(volatile unsigned char *)(eeprom_address+0x5555)
#define eeprom_2AAAH *(volatile unsigned char *)(eeprom_address+0x2AAA)
こんなふうに volatile って付けて解決した。消去も書き込みもちゃんとできた。
A/D変換器を使ってみた。最初動かなかったけど、モジュールストップモードを解除していないせいだった。
MSTPCR.BIT._AD=0; // A/D 変換器のモジュールストップモード解除
AD.ADCSR.BYTE=0x28; // 変換時間 134ステート
// ch0:電源電圧
// AD変換スタート
while(AD.ADCSR.BIT.ADF==0); // AD変換が終了するまで待つ
AD.ADCSR.BYTE=0x29; // 変換時間 134ステート
// ch1:サーミスタ
// AD変換スタート
while(AD.ADCSR.BIT.ADF==0); // AD変換が終了するまで待つ
sprintf(msg,"AN0:%04X",AD.ADDRA);
print(0,2,msg);
sprintf(msg,"AN1:%04X",AD.ADDRB);
print(0,3,msg);
こんな感じで簡単に使えた。
Fire Roadster 2007年4月30日のつぶやき こういうデータロガを作れたらいいなぁ
タイマー1 でブザーを鳴らしてみた。
MSTPCR.BIT._TMR01=0; // TMR0/1 のモジュールストップモード解除
TMR1.TCORA=0xFF;
TMR1.TCR.BIT.CCLR=1; // コンペアマッチAでクリア
TMR1.TCSR.BIT.OS=3; // コンペアマッチA ごとに反転出力(トグル出力)
STCR.BIT.ICKS1=0; //
TMR1.TCR.BIT.CKS=1; // 入力クロック選択 (TMR1.TCR.BIT.CKS=0 にすると音止まる)
こんなふうにして動いた。
最初動かなくて悩んだんだけど、MSTPCR.BIT._TMR01=0;と書くところを、MSTPCR.BIT._TMR01;とだけ書いて、モジュールストップモードを解除したつもりになっていたせいだった。
入力用にスイッチを付けた。配置を考えるのが面倒くさいから、ファミコンのコントローラ風に「上下左右AB」な配置にした。
回路はこんなん。
P67をHにしてPBを読むと、どのボタンが押されたのかがわかる仕組み。PBは液晶の表示にも使っているので、不用意にPBが変化しないようにダイオードを入れてある。最初プルダウンの抵抗無しで動かしたんだけど、ボタンを押していないときに値がフラフラしてしまったので(液晶もPBもハイインピーダンスになってるんだから当たり前だ)、10kΩでプルダウンした。
配線終わってからPBの説明読んだら、入力プルアップMOSを内蔵していた。ダイオードの向きを逆にして、これを使えば抵抗不要だった。次作るときにはこれ使うよ。
ボタンの入力処理を作った。
ボタンを押しっぱなしにした時のリピート処理と、チャタリング除去を作るのにすごく苦労した。一日いっぱいかかったよ。if 文が入れ子になって、なんか処理を頭の中で追えないの。書き方が下手糞なんだろうけど、いい書き方が思いつかない。
コードは汚いけど、動作は調子いいのができた。PCのキーボードと同じように、ボタンを押しっぱなしにしたら少し待ってから「すすすぅー」とリピートするようにした。リピート処理をちゃんとやったら、動きが軽快でなかなかいい感じだ。
メニュー表示を作って、時計の表示と時刻合わせができるようになった。
あと、ラップタイマとデータロガ作る。
ラップタイマ作った。
beep関数を作って、ボタンを押したら「ピッ」って音が出るようにした。
プロジェクト一式使う人いますかね?HEWでビルドできます。
豚肉が安かったのでとんかつにした。
H8ジャンク基板に付いてる4Mbitフラッシュメモリに、毎秒30サンプルづつ9バイト記録すると30分くらいの記録ができるんだけど、もう少し記録時間が欲しいかなと思ってSDカードを付けることにした。
必要な部品は秋月で買った。カードスロットは150円のやつ(C-753)、3.3vのレギュレターは4個で100円(I-1189[PQ033EZ1HZ])。どちらも、秋月で一番安いやつ。
裏側はこんな。一日かけてやっと作った。
5V→3.3Vのレベル変換するのに適当なICを持っていないので、トランジスタでやっつけた。カードへの入力は3本だけだし。
抵抗はオシロスコープ見ながら可変抵抗回して、ヒゲと鈍りが少なくなるように値を決めた。
H8のハードウェアマニュアルを読むとI/Oポートは2VでHighと認識するようなので、SDカードからの出力はマイコンに直結した。
SDカードをつないだ回路図はこんな。トランジスタは 2SC1815 、P51 - DO は直結。
論理を反転させたくなくてこんなふうになったんだけど、コレクタから出力とってソフトウェアで論理を反転させれば、消費電力少なくできるのかな? 次ぎ作るときに試してみる。
朝に海を見たら流氷が見えた。もうすぐ4月だって言うのに。
昼に見たら流氷が接岸していた。びっくりだ。
Tiny-FatFs を 使わせてもらって、SDカードが動いた。
:
: g 200200
start
rc=0 FR_OK
- disk initialize
card ok
80 dummy clocks out
Initialization succeded
rc=0 FR_OK
- read dir
SYS
PROJ000
1603.BIN
AWDFLASH.EXE
最初 SCI0 でアクセスしようとがんばったんだけど、一日悩んでどうしても動かなかったので FatFs のサンプルと同じくパラレルポートでアクセスしたら、すんなり動いた。なんで動かなかったのかはわからない。同じデータを連続で出力してオシロスコープで見てみた感じだと、ちゃんと動いてるように見えたんだけど、ロジアナでも無いと詳しくわからない。
FatFs は H8 用のサンプルプロジェクトにある mmc.c の Platform dependent
って書いてあるところをハードウェアに合わせて書き換えてやれば、けっこう簡単に使えた。
ルートディレクトリのファイル一覧を表示してみるサンプル
FATFS fatfs; /* File system object */
DIR dir; /* Directory object */
FILINFO finfo;
sci_print("\r\nstart\r\n"); // SCI1に"start"と出力してみる
put_rc(f_mount(0, &fatfs));
put_rc(f_opendir(&dir,"\0"));
while(1)
{
f_readdir(&dir,&finfo);
if(finfo.fname[0]==0)break;
sci_print(finfo.fname);
sci_print("\r\n");
}
put_rc(f_mount(0, NULL));
流氷がまだ接岸したままだ。
アクセルオフでファイナルギアから「みーん」と異音が出るので車の下にもぐってみたら、デフ入力軸のでかいナット(26mm)が緩んできてた。締めたら異音止まった。壊れる前に見てよかった。
デフオイルも交換した。機械式LSD付けてから6,000kmくらい走って初めてのオイル交換。出てきたオイルには、キラキラと金属粉が結構見えた。磁石に付かないので鉄ではないみたい。デフオイル交換前には、特にデフのロックが甘くなってる感じとかは無かったけど、交換後は少しだけ効きがクイックになったような感じがする。気のせいかも。
ジャッキアップしたついでに、エンジンオイルも交換した。もらい物の5w-50から10w-40に交換したんだけど、交換後エンジンあったまったらすぐ油圧が下がってくる。5w-50の高いオイルはやっぱり性能いいんだね。
クラッチとブレーキの液も交換した。自分でやるのは初めて。
クラッチはマスターシリンダが小さいせいか、ペダルをたくさん踏まなきゃならなくて、ちょっと疲れた。ブレーキはペダル踏んだらたくさん出てくるのでやりやすかった。フロントの左右とも液抜くところ(ブリーダースクリュー)のキャップが無くなっていて、ブリーダースクリューが錆びて詰まってしまっていた。キャップと一緒に部品注文する。
ハードトップはずして幌閉めたら、リアスクリーンが割れてしまった。とりあえず、またハードトップかぶせた。リアスクリーンがカチカチに硬くなっていて、曲げるとパキパキ割れる。去年の秋までこんな事なかったのに、急にどうしたんだろ?
前からNB幌に交換したかったんだけど、部品代が60,000円だ。お金ないしどうしよう。
部品来たので、ブリーダースクリュー交換した。キャップもつけて問題なし。
夏タイヤに交換して試運転。あたりまえだけど夏タイヤはぜんぜん滑らない。スラロームしたら、車体がぐわぐわねじれる。補強したい。
去年春にシャシブラック塗って秋までは下回りきれいだったけど、一冬越えたら車高調もアームもなんもかんもサビサビ。面倒だけどまた錆び落として塗装しなきゃ。なんか2年くらい持ついいさび止め無いのかなぁ。
交換するかずいぶん悩んでいたけど、車検じゃない年に交換しとこうかと思って幌を注文してきた。NB幌とレインレールで 83,000円くらいだそうだ。思っていたより一万円くらい高かった。てか、ヤフオクに業者が出してる新品幌のほうが安かった。
部品注文ついでに、クラッチとブレーキペダルのパッドを交換した。一個 250円だった。
ダイソーで買ってきた 100円の箱に入れた。
取り急ぎ、SDカードにラップタイムを保存できるようにしてみた。
内蔵ROMにプログラムをロードしたら、割り込みがかからない。困った。悩み中。
いろいろいじっているうちに、動くようになった。どこが悪かったのかわからない。
セクションの設定かなぁ。いっぺんにいろいろいじったからわからなくなった。
デジカメで動画撮る用にAmazonで2GBのSDカード買ったら、1,592円だった。安くなったなぁ。
昨日ケーキ作った。小麦粉の袋に書いてあった分量で作ったんだけど、昨日食べたときは「卵の味が強いなぁ、卵黄減らしたらいいのかなぁ」と思ったんだけど、今日食べたらそんな事なくてとてもおいしかった。ケーキ屋さんのケーキに負けない出来だ。
ケーキは一日くらい置いたほうがいいんだね。
サーキットで5分くらい走ったら、オーバーヒートでクーラント吹いた。アイドリングでしばらく放置しても水温ほとんど下がらなくて、なんだかおかしいのでエンジン止めて冷まして水入れて、走るのやめて帰ってきた。
帰り10分くらい走ったら、またぐんぐん水温が上がりだしたんで車止めてボンネット開けてみたら、エンジンはチンチンに熱くなってるのに、ラジエターは熱くなってなかった。サーモスタットがおかしいのか?と思って、サーモスタットを外してみたら調子よくなった。
家に帰ってきてから、外したサーモスタットに熱湯をかけてみたけど、やっぱり開かない。部品注文する。
帰りサーモスタット外してから、エンジンの様子におかしな感じなかったけど、2回もエンジンからカンカン音が出るほどのオーバーヒートしちゃって大丈夫なんだろうか?
【ニコニコ動画】初めてサーキット走った(十勝スピードウェイJrコース)
幌の交換が無事に終わった。
車から幌を骨ごと外すのに1時間くらい、車を掃除するのに1時間くらい、幌から骨を外して骨を掃除するのに1時間くらい、骨に新しい幌を付けるのに1時間ちょい、幌を車に付けるのに1時間ちょいで、6時間くらいかかった。
ガラス幌にしたら、幌を開けたときにロールバーと干渉して、ちゃんと開かなかった。ロールバー買う。
秋までサーモスタット外しとこうかと思ってたけど、サーモスタット無しだとぜんぜん水温上がらなくてエンジンに悪そうだし、車内が寒いので新しいサーモスタットを付けた。
Eee PC 4G (701)を買った。ので、設定をメモ。
コントロールパネル-システム 仮想メモリを0、システムの復元をしない。
c:\windows\ 内の $ で始まるフォルダを削除。
c:\windows\SoftwareDistribution\Download\ 内を全部削除。
これで、SP3を入れた状態で cドライブが半分くらい空く。
4Gamer.net:Eee PC発売記念(?) この小さいマシンでゲームを動かしてみよう――その1:Windows XPを頑張って小さくしてみる でわかりやすく説明されている。
あと、これを期に Gmailを使い始めた。アカウントはだいぶん前に取得してほとんど使っていなかった。使ってみると、とても便利で動作も軽快だった。もうWindows Mailとかのクライアントソフト使わない事にする。
ネットが新しいデスクトップになる! 仕事に使えるGoogle入門 第1回:Gmail 基本編 がわかりやすい。
EeePCの環境整備がだいたい終わったので、Cドライブを丸ごとバックアップする。
systemrescuecd-x86-1.0.2
% fdisk -l デバイス名を確認
% mount /dev/sdb1 /mnt/backup イメージファイルを書き込むドライブをマウント
% partimage partimage 起動
sda2 ntfs を /mnt/backup/eeepc20080524 に Save partition into a new image file
カーソルキーやtabで項目移動
EeePC内蔵のカードスロットで 4GのSDHCカードに書き込もうとすると、やたらと遅かったり、エラーになったりする症状があったんだけど、クロックを少しあげると症状が出なくなるとどこかに書いてあったので、eeectl をスタートアップに入れてクロックを変更した。
たしかに症状出なくなった。よかった。
昨日ホーマックに行ったら、エアーコンプレッサーが 9,980円で売ってた。安いなー買おうかなーと思ったけど買わずに帰ってきたんだけど、やっぱり今日買ってきた。
ロールバー付けた。4時間くらい掛かった。寒かった。
データロガのプログラムを書いてみたんだけど、割り込み処理が難しい。ある関数を実行中に割り込みが発生して、割り込み処理中でその関数を呼び出すような事があると、当たり前だけど暴走する。
具体的には、メイン関数で時計を表示するのにsprintf関数を使っていて、割り込み処理中にデータをファイルに書き込むのにsprintfを使っているとうまく動かない。(これは、文字列操作用のバッファを共用しているのが原因だった。バッファを別に用意したらちゃんと動いた。)
不具合が出そうな処理すべてで、割り込みを禁止にするのはとても面倒くさいし、どうしたらうまいことプログラム書けるんだろうか。面倒だから、データロガはそれだけで専用のハードウェアにしてしまおうか。
割り込み処理内で FatFs を使うと動かないのはなんでかなぁとかなり悩んでいたんだけど、そういえばFatFs内でタイマー使って時間待ちしてるんだった。割り込み処理内では割り込み禁止になってるんだから、タイマーが更新されなくて動かなくなるのは当たり前だった。
割り込みの優先順位を設定して、割り込み許可/禁止をちゃんと指定してやったら、うまく動いた。ロギングしながらラップタイムの計測して結果をファイルに書き込みとかちゃんとできた。
次は秋月で4,800円のGPSモジュールつないでこれもログ取りたい。
GPSモジュールをつないで受信データを記録するようにしてみたんだけど、受信データを取りこぼしまくる。困った。
手抜きして割り込み禁止期間を長く取っていたんだけど、これを修正したらだいぶマシになった。でも、まだたびたびデータを取りこぼす。ビットレート下げてやろうか?
Tyny-FatFs より FatFs のほうが速度速いようなので、FatFs を使うように変更したらファイルの書き込みが動かなくなった。詳しく見てないけど、どこか修正がたりないんだろうなぁ。
FatFsの修正が面倒なので、Tyny-FatFs で sio の受信バッファを、大きく 1024バイト取って動かしてみたら結構いい感じ。データロガを動かしたままGPSのログ取っても、たまにGPSのデータを取りこぼす程度だ。
Tyny-FatFs から FatFs に変えると、ラップタイムの記録はできるけど、データロガとGPSの記録が動かない。割り込み処理内でファイルに書き込みできてないってことなんだけど、なんでだろ?
なんか、いじっているうちにTyny-FatFsに戻しても動かなくなってしまった。
頭悪くて困る。
たびたびデータ取りこぼす状態で、車に載せてGPSのログを取ってきた。速度とか移動している方角とか分っておもしろい。
set_imask_ccr(1); で割り込みを禁止すると、I ビットだけじゃなくて UI ビットも変化することに今気づいた。
ファイルの書き込みがうまくいかなかった原因が分った。ファイルネームを格納する配列を9バイトしか確保していないせいだった。ファイルネームは8文字だから終端文字を足した9バイトでいいとか馬鹿な事思ってコード書いたみたい。本当はファイル名8文字+'.'+拡張子3文字+終端文字13バイト必要だ。
9バイトしか確保していなかったから、後ろのメモリを壊しておかしな動きをしていたみたい。
いじってるうちに、こんどはファイルオープン処理が走らなくなってしまった。
エアフィルターを5年ぶりに交換した。汚い。
static 変数が実行時に初期化されないように見える。ファイルをオープンしたかどうかのフラグを見て、タイマー割り込みが掛かるごとに、ファイルが開かれていなければファイルを開いて、ファイルが開かれていればデータを書き込むって処理にしていたんだけど、ファイルを開いていないのにフラグが立ってしまっていて、ファイルオープン処理が実行されなかった。
フラグをちょくしょくクリアするようにしたら正常動作した。
GPSの受信処理を書き直した。
sciの受信割り込みの中でファイルの書き込むのをやめて、バッファに書き込むだけにして、受信割り込みの優先順位を上げてファイル書き込み中にも受信処理を実行するようにしたら、データの取りこぼしがなくなった。
ファイルへの書き込みはタイマー割り込みでバッファの状態を見て、バッファの半分を超えたら書き込みするようにした。
GPSユニットからの生データはこれでうまく記録できるようになったんだけど、データから一行抜き出して、緯度とか経度とか速度とかを読もうとすると、うまくいかない。\n の次の文字から \n までを一行として抜き出してるつもりなんだけど、ぜんぜん違うところを抜き出してしまっている。
動かなかった原因がわかった。static 変数にしなきゃならないところをしていなかったのと、条件文の中で "==" と書くところを "=" と書いていたせいだった。こういう単純な書き間違いは見直しても気づきにくくて困る。
もしかしたら HardwareSetup() が実行される前に static変数の初期化が実行されるのかな?
Tyny-FatFs から FatFsに変更したのと受信バッファを大きく取ったせいで、内蔵RAMだけでは足りなくなったので、内蔵RAMはスタックだけに使って、外部バスのSRAMに変数を割り当てているんだけど、HardwareSetup() の中でバスコントローラーの初期化をしているから、それ以前に static変数の初期化を行ってもは外部バスにアクセスできなくて static変数が初期化されないのかな? どうやって確かめたらいいだろ?
とりあえず、HardwareSetup() の中でバスコントローラーの初期化をした直後に、SRAM をゼロクリアするようにした。
コンパイラのマニュアル 「9.2.2 実行環境の設定」ってところに書いてあった。やっぱり、resetprg.c の中で HardwareSetup()より前に _INITSCT() で変数の初期化をしていた。
_INITSCT() より先に HardwareSetup() を実行するようにしたら、SRAMをクリアしなくてもちゃんと動くようになった。
いままで知らなかったんだけど、モバイル google マップっていうアプリがあって、W-ZERO3でも動く。インストールしてみたらこれが便利で、通信速度はちょっと遅いけどカーソルキーやタッチで地図をすいすいスクロールできる。
いままで、opera でGoogleマップを使っていたんだけど、動作遅いし画面が狭いしでとても使いにくかったけど、これでとても便利になった。
十勝スピードウエイのジュニアコースを走ってきた。今日は故障しなかった。
自作データロガーを付けて走ったんだけど、データファイル壊れまくりだった。振動とかで接触悪くなるのかなぁ。
サーキット走ったあと、ブレーキがエア噛んだみたいになって効きが悪くなったので、家まで帰ってきてからエア抜きした。
前にオーバーヒートしたせいだと思うんだけど、エキマニ側後ろのヘッドガスケットあたりからオイルが滲むようになった。垂れるほどではなくて、クーラントに混ざるわけでもない。排気から煙が出る事もないので燃えてもいないみたい。
面倒だけどそのうち直す。リアブレーキのピンのカバーもそのうち注文しなきゃ。忘れないように書いとく。
データロガーのファイル書き込み異常は、昨日追加したエラー処理が間違えていたせいだった。修正したら調子いい。
何年も前から売地の看板が出ていた一軒家があって、自分で買える価格ならほしいなぁと思っていたんだけど、今日売主さんに電話して値段を聞いて、家の中を見せてもらった。土地・建物合わせて購入できそうな価格だったので、購入する方向で。
家を買う事にしたので、株式を全部売ってお金を用意した。120万くらいの損が確定したんだけど、今年3月から100万以上戻したし、以前に出した利益をあわせるとトントンくらいだから、まあいいかって感じ。
引越ししたら家賃が掛からなくなるので、そのぶん貯金する。
登記の手続きを司法書士さんにお願いしているんだけど、抵当権の抹消がされていないと連絡が来た。現在売り主の手続き待ち。
発売日に買ったのに手を付けていなかった、リトルバスターズをはじめた。
ドーナツを揚げている最中に、ちょっと目を離したら真っ黒に焦げてしまった。もったいない。
リトルバスターズの一回目はクドリャフカだった。終盤、突飛すぎて入り込めなかった。けど、クドはかわいい。
売主側の書類の準備が終わったので、売買契約書にはんこを押してきた。
家の代金の支払いをした。
登記が完了したので、司法書士さんのところに書類を取りに行ってきた。これで、土地・建物が自分のもの。
引越し先の家の中の様子を見に行ったら、元栓を開けても水が出なかった。役場に電話したら栓を開けてくれて水道が使えるようになった。
水を出してみたら、水道管三箇所から水漏れ。管の中に水が残っていて凍結し破裂したようだ。
引越し先の掃除に行ってきた。朝から行こうと思ってたけど、目が覚めたら10時過ぎだった。
水道の修理はとりあえず、割れた管を外してプラグをねじ込んどけばいいかなと思って、プラグを持っていったんだけど、鉄管じゃなくて銅管だったので使えなかった。
12時から19時くらいまでかかって、台所と風呂と居間の見えるところの掃除だけが終わった。台所が汚くで時間がかかった。素手でカビキラーとか使ったから、指がヒリヒリする。
帰り、水道管を買いにホーマックに行ったら、240Wくらいのハロゲン投光器が498円で売ってたので、使う予定もないのに買ってしまった。そのほか3,980円の中国製掃除機も買った。日本メーカーの中国製と比べて半額くらいだった。水道管は 2,480円/m もした。銅管高い。でも鉄管だと手でねじ立てられないからしょうがない。
出勤前に水道の修理と階段掃除を終わらせた。
仕事終わってから、今住んでるアパートの台所掃除を3時間、風呂掃除を2時間。
ピカピカになった。
トラックをレンタルしてきて引っ越しした。
トラックを6時間借りたんだけど、6時間では足りず3時間延長してもらって、何とか終わった。一人で積み卸しして疲れた。
まず、BSとスカパーのアンテナを取り付けた。
二階の窓際に突っ張りポールを使って仮設したんだけど窓ガラス越しだとBSの受信レベルがとても低い。ノイズ交じりで何とか映るって感じ。窓を開けると受信レベルがグッと上がる。スカパーはガラス越しでも十分受信できる。
早めにステーを作って壁面にアンテナ取り付けたい。
家にすえつけてあったボイラーが動いた。
90リットルの屋内用灯油タンクを買ってきてボイラーにつないだんだけど、ボイラーの電源を何度も入れなおしても点火しなかった。ボイラーのふたを開けて、燃料ポンプの後ろで灯油の管をはずして動かしてみて燃料が出るか見てみると、燃料が出ない。どこか詰まっているのかと思って、ストレーナーとかを分解してみたけど、異常なかった。 組みなおして電源入れたら燃料が送られるようになったんだけど、どうも燃料ポンプの中の灯油が切れていたせいで、燃料を送れていなかったようだ。ポンプの呼び水が必要だったみたい。 4年くらい空き家で放置されていたので、ボイラー動かないだろうなと思っていたんだけど動いてよかった。
アングルを溶接してステーを作って、BSとCSのアンテナを壁面に付け直した。
モルタルの壁に穴を開けようと、鉄工ドリル刃を使ったんだけど穴が開かなかった。コンクリートって硬いんだね。しょうがないからホーマックでコンクリートドリル刃を買ってきた。
やっと電話工事が終わって、ADSLが使えるようになった。
引越しして作業場所ができたので、ヤフオクでエンジンを買った。11,000円と、超安かった。広島から北海道まで送ってもらって、送料 9,000円。1992年 車体番号 166xxx 走行 72318km
とりあえず、ヘッドとブロックに分離して、物置に入れた。ブロックはとても重かったけど、なんとか一人で持てた。
すごく固く締まっているクランクシャフト前側のボルトを苦労してはずした。普通に回り止めしてボルトを回すと、エンジンブロックごとゴロゴロ床を転がってしまって力がかけられない。
クランクに木の角材をはさんで回り止めにすると、角材が床に当たって転がらない。これで、レンチにパイプをかけて足で踏むと、「バキッ」っとボルトが回った。
ピストンをはずしてみた。
ピストンをファミリアの圧縮比の高い物に交換して、バランス取って組み上げたいと思ってる。
スラストベアリングのガタを計ってみた。0.09mmくらいだった。
バルブスプリングコンプレッサーとかピストンリングコンプレッサーを買わなきゃエンジン組み立てられないなーと、ストレートの通販で注文したら、たった20分後に発送完了メールが届いてびっくりした。
バルブ外した。16個簡単に外れた。
エンジンを分解するのなんて初めてだけど、ここまで何も問題なく作業できた。
分解は終わったから次はポート研磨する。
HLAを分解掃除した。分解する前に動きをチェックしたら、5個くらいエアを噛んでるのがあった。清掃後オイルの中でエアを噛まないように組み立てて動作ばっちり。
寒くて外に出たくないので、ポート研磨が始まらない。
床下に入るのに畳をはぐったら、1970年の新聞が出てきた。大阪万博だ。
寒くなってきたので、冬タイヤに履き替えて車高を少し上げた。去年車高調のネジを叩いたりしても回せなかったけど、レンチにパイプかけたらすんなりと回った。
2006年春に買って3シーズン使ったんだけど、左後ろのタイヤが擦り減ってスリップサインが出ている。
来春に新しいタイヤ買うことにする。安さで FEDERAL SS595 あたりかな? 14インチは一本 5,000円くらいだ。
回転方向の指定がなくてローテーションしやすい RE-11 だと 11,000円くらい。AD07 が 8,000円くらい。
ブラブラしているアンテナ線を撤去するのに二階の屋根に上がったら、高くてすごく怖かった。上がってしまえばそうでもないんだけど、はしごから屋根に移る時、はしごに戻る時がたいへん。もう上がりたくない。
ふすまが無くて寒いので
コンパネで本棚を作った。塗装をするつもりでペンキも買ってあるんだけど、作ってみたらコンパネでも十分表面がきれいだったので、塗装しなくてもいいや。
部屋ひとつの畳をはがして、作業部屋にした。丸ノコ使ったら粉塵がすごい。
もう一個本棚を作った。棚板がコンパネの12mm厚だとちょっと薄い感じだけど、他の材料にすると値段が倍以上になるからしょうがない。コンパネはホームセンターで一枚1,200円くらい。900×1800mmのコンパネ2枚半くらいで本棚二個になった。背板にコンパネよりも安い9mmのOSB合板を一枚ずつ使った。一枚950円。
あまったコンパネで10cmスピーカーのエンクロージャーを作った。材料は900×900mmあれば足りる。FOSTEXのカタログに載ってる標準エンクロージャーの寸法どうりに木工ボンドでくっつけただけ。
ニスを三回塗って、2個で1,600円で買ったスピーカーユニット(パナソニック製らしい)を付けて完成。ぜんぜんお金がかかってないけど、とても良く鳴る。今まで使っていたのが、10年くらい前に35,000円くらいで買った、アイワのミニコンポ付属の3wayスピーカーなんだけど、それと比べてずいぶん音がクリアで低音も強く出る。アンプで低音を強調する必要が無くなった。
アンプはONKYOのR-805Xっていうのを使っている。入力が5個あってラジオチューナー付きで便利。
のこりの隙間を石膏ボードでふさいだ。石膏ボードは一枚298円と超安い。
スポンジケーキを試作したメモ。
全卵、溶かしバター、砂糖、全部まとめていっぺんにミキサーかけて大丈夫。小麦粉の袋に書いてある分量より砂糖を少なめにする。甘すぎた。
電子レンジで加熱、600W 5分だと長かった。次は2〜3分で様子見。
12月24日なので、ケーキとから揚げを作って渚の誕生日をお祝いした。
去年はケーキに缶詰のみかん(100円)を使ったけど、今年は奮発してイチゴを買ってきた。1パック580円もした。
小麦粉100gに砂糖95gくらい、卵3個、バター15g、牛乳10ccを混ぜて、電子レンジ600Wで3〜4分くらいで出来上がり。スポンジが少し硬めだったけどおいしくできた。
クリームを塗る前にスポンジを味見した時は「硬めだなぁ」と思ったけど、クリームとなじんだらちょうどいい感じだった。
仕事の帰りにスーパーへ買い物に行ったら、1680円のお寿司に半額シールが付いていたので買ってきた。「どうせ、おいしくないんだろうなー」と思って食べたんだけど、今日のは結構おいしかった。