สวัสดีครับ ชาว Electoday

Started by top, October 04, 2013, 08:09:58 AM

Previous topic - Next topic

top

เข้าเรื่องเลยนะครับ
  ผมต้องการส่งค่า  ADC แบบไร้สายทำไงดีครับ

หมายถึง ตัวลูก 3 ตัว ส่งให้ตัวแม่อ่านค่า แล้วมาแสดงบน LCD ครับ

ตอนนี้ผมคิดไว้ว่าจะส่งผ่าน RF Module จะได้หรึอเปล่าครับ

มีวิธีอืนที่ดีกว่านี้ไหม ขอคำแนะนำด้วยครับ


ขอขอบคุณมาก ครับ

JENG

ใืช้ nRF24 คับถูกดี หลักการให้ master ร้องขอไปที่ slave จะง่ายกว่าคับ  :)
สามารถติดตาม electoday ได้ที่

Facebook
www.facebook.com/groups/coopmicro

Google+
https://plus.google.com/communities/103482067769375459277

☺☺☺ความรู้ และความฉลาด ไม่ใช่สิ่งเดียวกัน จะมีประโยชน์อะไร ถ้าฉลาดแต่อยู่ในกะลา☺☺☺

top

ตอนนี้ได้ code นี้มาครับ

มีใครเคยลองใช้แล้วบางครับ การสือสาร ok รึเปล่า


TX..

#include <16F877A.h>

#DEVICE *=16    ICD=TRUE  PASS_STRINGS=IN_RAM     //I need PASS_STRINGS=IN_RAM
#FUSES NOWDT, XT, NOPUT, NOPROTECT, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG
#use delay (clock = 4000000)

//Setting Spi
#USE SPI(MASTER,DI=pin_c4,DO=pin_c5,CLK=pin_c3, BAUD=1000000, MODE=0, BITS=8, MSB_FIRST, STREAM=STREAM_SPI) //this will set SPI in 4MHz(maximum for 16MHz Xtal. #Use SPI is a little buggy)


//********** DEFINE PORT NAMES
//CEL_PROBE AN0,RP0;INDICACAO_LED RA1,RP1;I2C_SCL RC3,RP14;I2C_SDA RC4,RP15;_IRQ_rf RC5,RP16;SPI_MISO RC6,RP17;SPI_MOSI RC7,RP18;SPI_CLK RB0,RP3;CS_rf RB1,RP4;CE_rf RB2,RP5;
#define  SPI_MISO       PIN_C4   //RC2,RP13; SPI(Usar por hardware)
#define  SPI_MOSI       PIN_C5   //RC7,RP18; SPI(Usar por hardware)
#define  SPI_CLK        PIN_C3   //RB0,RP3;  SPI(Usar por hardware)
#define  INDICACAO_LED  PIN_A1   //RA1,RP1;  just a test LED output

//Driver nRF24L01P.C
#define  RF24_IRQ       PIN_B0   //RC5,RP16; interrupcao nRF24L01
#define  RF24_CS        PIN_B5   //RB1,RP4;  chipselect nRF24L01+
#define  RF24_CE        PIN_C2   //RB2,RP5;  chipEnable nRF24L01+
#define  RF24_PERFORMANCE_MODE   //performance mode ON
//#define  RF24_USE_DMA            //nRF24 uses SPI DMA for multiple byte transfers(I´m using Hardware DMA)
#define  RF24_SPI       STREAM_SPI//Redirects SPI2 port to RS24_SPI stream


//*******************************
//*         Set Tris            *
#define   RF_IRQ_TRIS   TRISB,0
#define   RF_CS_TRIS    TRISB,5
#define   RF_CE_TRIS    TRISC,2
#define   SCK_TRIS      TRISC,3
#define   SDI_TRIS      TRISC,4
#define   SDO_TRIS      TRISC,5
//*         VARIABLES           *
//*******************************
#BYTE TRISA     =  0x85
#BYTE TRISB     =  0x86
#BYTE TRISC     =  0x87
//*******************************

//INCLUDES_2   -  Drivers
#include <nRF24L01P.C>           //Driver nRF24L01+   Single Chip 2.4GHz Transceiver Driver

void main() {    //Example of using this driver
   
   //setup_spi(spi_master| spi_l_to_h| spi_clk_div_4);
   
   
   set_tris_a(0x00);
   bit_clear(SCK_TRIS);
   bit_set(SDI_TRIS);
   bit_clear(SDO_TRIS);
   bit_clear(RF_CS_TRIS);
   bit_set(RF_IRQ_TRIS);
   bit_clear(RF_CE_TRIS);
   
   RF24_initPorts();
   
   RF24_default_config();
   
   RF24_TX_SET();       //Transmitter on   

   while(true) {        //Enter transmit mode infinitely
   
      output_high(pin_a1);
      delay_ms(1000);
      output_low(pin_a1);
      //Sending number 1(1 byte).  See RF24_TX_putbuffer contruction inside driver
       RF24_TX_putbuffer(false,1, 1); //Transmit 1byte data(number) to actual address(default_config address)

       //Do this to check each data transfer
       while(RF24_IRQ_state()==false);        //Waits for any interrupt.  Same as "while(!RF24_IRQ_state());"     
       RF24_STATUS_clr_IRQs(IRQ_ALL);   
   }
}


