2018年8月15日水曜日

NUCLEO-F303K8の電源構成がぎんなんすぎる現象について述べたいと思う。


お久しぶりです、ねじねじだよ。

USB電源を利用してNUCLEO-F303K8ボードを使用する場合、なにも考えずにUSBとNUCLEO-F303K8を接続すれば、mbedとして認識できする。さらに、5.0Vと3.3Vピンは電源を供給してくれる。これにより、消費電流の少ない簡単な構成のでS/WバックとH/Wは容易に作れる。https://os.mbed.com/platforms/ST-Nucleo-F303K8/

しかし、外部電源で使用したい場合、NUCLEO-F303K8に電源に関していろいろ調べることになるだろう。
https://www.st.com/ja/evaluation-tools/nucleo-f303k8.html
HWに関しては”UM1956: STM32 Nucleo-32 board”を見ることになるだろう。

下記は、”UM1956 DocID028406 Rev 3”を機械的に訳してみた。

6.4 Power supply and power selection


6.4.1 Power supply input from USB connector

6.4.2 External power supply inputs
STM32 Nucleo-32ボードとそのシールドボードは、使用する電圧に応じて、外部電源と3種類の方法で電力を供給できます。 3つの電源は、表4に要約されています。

6.4.3 External power supply output
 USBまたはVIN電源の場合、+ 5V(CN4ピン4)はArduino Nanoシールドの出力電源として使用できます。
 この場合、表4:外部電源に規定されている電源の最大電流を尊重する必要があります。
+ 3.3V(CN4ピン14)は、電源出力としても使用できます。 電流はレギュレータU3の最大電流能力によって制限されます(最大500mA)。

2018年1月13日土曜日

動的にサイトを動作させたいと思って [JavaScript]

どうも、ねじねじだよ。

<はじめに>
ブラウザでポチポチは、楽しいと思わないか?
htmlをもっと活用したと思った。

<目的>
JavaScriptとjQueryを理解する方法をまとめたいと思う。

<内容>
おおざっぱに理解するために、dotinstallを利用してみた。
ユーザー登録は必要だがお金はかからないし、短編で構成しているので、暇なときにみるとよいと思う。

●JavaScript
  https://dotinstall.com/lessons/basic_javascript_v2
[感想]
    文法はC言語と同じだ、わかりやすい。 ある程度htmlやCSSが分からないと動画を見てもさっぱりだと思う。classやid が分かればよいと思う。
肝心なJavaScriptの用語が理解できていないので、動画をみても理解できなかった。
何回か見て、わからない単語をググってみるとよいかと思う。JavaScriptを楽に書けないかなぁ?って気づくと思う。

●jQuery
  https://dotinstall.com/lessons/basic_jquery_v2
[感想]
 JavaScriptを簡単に扱うためのライブラリであるjQueryを利用すると簡単に楽しいwebサイトができると思う。


以上 ねじねじの作文でした。

 
  



  

2017年9月23日土曜日

FM・AMラジオモジュールのSi4730を動作させてみた 

おひさしぶりです。 ねじねじだよ。

~はじめに~
aitendoの"Si4730-M"を使用して、si4730を動かしてみました。
si4730とは、Silicon Labs社のラジオICです。

~苦労したこと~
"Si4730-M"の足はんだ付けのPIN距離が独自?であるので、
  ブレットボードに組み付けつ際、はんだ付けがめんどくさい。
・I2Cのアドレスがわからなかったこと。 
 →aitendoに添付しているデータシートに記載がない?。
・動作シーケンスを理解するに、データシートを2日読んでいた。

~これから~
・read Statusのチェック処理などをインプリする。
・ハードウェアより周波数を変更できるようにする。
・SNRやRSSIをモニターできるようにする。
・AMラジオが聞けるようにする。

~参考サイト~
シリコンラボのSi4730 のサイト
・si4730 pdf ハードウェアのデータシート
・AN332 pdf   Si47xx Programming Guide 

