Archive
こんばんは!
仕事も正月休みに入り、何をしようかウキウキしているゆってぃです!

実は今日が正月休み初日なのですが、とりあえずブログの更新くらいしかやるべきことが思いつかなかったので、こうして記事を書き始めてしまいました。

さて、今回は久々にPICマイコン関連の話です。
実は当ブログ、本当に多くの方からPIC関連の記事にアクセスをいただいております。
みなさま、本当にありがとうございます。
多くの方がご覧になってくださるお陰で、僕自身も新たな知識を身につけようという意欲が沸いてくるのです。
いや、これ本当ですよ(笑)

だって最近、このブログの更新以外に楽しみがないんですもん(涙)

さて、以前の記事(MPLAB導入)で、MPLABの導入からプログラムのビルドまでをご紹介致しましたが
現在ではMPLAB X IDEという次世代のIDEがMicrochip社から提供されています。

となれば、当ブログでも当然、その使用方法を記事に取り上げない訳には参りません!

それでは、早速IDEのダウンロードからご説明いたします。

1.ダウンロード

MPLAB X IDEのインストーラーは、下記のリンクからダウンロードすることが可能です。

MPLAB X IDE ダウンロードページ

まず、ページの左側にあるFREE DOWNLOADと書かれた箇所をクリックします。
(下の画像では、赤枠で囲んであります)

MPLAB_X_install_1.jpg

次に、MPLAB X IDE v1.51(バージョンは更新される可能性があります)と書かれたリンクをクリックします。
ダウンロードフォルダ選択画面が現れるので、適当なフォルダへダウンロードしてください。
なお、今回はOSがWindowsということで話を進めますが、Linux用、Mac用のIDEも用意されています。
さすがMicrochip社ですね!

MPLAB_X_install_2.jpg

また、一緒にコンパイラもダウンロードしておきましょう。
無料のコンパイラとして、XCコンパイラが提供されております。
(有償版もありますが、小さなプログラムでは無料版で問題ありません)
今回はPIC16系がターゲットデバイスなので、XC8コンパイラのインストーラーをダウンロードします。
因みに、XC16はPIC24系、XC32はPIC32系用のコンパイラです。

MPLAB_X_install_3.jpg

ダウンロードが完了したら、インストールをお願いします^^

2.MPLAB X IDEでのプロジェクト作成からビルドまで

MPLAB X IDEを起動したら、まずはメニューバーのFileをクリックします。

MPLAB_X_1.jpg

ファイルメニューが表示されるので、New Project...をクリックします。

MPLAB_X_2.jpg

プロジェクトウィザードが起動するので、
CategoriesMicrochip Embedded
ProjectsStandalone Project
を選択し、Nextを押します。

MPLAB_X_3.jpg

Select Device画面では
FamilyMid-Range 8-bit MCUs (PIC12/16/MCP)
DevicePIC16F84A
を選択し、Nextを押します。

MPLAB_X_4.jpg

Select Tool画面では、サポート外ですがとりあえずPICkit2を選択し、Nextを押します。
(書き込みには、PICkit2 Programmerを使用するため)
ただ、ここはお持ちのツールを選択していただいて結構です。

MPLAB_X_5.jpg

Select Comopiler画面では、XC8を選択し、Nextを押します。

MPLAB_X_6.jpg

Select Project Name and Folder画面では、プロジェクトの名前と、プロジェクトを作成するフォルダを入力します。
今回は、LED_SAMPLE_01というプロジェクト名にしました。
入力が完了したら、Finishを押します。

MPLAB_X_11.jpg


すると、ウィザードが自動で閉じて、また最初の画面に戻ります。
この時、画面左側のプロジェクトビューに、今作成したLED_SAMPLE_01という名前のプロジェクトのツリーが表示されていれば、プロジェクトの作成は成功です。
(以下の画面例では、LED_SAMPLE_01の下にPIC16F648A_SAMPLE_02というプロジェクトも表示されておりますが、これは僕が以前作成したプロジェクトが残っているだけですので、気になさらないで下さい)

MPLAB_X_8.jpg

次に、画面左上のNew Fileボタンをクリックします。

MPLAB_X_9.jpg

ファイル作成ダイアログが現れ、ファイルタイプ選択画面が表示されます。
今回は、C言語のソースファイルを作成するので、
CategoriesC
File TypesC Source File
を選択します。

MPLAB_X_10.jpg

次に、ファイル名と保存フォルダ選択画面が表示されます。
File Namemain
にします。
フォルダなどは、特に指定がなければそのままFinishボタンを押します。

すると、ファイル作成ダイアログは閉じられ、エディターが表示されます。
ここに、ソースコードを書いていくことになります。

MPLAB_X_12.jpg


ここまで長かったですね!
お疲れ様でした!


とりあえずここでひと休みしましょう!
ジュースを飲んだりおやつを食べたり、適度に休憩を取ってくださいね^ ^


(休憩中…)


さて、今回もLEDを点滅させるプログラムを作成してみましょう!
さっそく、以下のソースコードを、エディター内に記述してください。

