(別室)AVRのページ(アトメル社のAVR CPUを使ってみる)

 ※このページはあくまで個人的な趣味によって書かれており、著者は全ての内容について、いかなる責任も負いません。



 アトメル社 ※http://www.atmel.com/ のAVRを使ってみた。
AT90Sシリーズや、その後継品種のATtinyシリーズは、かなり格安で購入できるし、
本格的な用途には、ATmegaシリーズがある。
AVRは、CPUの構造が一般的なCPUに近いので、パソコン系CPUのアセンブラでの開発経験がある人には、
扱いやすいかも知れない。



●WindowsXPパソコン以外で用意したもの(1500円程度)。

・AVRStudio(AVRの統合開発ツール)
  アトメル社のホームページより無償でダウンロードできる。

・AVR用のライター
  ChaN氏のHP ※http://elm-chan.org/index_j.html で、安価なAVRライターが公開されているので、これを活用した。
  giveio.sysをパソコンにインストールしていない人は、このインストールも必要だ(無料)。

  秋月電子の「PICプログラマーキット Ver3.5」及び、「PICプログラマー Ver4バージョンアップ対応モジュールキット」に、
  「AVRアタッチメントボードキット(3000円程度)」を追加しても良いと思う。
  「AVRアタッチメントボードキット」を追加しても、PICの開発に支障はない。

・マニュアル
  アトメル社のホームページより無償でダウンロードできる


ChaN氏の「AVRライター」を作ってみた。ソケットは使用頻度が高いと思われる20ピンのAVR用。

動作も確実だったので、ISP専用バージョンも用意した。


こんなICソケットを作っておくと、ISPの開発で便利だ。




●WindowsXPパソコン以外で用意したものA (なくても問題はない)

 アセンブラで開発するだけなら、上記のものだけあれば充分だが、他の開発ツールも使ってみた。
 
 ・BASCOM avr(AVRのBASIC言語開発ツール)
   アセンブラに比べてプログラムの開発が簡単だ。
   デモ版が、BASCOM−avrサイト ※http://www.mcselec.com/ より無償でダウンロードできる。
   但し、デモ版は、プログラムの大きさや、その他に制約があるので、大規模なプログラムを作る事はできない。
   BASCOM専用ライターは、製作記事が多くのサイトで公開されているので、参考にすると良いだろう。
   なお、専用ライターは必須ではなく、この開発ツールで作成されたHEXファイルをChaN氏のライターや、他の
   ライターで書き込むことも可能だ。(私の場合は、BASCOM専用ライターはほとんど使っていない)


抵抗4本だけの簡単なBASCOM専用ライターだが、私のPCでは問題なく動作する(制作費300円程度)。


 ・WinAVR (C言語系開発ツール)
   無償で使えるAVR−gccコンパイラーだ。Windows環境で使用できる。
   gccは、unix系では一般的に使われているもので、解説しているサイトは多いので、参考にするといいだろう。
   WinAVRの使い方については、 「(別室)Cygwinのページ」 で説明している。
   WinAVRは ※http://sourceforge.net/projects/winavr/ からダウンロードできる。
   書き込む方法はいろいろあるが、簡単な方法は、AVR−gccでコンパイルするとHEXファイルが作成されるので、
   このファイルをChaN氏のライターや、他のライターでAVR−CPUに書き込んでやればよい。

   ※注)gccをインストールすると、AVRStudioから使用する事も可能だ。(その方が、普通の使い方だ。)







ATTINY13A(8ピンAVR)を使ってみる   ATTINY13Aは、ただいま、準備中です!!

ATTINY13Aのピン配置 

 ●実験ボード・タイプ0A(ATTINY13A)     ただいま、準備中です!!

   @LEDを動かしてみる

 ●実験ボード・タイプ0B(ATTINY13A)     ただいま、準備中です!!

   @UARTでパソコンにつないでみる

   A電圧計にしてみる






AT90S2313/ATTINY2313(20ピンAVR)を使ってみる
 ATTINY2313は、AT90S2313の後継品種

AT90S2313のピン配置 