~作業中の写真




~回路図~
RESETとI2Cの2本、電源3.3VとGNDをmbedから配線している。
I2Cには、プルアップ抵抗を入れている。


~美味しいソース
ソースでわかると思うけど、I2Cマスターはmbed です。
とりあえず、動作する(音がなる)プログラムです。周波数変更は、ソース変更が必要です。
無駄があったりやコメントがおかしいことろがあるかと思いますが、ねじねじだよ。
=======================================
#include "mbed.h"

DigitalOut myled(LED1);

DigitalOut RST_L(p20);
I2C si4730_i2c(p9, p10);
const int addr = 0xc6; // define the I2C Address 0xc6
Serial pc(USBTX, USBRX); // tx, rx

int main() {
    pc.printf("\n\nstart\n");
    
    //RESET
    RST_L = 1;
    wait_ms(200);
    RST_L = 0;
    wait_ms(1);
    RST_L = 1;


    char cmd[6];
    char buff[16];

    //Powerup in Analog Mode
    pc.printf("\npowerup in Analog Mode\n");

    cmd[0] = 0x01;
    cmd[1] = 0x10;//1xxx1xxxx
    cmd[2] = 0x05;//00000101 = Analog audio outputs (LOUT/ROUT).
    si4730_i2c.write(addr, cmd , 3);
    wait_ms(100);//wait
    si4730_i2c.read(addr, buff, 16);    
    pc.printf("ST  R1  R2  R3  R4  R5  R6  R7  R8  R9  R10 R11 R12 R13 R14 R15 \n");
    for(int i=0; i<=15 ;i++){     
    pc.printf("%02x  ",buff[i]);
    }
    pc.printf("\n\n");
    

    //GET_REV
    pc.printf("GENT_REV\n");
    cmd[0] = 0x10;
    si4730_i2c.write(addr, cmd , 1);
    si4730_i2c.read(addr, buff, 16); 
    
    pc.printf("ST  R1  R2  R3  R4  R5  R6  R7  R8  R9  R10 R11 R12 R13 R14 R15 \n");
    for(int i=0; i<=15 ;i++){     
    pc.printf("%02x  ",buff[i]);
    }
    pc.printf("\n\n");
     
         
    //FM_TUNE_FREQ
    pc.printf("FM_TUNE_FREQ\n");
    cmd[0] = 0x20;
    cmd[1] = 0x00;
    cmd[2] = 0x1E;//79.3MHz 0x1EFA 
    cmd[3] = 0x50;
    cmd[4] = 0x00;
    si4730_i2c.write(addr, cmd , 5);
    si4730_i2c.read(addr, buff, 16); 
    wait(1);//wait???
    pc.printf("ST  R1  R2  R3  R4  R5  R6  R7  R8  R9  R10 R11 R12 R13 R14 R15 \n");
    for(int i=0; i<=15 ;i++){     
    pc.printf("%02x  ",buff[i]);
    }
    pc.printf("\n\n");
    
    //read 確認
    si4730_i2c.read(addr, buff, 16); 
    wait(5);//wait???
    pc.printf("ST  R1  R2  R3  R4  R5  R6  R7  R8  R9  R10 R11 R12 R13 R14 R15 \n");
    for(int i=0; i<=15 ;i++){     
    pc.printf("%02x  ",buff[i]);
    }
    pc.printf("\n\n");
    
    
    
    
    //GET_INT_STATUS
    pc.printf("GET_INT_STATUS\n");
    cmd[0] = 0x14;
    si4730_i2c.write(addr, cmd , 1);
    si4730_i2c.read(addr, buff, 16); 
    
    pc.printf("ST  R1  R2  R3  R4  R5  R6  R7  R8  R9  R10 R11 R12 R13 R14 R15 \n");
    for(int i=0; i<=15 ;i++){     
    pc.printf("%02x  ",buff[i]);
    }
    pc.printf("\n\n");
    
    
    
    //FM_TUNE_STATUS
    pc.printf("FM_TUNE_STATUS\n");
    cmd[0] = 0x22;
    cmd[1] = 0x01;
    si4730_i2c.write(addr, cmd , 1);
    si4730_i2c.read(addr, buff, 16); 
    
    pc.printf("ST  R1  R2  R3  R4  R5  R6  R7  R8  R9  R10 R11 R12 R13 R14 R15 \n");
    for(int i=0; i<=15 ;i++){     
    pc.printf("%02x  ",buff[i]);
    }
    pc.printf("\n\n");
    
      
    
    //SET_PROPERTY RX_VOLUME
    pc.printf("SET_PROPERTY RX_VOLUME\n");
    cmd[0] = 0x12;
    cmd[1] = 0x00;
    cmd[2] = 0x40;
    cmd[3] = 0x00;
    cmd[4] = 0x00;
    cmd[5] = 0x30;//MAX:0x3F-MIN:0x00
    si4730_i2c.write(addr, cmd , 6);
    si4730_i2c.read(addr, buff, 16); 
    
    pc.printf("ST  R1  R2  R3  R4  R5  R6  R7  R8  R9  R10 R11 R12 R13 R14 R15 \n");
    for(int i=0; i<=15 ;i++){     
    pc.printf("%02x  ",buff[i]);
    }
    pc.printf("\n\n");
    
    
    
     /*
    //SET_PROPERTY FM_DEEMPHASIS
    pc.printf("SET_PROPERTY FM_DEEMPHASIS\n");
    cmd[0] = 0x12;
    cmd[1] = 0x00;
    cmd[2] = 0x11;
    cmd[3] = 0x00;
    cmd[4] = 0x01;
    si4730_i2c.write(addr, cmd , 5);
    si4730_i2c.read(addr, buff, 16); 
    
    pc.printf("ST  R1  R2  R3  R4  R5  R6  R7  R8  R9  R10 R11 R12 R13 R14 R15 \n");
    for(int i=0; i<=15 ;i++){     
    pc.printf("%02x  ",buff[i]);
    }
    pc.printf("\n\n");

*/
    
    pc.printf("END\n\n");
    
}