おっと、何度も言いますが、コピペではダメですよ!
短いソースコードですので、自分の手で書いてくださいね><
これはね
学生時代、多くのレポートをコピペで済ませてしまっていたために
社会に出てから非常に苦労したがいうのだから

間違いありません!

学生時代にきちんと勉強してきた人と
ゆってぃの様にサボりまくっていた人では
社会に出てからの初速が全然違います!

特に組み込みエンジニア系では、学生時代にどれだけ回路やソフトを真面目にやっていたかが、仕事の速度や結果に如実に出てきてしまいます!

「学生時代に勉強したことなんて、社会じゃ役に立たないし」
なんて言わないで下さい。
僕が6年前くらいに、皆さんの分まで、十分に言っておきましたから(涙)

確かに、学生時代に勉強したことが業務に直結するケースは少ないかもしれませんが
ベーシックな部分では、どこかで必ず繋がっています。
無理をしすぎない程度でよいので、頑張ってくださいね!

ではでは、説教臭い前置きが長くなりましたが、ソースコードを以下に記載いたします(笑)


#include <stdio.h>
#include <stdlib.h>
#include <xc.h>

#pragma config CP = 0x03ff, PWRTE = 0, WDTE = 0, FOSC = 0x3

static void InitPortIOReg(void);

int main(int argc, char** argv) {

int i = 0;

InitPortIOReg();

while(1){
PORTAbits.RA0 ^= 1;
for(i=0;i<1000;i++);
}

return (EXIT_SUCCESS);

}

static void InitPortIOReg(){

TRISAbits.TRISA0 = 0;

}


XC8コンパイラは、Hi-TECH C コンパイラと少し記述方法が異なります。
まず、コンフィグレーションは、以下の方法で記述します。

#pragma config "セットするビット名" = "値", "セットするビット名" = "値", ・・・

それぞれのコンフィグレーションビットは、今回の例のようにカンマで区切って設定します。
記述方法の詳細は、XC8コンパイラのマニュアルをご参照下さい。
(英語ですが…)

※コンフィグレーションに関しては、以下の記事をご覧下さい。後半部分に簡単な説明があります。
PICマイコンで遊ぶ 超入門編(C言語)

セットするビット名は、各PICマイコンのデータシートに書かれているコンフィグレーションビットの名前をそのまま書きます。
PIC16F84Aでは、データシートの21ページにコンフィグレーション(ワード)の各ビットにおける詳細な説明がありますので、各ビット名と役割はこのページでご確認下さい。

(すでにダウンロード済みの方もいたっしゃるとは存じますが)
データシートはここからダウンロード可能です。

ここから先の説明は、このデータシートが必須になりますので
お手数ですがダウンロードをお願いしますm(_ _)m

もちろん、英語ですよ!
それだけで心が折れそうになりますが、これからの日本のものづくりを支えるためにも、一緒に頑張って行きましょう!
(いやぁ、我ながらでかい口叩くなぁ…)

それでは、今回の設定内容をひとつひとつ見ていきましょう!

まず

CP = 0x03ff

これは、コードプロテクションをオフにしています。

---

PWRTE = 0

これは、電源投入時のパワーアップタイマーをオンにしています。
(なお、このビットは"1"でオフ、"0"でオンなのでご注意を!)

--

WDTE = 0

ここでは、ウォッチドッグタイマーをオフにしています。

--

FOSC = 0x3

ここでは、発振モードを選択しています。
今回は外付けRC発振を用いるので、0x3を書き込んでいます。

--

以上で、コンフィグレーションの設定は完了です。




それでは、次にmain関数の中を見ていきましょう!

main関数内では、いきなりInitPortIOReg()関数が呼ばれています。

InitPortIOReg()関数の中を見ると、

TRISAbits.TRISA0 = 0;

と書かれています。

ここでは、TRISAレジスタのTRISA0ビットに0をセットしています。

TRISAレジスタとは、PORTA端子(RA0~RA4)の端子設定を行うレジスタです。
つまり、それぞれの端子を入力(Input)端子として使うのか、出力(Output)端子として使うのか、ということですね。
ここで、データシートの15ページを見ると、PORTAに関しての説明が書かれています。

今回必要な部分だけ要約すると
「PORTAは5ビットだよ」
「TRISAを0にセットすると出力ポート、1にセットすると入力ポートになるよ」
と書かれています。

今回はPORT0(RA0端子)を出力端子として使いたいので、TRISA0ビットに0をセットしている訳ですね。

「おい。TRISAbits.TRISA0 = 0とかの書き方はどこに書いてあるんだよハゲ!」

ゆってぃ「だ…!だからまだハゲてないって!!」

これらのレジスタ表記方法は、XC8コンパイラをインストールしたフォルダ内にある、pic16f84a.hをご覧下さい。

今回のTRISA部分だけ抜粋すると、以下のように書かれています。


// Register: TRISA
extern volatile unsigned char TRISA @ 0x085;
#ifndef _LIB_BUILD
asm("TRISA equ 085h");
#endif
// bitfield definitions
typedef union {
struct {
unsigned TRISA0 :1;
unsigned TRISA1 :1;
unsigned TRISA2 :1;
unsigned TRISA3 :1;
unsigned TRISA4 :1;
};
} TRISAbits_t;
extern volatile TRISAbits_t TRISAbits @ 0x085;