ATTINY2313のピン配置 

  ※AT90S2313をATTINY2313に置き換える場合の注意

  ATTINY2313は、AT90S2313の後継品種であるが、クロックに内部OSCが選択できるように機能が追加されていて、
  出荷時の設定は、内部OSC使用(1MHz)になっているので、置き換える場合は、ヒューズビットの設定の変更
  が必要だ。
 
   1)内部OSC使用(8MHz)に変更する場合

     @「avrsp -rf」で、ヒューズビットを確認する。
     A「avrsp -fl********」で、Low:で表示の先頭1ビットのみ'0'==>'1'に変更し、
       それ以外はLow:で表示された通りに続けて7ビットを入力する。
       (先頭1ビットは、OSCを8分周するかどうかを指定するフラグ)
     B「avrsp -rf」で、正しく変更された事を確認する。
 
   2)外部OSC使用(8MHz以上)に変更する場合
     注)この変更をすると、外部OSCを付けないと、以後、操作はできなくなる

     @「avrsp -rf」で、ヒューズビットを確認する。
     A「avrsp -fl********」で、Low:で表示の先頭1ビットを'0'==>'1'、
       5〜7ビットを'111'に変更し、それ以外はLow:で表示された通りに入力する。  
     B「avrsp -rf」で、正しく変更された事を確認する。
 

ChaN氏のライターでATTINY2313のヒューズビットを変更する場合 

 ●実験ボード・タイプ1A(AT90S2313/ATTINY2313)

  PICで作ったアダプタ類をつなぐための簡単なボードを作ってみた。

 この実験ボードのプログラムは、インクルードファイル程度を変更すれば、基本的にはATTINY2313でも使用可能だが、
 外部OSC(10MHz)を使っているので、ATTINY2313を使う場合は、前述した方法で、ヒューズビットを
 「※2)外部OSC使用(8MHz以上)」に変更
しておかないと、正常に動作しない。

基板の写真 

回路図 


@ルーレットアダプタをつないでみる

ルーレットアダプタをつないでみた。プログラムは単にLEDを動かすだけだ。
実験のため、同じものをATTINY2313でも作ってみた。
2つのサンプルプログラムは、インクルードファイルが違うだけだ。

また、同じものを、BASIC(BASCOM)やC言語でも作ってみた。
アセンブラに比べてプログラムの開発が簡単だ。

割り込みバージョンは、16ビットのタイマー1割り込みを使った簡単なサンプルで、1秒毎にLEDが回転する。

写真

回路

s000011.asm

プログラムソースサンプル(AT90S2313 AVRStudio用 ASMファイル)  

s000011t.asm

プログラムソースサンプル(ATTINY2313 AVRStudio用 ASMファイル)  

s000011b.txt

プログラムソースサンプル(AT90S2313 BASCOM用 BASICプログラム)  

s000011g.c

プログラムソースサンプル(AT90S2313 WinAVR(gcc)用 C言語プログラム)  

s000011ti.asm

プログラムソースサンプル(ATtiny2313 AVRStudio用 ASMファイル 割り込みバージョン)  

s000011gi.c

プログラムソースサンプル(ATtiny2313 WinAVR(gcc)用 C言語プログラム 割り込みバージョン)  




Aルーレットアダプタにスイッチをつけてみる

上記ルーレットアダプタに、スイッチをつけてみた。
ボタンを押すと(どちらのボタンでも良い)ルーレットが回転し、乱数によって、不確定な、どこかのLEDで止まる。

写真

回路

s000012.asm

プログラムソースサンプル(AT90S2313 AVRStudio用 ASMファイル)  

s000012b.txt

プログラムソースサンプル(AT90S2313 BASCOM用 BASICプログラム)  

s000012g.c

プログラムソースサンプル(AT90S2313 WinAVR(gcc)用 C言語プログラム)  




Bルーレットアダプタをパソコンにつないでみる

AVRに内蔵されたUARTを使ってパソコンにつないでみた。
パソコンのハイパワーターミナルから1〜9を入力すると、1〜9ステップだけルーレットが動く。

写真

ハイパワーターミナルでの入力

回路

パソコンのハイパワーターミナルの設定(PICと同じにしてある)

s000013.asm

プログラムソースサンプル(AT90S2313 AVRStudio用 ASMファイル)  

s000013b.txt

プログラムソースサンプル(AT90S2313 BASCOM用 BASICプログラム)  

s000013g.c

プログラムソースサンプル(AT90S2313 WinAVR(gcc)用 C言語プログラム)  

s000013gt.c

プログラムソースサンプル(ATtiny2313 WinAVR(gcc)用 C言語プログラム)  

