作業日誌
目次
メニュー†
テンプレへのコメント†
過去の日記†
10月24日(金)†
出来事†
初めての書込み。今日は明るさセンサを用いてのLEDの明るさを変化させる例題をやったが、明るさセンサの調子が悪く明るさが変化しない。少し凹む。強い明かりを照らせば明るさが変化した。
また、スライダーを用いてブザーを鳴らしてみた。これは音量をスライダーで調整できた。音自体は金属を引っかいた様な音である。(スライダーでパルス幅を調整した。パルス幅が長くなるほど音量も上がる。)ただ、ブザーの周波数を変化させる方法が分らない。そこが問題である。
11月7日(金)†
出来事†
今日は去年の金大祭での体験で行なった電子工作の半田付けを行なった。最初、ちゃんとLEDが光ったのだが、後にスイッチを付けてみてもLEDが付かない…。何でなのか理由が分からない。
今日は交歓芸術祭の準備のため、6時に帰らせて戴く。今年は招く側なので大変である。
11月16日(日)†
出来事†
今日は12時頃に来て基盤作りを行なった。3時間ほどで完成した。今度はなかなかの出来だと思う。
11月21日(金)†
出来事†
今日は電源の独立とPCとの遭遇の準備を行なった。電源の独立については何とか出来たが、PCとの遭遇についてはまだ出来ていない。
プログラムはエラーが出てきた。原因が分からず泣きそうだ。
11月28日(金)†
出来事†
今日はPCにプログラムの変数を表示することと、蛍光表示板と基盤を繋ぐことを行った。
PCにプログラムの変数を表示する課題は散々悩んだ末やっと出来た。なんとも嬉しい。
蛍光表示板と基盤を繋ぐ準備は、最初、蛍光表示板に端子を半田付けする際に失敗してしまい、千田さんに助けてもらった。本っ当にすみません。
また、UARTと蛍光表示板のチップ上での繋ぎ方が分からない。どうしたらいいのッ!
1月15日(木)†
出来事†
タイマー割り込みを使って時計を動作させた。
これまでは画面を消去させる方法で画面を更新させていたが、大垣さんに教えてもらったホームポジションに戻ることで画面を更新する方法を教えてもらい、画面のチラツキを防ぐことが出来た。因みに画面の更新は約0.1秒に一回のペースである。
タイマー割り込みは、最初は画面を更新する動作を割り込み関数
void Timer16_1_ISR(){
}
内に書き込んだが、時刻表示のみで、時刻設定をすることが出来なかった。秋田先生と大垣さんに、割り込み関数で時刻表示のためのフラグを立てることで時刻の表示が出来ると言われたので、そのようにプログラムを変えたら時刻設定が出来るようになった。しかし、時刻設定は電源投入後の一回しか出来ないのでこの点を改善したい。
画面表示は年表示は元号と西暦を用意した。更に、西暦から計算して干支も表示した。その後は月と日付、曜日、時刻を表示した。漢字表示は、蛍光表示管を漢字表示モードに設定した後、漢字に対応する2bitのコードを入力することによって実現した。
電源については、MP3プレーヤー用のUSBアダプターを用いて直接コンセントからとることにした。単三電池の電源も考えたが、秋田先生に聞くと蛍光表示管はかなり電気を喰うらしく、4時間ぐらいしか持たないらしい。なので、電源はコンセントからとる形を取った。
2月23日(月)†
出来事†
とりあえず、時計のプログラムをアップしときます。
int a, b, c, d, e;
a = b = c = d = e = 0;
char g;
BYTE seconds, minutes, hours, days, weekdays, months, years;
BYTE txBuffer[2];
BYTE rxBuffer[2];
UART_1_Start(UART_PARITY_NONE);
UART_2_Start(UART_PARITY_NONE);
I2CHW_1_Start();
I2CHW_1_EnableMstr();
M8C_EnableGInt
I2CHW_1_EnableInt();
Timer16_1_EnableInt();
Timer16_1_Start();
PRT2DR&=~0x04;
while(1)
{
//年
g = UART_1_cGetChar();
txBuffer[0] = 0x08;
txBuffer[1] = g;
I2CHW_1_bWriteBytes(0x51, txBuffer, 2, 0x00);
while(!(I2CHW_1_bReadI2CStatus() & I2CHW_WR_COMPLETE));
I2CHW_1_ClrWrStatus();
時刻設定は以上のように、指定の番地に時刻を設定することによって行います。
//時刻表示
if(f == 1) {
//年
txBuffer[0]= 0x08;
I2CHW_1_bWriteBytes(0x51, txBuffer, 1, 0x02);
while(!(I2CHW_1_bReadI2CStatus() & I2CHW_WR_COMPLETE));
I2CHW_1_ClrWrStatus();
I2CHW_1_fReadBytes(0x51, rxBuffer, 1, 0x00);
while(!(I2CHW_1_bReadI2CStatus() & I2CHW_RD_COMPLETE));
I2CHW_1_ClrRdStatus();
years = rxBuffer[0];
時刻の読み出しは、以上のように指定番地の時刻データを読み出すことによって行います。
続いては表示方法について。
//蛍光表示管キャラクターコード:カタカナ
UART_2_PutChar(0x1b);
UART_2_PutChar(0x74);
UART_2_PutChar(0x01);
//文字拡大
UART_2_PutChar(0x1f);
UART_2_PutChar(0x28);
UART_2_PutChar(0x67);
UART_2_PutChar(0x01);
UART_2_PutChar(0x02);
//月表示
a = b = c = d = e = 0;
a = months/0x10;
b = months%0x10;
a = 0x30+a;
b = 0x30+b;
UART_2_PutChar(a);
UART_2_PutChar(b);
//日表示
a = b = 0;
a = days/0x10;
b = days%0x10;
a = 0x30+a;
b = 0x30+b;
UART_2_PutChar(a);
UART_2_PutChar(b);
//時刻表示
BYTE x,y;
x = hours/0x10;
x = 0x30+x;
UART_2_PutChar(x);
y = hours%0x10;
y = 0x30+y;
UART_2_PutChar(y);
UART_2_PutChar(':');
x = minutes/0x10;
x = 0x30+x;
UART_2_PutChar(x);
y = minutes%0x10;
y = 0x30+y;
UART_2_PutChar(y);
UART_2_PutChar(':');
x = seconds/0x10;
x = 0x30+x;
UART_2_PutChar(x);
y = seconds%0x10;
y = 0x30+y;
UART_2_PutChar(y);
}
}
これは、蛍光表示管に時刻を表示する方法です。