ご覧の様に、bitごとにアクセスできるようにヘッダファイル内で定義してくれているので、共用体へアクセスする要領で、それぞれのレジスタの各ビットへアクセスできます。

俺、あんま共用体を使いたくねーんだよな…

という方は、以下の記述方法でも大丈夫です。

TRISA0 = 0;

この記述方法でも、TRISAレジスタのTRISA0ビットを0に設定します。
pic16f84a.hでは、同じレジスタにアクセスする場合でも、プログラマーにコーディングスタイルに合わせて書けるように、複数の定義がなされているのですね。

素晴らしい!

どちらでも、お好きな方で結構ですよ^ ^

それでは、コードの解説を続けます。


while(1){
PORTAbits.RA0 ^= 1;
for(i=0;i<1000;i++);
}



無限ループ内で、一定周期毎にPORTAレジスタのRA0ビットを反転させています。

PORTAbits.RA0 ^= 1;

TRISAレジスタで出力に設定されたポートは、POARTAレジスタに書き込んだ値がそのまま出力されます。
今回は、PORTAレジスタのRA0レジスタの設定値を一定周期で反転させることで、RA端子からの出力波形もそれに応じて反転させています。
(なお、レジスタへのアクセス方法は、先ほどのTRISAレジスタの時と同様ですので割愛します)

以上で、ソースコードの解説は終わります!
非常に短いコードでしたが、内容はたっぷりでしたね(笑)
書き終わったソースコードは、かならず保存してくださいね。
(Ctrlキーを押しながら、Sキーで上書き保存できます)


それでは、エディタにコードが書き終わったら、いよいよビルドです!

ビルドの前に、今書いたソースコードをプロジェクトに組み入れます。
まずは、画面左のプロジェクトツリー内にある、Source Fileの上で右クリックをし
表示されたメニューからAdd Existing Item...をクリックします。

MPLAB_X_12-2.jpg

ファイル選択画面が表示されるので、先ほど作成したmain.cを選択肢、Selectボタンを押します。

MPLAB_X_12-3.jpg

Source Fileの下に、main.cが組み込まれたことをご確認下さい。

MPLAB_X_12-4.jpg

さて、次に画面上部にある、ハンマーのアイコンをクリックします。

MPLAB_X_13.jpg

ビルドが完了すると、右下にビルド結果が表示されます。
BUILD SUCCESSFULの文字が表示されれば、ビルド成功です!

MPLAB_X_14_1.jpg


これで、MPLAB X IDEを用いたプロジェクトの作成からビルドまでの説明は終了です。

最終的な出力ファイルは、プロジェクトフォルダ内の以下の場所になります。
(プロジェクト名がLED_SAMPLE_01だとすると)

LED_SAMPLE_01.X → dist → default → production → LED_SAMPLE_01.X.production.hex

あとは、このファイルをPICkit2などでマイコンへ書き込めば、全て完了です!

書き込み方法は、こちらの記事をご覧下さい。
http://technologicaladvance.blog.fc2.com/

本当にお疲れ様でした!^^


MPLAB X IDEは、従来のMPLABと比較しても、非常に強力な機能が多数追加されています。
ここでは詳細には触れませんが、是非この新しいツールを使いこなして、最強のPIC使いを目指しましょう!
AVRマイコン使いとの戦いに備えて…なんてね(笑)

最後までお読みいただいて、ありがとうございました!!(感謝)

関連記事
スポンサーサイト
こんにちは!
連休なのに、特に何もせず、気がついたら連休最終日のゆってぃです!

本当は実家に帰ろうと思っていたのですが、妹の友達が実家に泊まりにくるらしく…。
どうやらその子は(実家の)僕の部屋で寝るそうなので

これじゃあ、帰るに帰れないじゃないか!

という訳で、いつも以上に引きこもり度が高い状況になっております。

さて、今回は前回に引き続きXBee入門講座です!
前回の記事をお読みでない方は、まずはこちらからご覧下さい。

XBeeの使い方(ZBタイプ) 超入門編 第1回!

今回は説明を2回に分け、以下の段取りで進めております。

第1回 ~座学~
 (1)XBeeがもつ通信モード
 (2)XBeeのネットワーク体系
 (3)ここまでのまとめ

第2回 ~実技~
 (4)PCとXBeeの接続方法
 (5)X-CTUを用いたファームウェア設定方法(macの人ごめんなさい…)
 (6)デモンストレーション(オシロスコープで波形確認)

という訳で、第2回目の今回は、実際にATモードのファームウェアをX-CTUでXBeeに書き込み、UART通信を無線化するところまでをご説明したいと思います。

さっそく、(4)PCとXBeeの接続方法から進めていきましょう!

なお、今回は手元に下記のものを用意しました。
これらが必ずしも必要な訳ではありませんが
今回はこれらを用いて説明を行います。

・XBee×2個
・USBシリアル変換モジュール+USBケーブル
・ブレッドボード+リード線
・XBee用ピッチ変換基板(2.00mm⇔2.54mm)×2個
・パソコン(Windows)