s000013gti.c

プログラムソースサンプル(ATtiny2313 WinAVR(gcc)用 受信割り込みバージョン C言語プログラム)  




CSIN波(50Hz)ジェネレータ

D/AコンバータをつないでSIN波(50Hz)ジェネレータにしてみた。
PICで作ったものと同様の機能のものだ。
出力周波数は、タイマー関数(WAT)のループ回数を変更するだけで、数KHzまで変更可能だ。
このプログラムは、周波数精度は高くはない。
LM358のような安価な汎用オペアンプでは、SIN波の振幅が入出力レンジをはみ出してしまう事が
あるので、正確なSIN波が必要なら、PORTBの数値にはかせる下駄の数値の微調整が必要だ。

写真

回路

オシロスコープによる出力波形

s000014.asm

プログラムソースサンプル(AT90S2313 AVRStudio用 ASMファイル)  

s000014b.txt

プログラムソースサンプル(AT90S2313 BASCOM用 BASICプログラム)  

s000014g.c

プログラムソースサンプル(AT90S2313 WinAVR(gcc)用 C言語プログラム)  




D超音波障害物センサー

超音波センサーをつないで障害物センサーにしてみた。
マイコン制御の模型で、障害物検知に使う事を想定して作ったものだ。
サンプルは実験用なので、硬い壁に近ずくとルーレットが回転するようにしてある。
実験では、硬い壁に20cm位まで近ずくと反応していたが、回路図中の※Aの5KΩを調整することで、
感度は調整する事ができる。
手持ちの関係で、汎用オペアンプのLM324を使っているが、LM324では40KHzのゲインはあまり期待できない。
本当はもう少し高い周波数で使えるオペアンプを使って設計するほうが無難だ。
なお、LM324は入力がPNPなので、※Bの20KΩを省略してしまうと、3段目のオペアンプがコンパレータとして
正常に動作しなくなるので、注意が必要だ。
超音波センサーは40KHz用のもので、秋月電子で購入した。

写真

回路

s000051.asm

プログラムソースサンプル(ATTiny2313 AVRStudio用 ASMファイル)  

s000051b.txt

プログラムソースサンプル(ATTiny2313 BASCOM用 BASICプログラム)  ※準備中

s000051g.c

プログラムソースサンプル(ATTiny2313 WinAVR(gcc)用 C言語プログラム)  ※準備中




E超音波距離計

パソコンのハイパーターミナルにつないで、距離計にしてみた。
超音波を発射して、跳ね返ってくるまでの時間をマイコンでカウントしているもので、超音波センサーの使い方としては一般的だ。
サンプルは実験用で作ったので、あまり精度は高くない。
実験では、測定対象物から数cm〜1m位までなら、特に問題なく距離の測定が可能だった。
LM324の40KHzでのゲインが低いので、増幅を2段にしている。
感度は※Aの10KΩを変える事で調整可能だ。
超音波センサーは40KHz用のもので、秋月電子で購入した。

写真

ハイパーターミナルの画面イメージ

回路

パソコンのハイパワーターミナルの設定


s000071.asm

プログラムソースサンプル(ATTiny2313 AVRStudio用 ASMファイル)  

s000071b.txt

プログラムソースサンプル(ATTiny2313 BASCOM用 BASICプログラム)  ※準備中

s000071g.c

プログラムソースサンプル(ATTiny2313 WinAVR(gcc)用 C言語プログラム)  ※準備中



 ●38ドット電子ルーレット(ATTINY2313)

  38個のLEDを使ったルーレットにしてみた。
 中央のボタンを押すと、ルーレットが高速回転を開始し、スピードが遅くなって乱数で任意のLEDで止まる。
 プログラムは、ATTINY2313のヒューズビットを「内部OSC使用(8MHz)」で作ってある。
 実験用なので、基板には、AVR、及びPICの何れでも使用できるように、両方の回路を付けてある。
 ケースは、美術で使うベニヤカンバスを代用した。


写真(表示部分)  


写真(外部 [表/裏]/内部基板 [表/裏])  

回路図(AVR用) 

s000040g.c

