« ダイソーの110円LEDランプが点灯せず | トップページ | ATtiny3224のタイマでは・・・言うことを聞かないゾ »

2026年1月 6日 (火)

ATtiny1614:タイマレジスタの初期設定を見る

AVR1系のATtiny1614(14pin)、Arduino IDEの設定で
タイマの使われ方が変わります。
Sc2

タイマレジスタの内容を表示するプログラムを書いて、
違いを見ました。
こんなスケッチ。

/***** ATtiny1614のタイマレジスタの初期値を見る ******/
// 配列のデータ数を返すマクロ
#define DIMSIZ(a) (sizeof(a)/sizeof(*a))
// チェックしたいレジスタ一覧
typedef struct{
const char *msg; // レジスタ表示名
byte type; // レジスタの読み出しバイト数 0:B,1:W
volatile void *p; // レジスタアドレス
}ST_REG;
ST_REG tmr_tbl[]={
{ "TCA0.CTRLA", 0, &TCA0.SINGLE.CTRLA },
{ "TCA0.CTRLB", 0, &TCA0.SINGLE.CTRLB },
{ "TCA0.CTRLD", 0, &TCA0.SINGLE.CTRLD },
{ "TCA0.INTCTRL", 0, &TCA0.SINGLE.INTCTRL },
{ "TCA0.PER", 1, &TCA0.SINGLE.PER },
{ "TCA0.PERB", 1, &TCA0.SINGLE.PERBUF },
{ "TCB0.CTRLA", 0, &TCB0.CTRLA },
{ "TCB0.CTRLB", 0, &TCB0.CTRLB },
{ "TCB0.INTCTRL", 0, &TCB0.INTCTRL },
{ "TCB0.CCMP", 1, &TCB0.CCMP },
{ "TCB1.CTRLA", 0, &TCB1.CTRLA },
{ "TCB1.CTRLB", 0, &TCB1.CTRLB },
{ "TCB1.INTCTRL", 0, &TCB1.INTCTRL },
{ "TCB1.CCMP", 1, &TCB1.CCMP },
{ "TCD0.CTRLA", 0, &TCD0.CTRLA },
{ "TCD0.CTRLB", 0, &TCD0.CTRLB },
{ "TCD0.CTRLC", 0, &TCD0.CTRLC },
{ "TCD0.CTRLD", 0, &TCD0.CTRLD },
{ "TCD0.INTCTRL", 0, &TCD0.INTCTRL },
};
/***** レジスタの状態出力 *****/
void dispreg(void)
{
byte i;
word d;
char const *ss[]={ // 出力区分
"%02X", // byte
"%04X", // word
};
for(i=0; i<DIMSIZ(tmr_tbl); i++){
switch(tmr_tbl[i].type){ // typeでbyte,wordを区分
case 0: // byte
d = (word)*(byte *)tmr_tbl[i].p;
break;
case 1: // word
d = *(word *)tmr_tbl[i].p;
break;
}
Serial.printf("%-16s", tmr_tbl[i].msg); // レジスタ名
Serial.printf(ss[tmr_tbl[i].type], d); // byte,wordデータ
Serial.println(); // 改行
}
}
/***** SETUP *****/
void setup() {
byte i;
Serial.begin(9600); // PB2(7pin)がTXD出力
for(i=0;i<100;i++){ // 1sec待ち
delayMicroseconds(10000); // 10ms
}
Serial.print("ATtiny1614 : "); // タイトル
Serial.println("timer TCB1");
dispreg(); // レジスタ値表示
}
/***** LOOP *****/
void loop() { // なにもしない
}


3つの状態を調べました。

ATtiny1614 : timer default
TCA0.CTRLA 0B clk_per/64
TCA0.CTRLB 00 出力はオフ
TCA0.CTRLD 01 8bit分割
TCA0.INTCTRL 00 割り込みなし
TCA0.PER FEFE 254,254
TCA0.PERB FFFF
TCB0.CTRLA 00
TCB0.CTRLB 00
TCB0.INTCTRL 00
TCB0.CCMP 0000
TCB1.CTRLA 00
TCB1.CTRLB 00
TCB1.INTCTRL 00
TCB1.CCMP 0000
TCD0.CTRLA 11 内部OSC,1/32,TCD有効
TCD0.CTRLB 00 1傾斜度動作
TCD0.CTRLC 80 波形選択
TCD0.CTRLD 00
TCD0.INTCTRL 01 オーバーフロー割り込み

ATtiny1614 : timer disable
TCA0.CTRLA 0B
TCA0.CTRLB 00
TCA0.CTRLD 01
TCA0.INTCTRL 00
TCA0.PER FEFE
TCA0.PERB FFFF
TCB0.CTRLA 00
TCB0.CTRLB 00
TCB0.INTCTRL 00
TCB0.CCMP 0000
TCB1.CTRLA 00
TCB1.CTRLB 00
TCB1.INTCTRL 00
TCB1.CCMP 0000
TCD0.CTRLA 00
TCD0.CTRLB 00
TCD0.CTRLC 00
TCD0.CTRLD 00
TCD0.INTCTRL 00

ATtiny1614 : timer TCB1
TCA0.CTRLA 0B
TCA0.CTRLB 00
TCA0.CTRLD 01
TCA0.INTCTRL 00
TCA0.PER FEFE
TCA0.PERB FFFF
TCB0.CTRLA 00
TCB0.CTRLB 00
TCB0.INTCTRL 00
TCB0.CCMP 0000
TCB1.CTRLA 03 clk_per/2
TCB1.CTRLB 00 周期割り込み
TCB1.INTCTRL 01 割込許可
TCB1.CCMP 270F =9999(10進)
TCD0.CTRLA 00
TCD0.CTRLB 00
TCD0.CTRLC 00
TCD0.CTRLD 00
TCD0.INTCTRL 00

・タイマの区分に関わらず、TCA0は8bit2分割モード
 でPWM出力用に初期化。
・「default」ならTCD0の割り込みで計時。
・「disable」ならTCB0,TCB1,TCD0は未使用。
・「TCB1」ならTCB0,TCD0は空き。

|

« ダイソーの110円LEDランプが点灯せず | トップページ | ATtiny3224のタイマでは・・・言うことを聞かないゾ »

Arduino」カテゴリの記事

ATtiny」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




« ダイソーの110円LEDランプが点灯せず | トップページ | ATtiny3224のタイマでは・・・言うことを聞かないゾ »