マルツで買ったATmega168に「avrsp -fl11100010」して、8Mhzで動かす設定に変えた。

ATMega168ATmega168 USART,LED



最初は1MHz
なのでこのままでは使い物にならないので、avrspを使ってヒューズビットのロービットを書き換えて内蔵8MHzで動かす。mega8とはロービットが微妙に変わっているので、mega8そのままではできない。



■avrspでロービットを書き換える

HERO’S Downloadのmega88(168と兼用)のデータシートの19ページより

atmega168 clock

CKSEL3~0の指定で内蔵クロック動作になる事がわかった。

0010(左が3、右端が0)

また、179ページで下位バイトの一覧が見れる。

atmega168 clock

出荷時の設定で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を動かしてみた