XI-IV再び(48)
| 固定リンク
| コメント (0)
| トラックバック (0)
3月7日のプログラム解説の続きです。プログラム解説が先行してしまい、どのようなシステム上で何を目的にしているのかがわからないと思います。このプログラムを動作させる回路図は、後日改めて掲載します。
【4 プログラム本体】
(1)初期設定(続き)
;set USART
ldi Work_Main,0
sts UBRR0H,Work_Main
ldi Work_Main,51 ;9600baud at 8MHz
sts UBRR0L,Work_Main
ldi Work_Main,0b10011000
sts UCSR0B,Work_Main
;bit7=receive intrrupt enable,bit4=recieve enable, bit 3=send eable
;UCSR0C is defautl
この部分は、マイコンのシリアル(RS-232C)インターフェースの設定です。
まず、UBRR0HとUBRR0Lというレジスタペアに51を設定することで、RS-232Cのボーレートを9600ボーに設定できます。計算方法はシステムクロックの8MHz÷2÷8ビット÷9600-1≒51と計算されます。実際は設定値がATmega88の説明書に表形式で記載されていますので、その中から利用するボーレートに対応する設定値を探すことになります。その際には誤差が+-0.5%以内となるものを選択するよう説明書に記載されています。上記設定は9600ボーで0.2%の誤差となっています。
続いて、UCSR0Bレジスタをシリアルインターフェースが使用可能となるように設定します。最上位の第7ビットで受信完了時に割込みがかかるように、また、第4ビットで受信、第3ビットで送信機能が有効となるように、各ビットに1を設定しています。
これでシリアルインターフェースが有効となり、端末(パソコン)との通信が可能となります。
| 固定リンク
| コメント (0)
| トラックバック (0)
3月7日のプログラムの解説途中ではありますが、一部機能を付け加えましたので、掲載します。付け加えた機能は、PC0を出力設定してLEDを接続した状態として、ターミナルソフトから「s」を送信するとLEDが点灯、「c」を送信するとLEDが消灯するという単純なものです。しかし、この機能により、パソコンとワンチップマイコンとがきちんとデータのやりとりができていることが確認できました。プログラムリストは、次のとおりです。これについても順次説明していきたいと考えています。
「RS232C_TXRX_20100323.txt」をダウンロード
| 固定リンク
| コメント (0)
| トラックバック (0)
3月7日掲載のAVR用プログラムについて、少しずつ説明していこうと思います。このプログラムはAVRのアセンブラで記述しています。AVRマイコンもほかのマイコンと同様C言語でもプログラムの作成ができますが、マイコンの動作を理解するにはアセンブラを使用することを私はお勧めします。マイコンごとに異なる言語になるため、煩わしいかもしれませんが、どれか一つのアセンブラ言語が理解できれば、ほかのものを理解するのは、それほど困難とは思いません。私自身、もう○十年前になりますが、Z80のアセンブラを散々いじくりまわしましたが、その時の経験が今のワンチップマイコンの理解に役立っていると感じています。また、AVRマイコンはRISCであるため、命令の種類が少ない(汎用レジスタが多いので、それの組み合わせを入れると多くなりますが)ので、覚えるのは苦にならないと思います。
さて、先のプログラムですが、ヘッダー、レジスタ定義、割込みベクタテーブル、プログラム本体(主プログラムと割込み処理プログラム)、定数の5つに大きく分かれます。
【1 ヘッダー】
#include <m88def.inc>
これは使用するマイコン固有のRAMサイズやアドレス等の定義ファイルを取り込むための宣言部分になります。プログラムそのものを生成するわけではありませんが、これを利用することで、使用するマイコンを別のものに入れ替えたときに、プログラム本体に大きな修正をせずにすみます。つまり、特定のRAMアドレスやIOポートなどをアドレスではなく名称で指定できるようになります。本プログラムの中では、「SPH」、「SPL」、「RAMEND」といったものが該当します。それぞれ、m88def.incファイル内で次のように定義されています。
(m88def.incファイルからの抜粋)
;***** I/O REGISTER DEFINITIONS ($3F-$00) **********************************
.equ SPH =$3E
.equ SPL =$3D
;***** DATA MEMORY DECLARATIONS ********************************************
.equ RAMEND = $4FF
アセンブラのプログラム作成するに当たり、このファイルを折に触れて参照してください。
【2 レジスタ定義】
.def Work_Main = R16
AVRマイコンのレジスタはR0~31の32個あります。プログラム中でわかりやすいように、また、同じレジスタを重複して使用することがないように、使用するレジスタに名称を付けています。これは必須ではありませんが、推奨です。なお、独自の機能があるため、m88def.incファイルで既に定義されているレジスタもあります。また、R0~R15は定数を直接代入したり、参照することができません。定数を代入して、各種設定等に使用する場合には、R16~31を使用します。
【3 割込みベクタテーブル】
.cseg
;interrupt table
.org 0
rjmp RESET ;Reset
.csegでプログラムエリアであることを示します。.org 0で、次に続くプログラムが0番地から開始されることを示します。0番地はマイコンが最初に処理する命令となります。実際には、システムリセットによる割込み処理です。また、ATmega88には計26個の割込みがあるため、0番地から連続する25までは、各割込み発生時に最初に処理される命令(実際にはジャンプ命令が書かれることが多い)を記述します。rjmp RESETは、RESETというラベル(プログラムの特定番地を名称で表したもので、アセンブラが番地を自動計算します。)へ処理を移す(relative jump=相対ジャンプ)という命令です。
【4 プログラム本体】
(1)初期設定
RESET:
;inhibit interrupt
cli
;set stuck point
ldi Work_Main,high(RAMEND)
out SPH,Work_Main
ldi Work_Main,low(RAMEND)
out SPL,Work_Main
RESET:は上記3で説明したラベルです。マイコン起動時に最初に処理するプログラムを記述しています。cliは割込み禁止です。組み上げたマイコンシステムに合わせた初期設定が終わるまで、予期しない割込みが発生しないよう、割込み処理をすべて受付ないようにしています。続いてSPHとSPLという2つのレジスタの初期設定をしていますが、これはスタックポインタというレジスタです。スタックポインタは、割込みやサブルーチン等で処理の途中で別の処理に一旦移るとき、戻ってくるプログラムの番地を保存する場合等に使用されます。そのため、まず最初に設定します。RAMENDはマイコンのRAMの最後の番地を示します。スタックはRAMの後ろの番地から、前の方に順に使用されます。
本日は、ここまで、続きは日を改めて。
| 固定リンク
| コメント (0)
| トラックバック (0)
昨年2月8日以降、AVRマイコンについての記事を書きませんでしたが、その間、モデムICなしTNCの実験をとぎれとぎれにも継続していました。実際のCUTE-1.7による受信もその間に試しましたが、正常なデータは全く得ることができず、そうこうしているうちに土日のSRLLによる運用がなくなってしまったため、以前録音したものでの実験のみ続けていました。半固定抵抗を固定抵抗に交換したり、余計なLEDを省略してみたりしましたが、結局、モデムICなしの受信は精度が上がらず、一旦断念することにしました。その代わり、少しずつプログラムを作成しながら、AVRマイコンで何ができるかを探究していこうと思います。
まず、実験用のボードを組みました。現在、「フィジカルコンピューティング」を合言葉(?)に、GainerやArduinoといったセットが普及しているようですが、私は手元の部品を使って、次のような機材を用意しました。
(1)AVRマイコンのATmega88をブレッドボードに搭載し、
(2)書き込みはISPコネクタをブレッドボード上に搭載してAVRISPmk2を使用、
(3)ATmega88とパソコンとは、RS-232Cで接続するため、「トランジスタ技術」2008年1月号付録のRS-232Cレベル変換基板を使用、
(4)電源は単3電池2本の3Vとする。
上記により組み上げたボードの様子は次のとおりです。
この基板に、今回は次の機能を持たせました。
○パソコンのターミナルソフトと通信を行い、マイコンの電源投入時にスタートメッセージを表示した後、ターミナルソフトからの文字入力をエコーバックする(入力したものをそのまま返す)。
ターミナルソフトには「つなたーむ」を使用しました。その動作状況は、次のとおりです。
作成したプログラムリストは、次に掲載したファイルのとおりです。処理内容については、順次説明していきたいと思います。
「RS232C_TXRX_20100307.txt」をダウンロード
| 固定リンク
| コメント (0)
| トラックバック (0)
最近のコメント