Rx...

#include <16F877A.h>

#DEVICE *=16    ICD=TRUE  PASS_STRINGS=IN_RAM     //I need PASS_STRINGS=IN_RAM
#FUSES NOWDT, XT, NOPUT, NOPROTECT, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG
#use delay (clock = 4000000)

//Setting Spi
#USE SPI(MASTER,DI=pin_c4,DO=pin_c5,CLK=pin_c3, BAUD=1000000, MODE=0, BITS=8, MSB_FIRST, STREAM=STREAM_SPI) //this will set SPI in 4MHz(maximum for 16MHz Xtal. #Use SPI is a little buggy)


//********** DEFINE PORT NAMES
//CEL_PROBE AN0,RP0;INDICACAO_LED RA1,RP1;I2C_SCL RC3,RP14;I2C_SDA RC4,RP15;_IRQ_rf RC5,RP16;SPI_MISO RC6,RP17;SPI_MOSI RC7,RP18;SPI_CLK RB0,RP3;CS_rf RB1,RP4;CE_rf RB2,RP5;
#define  SPI_MISO       PIN_C4   //RC2,RP13; SPI(Usar por hardware)
#define  SPI_MOSI       PIN_C5   //RC7,RP18; SPI(Usar por hardware)
#define  SPI_CLK        PIN_C3   //RB0,RP3;  SPI(Usar por hardware)
#define  INDICACAO_LED  PIN_A1   //RA1,RP1;  just a test LED output

//Driver nRF24L01P.C
#define  RF24_IRQ       PIN_B0   //RC5,RP16; interrupcao nRF24L01
#define  RF24_CS        PIN_B5   //RB1,RP4;  chipselect nRF24L01+
#define  RF24_CE        PIN_C2   //RB2,RP5;  chipEnable nRF24L01+
#define  RF24_PERFORMANCE_MODE   //performance mode ON
//#define  RF24_USE_DMA            //nRF24 uses SPI DMA for multiple byte transfers(I´m using Hardware DMA)
#define  RF24_SPI       STREAM_SPI//Redirects SPI2 port to RS24_SPI stream

//*******************************
//*         Set Tris            *
#define   RF_IRQ_TRIS   TRISB,0
#define   RF_CS_TRIS    TRISB,5
#define   RF_CE_TRIS    TRISC,2
#define   SCK_TRIS      TRISC,3
#define   SDI_TRIS      TRISC,4
#define   SDO_TRIS      TRISC,5
//*         VARIABLES           *
//*******************************
#BYTE TRISA     =  0x85
#BYTE TRISB     =  0x86
#BYTE TRISC     =  0x87
//*******************************


//INCLUDES_2   -  Drivers
#include <nRF24L01P.C>           //Driver nRF24L01+   Single Chip 2.4GHz Transceiver Driver

#BYTE PORTA=0x05

void main() {    //Example of using this driver
   int RXbuffer1[32];
   int RXdatasize, RXpipe;
   //int TXbuffer[40], TXdatasize;        //not necessary
   //int stat=0,fstat=0,retrys,lost,ret;  //
   //int i=false;
   
   set_tris_a(0x00);
   bit_clear(SCK_TRIS);
   bit_set(SDI_TRIS);
   bit_clear(SDO_TRIS);
   bit_clear(RF_CS_TRIS);
   bit_set(RF_IRQ_TRIS);
   bit_clear(RF_CE_TRIS);
   
   
   RF24_initPorts();
   RF24_default_config();
   
   //RF24_check_config();    //check configuration 

   RF24_RX_SET();       //Receiver on
   
   while(true) {
     
      output_high(pin_a1);
      delay_ms(1000);
      output_low(pin_a1);
     
      while ( RF24_RX_getbuffer(&RXpipe, &RXdatasize, RXbuffer1)!=true );    //Wait till receive data(1 to 32 bytes) into buffer(from default_config address of pipe0)
      PORTA=RXbuffer1;
      delay_cycles(1);
   }
   

}





top

สวัสดีครับ ชาว Electoday

ใครพอมีตัวอย่างการรับส่งค่า Data ของ nRF24L01P เช่น Ds18b20,ADC,Ds1307 หรึออะไรก็ได้

ที่สามารถรับส่งค่า แสดงผลเป็นตัวเลขได้ สักตัวอย่างครับ  :-\

จะได้เป็นแนวทางในการเขียน ตอนนี้ยังงงอยู่ ไม่เข้าใจเรื่องการรับส่งค่าตัวเลขครับ

หรึอไม่ก็คำอธิบาย หลังการรับส่งก็ได้นะครับ

ขอขอบคุณเป็นอย่างสูงครับ   :)