プログラムソースサンプル(ATTINY2313 WinAVR(gcc)用 C言語プログラム)  









 ●実験ボード・タイプ3A(ATTINY2313)

  水晶を使った実験ボードを作ってみた。
 タイマーの精度が必要なアプリケーションを動かすためのものだ。
 水晶は、秋月電子で購入した表面実装の安価なものだ。
 水晶に20MHzでなく、8MHzを使ったのは、内部OSC(8MHz)用のプログラムも、そのまま動かしたいからだ。

 なお、このボードでATtiny2313を使う場合、ヒューズビットは上記の方法で、「外部OSC使用(8MHz以上)」
 にしておく必要がある。

写真  ※水晶の下部に付いているのは、電源確認用LEDと、逆接続保護用のダイオード

回路図 



@周波数カウンタ(1〜100KHz程度)にしてみる

TMR1割り込みを使って、周波数カウンタにしてみた。
測定した結果は、パソコンのハイパーターミナルに出力する。
精度は4桁以上はあるようだ。
アンプも、保護回路も作っていないので、入力はCMOSレベルで、電源電圧より高い電圧を加えてはならない。

写真

ハイパーターミナルのイメージ ※50.000KHzのパルスを測定してみた

パソコンのハイパワーターミナルの設定

回路図

s000111gt.c

プログラムソースサンプル(ATTINY2313 WinAVR(gcc)用 C言語プログラム)  






APWMでLEDの明るさを変えてみる

ATTINY2313に内蔵されている4つのPWM(TMR0[A/B]、TMR1[A/B])を使って、LEDの明るさを変えてみた。
LEDが、徐々に明るくなって、急に暗くなる動作を繰り返す。※LEDの明暗は、視覚的に大きくありませんが。
このサンプルの出力は、31.250KHz(8MHzでPWMにした時の最速)にしてあるが、PWMに高い精度が必要な用途は
少ないだろうから、内蔵のOSCを使っても、特に問題はない。
PORTBにルーレットアダプタをつないだだけなので、PORTD[5]にはLEDをつないでいないが、出力は確認済みだ。

写真

オシロによる波形 徐々にHが伸びる面白い波形の変化を繰り返す

回路図

s000121gt.c

プログラムソースサンプル(ATTINY2313 WinAVR(gcc)用 C言語プログラム)  






B低周波(100Hz以下)周波数カウンタにしてみる

1周期の長さを測定して周波数を計算する周波数カウンタだ。
周期をカウントする周波数カウンタと異なり、周波数が低くなるほど精度が高くなり、mHz単位の測定が可能だが、
測定する波形の形状が精密(99.999、、、%で、ノイズ等がない信号)でないと、著しく測定精度が低くなるので、
ごく特殊な用途にしか使えないようだ。
回路は、「@周波数カウンタ(1〜100KHz程度)」をそのまま使用した。

写真

ハイパーターミナルのイメージ (ファンクションジェネレータで50Hzを出力して測定してみた)

回路図

s000131gt.c

プログラムソースサンプル(ATTINY2313 WinAVR(gcc)用 C言語プログラム)  










 ●実験ボード・タイプ4A(ATTINY2313)

  内部OSCを使う実験ボードを作ってみた。
 PORTA、PORTB全てが使えるようにしたものだ。

 なお、このボードを使うには、ATtiny2313のヒューズビットを、上記の方法で、「内部OSC使用(8MHz)」
 にしておく必要がある。

写真  ※ボードの右側に付いているのは、電源確認用LEDと、逆接続保護用のダイオード

回路図 



@オルゴールにしてみる

圧電スピーカが1つだけのオルゴールだ。
手元に楽譜が無いので、メロディーは、PICでも使った「海」が演奏されるだけだが、曲は追加していく予定だ。
曲の追加は、楽譜があれば、音符(Play[音階、長さ])、休符(Stp[長さ])を記述するだけなので簡単だ。
ヒューズビットは、「内部OSC使用(8MHz)」で使用する。

写真

回路図 (圧電スピーカは、PORTBのどのピンにつないでもよい)

s000211g.c

プログラムソースサンプル(ATTINY2313 WinAVR(gcc)用 C言語プログラム)  






Aオシレータ(1Hz〜10KHz)にしてみる

ハイパーターミナルから周波数を入力すると、指示された周波数の方形波を出力するオシレータだ。
周波数精度が高くはないので、簡単にするために水晶は使わず、ヒューズビットを「内部OSC8MHz」で使用した。
ハイパーターミナルの設定は、上記同様、9600BPSだ。
ターミナルから、「(周波数)Hz」とキーインして使用する。

  例)5KHzを出力する場合
     5000HZ   とキーインする。

