AVRマイコンでレジスタ周りの設定をいろいろ調べたことについてのメモ。
マイコンはATTiny2313
赤外線リモコン用の点滅サイクル生成をTimer0を使って行いたい。
38kHz Duty1/3の信号を出すために、Timer0を使う。
・OCR0Aで38kHzを決める
・OCR0BでDuty1/3を決める
・出力はOC0B(PD5)
ただ、疑問点があって、Atmel StudioのマイコンシミュレータはOCR0Bの設定をしてもTimer0が1回回ってきてからやっとOCR0Bレジスタが更新されるような感じ。
DDRD = 0xF3; // ポートDを1111 0011 #2,3だけ入力設定
PORTD = 0x0C; // 0000 1100 #2,3だけ内部プルアップ設定
TCCR0A = 0x23; // 0011 0011 高速PWMモード (cpmB=OC0B)
TCCR0B = 0b00001001; // 0000 1010 1/8 ,Top=OC0A
TCNT0 = 0; // タイマ0の初期値
OCR0A=122; // 周期 1kHz
OCR0B=96;
ref:http://www9.plala.or.jp/fsson/NewHP_elc/AVR/Avr_Tmr0PWM.html
マイコンはATTiny2313
赤外線リモコン用の点滅サイクル生成をTimer0を使って行いたい。
38kHz Duty1/3の信号を出すために、Timer0を使う。
・OCR0Aで38kHzを決める
・OCR0BでDuty1/3を決める
・出力はOC0B(PD5)
ただ、疑問点があって、Atmel StudioのマイコンシミュレータはOCR0Bの設定をしてもTimer0が1回回ってきてからやっとOCR0Bレジスタが更新されるような感じ。
DDRD = 0xF3; // ポートDを1111 0011 #2,3だけ入力設定
PORTD = 0x0C; // 0000 1100 #2,3だけ内部プルアップ設定
TCCR0A = 0x23; // 0011 0011 高速PWMモード (cpmB=OC0B)
TCCR0B = 0b00001001; // 0000 1010 1/8 ,Top=OC0A
TCNT0 = 0; // タイマ0の初期値
OCR0A=122; // 周期 1kHz
OCR0B=96;
ref:http://www9.plala.or.jp/fsson/NewHP_elc/AVR/Avr_Tmr0PWM.html