(4)PCとXBeeの接続方法
XBeeとPCは直接USB通信を行うことは出来ませんので、接続する時にはUSBシリアル変換モジュールを使用します。

UART通信をするだけなので、電源とグラウンド、あとはTXとRXさえ繋いでしまえば完了です。

今回、ローカルXBee(PC接続側)とPCの接続には、デジットのUSB-シリアル変換モジュールを使用しています。
このモジュールは、組み込み屋さんではお馴染みのFT232RLを実装しており、ジャンパ切り替えで出力I/O電圧を5V⇔3.3Vで切り替えることが出来ます。
XBeeは3.3V系駆動なので、FT232RL出力レベルも3.3Vに合わせます。
ここは絶対に間違えないよう、ご注意下さい!
FT232RLは内部に5V→3.3VのLDOを内蔵しており、3V3OUT端子からは3.3Vが出力されるので、それをVCCIO端子に入れてあげてください。
デジット製の変換モジュールの場合、ジャンパピンは3-4ピンショート側にセットすればOKです。

なお、秋月電子製のUSBシリアル変換モジュールも同じFT232RLを搭載しているので、こちらでも構いません。
1000円を切る価格なので、かなりお安いですね。
(こちらも、ジャンパ切り替えで出力I/O電圧の切り替えが可能です)

スイッチサイエンスではXBeeエクスプローラUSBという、XBee接続に特化したUSBシリアル変換基板も取り扱っているようです。

また、僕はピッチ変換基板として、秋月電子製のAE-XBee-REG-DIPを使用しています。
スイッチサイエンスで売っているものより100円お安い上、電源ラインには3.3Vの電圧レギュレータが搭載されています。(ただ、信号ラインのレベルシフターはありませんので、通信は3.3V系でなければいけませんよ)

USBシリアル変換にFT232RLを使用することを前提とすれば、接続図は以下のようになります。
これはデジット製の変換ボードを元に書いた回路図ですが、秋月電子製でもピン配置がちょっと異なるだけで、ほとんど同じです。

PC_XBeeConnect.jpg

秋月電子製のピッチ変換基板を使用した場合、電源とGNDがきちんと接続されていれば、下の画像のように変換基板のLEDが点灯します。

接続画像

ここまで出来れば、接続はOKです!
お疲れ様でした!!

次はいよいよ、XBeeへのファームウェア書き込み作業に入ります!

一気に進めると疲れてしまうので
適度に休憩を挟んでくださいね!

(5)X-CTUを用いたファームウェア設定方法
前回お話したとおり、XBeeは2種類の通信モード3種類の役割を持っており、各XBeeにはそれぞれを1つずつ振り分けてあげる必要があります。
これらの設定は、UART通信でコマンドを投げることにより行うのですが、ひとつひとつのコマンドを手でキーボードを叩いて送るのは大変です。
そこで、Digiが提供してくれているX-CTUのいうツールの出番です。
このツールは、XBeeの各種設定をGUIベースで簡単に行うことが出来る便利ツールです。
Digiのダウンロードサイトから、無料でインストーラーをダウンロードすることが可能です。

Diagnostics, Utilities and MIBsと書かれたところをクリックして・・・

ダウンロード画面1

XCTU_ver.5.2.7.5_installerと書かれたリンクをクリックします。
(バージョンは、今後更新される可能性があります)

ダウンロード画面2

ダウンロードするファイルのサイズは約50MB程度なのですが、Digiのダウンロードサーバーが重くて…
気長にお待ち下さい(笑)
(安定していれば10~20分くらいだと思います)

インストーラーのダウンロードが完了したら、さっそく実行しましょう。
起動画面で、Nextを押します。

XCTUインストール1

次に、ライセンス認証画面が表示されるので、I Agreeにチェックを入れ、Nextを押します。

XCTUインストール3

次に、インストールフォルダの選択画面が出てきます。
デフォルトで問題がなければ、そのままNextを押します。

XCTUインストール3

インストール確認画面が表示されるので、Nextを押します。

XCTUインストール4

インストールが始まります。

XCTUインストール5

しばらくすると、最新のファームウェアチェックを確認するダイアログが表示されるので、はい
を選択します。

XCTUインストール6

ここからは恐ろしいほど長いです!

かなり長い時間を要するので、部屋の掃除とか別のことをやりながら待つことをオススメします。

しかも、途中でタイムアウトエラーが発生したりして心が折れることもありますが、根気強くインストールを続けてください。



さて、無事にインストールが完了したら、X-CTUを起動します。

X-CTUを起動すると、下の画面が表示されます。
まずはXBeeと正常に通信が行えているかを確認するため、Test/Queryボタンをクリックします。
XCTU初期設定1


正常に通信が行えていれば、新たに表示されたダイアログボックスの先頭に
Communication with modem..OK
の文字が表示され、一番下には接続しているXBeeのシリアル番号が表示されます。
XCTU初期設定2

ここまで来れば、もうひと踏ん張りですよ!
あと少しで、素敵な無線通信ライフがあなたの手の中に入ります!

