しばらく前、安価な(6ドルから)統合マイクロコントローラーを搭載したnRF24LE1無線モジュールがハブで言及されました。これらの無線モジュールについて、 COOLRFのメンバーはプロジェクトを実行する予定でしたが、最終的にはより高価なAtmega128RFA1チップに移行し、私が理解すると、彼らはバックグラウンドに追いやられました。
この記事では、Raspberry PIとUSBaspを介して無線モジュールをフラッシュする可能性と、いくつかのCコードの例を検討します。
nRF24LE1の説明
チップ本体には、QFN24(4×4 mm)、QFN32(5×5 mm)、QFN48(7×7 mm)の3つのオプションがあります。 また、各オプションのI2C、UART、SPIの周辺機器は、異なる結論に基づいています(データシートの131ページを参照)。 ここでは、QFN32バリアントについて検討し、技術仕様が適用されます。
無線送信部分は、nRF24L01 +の「ブレインレス」バージョンに完全に類似しています。
2.4 GHz、125チャネル。 サポートされる速度は250kbps、1Mbps、2Mbpsなどです。
組み込みの8051互換マイクロコントローラーには、次のパラメーターがあります。
- クロック周波数は16 MHzで、リアルタイムで周波数を制御(125 kHzに低減)できます。
- 16kbプログラムで使用可能なフラッシュメモリ。
- RAM(RAM)メモリ1 kb。
- 1 kb NVRAM(EEPROMメモリ)
- 7ピンは6..12ビットADCをサポートします。
- 2つの8ビットPWM(PWM)出力。
- また、インターフェイスもあります:I2C、UART、SPI。
- 電源電圧1.9V ... 3.6V。
- スレーブSPIを介したプログラミング。
Raspberry PIを介したNRF24LE1プログラミング
「ネイティブ」プログラマーを介してnRF24LE1をフラッシュすることは可能ですが、比較的高価です-Ebayで約30ドル。 もちろん、私は価格が気に入らず、インターネット上で、Raspberry PI github.com/derekstavis/nrf24le1-libbcm2835に基づくプログラマーのバリアントが見つかりました。 プログラマーのソースコードはわずかに変更され、ロシア語化されました。ポルトガル語から翻訳する必要がありました。 変更されたバージョンは、記事の最後にあるリンクからダウンロードできます。
無線モジュールをプログラムするには、表に従ってSPIピンを接続する必要があります。
PROGピンnRF24LE1は、Raspberry PIの24 GPIOピンに接続する必要があります。 FCSNをCE0(ピン8)と同様に接続し、リセットをプラスに締めます。 GNDをマイナスに、VDDを+ 3.3vに接続することを忘れないでください。
無線モジュールの出力用のナンバリングカードは異なる場合があります(マイクロサーキットとプリント基板の配線のケースが異なるため)。通常、この情報はnRF24LE1自体が販売されている同じ場所で見つけることができます。たとえば、Ebayで購入する場合、ナンバリングカードは製品ページに表示されます。
ファームウェアをアップロードするには、次のコマンドを使用してコンパイル済みプログラムnrf24le1を使用します。
- ./nrf24le1 test-テスト情報nRF24LE1(InfoPage)を表示します。
- ./nrf24le1 write-nRF24LE1の同じフォルダーにあるmain.binファイルをフラッシュします。
- ./nrf24le1 read-main-dump.binという名前でnRF24LE1からファームウェアダンプを作成します。
USBaspを介したNRF24LE1プログラミング
Raspberry PIを介してファームウェアオプションを検討した後、AVRマイクロコントローラーをプログラミングし、USBaspプログラマーで武装したユーザーが実装できる、よりシンプルなバージョンが開発されました。 nRF24L01-USBを含むいくつかの異なるデバイスを実装したこのプログラマーについては 、先ほど触れました 。
Raspberry PIのプログラマーのソースコードがこのアイデアに使用されました。 また、USBaspは、V-USBライブラリを使用してUSB-SPIアダプターに再プログラムされます。
USBaspベースのプログラマーは比較的遅い-すべてのファームウェアは16kbです。 12秒で「注がれ」ますが、これは価格によって相殺されます。このプログラマーの価格は30ドルではなく3ドルです。
10ピンコネクタの番号に従って、次の順序でnRF24LE1をUSBaspに接続します。
ところで、nRF24LE1ピンが5ボルトに耐性があるかどうか、およびnRF24LE1とUSBaspの間のレベルを一致させるために抵抗分割器が必要かどうかは不明です。 その結果、仕切りを使用せず、マイナスの影響もありませんでした-また、仕切りを設定することはできませんが、あなた自身の危険とリスクがあります。 たとえば、nRF24L01 +端子は耐性があり、5ボルトのマイクロコントローラーに接続できます。
すべてのプログラミング手順は、Raspberry PIを介したプログラミングに似ています。
最初のプログラムはnRF24LE1で作成します
プログラムを作成するために、無料のクロスプラットフォームSDCCコンパイラsdcc.sourceforge.netを使用しました 。
nRF24LE1には、マイクロコントローラーを操作するための基本的な機能が記述されたSDKがありますが、このSDKは私によってチェックおよび修正されています。 いくつかのソースからコンパイルされます。
LEDの点滅の例を次に示します
#include <stdint.h> #include <stdio.h> // SDK: #include "src/gpio/src/gpio_pin_configure.c" #include "src/gpio/src/gpio_pin_val_clear.c" #include "src/gpio/src/gpio_pin_val_set.c" #include "delay.h" #include "src/delay/src/delay_us.c" #include "src/delay/src/delay_s.c" #include "src/delay/src/delay_ms.c" void main() { // P0_0 gpio_pin_configure(GPIO_PIN_ID_P0_0, // GPIO_PIN_CONFIG_OPTION_DIR_OUTPUT | GPIO_PIN_CONFIG_OPTION_OUTPUT_VAL_CLEAR | GPIO_PIN_CONFIG_OPTION_PIN_MODE_OUTPUT_BUFFER_NORMAL_DRIVE_STRENGTH); while(1) { gpio_pin_val_set(GPIO_PIN_ID_P0_0); // 1 delay_ms(500); gpio_pin_val_clear(GPIO_PIN_ID_P0_0); // 0 delay_ms(500); } }
PWMピンを使用したLEDのスムーズな点火の例
#include <stdio.h> // SDK: #include "delay.h" #include "src/delay/src/delay_us.c" #include "src/delay/src/delay_s.c" #include "src/delay/src/delay_ms.c" #include "src/pwm/src/pwm_configure.c" #include "src/pwm/src/pwm_start.c" void main() { int i=0; // 10 , 8 pwm_configure(PWM_CONFIG_OPTION_PRESCALER_VAL_10 || PWM_CONFIG_OPTION_WIDTH_8_BITS); //main program loop while(1) { pwm_start(PWM_CHANNEL_0,i); i++; delay_ms(200); if (i>255) i=0; } }
現時点では、nRF24L01-USBを使用した作業の例を完了しています。 すでにDHT22センサーの読み取りと無線による負荷管理を実装しています。 将来的には、Arduino RF24ライブラリのおおよその類似物を作成する予定です。いくつかの機能を完了する必要があります。
一般に、AVRマイクロコントローラーでプログラミングした後、nRF24LE1のプログラミングは少し複雑に思えました。
UPD:コンパイラーが16進ファイルを作成し、プログラマーがバイナリーを必要とすることを忘れていました。 ファイルを変換するには、 hex2binユーティリティを使用できます。 hex2bin -p 00 main.ihxコマンドをメイクファイルに書き込むことができます。
nRF24LE1プログラミング用にどのような即興の鉄片を再作成できますか?
Cubieboardなど、同様のRaspberry PIミニコンピューターで対応します。
Arduinoにプログラマーを実装できます。 おそらくこのオプションを扱うでしょう。
ハードウェアUSBサポートを備えたマイクロコントローラー(STM-kiなど)。
ソースコードと例:
Raspberry PIプログラマー
USBaspプログラマー (5.02.14に更新)
SDK
led_delay
Datashit
たぶん私は何かを逃し、質問があった-コメントに書いてください。