写真

ハイパーターミナルのイメージ  (周波数に続けて、'HZ'と入力するだけだ)

回路図 (出力端子は、PORTBのどのピンでもよい)

s000221g.c

プログラムソースサンプル(ATTINY2313 WinAVR(gcc)用 C言語プログラム)  










ATmega48/ATmega88/ATmega168(28ピンAVR)を使ってみる

 ATmega48/ATmega88/ATmega168を使ってみた。
 このCPUは、フラッシュが4K/8K/16Kバイト(ATmega48/ATmega88/ATmega168)と、下記のATmega64/ATmega128に比べて
 多くはないが、マルツパーツ(秋葉原の秋月電子の斜め前の店) ※http://www.marutsu.co.jp/ で、DIP型が購入できる。
 
 このシリーズのCPUは、ヒューズビットの出荷時の設定は、クロックが、内部OSC使用(1MHz)になっている。
 LEDを点燈させるだけなら、それでも問題はないのだが、例えば9600BPSでパソコンとシリアル通信を行なうためには
 それでは遅すぎるので、8MHz(このシリーズで内部OSCを使った場合の最速)に変更してやる必要がある。

ATmega48/ATmega88/ATmega168のDIP型のピン配置


ChaN氏のライターで、クロックを、内部OSC1MHzから、内部OSC8MHzに変更する場合

(変更方法) @「avrsp -rf」で、ヒューズビットを確認する。
A「avrsp -fl********」で、Low:で表示の先頭1ビットのみ'0'==>'1'に変更し、
  それ以外はLow:で表示された通りに続けて7ビットを入力する。
  (先頭1ビットは、OSCを8分周するかどうかを指定するフラグ)
B「avrsp -rf」で、正しく変更された事を確認する。

 ●実験ボード・タイプ1C(ATmega48/ATmega88/ATmega168)

  AT90S2313/ATTINY2313で作ったものと同じような簡単なボードを作ってみた。
  このCPUは、ヒューズビットを変更する事で、外部OSCをつないで、高速動作をさせる事も可能だが、
  このボードでは、ヒューズビットをデフォルトのまま使用して、全てのピンをポートとして使用している。
  このCPUにはA/Dコンバータが内蔵されているので、実験ボードにA/Dコンバータのコネクタを追加している。

基板の写真 

回路図(ATmega48/ATmega88/ATmega168用) 



@ルーレットアダプタとスイッチをつけてみる

AT90S2313/ATTINY2313と同様のプログラムを作ってみた。
ボタンを押すと(どちらのボタンでも良い)ルーレットが回転し、乱数によって、不確定な、どこかのLEDで止まる。
このサンプルは、ヒューズビットは購入時の状態(内部OSCが1MHz)で作っているので、例えば8MHzに変更
すると、ルーレットは8倍速の高速回転になる。
※割り込みバージョンのみ、内部OSC:8MHz用です。

写真

回路

s003012.asm

プログラムソースサンプル(ATmega48 AVRStudio用 ASMファイル)

s003012b.txt

プログラムソースサンプル(ATmega48 BASCOM用 BASICプログラム)  

s003012g.c

プログラムソースサンプル(ATmega48 WinAVR(gcc)用 C言語プログラム)  

s003012gi.c

プログラムソースサンプル(ATmega48 WinAVR(gcc)用 C言語プログラム 割り込みバージョン 8MHz用)  



Aルーレットアダプタをパソコンにつなぐ

AT90S2313/ATTINY2313と同様のプログラムを作ってみた。
パソコンのハイパーターミナルから1〜9を入力すると、1〜9ステップだけルーレットが動く。
このサンプルを動かすためには、冒頭で書いたように、ヒューズビットを内部OSC:8MHzに変更しておく必要がある。

写真

回路

パソコンのハイパワーターミナルの設定(PICと同じにしてある)

s003013.asm

プログラムソースサンプル(ATmega48 AVRStudio用 USART版 ASMファイル)   

s003013_2.asm

プログラムソースサンプル(ATmega48 AVRStudio用 汎用PG版 ASMファイル)  

s003013b.txt

プログラムソースサンプル(ATmega48 BASCOM用 BASICプログラム)  

s003013g.c

プログラムソースサンプル(ATmega48 WinAVR(gcc)用 C言語プログラム)  



