秋月 PIC-BASICでだいたい3分タイマー

秋月の AKI-PIC BASIC 開発キットを使い、だいたい3分タイマーを作ってみた。

画像


動作環境

  • Windows XP
  • AKI-PIC BASIC 開発キット
  • USB to シリアルケーブル ELECOM UC-SGT
  • 秋月のUSB-シリアル変換器に付属していたシリアル延長ケーブル
  • 可変抵抗 10KΩ
  • ミノムシクリップ
  • 10V 850mA ACアダプター(ファミコン・スーパーファミコン用、センタープラスをセンターマイナスにして使用)


プログラム その1 LEDのみ


『公式PIC‐BASIC活用ブック』(電波新聞社)の128ページ、第5-2節の「ストップウォッチを作る」に
タイマレジスタを使用している例が載っていた。
タイマレジスタを使って正確な時間を計らなくてもなんとかなりそうかな?と思い、
タイマレジスタを使わず SLEEP 命令を使用した「だいたい」3分タイマーを書いてみた。

時間経過にともない点灯 LED が減っていくようなプログラム。
SLEEP 時間は実行してみて適当に調整した。

Dim i, led

' RDポートを出力にする
tris_rd = 0

' LEDを消灯
rd = &HFF

While 1
' スイッチが押されたら開始
While rb.Bit0=1
Wend

led = &H7F

For i=0 To 5
led = led >> 1

' LEDに出力
rd = led ^ 255

' 30秒待つ
'Sleep 30000
Sleep 27500
Next


''' 終了 '''
' 点滅
led = &H55
For i=0 To 3
led = led ^ &HFF

' LEDに出力
rd = led ^ 255

' 0.5秒待つ
Sleep 500
Next

' LEDを消灯
rd = &HFF
Wend


最初
画像


時間がたつにつれ点灯 LED が減る
画像


3分経過すると、LED が数回点滅
画像


プログラム その2 LCDにも出力


3分経過しても音も出ないし、LED 点灯だけだと寂しいし時間経過も良く分からないので、
秒数を LCD に出力するようにしてみた。

LCD での消費時間は不明だが、分単位のタイマーなので「だいたい」3分タイマーとしては
SLEEP 命令で特に問題なさそう

Dim i, j, time, led

' RDポートを出力にする
tris_rd = 0

' LEDを消灯
rd = &HFF

Initlcd
Putlcd 180

While 1
' スイッチが押されたら開始
While rb.Bit0=1
Wend

led = &H7F
time = 180
Clearlcd
Putlcd time

For i=0 To 5
led = led >> 1

' LEDに出力
rd = led ^ 255

For j=1 To 30
' 1秒待つ
'Sleep 1000
Sleep 900

time = time - 1

'Setpos 0, 0
Clearlcd
Putlcd time
Next
Next


''' 終了 '''
' 点滅
led = &H55
For i=0 To 3
led = led ^ &HFF

' LEDに出力
rd = led ^ 255

' 0.5秒待つ
Sleep 500
Next

' LEDを消灯
rd = &HFF
Wend


最初
画像


途中
画像


3分経過後
画像


プログラム その3 「分:秒」表示に


秒数表示を「分:秒」表示にしてみた。また、途中でちょっとスイッチを長押しすると、最初に戻る機能も追加した。


Dim i, j, time, led, min, sec As Byte

' RDポートを出力にする
tris_rd = 0

top:

' LEDを消灯
rd = &HFF

Initlcd
time = 180
Gosub print_time

While 1
' スイッチが押されたら開始
While rb.Bit0=1
Wend

led = &H7F
time = 180
Gosub print_time

For i=0 To 5
led = led >> 1

' LEDに出力
rd = led ^ 255

For j=1 To 30
' 1秒待つ
'Sleep 1000
Sleep 900

' 最初に戻る
If rb.Bit0=0 Then
' 1秒待つ
Sleep 1000

GoTo top
Endif

time = time - 1

Gosub print_time
Next
Next


''' 終了 '''
' 点滅
led = &H55
For i=0 To 3
led = led ^ &HFF

' LEDに出力
rd = led ^ 255

' 0.5秒待つ
Sleep 500
Next

' LEDを消灯
rd = &HFF
Wend

print_time:
min = time / 60
sec = time MOD 60

Clearlcd
If sec < 10 Then
Putlcd min, ":0", sec
Else
Putlcd min, ":", sec
Endif
return


最初
画像


途中
画像


まとめ

  • 秋月の AKI-PIC BASIC 開発キットを使い、だいたい3分タイマーを作ってみた。「だいたい」というのは SLEEP 命令を使っているため。
  • 3分経過後にベルを鳴らしてみると良いかもしれない
  • 秒数表示の場合は LCD に右詰め表示した方が良いかもしれない

この記事へのコメント

この記事へのトラックバック