78K0で無線通信(3)
今回が78K0で微弱無線通信シリーズの最終回です!
といっても次回の記事も78K0+微弱無線の予定で、
いきなり冒頭で次回予告ですが、78K0+微弱無線でラジコンを動かしてみます!
というか動きました!!!次回をお楽しみに!
掲載が延び延びになった送信側78K0用HEXファイル・受信側78K0用HEXファイルも
このページの一番下にあります!お待たせいたしました!!
前回の予告どおり、実際に行った実験の手順をご紹介!
また、実験に必要で前回掲載できなかった、UARTの制御をするプログラム、
ヘッダファイル、プログラムの開始番地の指定ファイルも大公開!
前回(78K0で無線通信(1))、前々回(78K0で無線通信(2))の記事を
読んでおられない方はぜしあわせてお読みください!
■■プログラムを動作させて実際に微弱無線通信してみる手順■■
では実際に読者の方が78K0で無線通信(1)回路を組んだとして、実際に
わたしが行ったのと同じ微弱無線通信を行う手順を紹介します。
●受信側のプログラムの書き込み●
回路を組んでパソコンとUSB接続し、PG-FPL3を起動して受信側78K0用HEXファイル
を書き込みます。回路図の青い*の部分を書き込んだあとに動作側に切り替える
のをお忘れなく。
●送信側プログラムの書き込み●
トラ技BIOSはとても便利なので、これを消さずに動作させます。なのでPG-FPL3を
使わず、トラ技BIOSを使って書き込みます。
まず回路を組んでパソコンとUSB接続し、Teratermを起動します。
Teratermの設定は
ポート:トラ技基板が接続されているポート
ボーレート:何でもいいけど115200が速い
データ:8bit
パリティ:なし
ストップ:1bit
フロー制御:なし
にします。
Enterを押すと下のような画面になります。これでトラ技BIOSが起動しました。
ここで"load"と入力しEnterを押すと、Drop a HEX file. と表示されるので、
送信側78K0用HEXファイルをTeratermの白い部分にドラッグアンドドロップします。
すると次のような画面になります。これで送信側の書き込みも終わりです。
●いよいよ微弱無線通信!!!●
送信側のTeratermは終了させずに、"jmp f000″と入力しEnterを押します。
すると下のような画面になり、書き込んだプログラムが動作し始めます。
これで送信側の準備はOKです。

