برق، الکترونیک، الکتروتکنیک، مکاترونیک، پزشکی، کشاورزی

برق، الکترونیک، الکتروتکنیک، مکاترونیک، پزشکی، کشاورزی و

برق، الکترونیک، الکتروتکنیک، مکاترونیک، پزشکی، کشاورزی

برق، الکترونیک، الکتروتکنیک، مکاترونیک، پزشکی، کشاورزی و

داده هایی در مورد برق، الکترونیک، الکتروتکنیک، مکاترونیک، پزشکی، کشاورزی و

تبلیغات
آخرین نظرات

۲ مطلب با کلمه‌ی کلیدی «Arduino» ثبت شده است

بوت لودر ATmega8 در Arduino

ShahBaz | شنبه, ۲۵ مهر ۱۳۹۴، ۰۸:۲۸ ب.ظ

ATmega8 bootloader in arduino

بوت لودر ATmega8 در Arduino

به همره قسمت خطایابی در انتهای همین مطلب

به نام خدا

همان طور که می دانید در بردهای Arduino برد Atmega8 وجود ندارد ولی این امکان وجود دارد با نوشتن یک بوت لودر در ATmega8 به راحتی با این میکروکنترلر در Arduino برنامه نویسی کرد. حالا من آموزش کاملی رو واستون می ذارم.

ابتدا مواد لازم:

۱. Arduino ورژن ۱٫۰٫۵ (من با این ورژن تست زدم ولی احتمالا بالاتر هم جواب بده)

۲.ATmega8A-PU (نگران نباشید با دیگر سری ها هم جواب می دهد ولی واسه شروع از این استفاده کنید که شک یا شبه ایی پیش نیاد)

۳. دو/۲ عدد برد Arduino Uno (اول به این شکل انجام بدید تا حساب کار دستتون بیاد بعد برید روی Breadboard)

http://www.4shared.com/rar/GMfMPXrkce/ATmegaBOOT-prod-firmware-2009-.html

اول از هر کاری به مسیر hardware/arduino/bootloaders/atmega8 بروید سپس بررسی کنید فایل ATmegaBOOT-prod-firmware-2009-11-07.hex در فولدر جاری باشد اگر نبود فایل رو از لینک بالا دانلود کنید و در مسیر فوق کپی کنید و بعد از حالت فشرده خارج کنید.

سپس در لینک زیر فایل فشرده رو دانلود کنید سپس از حالت فشرده خارج کنید و دو تا فایل pins_arduino.h و pins_arduino.c رو در مسیر hardware/arduino/cores/arduino کپی کنید.

http://www.4shared.com/rar/MnaI7s-Eba/pins_arduino.html

خوب حالا می رویم سراغ سخت افزار ها. دو عدد برد Arduino Uno یکی رو اول به کامپیوتر وصل کنید و سپس Arduino رو اجرا کنید و مطابق عکس برد Arduino Uno رو انتخاب کنید و بعد پورت سریال رو هم انتخاب کنید.

bootloader (1)

حالا مطابق عکس پایین در نوار ابزار بر روی File کلیک کنید و سپس در Examples بر روی ArduinoISP کلیک کنید حالا برنامه رو Upload کنید.

bootloader (2)

الان Bootloader Burner آماده است. خوب حالا برد Arduino Uno بعدی رو باید میکروکنترلر ATmeag328P رو از روش بردارین و یک ATmega8 جایگزین کنید.نگران نباشد چون ترتیب پایه های ATmega328P و ATmega8 دقیقا مثل هم هستند. بعد از انجام این کار دقیقا مطابق عکس پایین اتصالات رو برقرار می کنید.اما قبل به مسیر Arduino/hardware/arduino برید و  فایل boards.txt باز کنید. دنبال Arduino NG or older w/ ATmega8 بگردید حالا باید فیوز بیت های میکرو رو نتظیم کنید دو تا خط مثل زیر واسه میکرو تعریف شده

atmega8.bootloader.low_fuses=0xdf
atmega8.bootloader.high_fuses=0xca
بایت کم ارزش روی df و پر ارزش روی ca تنظیم کنید از آدرس Engbedded AVR Fuse Calculator هم می توانید استفاده کنید.

bootloader (3)


Bootloader Burner                            Arduino Uno With ATmega8

۵V+ ========================> +5V

GND ========================> GND

SCK =========================> SCK  پایه 13

