با سلام .
بنده دوتا ماژول +nrf24l01 گرفتم و با کتابخانه و برنامه ای ک دوستمون منطقه ازاد قرار داده بودند، اون رو برای دوتا 18f452 کامپایل کردم.
اما کامل جواب نگرفتم.
کامپایلر ccs 4.130 و میکرو هم 18f452 . برنامه رو هم قرار میدم.
مشکل اینه ک اون مقداری ک قراره از یک طرف فرستاده بشه،توی سمت گیرنده ک با پورت سریال ب کامپیوتر وصله با علامت سوال جایگزین شده است.
ممنون
سمت فرستنده:
بنده دوتا ماژول +nrf24l01 گرفتم و با کتابخانه و برنامه ای ک دوستمون منطقه ازاد قرار داده بودند، اون رو برای دوتا 18f452 کامپایل کردم.
اما کامل جواب نگرفتم.
کامپایلر ccs 4.130 و میکرو هم 18f452 . برنامه رو هم قرار میدم.
مشکل اینه ک اون مقداری ک قراره از یک طرف فرستاده بشه،توی سمت گیرنده ک با پورت سریال ب کامپیوتر وصله با علامت سوال جایگزین شده است.
ممنون
سمت فرستنده:
کد:
#include <18f452.h>
#device PASS_STRINGS = IN_RAM
#use delay(xtal=20MHz)
#include <stdio.h>
#include <nrf2401.h>
#FUSES NOWDT //No Watch Dog Timer
#use rs232(baud=4800, UART1, ERRORS)
#define CE pin_d0
void main()
{
int8 da=0;
setup_spi(SPI_MASTER | SPI_L_TO_H | SPI_CLK_DIV_16);
init_NRF24L01();
delay_ms(100);
mirf_config_rx_mod();
while(TRUE)
{
mirf_Reads_PAYLOAD(mirf_PAYLOAD);
printf("=Reads_PAYLOAD=%s\n\r",read_bufer);
da=mirf_read_reg(STATUS);
printf("STATUS=%X \n\r",da);
da=(da| 0x70);
mirf_write_reg(STATUS,da);
da=mirf_read_reg(STATUS);
printf("STATUS=%X \n\r",da);
delay_ms(500);
}
}
کد:
#include <18f452.h>
#device PASS_STRINGS = IN_RAM
#use delay(xtal=20MHz)
#include <nrf2401.h>
#include <stdio.h>
#FUSES NOWDT,HS //No Watch Dog Timer
#define CE pin_d0
void main()
{
int8 da;
setup_spi(SPI_MASTER | SPI_L_TO_H | SPI_CLK_DIV_16);
init_NRF24L01();
delay_ms(500);
mirf_config_tx_mod();
while(TRUE)
{
mirf_send_data(mirf_PAYLOAD);
da=mirf_status();
da=(da| 0x70);
mirf_write_reg(STATUS,da);
delay_ms(10);
}
}
و فایل کتابخانه ماژول :
کد:
#define mirf_CSN_hi output_high(PIN_A5);
#define mirf_CSN_lo output_low(PIN_A5);
#define mirf_CE_hi output_high(PIN_D0);
#define mirf_CE_lo output_low(PIN_D0);
#define RADDR (byte *)"HADI0"//addres Recive
#define TADDR (byte *)"HADI0"//adrres transfer
/* Memory Map */
#define CONFIG 0x00
#define EN_AA 0x01
#define EN_RXADDR 0x02
#define SETUP_AW 0x03
#define SETUP_RETR 0x04
#define RF_CH 0x05
#define RF_SETUP 0x06
#define STATUS 0x07
#define OBSERVE_TX 0x08
#define CD 0x09
#define RX_ADDR_P0 0x0A
#define RX_ADDR_P1 0x0B
#define RX_ADDR_P2 0x0C
#define RX_ADDR_P3 0x0D
#define RX_ADDR_P4 0x0E
#define RX_ADDR_P5 0x0F
#define TX_ADDR 0x10
#define RX_PW_P0 0x11
#define RX_PW_P1 0x12
#define RX_PW_P2 0x13
#define RX_PW_P3 0x14
#define RX_PW_P4 0x15
#define RX_PW_P5 0x16
#define FIFO_STATUS 0x17
/* Bit Mnemonics */
#define MASK_RX_DR 6
#define MASK_TX_DS 5
#define MASK_MAX_RT 4
#define EN_CRC 3
#define CRCO 2
#define PWR_UP 1
#define PRIM_RX 0
#define ENAA_P5 5
#define ENAA_P4 4
#define ENAA_P3 3
#define ENAA_P2 2
#define ENAA_P1 1
#define ENAA_P0 0
#define ERX_P5 5
#define ERX_P4 4
#define ERX_P3 3
#define ERX_P2 2
#define ERX_P1 1
#define ERX_P0 0
#define AW 0
#define ARD 4
#define ARC 0
#define PLL_LOCK 4
#define RF_DR 3
#define RF_PWR 1
#define LNA_HCURR 0
#define RX_DR 6
#define TX_DS 5
#define MAX_RT 4
#define RX_P_NO 1
#define TX_FULL 0
#define PLOS_CNT 4
#define ARC_CNT 0
#define TX_REUSE 6
#define FIFO_FULL 5
#define TX_EMPTY 4
#define RX_FULL 1
#define RX_EMPTY 0
/* Instruction Mnemonics */
#define R_REGISTER 0x00
#define W_REGISTER 0x20
#define REGISTER_MASK 0x1F
#define R_RX_PAYLOAD 0x61
#define W_TX_PAYLOAD 0xA0
#define FLUSH_TX 0xE1
#define FLUSH_RX 0xE2
#define REUSE_TX_PL 0xE3
#define NOP 0xFF
#define mirf_CH 2
#define mirf_PAYLOAD 16
int8 bufer[40];
int8 read_bufer[5];
int8 send_buffer[mirf_PAYLOAD]={"Salam Bar Mahdi"};
///**************************************************************************************
void mirf_config_tx_mod(void);
void mirf_config_rx_mod(void);
void init_NRF24L01(void);
int8 mirf_read_reg(int8 reg);
void mirf_write_reg(int8 reg,int8 value );
void fu_FLUSH_TX_RX(void);
void set_address_rx_tx(int8 reg,int8 *address,int8 WIDTH);
void mirf_read_reg_array(int8 reg,int8 WIDTH);
void mirf_Reads_PAYLOAD(int8 WIDTH);
void mirf_send_data(int8 WIDTH);
int8 mirf_status(void);
int8 mirf_data_ready(void);
int8 mirf_max_rt_reached(void);
///**************************************************************************************
void mirf_config_rx_mod(void){
mirf_write_reg(EN_AA, 0x01);
mirf_write_reg(EN_RXADDR,0x01);
mirf_write_reg(SETUP_AW,0x03);
mirf_write_reg(SETUP_RETR, 0x18);
mirf_write_reg(RF_CH, mirf_CH);
mirf_write_reg(RF_SETUP, 0x07);
set_address_rx_tx(RX_ADDR_P0, TADDR, 5);
set_address_rx_tx(TX_ADDR, TADDR, 5);
mirf_write_reg(RX_PW_P0, mirf_PAYLOAD);
mirf_write_reg(CONFIG, 0x0B);
}
///**************************************************************************************
void mirf_config_tx_mod(void){
mirf_write_reg(EN_AA, 0x01);
mirf_write_reg(EN_RXADDR,0x01);
mirf_write_reg(SETUP_AW,0x03);
mirf_write_reg(SETUP_RETR, 0x18);
mirf_write_reg(RF_CH, mirf_CH);
mirf_write_reg(RF_SETUP, 0x07);
set_address_rx_tx(RX_ADDR_P0, TADDR, 5);
set_address_rx_tx(TX_ADDR,TADDR, 5);
mirf_write_reg(RX_PW_P0, mirf_PAYLOAD);
mirf_write_reg(CONFIG, 0x0A);
}
///**************************************************************************************
void init_NRF24L01(void){
mirf_CE_lo;
mirf_CSN_hi;
}
///**************************************************************************************
int8 mirf_status(void){
int8 data,merge;
merge=(R_REGISTER|(REGISTER_MASK & STATUS));
mirf_CSN_lo;
spi_write(merge);
data =spi_read (NOP);
mirf_CSN_hi;
return(data);
}
///**************************************************************************************
int8 mirf_data_ready(void){
int8 data,merge;
merge=(R_REGISTER|(REGISTER_MASK & STATUS));
mirf_CSN_lo;
spi_write(merge);
data =spi_read (NOP);
mirf_CSN_hi;
data=data & (1<<RX_DR);
return(data);
}
///**************************************************************************************
int8 mirf_max_rt_reached(void){
int8 data,merge;
merge=(R_REGISTER|(REGISTER_MASK & STATUS));
mirf_CSN_lo;
spi_write(merge);
data =spi_read (NOP);
mirf_CSN_hi;
data=data & (1<<MAX_RT);
return(data);
}
///**************************************************************************************
int8 mirf_read_reg(int8 reg) {
int8 data,merge;
merge=(R_REGISTER|(REGISTER_MASK & reg));
mirf_CSN_lo;
spi_write(merge);
data =spi_read (NOP);
mirf_CSN_hi;
return(data);
}
///**************************************************************************************
void mirf_write_reg(int8 reg,int8 value ){
int8 merge;
merge=(W_REGISTER|(REGISTER_MASK & reg));
mirf_CSN_lo;
spi_write(merge);
spi_write (value);
mirf_CSN_hi;
}
///**************************************************************************************
void fu_FLUSH_TX_RX(void){
mirf_CSN_lo;
spi_write(FLUSH_TX);
mirf_CSN_hi;
//
mirf_CSN_lo;
spi_write(FLUSH_TX);
mirf_CSN_hi;
}
///**************************************************************************************
void set_address_rx_tx(int8 reg,int8 *address,int8 WIDTH){
int8 merge,i=0;
merge=(W_REGISTER|(REGISTER_MASK & reg));
mirf_CSN_lo;
spi_write(merge);
while(i<WIDTH){
merge=address[i];
spi_write(merge);
i++;
}
mirf_CSN_hi;
}
///**************************************************************************************
void mirf_read_reg_array(int8 reg,int8 WIDTH){
int8 i=0,merge;
merge=(R_REGISTER|(REGISTER_MASK & reg));
mirf_CSN_lo;
spi_write(merge);
while(i<WIDTH){
bufer[i] =spi_read (NOP);
i++;
}
mirf_CSN_hi;
}
///**************************************************************************************
void mirf_Reads_PAYLOAD(int8 WIDTH){
int8 i=0;
mirf_CE_hi;
mirf_CSN_lo;
spi_write(R_RX_PAYLOAD);
while(i<WIDTH){
read_bufer[i] =spi_read (NOP);
i++;
}
mirf_CSN_hi;
mirf_CSN_lo;
spi_write(FLUSH_RX);
mirf_CSN_hi;
}
///**************************************************************************************
void mirf_send_data(int8 WIDTH){
int8 i=0,merge=0;
mirf_CSN_lo;
spi_write(FLUSH_TX);
mirf_CSN_hi;
mirf_CE_hi;
mirf_CSN_lo;
spi_write(W_TX_PAYLOAD);
while(i<WIDTH){
merge=send_buffer[i] ;
spi_write(merge);
i++;
}
mirf_CSN_hi;
mirf_CE_hi; // Start transmission
delay_us(50);
mirf_CE_lo;
}
اینم از لینک عکس :
http://www.4shared.com/photo/dTxGoXd_ba/noproblem.html
:sad:
اضافه شده در تاریخ :
ایا اندازه بافر در قسمت گیرنده و فرستنده باید یکی باشد؟




دیدگاه