受信側はPG-FPL3を終了して、代わりに受信のためにもう一つTeratermを起動します。
その設定は
ポート:FT232RLが接続されているポート
ボーレート:19200
データ:8bit
パリティ:なし
ストップ:1bit
フロー制御:なし
にします。これで受信側の準備も終わりです。
この準備が終わった状態で送信側のTeratermをアクティブにし、
キーボードを適当に打ってみてください。送信側で"asdf"と打ったら、
受信側のTeratermにも"asdf"と表示されました!!通信は大成功!!!
■■次回予告!!!■■
冒頭でもいきなり次回予告してしまいましたが、来週はこれまでの無線通信実験の
応用編として78K0でラジコンを動かします!
そいでもってomeの投稿記事の次々回予告もしますが、今度は78K0を使って
さらに微弱無線でまた別なことをやりたいと思います!!!
さらにさらに!去年の秋に新しく公開されたマイコン統合開発プラットフォーム
CubeSuite も使ってみようと思います!!!乞うご期待!!!
■■前回掲載できなかった実験に必要なそのほかのファイル■■
いっぱいスクロールしなくてもよいようにプログラム本文やHEXファイルの
フォントを小さくしてあります。メモ帳などにコピーして参照ください。
●●送信側に必要なファイル●●
送信側には以下の4つのファイルと送信側メインプログラム wireless_test.cが
必要です。
・送信側ヘッダファイル wireless_test.h
・送信側ヘッダファイル trgbios.h
・UART6制御プログラム uart6.c
・プログラムの開始番地の指定ファイル RAMAPP.dr
●送信側ヘッダファイル wireless_test.h●
/*
■トラ技78K0付録基板
■uPD78F0730
■wireless_test.h
■315MHz微弱無線受信モジュールのテスト用ヘッダ
2008.12.10作成
*/
/* メイン関数の宣言 */
void main( void );
/* サブ関数の宣言 */
void WAIT256U( unsigned char );
void UART6_INIT ( unsigned char , unsigned char , unsigned char );
void UART6_MANEGE ( unsigned char );
unsigned char UART6_RX( void );
void UART6_TX( unsigned char );
●送信側ヘッダファイル trgbios.h●
→トラ技2008年8月号付録CD-ROMからコピーしてください
●UART6制御プログラム uart6.c●
/*
■トラ技78K0付録基板
■uPD78F0730
■uart6.c
■UART6初期化・送受信
2008.12.10作成
*/
#pragma sfr /* プログラム上で直接SFR名でSFRを操作できるようにする */
#include "wireless_test.h”
/*
****************************************
UART6 初期化
****************************************
*/
void UART6_INIT ( unsigned char u6clk , unsigned char u6rate , unsigned char u6mode )
{
// STMK6 = 0; /* 割り込み処理許可 */
// STPR6 = 0; /* 高優先順位レベル */
P1.3 = 1; /* P13から"H"を出力 */
CKSR6 = u6clk; /* UART基本クロックの選択 */
BRGC6 = u6rate; /* ボーレートの設定 */
ASIM6 = u6mode; /* 動作モードの設定 */
}
/*
****************************************
UART6 動作開始・停止
****************************************
*/
void UART6_MANEGE ( unsigned char m )
{
unsigned char i;
if( m == 0x01 ) /* 引数 1 なら動作開始 */
{
POWER6 = 1; /* 内部動作クロックの許可 */
TXE6 = 1; /* 送信動作許可 */
RXE6 = 1; /* 受信動作許可 */
}
else if( m == 0x00 ) /* 引数 0 なら動作停止 */
{
TXE6 = 0; /* 送信動作禁止 */
RXE6 = 0; /* 送信動作禁止 */
POWER6 = 0; /* 内部動作クロックの禁止 */
}
for( i = 0; i < 50; i++ ); /* 動作安定のためのwait */
}
/*
****************************************
UART6 1バイト受信
****************************************
*/
unsigned char UART6_RX( void )
{
/* 変数の宣言 */
char rx1byte;
char rx_err;
while( SRIF6 != 1 ) /* UART受信完了フラグが立つまでループ */
rx_err = ASIS6; /* UART受信エラー・ステータス変数"rx_err"へ代入 */
rx1byte = RXB6; /* UART受信データを変数(rx_ascii)へ代入 */
SRIF6 = 0; /* UART受信完了フラグをクリア */
return rx1byte; /* 受信した1バイトを返す */
}
/*
****************************************
UART6 1バイト送信
****************************************
*/
void UART6_TX( unsigned char tx1byte )
{
while( ASIF6 != 0x00 ); /* 送信可になるまでループ */
TXB6 = tx1byte; /* 送信バッファレジスタへ送信データの書き込み */
P1.5 = 0;/* 通信中赤点灯 */
while( STIF6 != 1 ); /* UART送信完了フラグが立つまでループ */
STIF6 = 0; /* UART送信完了フラグをクリア */
P1.5 = 1;
}
●プログラムの開始番地の指定ファイル RAMAPP.dr●
→トラ技2008年8月号付録CD-ROMからコピーしてください
●●受信側に必要なファイル●●
受信側には以下の3つのファイルと受信側メインプログラム wireless_test.cが
必要です。
・UART6制御プログラム uart6.c(送信側とは別物)
・UART0制御プログラム uart0.c
・受信側ヘッダファイル wireless_test.h(送信側とは別物)
●UART6制御プログラム uart6.c(送信側とは別物)●
/*
■エレキジャック78K0付録基板
■uPD78F0503DA
■uart6.c
■UART6初期化・送受信
2008.12.10作成
*/
#pragma sfr /* プログラム上で直接SFR名でSFRを操作できるようにする */
#include "wireless_test.h”
/*
****************************************
UART6 初期化
****************************************
*/
void UART6_INIT ( unsigned char u6clk , unsigned char u6rate , unsigned char u6mode )
{
// STMK6 = 0; /* 割り込み処理許可 */
// STPR6 = 0; /* 高優先順位レベル */
P1.3 = 1; /* P13から"H"を出力 */
CKSR6 = u6clk; /* UART基本クロックの選択 */
BRGC6 = u6rate; /* ボーレートの設定 */
ASIM6 = u6mode; /* 動作モードの設定 */
}
/*
****************************************
UART6 動作開始・停止
****************************************
*/
void UART6_MANEGE ( unsigned char m )
{
unsigned char i;
if( m == 0x01 ) /* 引数 1 なら動作開始 */
{
POWER6 = 1; /* 内部動作クロックの許可 */
TXE6 = 1; /* 送信動作許可 */
RXE6 = 1; /* 受信動作許可 */
}
else if( m == 0x00 ) /* 引数 0 なら動作停止 */
{
TXE6 = 0; /* 送信動作禁止 */
RXE6 = 0; /* 送信動作禁止 */
POWER6 = 0; /* 内部動作クロックの禁止 */
}
for( i = 0; i < 50; i++ ); /* 動作安定のためのwait */
}
/*
****************************************
UART6 1バイト受信
****************************************
*/
unsigned char UART6_RX( void )
{
/* 変数の宣言 */
char rx1byte;
char rx_err;
P1.6 = 1;
P1.7 = 1;
while( (SRIF6 != 1) & (ASIS6 == 0x00) );/* UART受信完了フラグまたはエラーフラグが立つまでループ */
if( SRIF6 == 1 )
P1.7 = 0;
else
P1.6 = 0;
rx_err = ASIS6; /* UART受信エラー・ステータス変数"rx_err"へ代入 */
rx1byte = RXB6; /* UART受信データを変数(rx_ascii)へ代入 */
SRIF6 = 0; /* UART受信完了フラグをクリア */
SREIF6 = 0; /* UART受信エラーフラグをクリア */
return rx1byte; /* 受信した1バイトを返す */
}
/*
****************************************
UART6 1バイト送信
****************************************
*/
void UART6_TX( unsigned char tx1byte )
{
while( ASIF6 != 0x00 ); /* 送信可になるまでループ */
TXB6 = tx1byte; /* 送信バッファレジスタへ送信データの書き込み */
while( STIF6 != 1 ) /* UART送信完了フラグが立つまでループ */
STIF6 = 0; /* UART送信完了フラグをクリア */
}
●UART0制御プログラム uart0.c●
/*
■エレキジャック78K0付録基板
■uPD78F0503DA
■uart6.c
■UART6初期化・送受信
2008.12.3作成
*/
#pragma sfr /* プログラム上で直接SFR名でSFRを操作できるようにする */
#include "wireless_test.h”
/*
****************************************
UART0 初期化
****************************************
*/
void UART0_INIT( unsigned char u0rate , unsigned char u0mode )
{
P1.0 = 1; /* P10から"H"を出力 */
BRGC0 = u0rate; /* ボーレートの設定 */
ASIM0 = u0mode; /* 動作モードの設定 */
}
/*
****************************************
UART0 動作開始・停止
****************************************
*/
void UART0_MANEGE ( unsigned char m )
{
unsigned char i;
if( m == 0x01 ) /* 引数 1 なら動作開始 */
{
POWER0 = 1; /* 内部動作クロックの許可 */
TXE0 = 1; /* 送信動作許可 */
RXE0 = 1; /* 受信動作許可 */
}
else if( m == 0x00 ) /* 引数 0 なら動作停止 */
{
TXE0 = 0; /* 送信動作禁止 */
RXE0 = 0; /* 送信動作禁止 */
POWER0 = 0; /* 内部動作クロックの禁止 */
}
for( i = 0; i < 50; i++ ); /* 動作安定のためのwait */
}
/*
****************************************
UART0 1バイト受信
****************************************
*/
unsigned char UART0_RX( void )
{
/*** 変数の宣言 ***/
char rx_1byte;
char rx_err;
while( IF1L.1 != 1 ); /* UART受信完了フラグが立つまでループ */
rx_err = ASIS0; /* UART受信エラー・ステータス変数"rx_err"へ代入 */
rx_1byte = RXB0; /* UART受信データを変数(rx_ascii)へ代入 */
IF1L.1 = 0; /* UART受信完了フラグをクリア */
return rx_1byte; /* 受信した1バイトを返す */
}
/*
****************************************
UART0 1バイト送信
****************************************
*/
void UART0_TX( unsigned char tx_ascii )
{
while( IF0H.2 != 0x00 ); /* 送信可になるまでループ */
TXS0 = tx_ascii; /* 送信バッファレジスタへ送信データの書き込み */
while( IF0H.2 != 1 ); /* UART送信完了フラグが立つまでループ */
IF0H.2 = 0; /* UART送信完了フラグをクリア */
}
●受信側ヘッダファイル wireless_test.h(送信側とは別物)●
/*
■エレキジャック78K0付録基板
■uPD78F0503DA
■wireless_test.h
■315MHz微弱無線モジュールのテスト(エレキジャック基板:受信側 トラ技基板:送信側)
2008.12.3作成
*/
#define MEMORY_IMS_SET 0xC8 /* 内部RAM1KByte,内部ROM32KByteに設定 */
#define OSC_FREQ_CONT 0x00 /* 発振周波数範囲「1 MHz≦fXH≦10 MHz」 */
#define CLOCK_MODE 0x40 /* X1,X2端子をX1発振モードに設定 */
#define SYSTEM_CLOCK_SELECT 0x07 /* CPUや周辺に高速システムクロックを供給 */
/* メイン関数の宣言 */
void main( void );
/* サブ関数の宣言 */
void INIT( void );
void UART6_INIT ( unsigned char , unsigned char , unsigned char );
void UART6_MANEGE ( unsigned char );
unsigned char UART6_RX( void );
void UART6_TX( unsigned char );
void UART0_INIT ( unsigned char , unsigned char );
void UART0_MANEGE ( unsigned char );
unsigned char UART0_RX( void );
void UART0_TX( unsigned char );
■■送信側78K0用HEXファイル・受信側78K0用HEXファイル■■
送信側78K0用HEXファイル
:010080007F00
:01008100007E
:01008400007B
:10F00000B7B1891CD6710B20711B20132110710B15
:10F0100023711B23710B26711B26710A2C1B0610F2
:10F020000400B1A00DB1A0099A96F0B0B010010093
:10F030009AABF0136C40AE014D20AD429ACC1862F1
:10F04000BE01100100B1C6809AD818B01B06105539
:10F05000009AFDF010FF009AFDF01026009A83F050
:10F060001002009AFDF0100A009AFDF0AE01A00017
:10F07000309AFDF01003009AFDF01A06FAB81A064D
:10F08000B0B6AF60F21A717A6C713BE13136E102D1
:10F09000FAFA717B6CAFB7B1891CD63A0187F65684
:10F0A000AE06F657AE08F650B0B6AFB7B1B1891C90
:10F0B000D6AE0251BD0B717A50716A50715A50FA36
:10F0C0000FAE024D00BD09716B50715B50717B50EA
:10F0D000A100BE01AE014D329D07AE0141BE01FA55
:10F0E000F3B0B0B6AFB73106E105F45377FAF7F0F5
:10F0F0000A76710BE16670276131D2B6AFB7D6F4EC
:10F10000554D00BDFA66F20B5B013116E102FAFAC9
:07F11000711BE15A01B6AFCB
:00000001FF
受信側78K0用HEXファイル
:0200000080007E
:1000800061D0EE1CE0FE9AF6001000000354FB0362
:1000900040FB0344FB400342FB1058FB0356FB1696
:1000A0001FFEA3C0A100BB8BFD1680001478FBC609
:1000B000EA8000AD0687958684FAF41678FBC6EAD6
:1000C00078FBAD06A1009786FAF41680001478FB41
:1000D000C6EA8000AD0687958684FAF41678FBC6DA
:1000E000EA78FBAD06A1009786FAF49A9F0110000A
:1000F000009AF700FAFEAF0240FB3061013027D6CC
:1001000067616EAD129696B7C6CA00FBD68730AE51
:0B01100001B69A1901FAE9FAFE3198D5
:10011B0013F0C8710B9F139F4013A200F4A34D1F44
:10012B00BDFA13A10713FB00710B20711B20710B80
:10013B0021711A21712B21713B21714A21715B2194
:10014B00716B21717B21710B22711B22712B22711F
:10015B003B22710B23711B23712B23713B23710BDF
:10016B0026711B26710B2C7B01100400B1A041B131
:10017B00A0069AC401B0B01001009AD90110050075
:10018B00B1A0C89A6102B01001009A7602136C609C
:10019B00111AFFAFB79A1B019A130262764D02BD7B
:1001AB00F79A130262764D0ABDEE9A13026276C677
:1001BB00A1009AC802FAE1B6AFB7B1891CD63A01D1
:1001CB0087F656AE06F657AE08F650B0B6AFB7B1D7
:1001DB00B1891CD6AE0251BD0B717A50716A507148
:1001EB005A50FA0FAE024D00BD09716B50715B5046
:1001FB00717B50A100BE01AE014D329D07AE014196
:10020B00BE01FAF3B0B0B6AFB76A017A01A1003103
:10021B0006E1014172F4534D00A100BD0141615A49
:10022B00BDEB3107E1047B01FA026B01F45377F06C
:10023B000A76710BE1717BE06670276131D2B6AF44
:10024B00B7D6F4554D00BDFA66F20B3116E10571C8
:10025B001BE1FAF7B6AFB7B1891CD68730AE06D61D
:10026B000A0166F67167F670B0B6AFB7B1B1891C0B
:10027B00D6AE0251BD0B717A70716A70715A70FAF9
:10028B000FAE024D00BD09716B70715B70717B70AD
:10029B00A100BE01AE014D329D07AE0141BE01FA78
:1002AB00F3B0B0B6AFB73116E202FAFAF47377F4E3
:1002BB007276711BE26670276131D2B6AFB7D63159
:1002CB0027E102FAFA66F6743126E102FAFA712B8B
:0302DB00E1B6AFDA
:00000001FF
コメント
この投稿には、まだコメントが付いていません
コメントの投稿
ごめんなさい、現在コメントを付けることは出来ません