想像してください。
家に遊びに来た女の子が、部屋のいたるところにあるXBeeを見てこう言う訳ですよ。

「ゆってぃくん、これはなぁに?」

「これはXBeeという無線モジュールさ。これを使って、家中の情報をパソコンで一元管理しているんだ(キリッ)」

「すごぉい!結婚して!!><」


素晴らしい!!!
実に素晴らしい!!!


・・・


・・・って、んな訳あるか!!!!

大体ね、よく雑誌とかで「モテ部屋」特集などと謳っている企画をやってますが
家に女の子が来てる時点で、ソイツはもうモテてるんだよ!(怒)
モテないヤツはね、いくらモテ部屋を作ったところで、それを見せる女の子がいないのよ!(涙)

つまり!!

モテ部屋を作ればモテるっていう考え方自体
すでに論理が破綻してるんだよこの野郎!!!
(雑誌の内容を信じて、色々エスニックな雑貨を買ってしまった後に気がついたのは秘密です)


むふぅ…むふぅ…


さて


今度は、Modem Configurationタブをクリックします。

XCTU初期設定3

すると、画面がModem Configuration設定モードに移ります。
このモードで、前回お話した通信モード役割を設定します。
画面左上のReadボタンを押してください。

XCTU初期設定4

Readボタンが押されると、現在の設定値が読み出されます。
下の図の例では、Function Setと書かれたプルダウンリストに「ZIGBEE ROUTER AT」と書かれています。
つまり、現在書き込まれている設定は通信モードはATモード役割はROUTERということがわかります。

XCTU初期設定5

早速、このXBeeを以下の設定にしてみましょう。

通信モード:ATモード
役割:COORDINATOR
PAN ID:5
Distination Address:通信相手のアドレス(ZBタイプの場合は、XBeeのシリアル番号が相当)

先ほどの画面で、Function Setと書かれたプルダウンリストをクリックし
ZIGBEE COORDINATOR ATを選択します。
XCTU初期設定6

次に、PAN ID5に設定しましょう。
(別に5にしたい理由はありませんが(笑))

XCTU初期設定6-1


今度は、Distination Address High 及び Distination Address Low を設定します。

今、手元には2つのXBeeがあると思います。
ひとつは現在PCと接続されていますね。
もうひとつの裏側をご覧下さい。
この写真の例では、右下に0013A200 40899AD0と書かれています。
これが、このXBeeのシリアル番号です。

シリアル番号


Distination Address Highには、上位4バイトを入れます。(前半の8文字)
今回の例では0013A200になります。

XCTU初期設定6-2

Distination Address Lowには、下位4バイトを入れます。(後半の8文字)
今回の例では40899AD0になります。

XCTU初期設定6-3


ここまではOKでしょうか?
正しく設定できたら、最後にWriteボタンをクリックします。

XCTU初期設定7

書き込み中・・・

XCTU初期設定8

無事に書き込みが完了すると、画面左下にWrite Parameters...Completeの文字が表示されます。
(たまに書き込みに失敗することがありますが、そんな時はあきらめずにもう一度Writeボタンを押してください)

XCTU初期設定9

以上で、X-CTUを使用したファームウェアの設定方法の説明は一旦終了です。

同じ要領で、今度はもう片方のXBeeにも設定を行いましょう!
念のため、USBケーブルを抜いてXBeeへの電源を落としてから、XBeeの付け替えをお願いします^^

さて、設定内容は以下の通りです。

通信モード:ATモード
役割:ROUTER
PAN ID:5
Distination Address:通信相手のアドレス(ZBタイプの場合は、XBeeのシリアル番号が相当)

今回はROUTERモードとして設定を行いますので、ご注意くださいね。


・・・


設定は終わりましたか?

ここまで長い間、本当にお疲れ様でした!^^

さぁ!
これが終わったら、次はいよいよ通信のデモンストレーションです!!

(6)デモンストレーション
いやぁ、ここまでお疲れ様でした!
長かったですね!!><
でもね、書いている僕の方もかな~~~り長かったです!!(涙)
途中で回路図書いたりなんやかんやしていましたが、現時点でかれこれ3時間くらいかけて書いてます!

なんだよ。時間かけてる割には、内容が薄いじゃねーか。

そんなこと言わないでくれーーー!!!(涙)

クリリンのことかーーーーー!!

ん?なんだ今の?

さ!これ以上シュールな展開になる前に、先に進めてしまいましょう!(汗)

ここまでで、各XBeeに対してATモードでの設定は一通り完了しました。
あとは実験だけですが、前回もお話したとおり、ATモードではXBeeはシリアル通信を無線化してくれるだけなので、本来であればそれを受信するマイコンやPCが必要になります。

FM3との通信であれば、こちらの記事にソースコードが載せてありますので、ご参照下さい。
PICマイコンのソースも、近日中に公開いたします。
(と言っても、UART部分をレジスタ設定するだけですが…)

今回のデモンストレーションでは、ATモードでの無線通信が行えているかを確認するだけですので、リモート側のDOUT端子を直接オシロスコープで覗いてしまいましょう。

なお、リモート側の回路は以下の通りです。

Demo.jpg


