マルツで買ったATmega168に「avrsp -fl11100010」して、8Mhzで動かす設定に変えた。
最初は1MHzなのでこのままでは使い物にならないので、avrspを使ってヒューズビットのロービットを書き換えて内蔵8MHzで動かす。mega8とはロービットが微妙に変わっているので、mega8そのままではできない。
■avrspでロービットを書き換える
HERO’S Downloadのmega88(168と兼用)のデータシートの19ページより
CKSEL3~0の指定で内蔵クロック動作になる事がわかった。
0010(左が3、右端が0)
また、179ページで下位バイトの一覧が見れる。
出荷時の設定でCKSEL3~0が0010に既になっているが、CKDIV8のせいで8分周選択になっているので、内蔵8MHzが1MHz動作になっている事がわかる。
なのでCKDIVを1にして、8分周をやめさせる。別に1がTrue / 0がFlaseとかいう世界じゃないので、ちゃんとレジスタ表を読んで確認する。
下位バイト:11100010(左がCKDIV、右がCKSEL0)
実際に書き込む前に、念のためにコマンドプロンプトで
>avrsp-rf
すると
Detected device is ATmega168.
Low: 01100010
High:11-11111
Ext: —–001
Cal: 148
と出る。現在のヒューズビットの値がわかる。
下位ビットを書き換える
avrsp-fl11100010
終わり。s.h.log: ATmega168を動かしてみたのプログラムを8MHzに直して書き込んだら、ちゃんと9600bpsで通信できた。
■関連エントリ
・s.h.log: AVR – TINY2313のヒューズビット切り替え、UART
・s.h.log: AVR – MEGA8のヒューズビット切り替え、UART
・s.h.log: ATmega8を外部クリスタルで動かす
・s.h.log: ATmega168を動かしてみた