B電圧(0〜10,230[mV])を測定し、結果をパソコンに送信する

A/D Converterを使ってみた。
ADC(0)端子の測定結果を、パソコンのハイパーターミナルに送信する。
このサンプルを動かすためには、ヒューズビットを内部OSC:8MHzに変更しておく必要がある。

写真

回路

パソコンのハイパーターミナルの画面表示

パソコンのハイパワーターミナルの設定(PICと同じにしてある)

s003014.asm

プログラムソースサンプル(ATmega48 AVRStudio用 ASMファイル)   

s003014b.txt

プログラムソースサンプル(ATmega48 BASCOM用 BASICプログラム)  

s003014g.c

プログラムソースサンプル(ATmega48 WinAVR(gcc)用 C言語プログラム)  



Cモールス発振器にする

このサンプルは、ハイパーターミナルから、A-Z、0-9を入力すると、該当するモールス信号を出力する。
キーのスピードは、「M_out」関数の「Speed=40」を増減する(値が小さいほど速くなる)事で変更が可能だ。
安価で簡単にするために、圧電スピーカをつないだが、トランジスタとスピーカをつないでもよい。
このプログラムは、PICで作ったものをAVRに移植して、ハイパーターミナルにつないだものだ。
このサンプルを動かすためには、ヒューズビットを内部OSC:8MHzに変更しておく必要がある。

写真

回路

パソコンのハイパーターミナルの画面表示

パソコンのハイパワーターミナルの設定(PICと同じにしてある)

s003051g.c

プログラムソースサンプル(ATmega48 WinAVR(gcc)用 C言語プログラム)  



D電圧(0〜10,230[mV])を10μS間隔で測定し、結果をパソコンに送信する

 上記の「電圧(0〜10,230[mV])」のプログラムに、簡単なプログラムの修正したものだ。
 
 AVR−CPUが起動すると、10μS間隔で200回、電圧を測定し、結果をシリアル通信でパソコンに送信する。
 このデータを、例えばEXCELに取り込んで、オシロスコープのように波形を表示するような使い方ができる。
 
 このサンプルを動かすためには、ヒューズビットを内部OSC:8MHzに変更しておく必要がある。
 
  ※注)パソコン側のアプリケーションは、現在準備中です。


回路図(上記の回路をそのまま使用した)

ATmega48からパソコンに取り込んだ200件のデータを、EXCELのグラフで表示してみた

(テストで使った波形は、1KHzのSIN波を、1S1588で半波整流したものだ)

s003015g.c

プログラムソースサンプル(ATmega48 WinAVR(gcc)用 C言語プログラム)  











ATmega64/ATmega128(64ピンAVR)を使ってみる

 ATmega64/ATmega128を使ってみた。
 このCPUは、64K/128Kバイトのフラッシュ(ATmega64/ATmega128)の他、大容量のSRAM・EEP、豊富な周辺機器を
 内蔵した高性能なCPUだ。
 最近、テレビで派手に宣伝している某社の二足歩行ロボット「ロボザック」にも使われているCPUなので、
 知っている人は多いだろう。
 
 このシリーズのCPUは、ISPモードの時、MOSI(PE0;2番ピン),MISO(PE1;3番ピン)とピンの配置が変わるので、
 ChaN氏のライターを使う場合には注意が必要だ。
 また、出荷時の設定が、mega103互換モードになっているので、mega64/128として使用するためには、
 下記の方法で、ヒューズビットを変更してやる必要がある。
 クロックは、外部OSCと、内部OSC(1、2、4、8MHz)を選べるようになっているが、出荷時の設定は、内部OSC(1MHz)
 になっているので、パソコンと9600BPSでシリアル通信を行なうためには、ヒューズビットを8MHzに変更する作業も必要だ。

 このCPUは、形状が64ピンTQFPで、このままでは扱いにくいので、簡単な実験ボードを作ってみた。

ATmega64/ATmega128の大きな違いはメモリーの容量だ

ATmega128のピン配置

注)ISPモードの時、MOSI(PE0),MISO(PE1)とピン配置が変わるので、ChaN氏のライターを使う場合は注意が必要だ。


ChaN氏のライターで、mega103互換モードを変更する場合

(変更方法) @「avrsp -rf」で、ヒューズビットを確認する。
A「avrsp -fx1*」で、Ext:で表示の先頭1ビットのみ'0'==>'1'に変更し、
  次のビットはExt:で表示された通りに続けて1ビットを入力する。