PC側は、TeraTermを起動します。
ここで、ターミナル上で'a'と打ってみます。
すぐに、リモートXBee側のDout端子以下の波形が出力されました。

波形

ここで、この波形を人間デコードすると
1000_0110
と流れてきていることがわかります。
LSBファーストなので、実際のデータは0110_0001ですね。
16進数に直せば、0x61です。
これは、アスキーコードの'a'に相当します。

つまり、きちんとローカルXBeeからリモートXBeeへ通信が出来たということです!

やりましたね!!

いやぁ、ここまで本当にお疲れ様でした(^-^)
ATモードでの通信は、こんなにも簡単に、しかしながらきちんと行うことが出来ます。
今回のデモはオシロスコープで済ませてしまいましたが、実際はここにマイコンなどがつきます。

それで、例えば'a'という文字を受信したらモーターを動かしたり
'b'という文字を受信したらセンサー値を取ったり
'c'という文字が流れてきたらLEDを光らせたり

夢が広がるでしょう??
(え…そうでもないですか…?そうですか…)

しかし、XBeeにはAPIモードというもうひとつの通信モードもあります!
これを使えば、上に書いたような簡単な処理ならマイコンなしで実現可能です!
APIモードを使用した記事も、近日中に公開予定です!

どうぞお楽しみに!!

最後までお読みいただいて、ありがとうございました!!(感謝)

//-----

なお、XBeeの使い方は、トランジスタ技術12月号にかなり詳しく書かれています。
特にAPIモードに関しては、実使用例も含めて非常に詳しい記載があります。
今回の記事も、ずいぶん本書の内容を参考にさせていただきました。
しっかりした知識を得たい方には、とても参考になると思います。



参考書としては、こちらの書籍も有用です。
ボリュームもあって、とても参考になりますよ!
ArduinoでサクっとXBeeを動かしたい人から、APIモードでガシガシXBeeを動かしたい人まで、多くの人にオススメしたい一冊です!
(もちろん、反ArduinoなPICマイコン派の人でも大丈夫ですよ笑)

関連記事
みなさんこんばんは!

さぁ~!三連休ですよ~!!!

仕事は全然終わっていませんが
休むときはピシッと休むのがモットーのゆってぃです(おぃ…)

さて、今回はまたまたXBeeネタです。
ですが、今日はマイコンのソース関連ではなく、XBeeモジュール(以下、XBee)側に焦点を当てて書いていきたいと思います。
今までは「マイコンとシリアル通信できた~!」とか言ってマイコン側のソースを一方的に載せているだけでしたが、よく考えたらXBee側の記事を全く書いていないことに気がついてしまったもので。。。

読者様の立場に立ってみると、これでは全く意味がありません。
だって、マイコン側の設定なんて、ただのUARTの設定に過ぎないのですもの!

という訳で、今回はXBeeの基本的な部分に関する記事を書いていきますね。
(というか、僕自身がXBeeの応用的な知識を持っていないため、基本的なことしか書けないのは超極秘事項です)

しかしながら、一度に全部書こうとすると
ただでさえ無駄な文章が多い当ブログですから
記事がとてもとても長くなってしまいます。

ですので、誠に勝手ながら2回に分けさせていただきます!!
(1回でまとめて書くのが面倒くさい訳ではありませんよ!)

第1回目の今回は、XBeeの通信モードや役割モードなどの説明で、どちらかと言えば座学的なお話をします。
第2回目には、簡単な配線をしたりXBeeにファームウェアを書き込んだり、実技的なお話をしたいと思います。

第1回 ~座学~
 (1)XBeeがもつ通信モード
 (2)XBeeのネットワーク体系
 (3)ここまでのまとめ

第2回 ~実技~
 (4)PCとXBeeの接続方法
 (5)X-CTUを用いたファームウェア設定方法(macの人ごめんなさい…)
 (6)デモンストレーション(オシロスコープで波形確認)

!!注意!!
ここでお話しするXBeeは、ZBタイプを前提にしております。
それ以外のタイプに関しては、このブログでの説明は致しません…
せっかく来ていただいたのに申し訳ありません(T_T)


それでは、説明に入りま~す!(パチパチパチ)


(1)XBeeがもつ通信モード
XBeeには、ATモードAPIモード2種類の通信モードが存在します。
XBeeを使用するときには、このどちらかのモードを選択して使用します。
さっそく、それぞれのモードについて説明していきますね。

<ATモード>
ATモードは、2つのXBeeモジュール間で、無線化されたUART通信を行うモードです。
具体的な用途としては、PC⇔PCPC⇔マイコンマイコン⇔マイコンの通信を無線化することなどが挙げられます。
このモードのメリットは、とにかく非常にお手軽だということ。
XBeeを無線通信のアンテナのような役割のみに限定できるので、PC側からは(例えば)シリアルターミナルにデータを流し込めば、あたかも有線で接続されているように、PCに繋いだXBee(ローカルXBee)から遠隔で別のXBee(リモートXBee)へ転送することが出来ることです。
つまり、今までRS232通信を前提にPC⇔マイコン通信用に書いてきたソフトウェア資産を、そのまま流用することが出来る、ということです。
(TeraTermで'a'という文字をローカルXBeeに送れば、そのまま'a'という文字がリモートXBeeから出てきます)