MISO ========================> MISO  پایه 12

MOSI ========================> MOSI  پایه 11

SS ========================> Reset  پایه 10


*پایه Reset در بخش پاور برد آردوینو قبل از پایه 3.3 ولت هست.



خوب حالا بعد از اتصالات می ریم سراغ نوشتن بوت لودر. ابتدا کابل USB رو به بردی که به عنوان Bootloader Burner آماده کردیم متصل می کنیم و مطابق عکس پایین Programmer رو بر روی Arduino as ISP قرار می دهیم.

bootloader (4)

و بعد مطابق عکس پایین برد Arduino NG or order w/ATmega8 رو انخاب می کنیم و بعد در نوار ابزار بر روی Tools کلیک کنید و بروی Burn Bootloader کلیک کنید. LED های TX و RX بر بروی برد Arduino Uno که به عنوان Bootloader Burner آماده شده روشن می شوند و خاموش می شوند و بعد از زمان خیلی کوتاه دوباره روشن می شوند و عملیات نوشتن Bootloader آغاز می شود. و با پیغام تکمیل شدن نوشتن بوت لودر توسط کامپایلر به پایان می رسد.

bootloader (5)

حالا کابل USB رو به بردی که ATmeag8 رو جایگزین کردید متصل کنید و بعد پروژه چراغ چشمک زن رو Upload کنید و لذت ببرید.



خطاها:

سلام
من طبق کارهای شما پیش رفتم ولی موقع پروگرام کردن خطای

“efuse” memory type not defined for part “ATMEGA8″
میده
مشکل از چیه؟
در ضمن من از نسخه ۱٫۵٫۶ اردوینو استفاده میکنم.
با تشکر

-----------------------------------------------------------------------------------------------------------

سلام دوباره
من اردوینو ۱٫۰۵ رو نصب کردم اما اینبار خطای