B「avrsp -rf」で、正しく変更された事を確認する。


ChaN氏のライターで、クロックを、内部OSC1MHzから、内部OSC8MHzに変更する場合

(変更方法) @「avrsp -rf」で、ヒューズビットを確認する。
A「avrsp -fl****0100」で、Low:で表示の上位4ビットはLow:で表示された通りに入力し、
  続けて下位4ビットを'0001'==>'0100'に変更して入力する。
B「avrsp -rf」で、正しく変更された事を確認する。


ChaN氏のライターで、JTAGインターフェース使用不可に変更する場合
注意)この変更をするとJTAGインターフェースではアクセスできなくなるので注意が必要だ。

(変更方法) @「avrsp -rf」で、ヒューズビットを確認する。
A「avrsp -fh*10*****」で、Hight:で表示の上から2ビットめを1に変更して入力する。
  3ビット目が「‐」で表示されているのは、このビットはシリアルプログラミングでは変更できないからだ。
B「avrsp -rf」で、正しく変更された事を確認する。


 ●実験ボード・タイプ1D(ATmega128/ATmega64)

 プログラムの書き込みテストのために作った簡単な実験ボードだ。
 PICで作ったアダプタ類を、そのままつなぐ事もできる。

写真
TQFP型は基板作成&半田付けが大変なので、変換基板を使用した
16ピンソケットは購入できなかったので、20ピンソケットの4ピンを引き抜いて使っている

回路図


@ルーレットアダプタとスイッチをつけてみる

稼動確認用に、AT90S2313/ATTINY2313やmega48/88/168と同様のプログラムを作ってみた。
ボタンを押すと(どちらのボタンでも良い)ルーレットが回転し、乱数によって、不確定な、どこかのLEDで止まる。
このサンプルは、ヒューズビットは購入時の状態(内部OSCが1MHz)で作っている。
確認のために、ATmega64と、ATmega128で作ってみたが、プログラムはインクルードファイルが違うだけだ。

写真

回路

s002011s.asm

プログラムソースサンプル(ATmega64 AVRStudio用 ASMファイル)

s002011.asm

プログラムソースサンプル(ATmega128 AVRStudio用 ASMファイル)

s002011b.txt

プログラムソースサンプル(ATmega128 BASCOM用 BASICプログラム)

s002011g.c

プログラムソースサンプル(ATmega128 WinAVR(gcc)用 C言語プログラム)





Aルーレットアダプタをパソコンにつなぐ

AT90S2313/ATTINY2313やmega48/88/168と同様のプログラムを作ってみた。
パソコンのハイパーターミナルから1〜9を入力すると、1〜9ステップだけルーレットが動く。
このサンプルを動かすためには、ヒューズビットを内部OSC:8MHzにしておく必要がある。
このサンプルでは、USART(RXD,TXD)を使用している。

写真

回路

パソコンのハイパワーターミナルの設定(PICと同じにしてある)

s002013.asm

プログラムソースサンプル(ATmega64 AVRStudio用 USART版 ASMファイル)

s002013_2.asm

プログラムソースサンプル(ATmega64 AVRStudio用 汎用PG版 ASMファイル)  

s002013b.txt

プログラムソースサンプル(ATmega64 BASCOM用 BASICプログラム)  ※準備中

s002013g.c

プログラムソースサンプル(ATmega64 WinAVR(gcc)用 C言語プログラム)  



B電圧(0〜10,230[mV])を測定し、結果をパソコンに送信する

mega48/88/168と同様のプログラムを作ってみた。
ADC(0)端子の測定結果を、パソコンのハイパーターミナルに送信する。
このサンプルを動かすためには、ヒューズビットを内部OSC:8MHzに変更しておく必要がある。

写真

回路

パソコンのハイパーターミナルの画面表示

パソコンのハイパワーターミナルの設定(PICと同じにしてある)

s002014.asm

プログラムソースサンプル(ATmega64 AVRStudio用 ASMファイル)   ※準備中

s002014b.txt

プログラムソースサンプル(ATmega64 BASCOM用 BASICプログラム)   ※準備中 

s002014g.c