逆に言えば、このモードを使う場合は接続される機器全てに制御プログラムを書かなければならず、ごくごく簡単な制御しか行わないのであれば、(例えば、LEDを付けたり、センサー値を取ってきたり)、このモードを使う意味というのは薄いかもしれません。

<APIモード>
APIモードは、XBee内のマイコンにATコマンドと呼ばれるコマンドを投げることによって、XBeeモジュールの各端子に対し、コマンドに応じた制御を行うことが出来るモードです。
このモードのメリットは、PCに繋いだXBeeモジュール(ローカルXBee)から、遠隔で別のXBeeモジュール(リモートXBee)の端子情報を読み出すことなどが出来るので、リモートXBeeの端子に直接センサーなどを繋いでおけば、リモートXBee側は他に外付けマイコンが無くても、きちんと仕事をさせることが出来る点です。
ただし、XBee内のマイコンを使用するだけでは、残念ながら複雑な制御を行うことは出来ません。
そんなときは、ATモードの時と同様に、リモートXBee側にも別途高性能なマイコンを付けてあげれば、多様な制御が行えるようになります。
(これだけ読むと、「ん?ATモードと何が違うの?」と思われるかと存じますが、以下に記述するように、APIモードではAPIフレームが定義されている点が異なります)

なお、APIモードを使用する場合は、規定されたプロトコル(APIフレーム)に沿ってコマンドを投げる必要があります。
XBeeのデータシートに詳しい説明が載っておりますので、ご参照ください。
(機会があれば、このブログでも紹介します)
また、APIモードでは通信エラーが発生した際に、自動的に再送処理を行ってくれるというメリットもあります。

(2)XBeeのネットワーク体系
さて、各モードについてご理解いただけましたでしょうか?
「僕は無線でPCとFM3を繋げてサクっと通信したいから、ATモードだな!」
「私はXBeeに沢山センサーを繋げて家の中の情報をセンシングしたいから、APIモードがいいな」
そんな思いが瞬時に頭の中に生まれてきたのなら
非常に残念ながらあなたも立派な引きこもりエンジニアです(笑)

さて、XBeeで通信を行う前に、XBeeのネットワーク体系について軽くお話します。
XBeeには2種類の通信モードがあることはお話した通りですが、XBeeにはさらに3種類の役割のいづれかを設定する必要があります。

3種類の役割はそれぞれ、COODINATORROUTEREND DEVICEと呼ばれています。

設定方法は次回詳しくご説明いたしますが、XBeeの初期設定時には、各XBeeに通信モード役割をそれぞれ設定する必要があります。

さて、XBee同士で通信を行う場合、それぞれのXBeeが同じPAN ID(Personal Area Network ID)を持っていなければなりません。
PAN IDとは、そのネットワークのIDだとお考え下さい。
そして、1つのPAN ID内には、必ず1つのCOORDINATOR(コーディネーター)となるXBeeが必要です。(2つ以上あってはいけません)
もっとも、自宅で実験する分にはご近所にXBee大好きな引きこもりエンジニアの方が住んでいない限り、そうそうPAN IDが競合することはないでしょう(笑)
(社内や学内でのデモや、展示会・学会などで使用する場合にはご注意くださいね)

そして、同じPAN IDを持つ他のXBeeは、ROUTER(ルーター)END DEVICE(エンドデバイス)のどちらかになります。
これはどちらを選択してもかまいませんが、ルーターにはエンドデバイスとしての機能もあるので、ルーターを選択しておけば間違いありません。(ただし、ルーターでは省電力モードに入ることが出来ません)

ですので、例えば1:1の通信を行いたいのであれば、片方のXBeeをコーディネーターに、もう片方をルーターに設定しておけばOKです。

(3)ここまでのまとめ
さて、一度ここまでをまとめてみましょう。
XBeeの設定には、以下のパラメータが存在します。

<1>通信モード
 ・ATモード
 ・APIモード

<2>役割
 ・COORDINATOR(コーディネーター)
 ・ROUTER(ルーター)
 ・END DEVICE(エンド デバイス)

ですので、例えば2つのXBeeをAPIモードで通信したかったら
XBee1:APIモードのコーディネーター
XBee2:APIモードのルーター
のように設定します。

はい!

以上で、前半戦は終了です。

お疲れ様でした!!

なお、XBeeの使い方は、トランジスタ技術12月号にかなり詳しく書かれています。
今回の記事も、ずいぶん本書の内容を参考にさせていただきました。
擬似的なI2CでXBeeとセンサーを繋いで、APIモードで操作する内容が書かれています。
ハードウェア含めてしっかりした知識を得たい方には、とても参考になると思います。



参考書としては、こちらの書籍も有用です。
ボリュームもあって、とても参考になりますよ!
ArduinoでサクっとXBeeを動かしたい人から、APIモードでガシガシXBeeを動かしたい人まで、多くの人にオススメしたい一冊です!
(もちろん、反ArduinoなPICマイコン派の人でも大丈夫ですよ笑)



