マイコン電子工作あれこれ - 78K0 横丁

NECエレクトロニクス製マイコン78K0を使った工作情報サイトです。
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
ブログ カレンダー
2010年 9月
« 4月    
 1234
567891011
12131415161718
19202122232425
2627282930  
ブログ 月別過去ログ
ブログ カテゴリ一覧
オンライン状況
6 人のユーザが現在オンラインです。 (3 人のユーザが ブログ を参照しています。)

登録ユーザ: 0
ゲスト: 6

もっと...

2009年3月4日(水曜日)

78K0で無線通信(3)

カテゴリー: - ome @ 15時52分51秒

今回が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が起動しました。

101トラ技BIOS起動.JPG

ここで"load"と入力しEnterを押すと、Drop a HEX file. と表示されるので、
送信側78K0用HEXファイルをTeratermの白い部分にドラッグアンドドロップします。
すると次のような画面になります。これで送信側の書き込みも終わりです。

102HEXファイルドロップ後.JPG

●いよいよ微弱無線通信!!!●
送信側のTeratermは終了させずに、"jmp f000″と入力しEnterを押します。
すると下のような画面になり、書き込んだプログラムが動作し始めます。
これで送信側の準備はOKです。

103jmpf000.jpg

受信側はPG-FPL3を終了して、代わりに受信のためにもう一つTeratermを起動します。
その設定は
ポート:FT232RLが接続されているポート
ボーレート:19200
データ:8bit
パリティ:なし
ストップ:1bit
フロー制御:なし
にします。これで受信側の準備も終わりです。

この準備が終わった状態で送信側のTeratermをアクティブにし、
キーボードを適当に打ってみてください。送信側で"asdf"と打ったら、

104送信側.JPG

受信側のTeratermにも"asdf"と表示されました!!通信は大成功!!!

105受信側.JPG

■■次回予告!!!■■
冒頭でもいきなり次回予告してしまいましたが、来週はこれまでの無線通信実験の
応用編として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
 


コメント

このコメントのRSS

この投稿には、まだコメントが付いていません

コメントの投稿

ごめんなさい、現在コメントを付けることは出来ません

21 queries. 0.109 sec.
Powered by WordPress Module based on WordPress ME & WordPress

メインメニュー
Google Search
SiteSearch Google
Google

WWW サイト
78K0 最新ヘッドライン