senshuさん作成のAVRminiProg_TEST-RC3jを使ってRC OSCの実験をしてみた。
ATmega8はCLKOUTを持っていない。プログラムを何やら変更して見ることにした。
main.cに317lineに下記defineを追加
#if defined (__AVR_ATmega8__)
static void monitor_Rc_Osc_start(void)
{
// OSCCAL=240;
DDRB |= (1<<DDB3);
TCCR2 = (1<<WGM21)|(1<<COM20)|(1<<CS20);
OCR2 = (2-1);
}
#endif
#if defined (__AVR_ATmega8__)
static void monitor_Rc_Osc_stop(void)
{
TCCR2 = (0<<COM21)|(0<<COM20);
}
#endif
449lineに下記追加
if(!AVRP_Programming)
{
monitor_Rc_Osc_start(); <追加
#if AD_En
#if AVR_DEVICE_ATMEL == AVR_DEVICE_AVRISP_MKII
Vtarget = (uint8)((uint16)ADC_Convert(AD_VCC_MUX) * (ADVref * AD_VCC_RATE) / 256);
#elif (AVR_DEVICE_ATMEL == AVR_DEVICE_JTAGICE_MKII) || (AVR_DEVICE_ATMEL == AVR_DEVICE_AVRDRAGON)
Vtarget = (uint16)((uint16)ADC_Convert(AD_VCC_MUX) * (ADVref * AD_VCC_RATE) / 256) * 100;
#endif
if(Vtarget > Vtarget_HasPower)
LED_On(LED_Red);
else
LED_Off(LED_Red);
#else
monitor_Rc_Osc_stop(); <追加
LED_On(LED_Red);
#endif
}
}
コンパイル、何とかPB3から3.2MHzのクロックが出てきた。
これで何をするかと云うとAVRminiProg ライタに+5V(not from USB)を供給しておく。
この状態で周波数データをとり、USBを接続する。
当然USBとのやりとりが始まるので、RCOSC周波数も何か変化するはず?
その結果が下記である。
3286746Hz 422 <5VON
3286699Hz 422
3286672Hz 422
3286631Hz 422
3286618Hz 422
3284325Hz 422
3263182Hz 422
3199615Hz 422 <USB接続
3199570Hz 422
3199520Hz 422
3199547Hz 422
3199525Hz 422
3199526Hz 422
3199522Hz 422
3199486Hz 422
3199457Hz 422
3199413Hz 422
3199429Hz 422
3199401Hz 422
3198802Hz 422
3198257Hz 422
3198933Hz 422
3199773Hz 422
3199878Hz 422
3199869Hz 422
3199827Hz 422
3199829Hz 422
3199802Hz 422
3199800Hz 422
3199775Hz 422 <USB切り離し、RC-OSCの周波数は変わらない様だ。
3199787Hz 422
3199838Hz 422
3199794Hz 422
3199786Hz 422
3199688Hz 422
3199577Hz 422
3199426Hz 422
3199325Hz 422
3199350Hz 422
3199493Hz 422
3.2MHz台が3.19MHz台に下がる、osctune.hが働いている?どうだろう。
このまま、USBを切り離しても一度下がった周波数はそれを維持しているようである。
この状態でターゲットへのアクセスは出来ない、MOSIが衝突するから?
mega88だとCLKOUTをfuseで設定しておけば問題ないがmega8はその点苦しい。
この1週間は労働で疲れ果て何もする気が起きない。
あと10日も残っている。