2016年1月19日火曜日

TWE‐LiteのSDKを活用して、ファームを作る上で理解しておきたいこと。[途中まで]

[はじめに]

ToCoNet のコールバック関数(cbAppColdStartやcbToCoNet_vMainなど)の説明のページではありません。
下記PDFのユーティリティの説明です。
→ToCoNet_SDK_manual_201406.pdfの170ページ

[項目]

とりあえず、理解しておかないとダメと思うこと一覧
-インターフェース系-
・utils (IOコントロール・ステータス)
・UARTコントロール
・I2C
・SPI
-ワイヤレス系-
・受信
・送信


[utils (IOコントロール・ステータス)]

・ポートの入出力設定
vPortAsOutput(DO4);
vPortAsInput(DO6);

・出力状態設定
vPortSetHi(DO5);
vPortSetLo(DO5);

・ポートの状態読みだし
bPortRead(DO4);

・ポートのプルアップを停止
vPortDisablepullup(DO4);
※ADCするときに解除する

*プログラム例*
-状態をに従って、ポートをHかLか出力する。
・例1
    // DI1: Lo -> DO4: Hi,  DI1: Hi -> DO4: Lo
    vPortSet_TrueAsLo(DO4, !bPortRead(DI1));
 
・例2
  // DI1: Lo -> DO4: Hi,  DI1: Hi -> DO4: Lo
    if( bPortRead(DI1)){
    vPortSetHi(DO4);
    }else{
    vPortSetLo(DO4);
    }

*参考先*
ToCoNet_SDK_manual_201406.pdfの176ページ

[UARTコントロール]



・表示例
vfPrintf(&sUartStream, "HELLO WORLD!\r\n");


