アマチュア無線や電子工作,バイクの話などを徒然なるままに書き散らすメモ程度のblogです.


by jq1ocr

クロック設定

delay_ms が設定した時間にならない件ですが,ヒューズビットの CKDIV8 を "disable" にすれば正しい時間になりました.ただし,ここは注意が必要で「1」が "disable" なのです.普通は DIV8 = 0 だとその機能を「使わない」になりそうな気がしますが,ヒューズビットの設定では「1」が「使わない(disable)」になる(負論理)ところが要注意です.BWTさんにここかも?というコメントをもらって,「あ,ここ 1 と 0 が違うのかも」と思い出したのでした.

ところで,クロックはソース中に F_CPU を define することで指定できますが,Makefile にも同じ設定があるので,ソース中には書かなくても OK です.しかし,ここにあえてクロックの 1/8 の数字を書くことで,delay_ms 等の時間が正しい時間になることが分かりました.

となると,実際問題としてどう設定すれば一番良い結果になるのでしょう?選択肢としては
1. CKDIV8 を disable (1) にする.
2. ソースの F_CPU に1/8の数字を入れる.
3. delay 1ms に delay_us(125) or delay_ms(0.125) を使う.
があるでしょう.これは CKDIV8 という設定がなぜあるのか?ということにも絡んできます.要するにクロック 8MHz でもチップを 1/8 の 1MHz で動かすことによって省電力化が図れるとすれば,CKDIV8 は設定したままにしておいて,F_CPU 1000000 にするか delay_ms(0.125) にするという選択肢があります.これはどっちでもいいような気がするのですが,他のタイミングも F_CPU を使っているとすれば,delay に 1/8 の数字を入れた方がいいような気もします.というか,本来であればそんな変な技は使うべきではなくて,CKDIV8 が enable に設定されているという記載がソース中にあるべきですよね.ぱっと見たところでは気づかなかったので,もしご存じの方いらっしゃいましたら,コメントお願いします.
[PR]
by jq1ocr | 2010-06-22 23:07 | マイコン・電子工作 | Comments(0)