core.a(main.cpp.o): In function main':C:\Program Files\Arduino\hardware\arduino\cores\arduino/main.cpp:11: undefined reference to setup’
C:\Program Files\Arduino\hardware\arduino\cores\arduino/main.cpp:14: undefined reference to `loop’

رو میده…


پاسخ:

باید در نوار ابزار بر روی Tools کلیک کنید و بروی Burn Bootloader کلیک کنید. احتمالا شما روی Upload کلیک کرده اید.

-----------------------------------------------------------------------------------------------------------


سلام مجدد؛
بعد از باز و بستن برنامه همه چیز به خوبی پیش رفت و بوت لودر آپلود شد.

فقط یه نکته و اونم اینکه بعد از اینکه برد آنو با میکرو اتمگ ۸ بوت شد از این به بعد برای ریختن برنامه داخل اون باید در قسمت “برد” به جای “اردوینو انو” باید گزینه “Arduino NG or order w/ATmega8 ” رو انتخاب کرد.

مدت زمان بوت شدن برنامه ال ای دی چشمک زن در این بردها ممکن هست نسبت به بردهای اردوینو با اتمگ 328 بیشتر باشه..مثلا شاید توی اتمگ328 بلافاصله بعد از آپلود برنامه چشمک زن ال ای دی شروع به چشمک زدن بکنه اما توی اتمگ 8 یه چند ثانیه ای تاخیر داشته باشه...که زیاد مهم نیست.


دقت شود بعد از اینکه بوت لودر داخل برد آردوینو با اتمگ 8 ریختید؛، دقت کنید که سیم های +5 و زمین و پایه ریست رو حتمن خارج کنید. و بعد برنامتون رو بریزید در غیر این صورت با خطا مواجه میشید.


با تشکر


منبع:

http://turbodigital.ir/?p=57

  • ShahBaz

ماژول انتقال بیسیم اطلاعات +nrf24l01 ( فرکانس 2.4g ) + آنتن

ShahBaz | شنبه, ۲۹ فروردين ۱۳۹۴، ۱۲:۳۵ ق.ظ

ماژول انتقال بیسیم اطلاعات +nrf24l01 ( فرکانس 2.4g ) + آنتن

ماژول فرستنده و گیرنده رادیویی +nRF24L01 از جدیدترین فرستنده و گیرنده 2.4 گیگاهرتزی شرکت Nordic Semiconductor یعنی چیپ +nRF24L01 استفاده می کند. فرکانس این آی سی برای دریافت و ارسال رادیویی اطلاعات باند 2.4 گیگاهرتز بوده و مشخصات بسیار جدیدی دارد. این آی سی تمامی مشخصات و مزایای آی سی سری قبل خود یعنی nRF24L01A را داراست. بعلاوه pipeline و بافرهای اضافی، و همچنین ارسال مجدد اتوماتیک، از قابلیتهای اضافه شده در این سری از آی سی های RF است.

توجه: در سری پلاس «+» از این آی سی ها یعنی +nRF24L01 شرکت Nordic مشخصاتی مانند برد، حساسیت و نرخ تبادل اطلاعات را نسبت به محصول سری قبل یعنی nRF24L01 ارتقاء داده است. با این حال دستورات کنترلی یا Command های این سری با سری قبل یکی بوده و تغییری نداشته است.

مشخصات:

  • آنتن 2.4 گیگاهرتز روی بورد
  • برد 100 متر
  • نرخ تبادل اطلاعات قابل تنظیم از 250 کیلوبیت تا 2 مگابیت بر ثانیه
  • Auto Acknowledge
  • Re-Transmit Auto
  • Multiceiver با 6 دیتاپایپ
  • دارای 32 بایت FIFO بصورت مجزا برای TX و RX
  • پایه های ورودی با تحمل ولتاژ 5 ولت
  • قابلیت تنظیم کانال ارتباطی از 2400 مگاهرتز تا 2525 مگاهرتز (125کانال قابل انتخاب)
  • حداقل نیاز به قطعات جانبی جهت راه اندازی
  • ترتیب پایه ها :VCC ، CE ، CSN ، SCK ، MOSI ، MISO ، IRQ


شماتیک مدار:
nrf24l01_sch.jpg

مثال آردوینو:
کد:
/*
 # Be name Khoda!
 # A Mirf example to test the latency between two Ardunio.

 # Company    : AftabRayaneh
 # Website    : http://shop.aftabrayaneh.com
 # Developers : Reza Najafi, Elham Rasekh
 # Date       : 09.09.2013
 # Version    : 3.0
 
 * Pins:
 * Hardware SPI:
 * MISO -> 12
 * MOSI -> 11
 * SCK -> 13
 *
 * Configurable:
 * CE -> 8
 * CSN -> 7
 */

#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>

const int MAX_BUFFER_LEN = 16;
String Receive_Address = "clie1"; //A name that is dedicated to this station; MAX is 5 Char.
String Send_Address = "clie2";    //A name that is dedicated to another station; MAX is 5 Char. 

String strMirfBuffer="";
byte Transfer_Lock=0;

void setup()
{  
  Serial.begin(9600); 
  Setup_Mirf(); // initializing overall needed...  
  sendData("TALK"); 
}

void loop()
{
  if (!Mirf.isSending())
     check_MirfBuffer();  
  read_SerialBuffer();
} 

//This function checks mirf data availability. if data is available, put it in the buffer and generates an event.
void check_MirfBuffer()
{
  if (Mirf.dataReady())
  { 
    while(Mirf.dataReady())
    {
      int  tmp_index=0;
      byte tmp_buffer[4]={0};
      Mirf.getData(tmp_buffer);  
      while(tmp_buffer[tmp_index] && tmp_index<4 )
      {
        strMirfBuffer = strMirfBuffer + char(tmp_buffer[tmp_index]);
        tmp_index++;
      }
      if (strMirfBuffer.length() >= MAX_BUFFER_LEN ) 
        buffer_ready();     
     
      if (!Mirf.dataReady())
        delay(2);     
    }
  }
  else if (strMirfBuffer.length()>0 )   
    buffer_ready();   
}

//This function sends a 4 byte packet
void sendPacket(char packet[5])
{   
  Mirf.send((byte *)packet);
  while(Mirf.isSending());
}

//This function sends data 
void sendData(String strData)
{
  int StrLen=0;
  String tmp_Str="";
  Serial.print("sending data: ");
  Serial.print(strData);
  Transfer_Lock=1;
  StrLen=strData.length();
  Serial.print(" : ");
  Serial.println(StrLen);
  
  //parsing the data to 4 character packets (byte *)packet
  while (StrLen>0)
  {
    char tmp_Char[5]={0};
    if(StrLen>4)
    {
      tmp_Str=strData.substring(0,4);
      strData=strData.substring(4);
    }
    else
    {
      tmp_Str=strData;
      strData="";
    }
    tmp_Str.toCharArray(tmp_Char, 5);;
    sendPacket(tmp_Char); 
    StrLen=strData.length();    
  }  
  Transfer_Lock=0;
}

//This function parses received commands from another nrfs.
void buffer_ready()
{  
  if (strMirfBuffer == "TALK")
  {
    sendData("HURRAY !");
    Serial.println("Talking...");  
  }   
  //and parse other commands so on ...
  else 
  {
    Serial.print("<");
    Serial.print(strMirfBuffer);
    Serial.println(">");
  }
  clear_buffer(); 
}

//This function forms a buffer of serial data and send it
void read_SerialBuffer()
{
  if(Serial.available())
  {
    char CharData;
    String StrSerialBuffer=""; 
    
    while (Serial.available() && StrSerialBuffer.length() < MAX_BUFFER_LEN ) 
    {      
      CharData=Serial.read();
      StrSerialBuffer=StrSerialBuffer + CharData;   
      if (!Serial.available())
         delay(1);       
    }      
     while (Transfer_Lock); //wait for transfer process     
      
     sendData(StrSerialBuffer);    
  }
}

//This function initializes overall needed for wireless communication
void Setup_Mirf() 
{
  char Receive_Adr_Char[6];
  char Send_Adr_Char[6];
  Receive_Address.toCharArray(Receive_Adr_Char, 6); 
  Send_Address.toCharArray(Send_Adr_Char, 6); 

  Mirf.spi = &MirfHardwareSpi;
  Mirf.init();
  Mirf.setRADDR((byte *)Receive_Adr_Char);
  Mirf.setTADDR((byte *)Send_Adr_Char);
  Mirf.payload = sizeof(unsigned long);
  Mirf.config();

  //reg - Start  
  byte rf_setup = 0;
  Mirf.readRegister( RF_SETUP, &rf_setup, sizeof(rf_setup) );

  if (rf_setup != 0)   
    Serial.println("Beginning ... "); 
  else
  {
    Serial.println( "Wireless did not initialize!" );
    while (rf_setup==0);       
  }
  delay(100);
}

//This function clears the buffer
void clear_buffer ()
{
  strMirfBuffer="";
}
جهت سفارش این کالا، به این بخش در فروشگاه آفتاب رایانه مراجعه نمایید.
تصاویر کوچک شده (Thumbnails) پیوست شده تصاویر کوچک شده (Thumbnails) پیوست شده nrf24l01.jpg  
فایل های پیوست شده فایل های پیوست شده
ویرایش توسط max : 10-31-2013 در ساعت 01:12 PM

================================

سلام
این کد برای یک جفت +nrf24l01 تولید شده است ، فرض بر این هست که هر کدام از ماژول ها به یک برد آردوینو متصل هست ،کافی هست فقط این دو خط رو تغییر بدید و بعد روی هر برد جداگانه آپلود کنید.

کد:
String Receive_Address = "clie1";
String Send_Address = "clie2";



به صورت پیش فرض یکی از بردها به نام clie1 و برد دیگر clie2 نامگذاری شده ، پس توجه داشته باشد در زمان آپلود کد بر روی برد دوم حتما جای اسامی رو به این ترتیب تغییر بدید:


کد:
String Receive_Address = "clie2"; 
String Send_Address = "clie1";



بعد از اجرای کد در صورتی که از کنسول سریال مونیتور آردوینو استفاده کنید باید به راحتی بتونید پیام ها رو به صورت متنی برای برد دوم ارسال و دریافت کنید.

=====================================

سلام
این 11 12 13 پایه های برد آردوینو هست ، باید معادلش رو روی میکرو مورد نظر خودتون پیدا کنید.


* MISO -> 12 * MOSI -> 11 * SCK -> 13 * * Configurable: * CE -> 8 * CSN -> 7 */

=============================================

با سلام من آردوینو مگا رو با آردوینو پرو مینی را با این ماژول بیسیم به هم وصل کردم 

فقط یادتون باشه شما با استفاده از کتابخانههای بالا نمیتونید پایه هارو خودتون عوض کنید پس بل اجبار باید از دیتا شیت آردیونو خودتون پایهای فوق ( * MISO -> 12 * MOSI -> 11 * SCK -> 13 * * Configurable: * CE -> 8 * CSN -> 7 */) را پیدا کنید

==============================================


طبق دیتا شیت باید که از 1.9 تا 3.5 کارکنه و ولتاژ 2.5 به نظر ایمن میاد برای کار (ولتاژ 2.5 با تقیسم ولتاژ دو مقاومت 10 کیلو از پین VCC میکرو گرفته شده است)
البته از خود کتابخانه SPI واسه تست کردن استفاده کردم و تمام مود ها و تقسم کلاک ها را نیز چک کردم به نظر تو کلاک های پاینتر پایدارتر میاد اما باز هم نتیجه ای نگرفتم 
ممکن است به خاطر کیفیت پایین محصولات چینی باشه.

=============================

مشکل حل شد. سیم بندی برای Mega2560 باید به صورت زیر باشد:
MISO -> 50
MOSI -> 51
SCK -> 52
CE -> 8
CSN -> 7
GND -> GND
VCC -> 3.3v

==================================

من از یک Arduino Pro Mini که به یک سنسور دما و رطوبت DHT 22 متصل است استفاده کردم. طرف دیگه یک آردینو Uno بود که مقادیر رو دریافت می کنه و روی یک Liquid Crystal نمایش میده. با همه ماژول های NRF که 8 پایه هستند تست کردم و با همشون به خوبی کار میکنه.

کد ارسال:
کد:
/* YourDuinoStarter Example: nRF24L01 Transmit Joystick values
 - WHAT IT DOES: Reads Analog values on A0, A1 and transmits
   them over a nRF24L01 Radio Link to another transceiver.
 - SEE the comments after "//" on each line below
 - CONNECTIONS: nRF24L01 Modules See:
 http://arduino-info.wikispaces.com/Nrf24L01-2.4GHz-HowTo
   1 - GND
   2 - VCC 3.3V !!! NOT 5V
   3 - CE to Arduino pin 9
   4 - CSN to Arduino pin 10
   5 - SCK to Arduino pin 13
   6 - MOSI to Arduino pin 11
   7 - MISO to Arduino pin 12
   8 - UNUSED
   - 
   Analog Joystick or two 10K potentiometers:
   GND to Arduino GND
   VCC to Arduino +5V
   X Pot to Arduino A0
   Y Pot to Arduino A1
   
 - V1.00 11/26/13
   Based on examples at http://www.bajdi.com/
   Questions: terry@yourduino.com */

/*-----( Import needed libraries )-----*/
#include "DHT.h"
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>


/*-----( Declare Constants and Pin Numbers )-----*/
#define CE_PIN   9
#define CSN_PIN 10
//#define JOYSTICK_X A0
//#define JOYSTICK_Y A1
#define DHTPIN 2     // what pin we're connected to
#define DHTTYPE DHT22   // DHT 22  (AM2302)

// NOTE: the "LL" at the end of the constant is "LongLong" type
const uint64_t pipe = 0xE8E8F0F0E1LL; // Define the transmit pipe


/*-----( Declare objects )-----*/
RF24 radio(CE_PIN, CSN_PIN); // Create a Radio
/*-----( Declare Variables )-----*/
int data[3];  // 2 element array holding Joystick readings

DHT dht(DHTPIN, DHTTYPE);
void setup()   /****** SETUP: RUNS ONCE ******/
{
  Serial.begin(9600);
  radio.begin();
  radio.openWritingPipe(pipe);
  dht.begin();
   
  
}//--(end setup )---


void loop()   /****** LOOP: RUNS CONSTANTLY ******/
{
  //joystick[0] = analogRead(JOYSTICK_X);
  //joystick[1] = analogRead(JOYSTICK_Y);

  float h = dht.readHumidity();
  float t = dht.readTemperature();
  data[0] = 1;
  data[1] = 100;//h;
  data[2] = 200;//t;
  
  radio.write( data, sizeof(data) );
  //delay(1000);
}//--(end main loop )---

/*-----( Declare User-written Functions )-----*/

//NONE
//*********( THE END )***********
کد دریافت
کد:
/* YourDuinoStarter Example: nRF24L01 Receive Joystick values

 - WHAT IT DOES: Receives data from another transceiver with
   2 Analog values from a Joystick or 2 Potentiometers
   Displays received values on Serial Monitor
 - SEE the comments after "//" on each line below
 - CONNECTIONS: nRF24L01 Modules See:
 http://arduino-info.wikispaces.com/Nrf24L01-2.4GHz-HowTo
   1 - GND
   2 - VCC 3.3V !!! NOT 5V
   3 - CE to Arduino pin 9
   4 - CSN to Arduino pin 10
   5 - SCK to Arduino pin 13
   6 - MOSI to Arduino pin 11
   7 - MISO to Arduino pin 12
   8 - UNUSED
   
 - V1.00 11/26/13
   Based on examples at http://www.bajdi.com/
   Questions: terry@yourduino.com */

/*-----( Import needed libraries )-----*/
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,16,2);  // set the LCD address to 0x27 for a 16 chars and 2 line display


/*-----( Declare Constants and Pin Numbers )-----*/
#define CE_PIN   9
#define CSN_PIN 10

// NOTE: the "LL" at the end of the constant is "LongLong" type
const uint64_t pipe = 0xE8E8F0F0E1LL; // Define the transmit pipe


/*-----( Declare objects )-----*/
RF24 radio(CE_PIN, CSN_PIN); // Create a Radio
/*-----( Declare Variables )-----*/
int data[3];  // 2 element array holding Joystick readings

void setup()   /****** SETUP: RUNS ONCE ******/
{
  Serial.begin(9600);
  delay(1000);
  Serial.println("Nrf24L01 Receiver Starting");
  radio.begin();
  radio.openReadingPipe(1,pipe);
  radio.startListening();;
  
  lcd.init();                      // initialize the lcd 
  lcd.backlight();
}//--(end setup )---


void loop()   /****** LOOP: RUNS CONSTANTLY ******/
{
  if ( radio.available() )
  {
    // Read the data payload until we've received everything
    bool done = false;
    while (!done)
    {
      // Fetch the data payload
      done = radio.read( data, sizeof(data) );
      //Serial.print("H = ");
      //Serial.print(data[1]);
      //Serial.print(" T = ");      
      //Serial.println(data[2]);
      lcd.clear();

      lcd.setCursor(0,0);
      lcd.print("Channel: ");
      lcd.print(data[0]);
      
      lcd.setCursor(0,1);
      
      lcd.print("H: ");
      lcd.print(data[1]);
      lcd.print(" T: ");
      lcd.print(data[2]);

      delay(500);
    }
  }
  else
  {    
      //Serial.println("No radio available");
      lcd.clear();
      lcd.print("No radio available");
      delay(500);
  }

}//--(end main loop )---

/*-----( Declare User-written Functions )-----*/

//NONE
//*********( THE END )***********

امّا از دو طرف فقط توی سریال صفر میبینم...
دوستانی که کار کردن با این ماژول و یا اطلاعاتی دارن لطفاً راهنمایی کنید...
قسمت SETUP هر دو تا برنامه یکی هست و فقط جای آدرس pipe ها (read و write)عوض شده
اون قسمت setRetries هم با 15و15 هم همین طور کار می کرد...

من چیز دیگه ای، به ذهنم نمیرسه دوستان اگر چیزی میدونند لطفاً کمک کنید...

لطفاً از طریق همین فروم یا میل «arsham.sharifnia@gmail.com» پاسخ بدید

نقل قول نوشته اصلی توسط navidnkh نمایش پست ها
میشه کتابخونه هایی که استفاده کردید رو بزارید تا بهتر بتونم مشکلتونو حل کنم
این هم لینک دانلود دوتا کتابخونه rf24,nRF24l01 ممنون میشم...


لینک پرشین*گیگ:
Download LIBRARIES.zip


لینک از سرور همین سایت:
LIBRARIES.zip


نقل قول نوشته اصلی توسط arsham نمایش پست ها
این هم لینک دانلود دوتا کتابخونه rf24,nRF24l01 ممنون میشم...


لینک پرشین*گیگ:
Download LIBRARIES.zip


لینک از سرور همین سایت:
فایل پیوست 1159
من کد شما رو تست کردم و خب دقیقا همون جواب 0 رو دریافت کردم ولی چون من دقیقا نمیدونم میخواید چه کار انجام بدید نمی دونم کد رو اون جور که میخواید تونستم تغییر بدم یا نه

حالا این کد هارو میزارم ببینید به درد کارتون میخوره یا بازهم اگر مشکل داره بگید تغیرش بدم

کد مگا به عنوان فرستنده

کد:
 /*       
        ####UPLOAD TO MEGA####
        #     MOSI==>51      #
        #     MISO==>50      #
        #     SCK===>52      #
        # # # # # # # # # # ##
        # CE_pin 7&CSN_pin 8 #
        ######################
*/


//====# header files #====
#include<SPI.h>
#include<nRF24l01.h>
#include<RF24.h>


//====# define #====
#define CE_pin 7
#define CSN_pin 8


//====# pre initializing #====
RF24 radio(CE_pin,CSN_pin);
const uint64_t mega_to_uno_pipe=0x0f0f0f0f01LL; //40 bit add, differs in lsb
const uint64_t uno_to_mega_pipe=0x0f0f0f0f02LL; // LL means long-long
int A[1];
bool done;
//====# SetUp part #====
void setup(){
  Serial.begin(9600);
  radio.begin();
  radio.setPayloadSize(sizeof(A));
  radio.openReadingPipe(1,mega_to_uno_pipe);
  radio.openWritingPipe(uno_to_mega_pipe);
  radio.setRetries(0,0);
  radio.setDataRate(RF24_1MBPS);
}


//====# The main program #====
void loop(){
  A[0] = 0xF0;
 done=radio.write( A, 1 );
 Serial.print(done);
 delay(100);
}
کد uno به عنوان گیرنده





کد:
/*        
        ####UPLOAD TO UNO####
        #    MOSI==>11      #
        #    MISO==>12      #
        #    SCK===>13      #
        # # # # # # # # # # #
        #CE_pin 7&CSN_pin 8 #
        #####################
*/




//====# header files #====
#include<SPI.h>
#include<nRF24l01.h>
#include<RF24.h>


//====# define #====
#define CE_pin 7
#define CSN_pin 8


//====# pre initializing #====
RF24 radio(CE_pin,CSN_pin);
const uint64_t mega_to_uno_pipe=0x0f0f0f0f01LL; //40 bit add, differs in lsb
const uint64_t uno_to_mega_pipe=0x0f0f0f0f02LL; // LL means long-long
int A[1];
bool done=false;
//====# SetUp part #====
void setup(){
  A[0] = 0x000;
  Serial.begin(9600);
  radio.begin();
  //radio.setPayloadSize(sizeof(A));
  radio.openReadingPipe(1,uno_to_mega_pipe);
  radio.openWritingPipe(mega_to_uno_pipe);
  radio.setRetries(0,0);
  radio.setDataRate(RF24_1MBPS);
  pinMode(13,OUTPUT);
  radio.startListening();
}


//====# The main program #====
void loop(){
   
  if (radio.available()){   
    while (true){
      radio.read(&A,sizeof(A));
      if(A[0]==0xF0){
        done=true;
      }
      //radio.stopListening();
      digitalWrite(13,done);
      Serial.print("Done: ");
      Serial.println(done);
      Serial.print("A[0]: ");
      Serial.println(A[0],HEX);
      delay(100);
    }
  }
}
ویرایش توسط navidnkh : 11-10-2014 در ساعت 06:15 PM
===================================================
بسم الله الرحمن الرحیم

0)من اینو خریدم منتها قاعدتا این کد برای سایر بوردهای NRF24l01 هم جواب می ده:

ماژول انتقال بیسیم اطلاعات +NRF24L01 ( فرکانس 2.4G ) + آنتن

1) برای رفع مشکل تغذیه شما می تونید با موازی کردن دو خازن در رنج های ۱۰۰ نانو فاراد و ۱۰ میکرو فاراد با تغذیه ۳/۳ ولتی اون هر نویزی رو از روی تغذیه حذف کنید و مطابق شکل زیر سیم کشی ها رو انجام بدید:

nrf24l01_bb_.jpg
my_nrf24.jpg

2)من از کتابخونه RF24 استفاده کردم؛ فایل فشرده RF24 رو unzip کنید و توی فولدر libraries قرار بدید.

github.com/tmrh20/RF24

3)فایل فشرده my_RF24_T کد مربوط به فرستنده هست و فایل فشرده my_RF24_R کد مربوط به گیرنده هست.
اتصال پین ها باید با کد انطباق داشته باشه:

کد:
// Hardware configuration: Set up nRF24L01 radio on SPI bus plus pins 7 & 8 
RF24 radio(7,8);
امیدوارم مفید بوده باشه.
فایل های پیوست شده فایل های پیوست شده


  • ShahBaz