*参考先*
http://dsas.blog.klab.org/archives/52201101.html
   →Test03: シリアル経由でデバッグメッセージを出力
http://mono-wireless.com/jp/tech/Programming/PERIPH_UART.html


[I2C]

<追記予定>

[SPI]

<追記予定>

[受信]

<追記予定>

[送信]

<追記予定>

2016年1月12日火曜日

IEEE802.15.4のパケットを覗いてみた[パケットスニファ・アナライザ] モノワイヤレス

to:各位
cc:忘却しているねじねじ

お疲れさまです。
ねじねじです。

TWE-Liteは、IEEE802.15.4の仕様です。
これからファームを作成する予定にしているが、無線部分のファームを作成するとき、デバッグが必要になる。送信,受信両方ファーム作成してデバッグを進めることは難しい。そのため、送信パケットの中身をモニターしたい。

今回、モノワイヤレス公式のパケットスニファ・アナライザを利用して中身を覗いてみた。

http://mono-wireless.com/jp/tech/sniffer.html
基本的には、上記URLの通りPCの設定をすればよかった。
自分の環境は、すでに"ToCoNet SDK”を導入していたのでインストールのみでよかった。
"ToCoNet SDK”:http://mono-wireless.com/jp/products/ToCoNet/TWESDK.html

つまずいた点

・1点目
”Jennic Sniffer Server (JSniffer) の起動”だ。
→”C:\Jennic\Tools\Wireshark\Sniffer_Server にある SnifferServer.exe を起動します”と記載ある。
"ToCoNet SDK”環境では、C:\TWESDK\Tools\Sniffer\Sniffer_ServerのSnifferServer.exeにある。

・2点目
”超簡単!TWE標準アプリ”の初期値は18チャンネルになっている。


起動してみた結果

こんな感じにモニターできました。



中身こんな感じになっているみたいです。
まだ、あまりプロトコルに詳しくないですが・・・間違ってるかも。




IEEE802.15.4パケット構造の説明
http://mono-wireless.com/jp/tech/802_15_4dataframe.html

データの中身の説明

http://mono-wireless.com/jp/products/TWE-Lite-DIP/TWE-Lite-DIP-step3-81.html

最後に

これで、無線部分のファームのデバッグが出来そうです。


以上です。

2016年1月11日月曜日

TWE-Liteの通信距離はどれくらい?

to:各位
cc:忘却しているねじねじ

お疲れさまです。
ねじねじです。


1   はじめに

無線モジュールであるTWE-Liteの無線伝送距離は、キー要素だ。
公式webサイトでは、1km届いたと記載ある。
http://mono-wireless.com/jp/products/TWE-Lite-DIP/range.html


2. 目的

距離vs電波強度の観測

3. 実験

3.1 準備

■受信側


ハード:PCにToCoStickを挿入
ファーム:"超簡単!TWEアプリ"
電波強度:観測のため”ToCoStick 標準アプリケーション” のLQIをプロット


■送信側

ハード:TWE-Lite-DIP-UFL
ファーム:"超簡単!TWEアプリ"
電圧:不明

3.2 方法

送信側は、大堀公園の0地点に設置。アンテナの向きは島の方向に向けた。水面から1.5メートル?の植木に置いた。

受信側は、島の北(上)方向へ歩き、電波強度の観測した。受信アンテナは水面から2m?ぐらい。
※距離はグーグルマップより算出


4. 結果

下記に示しているグラフとなった。255m付近で完全に受信しなくなった。


※PdBm換算方法
詳しくは、http://mono-wireless.com/jp/products/TWE-Lite-USB/monitor.html 参照


5. 考察

受信デバイスの高さやアンテナ方向に次第で、電波の質・パケットが受信可能かどうかが大きく変わった。172m、207m地点では、パケットが受信しないこともあった。



6. むすび

