« 2010年3月 | トップページ | 2010年6月 »

2010年4月29日 (木)

XI-IV再び(52)

XI-IVの新しい画像を掲載します。雲が多くて陸地がはっきり見えません。
撮影推定日時:2010年4月18日16時53分27秒JST
Xiiv_100429_1650_rom1 衛星の推定位置図→20100418_165327_d

| | コメント (0) | トラックバック (0)

2010年4月18日 (日)

XI-IV再び(51)

4月11日掲載のXI-IV画像について、撮影時の衛星の推定位置を併せて掲載します。
撮影推定日時:2010年3月27日15:46:28JST
Xiiv_100411_1747_rom1 衛星の推定位置図→20100327_154628_d

それから、昨日掲載したセンサデータの欠けていた部分及び太陽電池電圧のデータを取得できたので、グラフ化したものを掲載します。
Xiixsensor20100416

| | コメント (0) | トラックバック (0)

2010年4月17日 (土)

XI-IV再び(50)

今日のXI-IVからはログデータを取得しました。XI ROM Data Decoderで衛星搭載電池電圧のデータを得ることができました。一部データが欠けているのが残念です。
Xiivsensor20100416

| | コメント (0) | トラックバック (0)

2010年4月11日 (日)

XI-IV再び(49)

本日データ取得を完了したXI-IV画像を掲載します。昼と夜の境のようです。
撮影推定日時:2010年3月27日15:46:28JST
Xiiv_100411_1747_rom1

| | コメント (0) | トラックバック (0)

2010年4月 4日 (日)

AVR実験室(13)

【4 プログラム本体】
(2)起動メッセージの表示
ldi Work_Main,39 ;length of message
まず、起動メッセージの長さ(39バイト)を設定しています。

ldi ZH,HIGH(MSG)
ldi ZL,LOW(MSG)
次に、メッセージ(定数)の保存してあるアドレスをZレジスタペア(データ所在のインデックスになり、「lpm (レジスタ),Z+」という命令でZレジスタペアの示すROM上の番地のデータをレジスタに読み込みます。)に設定しています。

;rotate left
;because ROM address is 2nd times
clc
rol ZL
rol ZH
AVRマイコンでは命令が原則16ビット長のため、フラッシュROMに保存されている命令はは16ビット長で読み込まれるのに対して、保存されているデータ(定数)はレジスタが8ビット長のため、8ビットずつ読み込まれます。そのため、アセンブラのラベルで取得されるROMアドレスは、最下位の1ビットが省略されたものとなっているようです。これを8ビットごとの実アドレスに変換するため、左シフト(2倍)しています。

START_MSG:
lpm Data_Chrout,Z+ ;use lpm to read from ROM
rcall CHR_OUT
dec Work_Main
brne START_MSG
Zレジスタペアで示されたROMアドレスから、メッセージ長分のデータを読み出し、次のRS-232Cへの文字出力サブルーチン(CHR_OUT)へ出力データを渡しています。メッセージ長分「brne START_MSG」という命令と「START_MSG:」というラベルの間をループします。サブルーチンへの出力データの受け渡しは、「Data_Chrout」と名称定義したレジスタを介して行われます

(3)RS-232Cへの文字出力サブルーチン
CHR_OUT:
;data send through RS-232C, Data to send is set in 'CHR_OUT' resistor
lds Work_Chrout,UCSR0A
sbrs Work_Chrout,UDRE0 ;wait until UDRE0 is set
rjmp CHR_OUT
;
sts UDR0,Data_Chrout ;set data to send
ret
UCSR0AというIOレジスタのUDRE0というビットが「1」になるまで、すなわちRS-232C出力が可能の状態となるまで待ってから、出力すべきデータ(メインプログラムから「Data_Chrout」レジスタを介して渡されたもの)を出力IOレジスタであるUDR0にセットします。

【5 定数】
MSG:
.db "RS-232C test program by JI1IZR Start.",0x0D,0x0A,0x00
スタートメッセージとして出力したいデータを定数として「.db」に続けて記述しています。文字列は"(ダブルクォーテーション)で囲って記述します。16進数は「0x」に続けてアスキーコードで記述します。このプログラム例の「0x0D」は改行、「0x0A」は1行送りを表します。

【3 割込みベクタテーブル】(追加)
rjmp CHR_IN ;USART RX Complete
RS-232Cにパソコンから受信データを取得したときに、割込み処理「CHR_IN」を実行するよう割込みベクタテーブルを定義しています。

【4 プログラム本体】
(4)RS-232Cデータ受信完了割込み処理
CHR_IN:
lds Data_Chrin,UDR0
mov Data_Chrout,Data_Chrin
rcall CHR_OUT
reti
RS-232Cで受信したデータを「Data_Chrin」と名称定義したレジスタに取得し、「Data_Chrout」と名称定義したレジスタに移してから、RS-232Cへの文字出力サブルーチンに渡し、パソコンにエコーバックしています。

(5)主処理
;permit interrupt
sei

MAIN:
rjmp MAIN
主処理プログラムでは、起動メッセージ出力後は処理すべきことがないため、割込み許可後、無限ループしています。

3月7日のプログラムの概要は、以上のとおりです。次回は、プログラムの中で使用されている命令を説明したいと思います。

| | コメント (0) | トラックバック (0)

« 2010年3月 | トップページ | 2010年6月 »