それでは、第2回をお楽しみに!
XBeeの使い方(ZBタイプ) 超入門編 第2回!(設定編)

最後までお読みいただいて、ありがとうございました!!(感謝)
関連記事
こんばんは!
最近、仕事が不安で不安で夜しか眠れないゆってぃです!

前回のブログで書いた電子部品が、数日前に届きました。
購入したPIC16F648Aはシリアル通信機能を持っているので、早速XBeeと繋いで、PCと無線通信してみました。

因みにPIC16F648Aは駆動電圧が3.0V~なので、3.3Vを与えてあげれば、UART通信も3.3V系で行うことが出来、XBeeモジュールとの間にレベルシフターをかます必要はありません。
ただし、プログラム書き込み時は4.5V以上を与えなければなりません。
また、Brown-out Resetを使用する場合は、4.0V以下では(基本的に)リセット解除されないので、3.3V駆動を行いたいときはBORENをオフにする必要があります。

さて、例のごとく、マイコン側から一方的に文字列を投げるだけのテストを行いました。
やはり、ものすごく簡単にPCと無線通信が出来てしまいました。。。

PICで無線通信1

FM3でやったことと全く同じなので、そりゃあ上手くいきますよね(笑)
とはいうものの…こんなに簡単に無線通信できちゃうなら、やっぱり組み込みエンジニアなんていらなry

いかんいかん!
余計不安になって、ますます夜しか眠れなくなってしまう!

次のステップとして、今度は受信部分を作ります。
といっても、こっちも基本的にFM3の時と同じですが…(汗)

そのときはソースも公開しますね!

最後までお読みいただいて、ありがとうございました!
関連記事
こんばんは!
秋月で思いっきり買い物してしまったゆってぃです!

トラ技読んでたらXBeeがもっと沢山欲しくなっちゃって…追加でZBタイプを2個買っちゃいました。
それだけならよかったのですが…

XBee買うなら変換ボードが必要だし
変換ボードくっつけるユニバーサル基板が必要だし
どうせ買うならXBeeに繋げるセンサーも欲しいし
でも、せっかくならPICで簡単な制御もしたいし
となるとUART積んでるPIC16F648Aあたりになって
このマイコンはPWM積んでるからブザーも欲しいな!
おっと、ICソケットも必要だ!
ついでに、自作のPIC書き込みボードも古くなってきたし、いっそ買っちゃうか!

で、最終的にはジャスト1万くらい買い物をしてしまいました…(大バカ)

あああああバカ!!!

もうすぐクリスマスだというのに、自分へのクリスマスプレゼントが電子部品一式ですよ!
そりゃあ結婚できないわけだ!
クルマ買ったばっかりで節約しなくちゃいけないのに…。

そうそう、買ったFIT(ファインスタイルという特別仕様車)が届いて約半月が経ちました。
小さいクルマだと思っていましたが、車内は思ったよりも広く、とても快適です。
また、後部座席を倒せば、とても沢山の荷物を積むことが出来ます。
コンパクトカーを舐めてましたね…・

居住性だけでなく、肝心の操作性もGOODですよ!
小回りが利くので、細い道でもスイスイ入れます!
また、狭い場所への駐車もカンタンにできちゃう!
売れている理由がわかりました(笑)

ガソリン車のCVTですが、街乗りでの燃費は13km~14km程度。
個人的にはまずまずだと思っています。

今まではそんなに運転が好きなほうではなかったのですが、最近は仕事後のドライブが楽しみになりました(笑)

そうそう。
オプションでボディコーティングをしたのですが、これ、かなり良いです。
水洗いだけですごくキレイになります。
初期投資はかかりますが、5年保障ですし、個人的にはオススメですね!

さて、今日は雑談ばっかりになってしまいましたが、電子部品が届いたらまたPICの記事を書きますね。
そのときは、MPLAB Xのことも書かないとですね(笑)

最後までお読みいただいて、ありがとうございました!
関連記事
ご訪問者様
プロフィール

ゆってぃ

Author:ゆってぃ
経歴7年の組み込み系・制御系エンジニアです。
("ど素人"という文言は取りました…笑)
ソフトウェア開発経験ゼロの状態から、なんとか実務がこなせるようになってきた現在に至るまでの経験を、備忘録代わりに綴っていきたいと思います。
入門者の方、大歓迎!
(上級者の方、ごめんなさい…)

あと、ブログには全然関係ないですが、Bumpy Headというバンドのギターをやっています。
ライブ情報なんかも書いたりすることがあるので、その時に「行ってもいいよ~」といった感じのコメントを戴けると、泣いて喜びます(泣)
ブログ読んでくださってる方なら、チケット代サービスしちゃいます!

最後に…滅多に流用することは無いでしょうが、このブログに書かれているソースは、特に指定の無い限りMITライセンスとします。ただし、一部それ以外のものもございますのでご注意下さい。
※ブログのリンク先にあるコードに関しては、リンク先のポリシーに従ってください。

最新記事
最新コメント
カテゴリ
RSSリンクの表示
メールフォーム

名前:
メール:
件名:
本文:

twitter
リンク
ブロとも申請フォーム
スポンサードリンク