今回使用した、TWE-Liteはプログラムやハード検証用で購入したためアンテナ内臓型を購入した。
次回、外部アンテナを使用できるTWE-Lite(TWE-001L-DIC-SMAなど)で検証する。
また、ソフトウェアに関しては、”IEEE802.15.4/ZigBee測定ツール”がある。
http://mono-wireless.com/jp/tech/measurement_tool.html
パケットエラー測定ツールすることで、詳細な確認できるだろう。


以上

2016年1月6日水曜日

TWE-LiteをAVRやPICみたいなマイコンぽく使うには?

to:各位
cc:忘却しているねじねじ

お疲れさまです。
ねじねじです


以前から、わくわくしているデバイスの紹介?です。

それは、モノワイヤレス株式会社から販売されているTWE-Liteです。IoT製品かなぁ?
>モノワイヤレス株式会社:http://mono-wireless.com/jp/index.html

モノワイヤレス株式会社は、ポテンショメーターで有名な東京コスモス電機株式会社から分離して独立した会社です。


TWE-Liteとは?

『TWE-Lite DIP (DIPタイプ)』は、ブレットボードや基板に実装しやすく『TWE-Lite (SMDタイプ)』をDIPの形にしたものです。
そのため、ピン番号が違うけど開発環境は同じです。

TWE-Liteは、数種類のファームが用意されていて、容易に書き換えが可能です。
>数種類のファーム説明:http://mono-wireless.com/jp/products/TWE-ZERO/index.html

”超簡単!TWEアプリ”は、『TWE-Lite DIP (DIPタイプ)』に最初からダウンロードされていてとても便利です。
”超簡単!TWEアプリ”の説明は、WEBに情報が豊富なので、ググって下さい。


TWE-Liteのファームを作ってみる。本題だよ!

TWE-Liteのファームは、”ToCoNet SDK”で作るよ。

公式のwebページにいろいろ書かれているけど、結論的には下記のPDFを読むことが一番早く理解できる。

僕は、ToCoNet_SDK_manuaのPDF読んで理解出来ず・・・・

TWE-Liteは、無線デバイスであり、小さなマイコンでもある。
マイコンと言えば、Hello Worldの「Lチカ」をするよ。

「Lチカ」するよ。

ググったら、とってもいいサイト見つけた。 ありがとう。
http://dsas.blog.klab.org/archives/52201101.htmlの”Test01: LED を点滅させる”のソースをコピペしたら、LEDがピコピコした。


開発環境を整える

大変なことは、開発環境整えることだ。
  今のところPCはwin7を使用している。今度、win10でコンパイルできることを確かめる★AI

開発環境からデバイスに書き込むまでを示す。(Eclipse,TWE-programme使用)

1.”ToCoNet_SDK マニュアル”に従って設定する。
2.”SDK 全部入り (582MiB, ZIP)”をダウンロードして、Cドライブ直下で解凍する。ページ12
3.プロジェクトを選択する。例App_Tweliteなどのファイルを開き、ソースの.cまで選択
4.ビルド設定。メニューバーより[プロジェクト]→[構成のビルド]→[アクティブにする] or 現在のプロジェクトの構成管理の▼よりアクティブにする。 アクティブは、 "TWE-Lite Devkit"を指定。
5.中間ファイルをクリーンする。メニューバーより[プロジェクト]→[クリーン] 実行するプロジェクトを選択する。最後に”OK”を押す  ページ19
6.ビルドアイコンの金槌を押す ページ20
7.ビルドの完了 コンソールで、エラーないことを確認する。
8.ビルドディレクトリを確認 C:\TWESDK\Wks_ToCoNet\プロジェクト名\Master\Build のxxx.bin
9.TWE-programmerを用い書き込み C:\TWESDK\Tools\TWE-Programmerを起動して、デバイスの電源を入れポートをスキャンして、書き込み ページ51

考察

プログラミンの方法がちょっと違う。それは、イベントに応じた関数が呼び出し処理を実行する点だ。PICやAVRみたいに上から順に実行されない。
これから、イベント(コールバック関数)なるものを理解してく。

以上です。