ATtiny1614:タイマレジスタの初期設定を見る
AVR1系のATtiny1614(14pin)、Arduino IDEの設定で
タイマの使われ方が変わります。
タイマレジスタの内容を表示するプログラムを書いて、
違いを見ました。
こんなスケッチ。
/***** 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は空き。
| 固定リンク
「Arduino」カテゴリの記事
- ATtiny1614:タイマレジスタの初期設定を見る(2026.01.06)
- ラジオペンチさんの「ダイソーのゆらゆらLEDキャンドルライト」#2(2025.09.15)
- ラジオペンチさんの「ダイソーのゆらゆらLEDキャンドルライト」(2025.09.11)
- ATtiny402サンプル:"Wire.h"を使わずI2Cで液晶表示 AQM1602だと(2025.09.09)
- ATtiny402サンプル:I2Cで液晶表示 SCL周波数を設定できるようにしたら(2025.09.09)
「ATtiny」カテゴリの記事
- 備忘録:1Hzパルス発生回路(2026.02.01)
- ATtiny3224で裸の32bit周波数カウンタ #2(2026.01.25)
- ATtiny3224で裸の32bit周波数カウンタ(2026.01.22)
- ATtiny3224のタイマでは・・・言うことを聞かないゾ(2026.01.10)
- ATtiny1614:タイマレジスタの初期設定を見る(2026.01.06)


コメント