ATmega8の活用   ホームページに戻る

  megaシリーズは、90シリーズに互換性を持たせながら機能強化・メモリ増量・動作の高速化等が図られています。

 今回その中でmega8を手に入れたので、使ってみました。

 mega8仕様

 MEGA8.JPG - 8,534BYTES

パッケージ

動作周波数

I/Oピン

A/Dコンバータ

フラッシュ

メモリ

EEPROM

SRAM

カウンタ

クロック源

28ピンDIP

32ピンTQFP・MLF

最大16MHz

23

10bitx4(6)8bitx2

8Kバイト

512バイト

1Kバイト

8bitx2

16bitx1

外部クリスタル、外部RC、外部クロック信号、

校正付内臓RC(1・2・4・8MHz)

 

 

 

 

 28ピン(DIP)のパッケージに機能が凝縮されており、I/Oピンは23ピンと減っていますが小型で8535や4433より使えそうです。

 また、内臓発信器が使え部品も減らせます。その校正付内臓RC発信器は周波数が選べ、発信値も微調整出来るようになっています。

 まずこの使い方について、調べてみました。

 

校正付内臓RC発信器の使用法

 クロック源の選択・設定は、フューズビットにより行います。

CKOPT

(上位ビット4)

CKSEL3−0

(下位ビット3−0)

発信周波数

公称値(MHz)

備 考

1(非プログラム)

0001

1.0

初期設定

1(非プログラム)

0010

2.0

 

1(非プログラム)

0011

4.0

 

1(非プログラム)

0100

8.0

 

0(プログラム)

0000

 

外部クロック使用

0(プログラム)

101x-111x

0.4〜

クリスタル/セラミック発信子

1(非プログラム)

101x-111x

〜8.0

クリスタル/セラミック発信子

  ISP(シリアルプログラミング)でのクロック源関係フューズビットの設定変更は、注意が必要です。クリスタルや外部発信回路

 がない(部品や正常な発信が得られない状態)ときに、それを使用する設定にしまうとCPUが動作しなくなることは当然ですが

 ISPによるフューズビットの変更ができなくなり二進も三進もいきません。(回路を組むまで)

 私はこれではまりました。外部発信回路を組んでそれにあったヒューズビットを変更したところ以降まったく動かなくなりあせりました。

 最初は何が悪いかわからずCPU自体が壊れたのかと疑いましたが、結局発信レベル(電位設定)が悪いのが原因でした。

 内部発信回路を使いヒューズビットが簡単に変えられて大変便利ですが、発信回路の設定自体が変えられので要注意です。

 

RC発信器は、個々の特性により発信周波数が微妙にずれるためそれを調整するため校正値を設定できるようになっています。

発信周波数を校正するためのレジスタがOSCCALです。マニュアルをみるとOSCCALを0x00−0xFFの間で適当の値にする

ことにより、調整できそうです。(具体的にいくつを設定すればよいかはマニュアルでは読みきれません。)

初期値は、1MHz用の値(工場設定、標準値は0x7Fと思われる)が自動設定されるので他の周波数で使う場合や製造後の定数

変化があった時などは変更が必要になります。

4MHz動作をさせたいのでフューズビットを上記のように設定し動作速度を計ってみました。(OSCCAL初期値は0x78でした。)

PB0の出力を周期的にON-OFFさせ動作周波数を計ることにしました。下記により、実動作の1/8の周波数がPB0に現れます。

OSCCALを適当に変化させ動作速度がどう変わるかチェックしました。

  ソースプログラム(関係分)

    ldi temp,0xXX    ;OSCCALの設定

    out OSCCAL,temp

    ldi temp,0xff      ;ポートBを出力設定

    out DDRB,temp    

    ldi  temp,0      ;ポートB ’L’設定

    out PORTB,temp

L1:  sbi PORTB,0      ;PB0をHに設定 (2clock)

    nop            ;時間あわせ(1clock)

    nop            ;時間あわせ(1clock)

    cbi PORTB,0      ;PB0をLに設定 (2clock)

    rjmp L1         ;L1に戻る (2clock)

 

電源電圧5Vでの測定結果は、下表のとおりでした。今回使用したものではOSCCAL値を0X6Fにしてやればよさそうです。

OSCCAL値

0x78(120)

0x77(119)

0x74(116)

0x70(112)

0x6F(111)

0x6A(106)

動作周波数

4.12

4.10

4.08

4.04

4.00

3.94

特性をグラフで見ると次のようになりました。若干誤差(測定・温度等)がありますがほぼ直線性がありそうです。

OSCCAL.JPG

 

LCD表示器(HD44780)の接続

 目新しいことではありませんが、今までI/Oピンを贅沢に使用していましたが、 mega8はI/Oピンが23本しかない

 のでインターフェイス(4bit)と制御線3本(rs、r/w、enable)をDポートのみで制御するようにしました。

 4bitの初期化ルーチンでデータシート(HD44780Uおよび秋月付属のもの)に説明不足(誤り?)があるようで苦労しました。

 どうもファンクションセットが正常に動作してないようです(いいときもありますが)。 

 信号のタイミング等をいろいろ変えてみましたが改善できませんでした。いろいろ調べた末 、互換品の沖電気のデータシート

 をみて解決できました。

    インターフェイス長4ビットモード設定後はビジーフラグのチェックが出来ないので、100us時間を空ける

  

                LCDFLOW.JPG - 38,116BYTES

 

M8LCD12M.JPG - 49,614BYTES

ソース ヒューズビット 上位:C9、下位:E0