体重と今日食べたもの

k1segawa.exblog.jp

ダイエット

ブログトップ

Japanino ArduinoISPで ATtiny13 で 内部割込み (15) (9/19)

内部割込みの一つとして、前回タイマーオーバーフロー割込みを行った。「Timer0 のブロック図」を見るとその他に比較一致割込みがある。
タイマーの値がOC0A/Bの値に等しくなったら割込みを発生させるもの。その書式は以下のようになる。

オーバフロー割込み:
Config Timer0 = Timer , Prescale = 1024
On Timer0 Isr
Enable Timer0
Enable Interrupts
比較一致割込み:
Config Timer0 = Timer , Prescale = 1024 , Clear Timer = 1
On Oc0a Isr
Enable Oc0a
Ocr0a = 150
Enable Interrupts

BASCOM-AVRの使用法を解説されているサイト様の「内蔵ハードウェア制御命令」のTimer0の比較器[OCR0]を搭載しているチップの所によると、Clear Timer = 1でOC0A/Bの比較一致 CTC動作という期待した動きをするとの事。この時0を指定するとタイマーオーバーフロー割込み動作になってしまう(オシロの波形から50%PWMなので)。またCompare A = Disconnectは省略している(省略するとOC0Aがなるらしい)。そしてOC0Aのピンを使わない(ON/OFFしない)。ここは前の割込み処理がToggle PORTB.0になっていたので、PORTB.4に変更して確認する。
a0034780_11015177.jpg
ソース:
'****************************************
' Copyright (c) 2016 k1segawa
' License : free
' Program : Internal Interrupt Control
' (Compare OC0A)
'****************************************

$regfile = "attiny13.dat"
$crystal = 9600000
$hwstack = 32
$swstack = 8
$framesize = 16
'--- Compare OC0A ---
Config Portb.4 = Output '0->4
Config Timer0 = Timer , Prescale = 1024 , Clear Timer = 1 ' REMEMBER comma !

Ocr0a = 150
On Oc0a Isr
Enable Oc0a
Enable Interrupts

Do
Loop

End

Isr:
Toggle Portb.4 '0->4
Return
' History
' [2016/09/19]
' add Enable OC0A
' [2016/09/16]
' URL:http://bbradio.sakura.ne.jp/avr_timer2/avr_timer2.html
a0034780_11193210.jpg
オシロの様子は縦線の間の時間が左に33.3msと表示され、計算では1024分周で9.6MHzの150サイクルに一回PB4につないだLEDがON/OFFすると、(1024*2)*150/9600000=0.032秒でだいたい32ミリ秒間隔となる。

さて、困ったのがOC0Bだ。上記の修正箇所をBにし、Compare B = Disconnectを追加してもオシロには一切波形は出てこない。
しかしLEDは光っている。Toggleを消すと消灯するので割り込み関数Isrには飛び込んでいるようだ。OCR0A=150とAにするとAの時と同じ波形になる。Aの割込みしか登録されないのか?どうもBASCOM-AVRはATtiny13のサポートも中途半端なようだ。とすると直接I/Oレジスタに値を設定しなければならないらしい。サイト様の「ハードウェアタイマーの使用方法の新しい動作モードの設定方法 (タイマー 1)」で WGM13 に設定しなければならない話があったがマイコンのユーザマニュアルを理解しないとOCR0Bは使えないようだ。このように基本的に最初の1つしかBASICの文法で設定は出来ないので、追加されたらしい機能の使い方は課題として残しておく。
内部割込みはこの辺にして次は外部からの入力の外部割込みにかかる。やっと割込みでスイッチの入力をやれるかな。
[PR]
by k1segawa | 2016-09-19 11:05 | arduino, AVR | Comments(0)