プログラムソースサンプル(ATmega64 WinAVR(gcc)用 C言語プログラム)  





 ●実験ボード・タイプ2D(ATmega128/ATmega64)

 上記の実験ボード・タイプ1Dに、SRAMとシリアルEEPを追加した実験ボードだ。
 このCPUは、外部メモリーインターフェースが内蔵されているので、メモリーの増設は簡単だ。

 アドレスラッチは入手の都合で74HCを使っているが、Mega128のマニュアルによると、74HCは速度に問題があるので、
 74AHCを使うように指示がされている。
 充分な検証をしているわけではないが、実験では、外部メモリーインターフェースのウエイトステート数を調整する事で、
 74HCでも特に問題なくメモリーをアクセスできている。
 
 回路図にある8MHzの水晶は、実際には配線をつながず、ヒューズビットは内部OSC8MHzで使用している。
 この類のヒューズビットは、設定を間違えるとアクセスが困難になる事があるので、あまり設定を変更したくないからだ。
 このCPUはSRAMが512Kビットまでそのままつながるが、使用した256KビットのSRAMは、秋月電子で安価で入手できるものだ。
 
 この実験基板では、PORTFをパラレルポートとして使っているが、このポートはデフォルトではJTAGインターフェース
 に割り当てられている。ポートとして使うためには、ヒューズビットを「JTAGインターフェース使用不可」にする必要がある。
 ※注)上記の手順を参照 この変更をすると、JTAGではアクセスできなくなるので注意が必要だ。


写真  表面/表面(基板ソケットを抜いたところ)/裏面

回路 

@増設メモリーをアクセスしてみる

増設メモリー確認のために作った簡単なサンプルだ。
パソコンの「ハイパーターミナル」から入力した1文字を増設メモリーに書き込み、1つ前に入力したアドレスの文字を
「ハイパーターミナル」に表示する。
なお、もしもメモリーが増設されていないと、デタラメの文字が表示される。

写真

回路(上記回路図の「シリアル@」ポートにADM3202をつないだだけだ。)

ハイパーターミナルでの実行イメージ

s002111.asm

プログラムソースサンプル(ATmega64 AVRStudio用 ASMファイル)  ※準備中

s002111g.c

プログラムソースサンプル(ATmega64 WinAVR(gcc)用 C言語プログラム)



AシリアルEEPROM(I2C型)をアクセスしてみる

Atmel社のシリアルEEPROM(AT24C256:256Kbit)をアクセスするために作った簡単なサンプルだ。
パソコンの「ハイパーターミナル」から入力した1文字をシリアルEEPに書き込み、1つ前にシリアルEEPに
書き込んだ文字を「ハイパーターミナル」に表示する。
このCPUには、I2Cをアクセスするために、TWI(Two-wire Serial Interface)が内蔵されているので、
このインターフェースを使うと、プログラムは簡単だ。

シリアルEEPは、メーカーやメモリー容量により、若干仕様が異なるので、他のシリアルEEPROMを
使用する場合は、多少プログラムの修正が必要になる。
なお、もしシリアルEEPROMが正しく接続されていないと、エラーを表示してプログラムを停止する。



写真(上記と同じだ。)

回路(上記と同じだ。)

ハイパーターミナルでの実行イメージ

s002112.asm

プログラムソースサンプル(ATmega64 AVRStudio用 汎用プログラム版 ASMファイル)  ※準備中

s002112t.asm

プログラムソースサンプル(ATmega64 AVRStudio用 TWI版 ASMファイル)  ※準備中

s002112g.c

プログラムソースサンプル(ATmega64 WinAVR(gcc)用 汎用プログラム版 C言語プログラム)  ※準備中

s002112gt.c

プログラムソースサンプル(ATmega64 WinAVR(gcc)用 TWI版 C言語プログラム)  




 ●知識ベースを作って作品を動かす(ATmega128/ATmega64)

 ATmega128/ATmega64は、そのままでも4KバイトのSRAMを持っているので、上記のようなメモリー増設をしなくても、簡単な知識
 ベースなら載せる事が可能だ。
 ※この記事の詳細は、 (別室)動く作品のページ を参照の事。









 工事中







PICのページへ戻る

メニューに戻る





問い合わせ先(代表者)E_MAIL BYP03364@nifty.ne.jp

 ※ウイルス感染防止のため、容量の大きなもの、添付ファイルのあるもの、テキスト形式以外のメールは
全て削除されます。
 また、個々の質問については、お答えできません。