开源项目带LCD的无线串口之一步一步教你调试nRF905(原创)
最近有意做个无线串口的开源项目,为加大透传距离,所以采用Nordic公司NRF905来完成。注:这次想要申酷帖了,另外本着开源的精神,请用CC2430等无线,MCU一体的大神们勿喷。
最后上几张项目的图片,这是手工焊接的原始版本,等调试无误的时候,再做 PCB.
下面来说说图片中模块拟要实现的功能,以及各个接口的说明。
◆通讯速率≧9600bps
◆Nokia5110 LCD 按照用户的方式显示当前的数据,以及其他附加功能( 比如提取帧进行绘图 )。
◆整个模块以 可接电压范围 5V-12V.
◆配备两个按键,以及拨码开关和用户实现交互。
紧接着从熟悉芯片开始入手:
http://cache.amobbs.com/bbs_upload782111/files_44/ourdev_665144AVCI3M.jpg
(原文件名:RF905.jpg)
关于芯片的详细介绍,大家自己可以去看Datasheet,我这里只是说几个重要的地方。
采用SPI四线制接口,外加3个 Input 口进行控制,4个 Output 口进行匹配反馈 。
除电源 VCC 和接地端,其余脚都可以直接和普通的 5V 单片机IO 口直接相连(建议在3个输出口串上2-5.1K的电阻分压,输出必须小于10mA)。当然对 3V 左右的单片机更加适用了。
引脚介绍:
引脚说明
VCC 3.3 - 3.6V
TX_EN 1:TX模式0:RX模式
TRX_CE 芯片使能
PWR_UP 芯片上电
uCLK NC
CD 载波检测
AM 地址匹配
DR 接受或发送数据完成(可接中断)
MISO
MOSI
SCK
CSN
GND
GND
nRF905 一共有4种工作模式:
ShockBurst TxShockBurst Rx掉电模式StandBy模式
这四种模式由TRX_CE、TX_EN、PWR_UP 的设置来设定。
PWR_UPTRX_CE TX_EN
0 X X 掉电和SPI 编程
1 0 X Standby 和SPI 编程
1 1 0 ShockBurst RX
1 1 1 ShockBurst TX
调试无线模块,无非就是寄存器配置,而905一共要配置5个寄存器,分别是
1. 状态寄存器
包含数据就绪DR 和 地址匹配AM的状态。
2. 射频寄存器
包含收发器的频率,输出功率等配置信息,有效数据位数,地址位数。
3. 发送地址寄存器
包含目标器件地址。
4. 发送数据寄存器
存放待发送数据的数据包
5. 接收数据寄存器
存放接收的数据包,在寄存器中的有效数据由DR引脚指示。
下面我根据官方的发送框图写一个发送流程图:
1. TX_EN =1;
PWR_UP = 1;
TRX_CE = 1;
2. SPI时序操作,向寄存器写地址ADDR 和 待发送的数据 PLAYLOAD
当切换模式时需要重写配置寄存器;
3. 再次判断 TRX_CE 是否为高电平;
是——》 4
否——》 配置为高电平,并再次执行 3
4. 开始传输,nRF905进入 ShockBurstTX模式,芯片内部自动添加前导码和CRC校验码
当数据打包发送完毕 DR = 1;
5.判断 TRX_CE 是否为高电平;
是——》 判断 AUTO_RETRAN 是否配置为 1 ——》 DR = 0;被置为低电平——》4
(这是个不断重发的过程,直到 TRX_CE = 0;)
否——》 回到状态1,仅仅发送一次
用户需要写入的数据帧:地址 + 数据
芯片内部数据帧格式 :前导码 + 地址 + 数据 + CRC检验码
下面是接受流程图,这个我不再机械的翻译而是自己组织下:
当配置TRX_CE为高,而TX_EN为低以及 PWR_UP 的时候,芯片会在650us之后进入接收模式,当nRF905检测
到与其相同频率的载波时,CD( Carrier Detect)将会置高,当一个匹配的地址被检测到,AM(Address Match)将
会被置高,当一个匹配的数据包被检测到(CRC校验正确),芯片会自动去除包头,包尾,同时 DR (Data Ready)
置高,此时MCU将 TRX_CE置低,nRF905 进入StandBy模式 。然后MCU通过SPI时序将数据读出,一旦数据被读出,
AM和DR会自动置低。
到此,这个接收过程完毕。
补充下:
当在接收过程中,配置TRX_CE为高,TX_EN也为高的时候,芯片会立即进入TX模式,并且数据会丢失掉,但是
这里如果在改变模式之前,MCU已经检测到AM置高的话,这里可以由MCU自己决定,是哪怕丢失数据也要切换模式,
还是等DR=1;把数据读回来再切换模式。
大家可以自己对照框图,再来理解我的话。
关于地址配置,官方建议使用24bits以上并且不要相同,原因之一是防止误匹配,二是地址过短,会导致地址混入接受的数据中,造成乱码。
Power Down Mode
掉电模式,低功耗模式,此时芯片无任何作用。小于2.5uA。
Standby Mode
待机模式,是发送完毕进入的模式,同时也是接收完毕进入的模式。
关于降低功耗的提示:1 .我们可以在芯片进入Power Down Mode时,对芯片进行配置。
2 .使用uclk引脚,现在模块好像已经不将这个引脚引出来了。
http://cache.amobbs.com/bbs_upload782111/files_44/ourdev_665145DP65E0.png
未插LCD (原文件名:1.png)
http://cache.amobbs.com/bbs_upload782111/files_44/ourdev_665146F31V1H.png
背面 (原文件名:2.png)
http://cache.amobbs.com/bbs_upload782111/files_44/ourdev_665147CA27C1.png
整体 (原文件名:4.png)
官方文档ourdev_665148OADP6P.pdf(文件大小:710K) (原文件名:Product_Specification_nRF905_v1.5.pdf)
翻译的中文文档ourdev_665149L57X65.pdf(文件大小:1.00M) (原文件名:nRF905_CN.pdf)
本手记到此为止,下一篇,开始写905程序了。
修改原因:增加5个寄存器的介绍。 占位一楼后续更新用 占位二楼后续更新用 占位三楼后续更新用 占楼没有用,好像过若干小时后,就不能修改了。 好东西。 好像不可以修改回复了啊,真是遗憾,那我继续吧。
无线串口调试手记(二)——MCS-51串口和LCD5510
学过51好久了,好多知识都忘记了,比如在配置串口时,如何计算波特率,串口的几种工作方式,顺便了解到定时器的几种工作方式。
最大的感受是:学什么东西,在一开始的时候不可能什么都懂的,等你隔上一段时间,当然这段时间里面你应该仍然提高,而不是停滞不前,回过头再看看你当时学的东西,会有种大彻大悟的感受,原来也就是那么回事,还记得当初学习51单片机的时候,什么寄存器配置都不懂,只是跟着视频把代码抄下来,根本就不求甚解,只是知道,这样做就行了,直到调试nRF24L01的时候,才明白寄存器配置具体是怎么回事。
后来接触飞思卡尔,430这类单片机时又巩固了下。
所以呢,不管学什么,第一遍不懂没关系,关键不能放弃,当你到达另一个高度,再回来看看,看书已不是煎熬,而是享受知识了。
先来进行串口的配置,为了保证数据的稳定数传,先配置为 9600bps ,
这里先来详细解释下波特率的概念:
波特率:每秒钟传输二进制代码的位数;
9600bps,意思就是每秒钟传送9600个比特(bit),因为算上1个起始位,1个停止位,8个数据位,所以完整完成一个字节(byte)的传输需要10位,也就是每秒钟960个字节,1s=1000ms,所以传输一个字节的时间为:
1000/9600=0.1042s=1.042ms
http://cache.amobbs.com/bbs_upload782111/files_44/ourdev_665696KIJUVG.jpg
(原文件名:5.jpg)
显然我们这里选第2种工作方式。
然后采用定时器,作为波特率的发生器,这里给出计算公式:
http://cache.amobbs.com/bbs_upload782111/files_44/ourdev_665697JH0N3X.jpg
(原文件名:6.jpg)
根据计算,可以算出当TH1 = TL1 = 0xFD;
void Uart_Init(void)
{
TMOD = 0x20;
SCON = 0x50;
TH1 = 0xFD;
TL1 = TH1;
PCON = 0x00;
EA = 1;
ES = 1;
TR1 = 1;
}
好,串口及定时器差不多就到这里,下面就是LCD5110,这个屏网上的驱动是在很多,然后我整理下资料,写出了一个还算差强人意的驱动程序出来。
点击此处下载 ourdev_665699EETUP9.rar(文件大小:3K) (原文件名:LCD5110 for 51.rar)
调试手记二就写到这里,明天开始第三篇。 不错 感觉 好没人气啊 你要把标题名改成:XX项目共享,肯定一堆人进来mark。 好像已经不能修改了呜呜 mark,不知道这个无线串口的波特率是怎样来修改的,人工改一次保存一次?还是自适应系统的串口,自己修改? 正在用的一个无线wifi串口,
http://cache.amobbs.com/bbs_upload782111/files_44/ourdev_665758B54LV2.jpg
串口设置页面 (原文件名:无线wifi串口.jpg)
就是每次修改波特率 都要在这个设置页面修改保存一下。 我先顶顶 学习。谢谢楼主分享。 顶一个 继续努力 楼主好样的!!! 在一个博客文章看到的分享一下,这几天也在搞这个。
#include <iom16.h>
#include <macros.h>
#include"delay.h"
#include"lcd_init.h"
#pragma interrupt_handler timer0_ovf_isr:10
#define uint unsigned int
#define uchar unsigned char
#define DATA7 (DATA_BUF&BIT(7))!= 0
#define DATA0 (DATA_BUF&BIT(0))!= 0
//---------------------------------------------------配置口定义---------------------------------------------------
#define TXEN_1 (PORTB|=BIT(0))
#define TXEN_0 (PORTB&=~BIT(0))
#define TRX_CE_1 (PORTB|=BIT(1))
#define TRX_CE_0 (PORTB&=~BIT(1))
#define PWR_1 (PORTB|=BIT(2))
#define PWR_0 (PORTB&=~BIT(2))
#define MISO (PINB&BIT(3))
#define MOSI_1 (PORTB|=BIT(4))
#define MOSI_0 (PORTB&=~BIT(4))
#define SCK_1 (PORTB|=BIT(5))
#define SCK_0 (PORTB&=~BIT(5))
#define CSN_1 (PORTB|=BIT(6))
#define CSN_0 (PORTB&=~BIT(6))
//---------------------------------------------------NRF905状态IO----------------------------------------------------
#define AM PINA&BIT(0)
#define DR PINA&BIT(1)
#define CD PINA&BIT(2)
//-------------------------------------------------------nrf905控制指令-------------------------------------------
#define WC0x00
#define RC0x10
#define WTP0x20
#define RTP0x21
#define WTA0x22
#define RTA0x23
#define RRP0x24
unsignedchar DATA_BUF;
uint cnt=0,miao=0;
//---------------------------------------------------发送数据缓冲区-------------------------------------------------
unsigned char TxRxBuf=
{
0x00
};
unsigned char TxRxBuf1[]={"fuck u!"};
//------------------------------------------------NRF905寄存器配置------------------------------------------------
unsigned charRFConf=
{
0x00, //配置命令//
0x4c, //CH_NO,配置频段在430MHZ
0x0c, //输出功率为10db,不重发,节电为正常模式
0x44, //地址宽度设置,为4字节
0x04,0x04, //接收发送有效数据长度为32字节
0xCC,0xCC,0xCC,0xCC, //接收地址
0x58, //CRC充许,8位CRC校验,外部时钟信号不使能,16M晶振
};
uchar TxAddress={0xcc,0xcc,0xcc,0xcc};
//------------------------------------------------延时------------------------------------------------------------
//---------------------------------------------------SPI读函数-----------------------------------------------------
unsigned char SpiRead(void)
{
unsigned char j;
for (j=0;j<8;j++)
{
DATA_BUF=DATA_BUF<<1;
SCK_1;
if (MISO) //读取最高位,保存至最末尾,通过左移位完成整个字节
{
DATA_BUF|=BIT(0);
}
else
{
DATA_BUF&=~BIT(0);
}
SCK_0;
}
return DATA_BUF;
}
//-------------------------------------------------SPI写函数----------------------------------------------------------
void SpiWrite(unsigned char send)
{
unsigned char i;
DATA_BUF=send;
for (i=0;i<8;i++)
{
if (DATA7) //总是发送最高位
{
MOSI_1;
}
else
{
MOSI_0;
}
SCK_1;
DATA_BUF=DATA_BUF<<1;
SCK_0;
}
}
//------------------------------------------------------初始化nRF905---------------------------------------------
void nRF905Init(void)
{
CSN_1; // Spidisable
SCK_0; // Spi clock line init low
DDRA=0XFF;
PORTA=0XFF;
DDRA=0X00;
PWR_1; // nRF905 power on
TRX_CE_0; // Set nRF905 in standby mode
TXEN_0; // set radio in Rx mode
}
//-----------------------------------------------------初始化寄存器-----------------------------------------------
void Config905(void)
{
uchar i;
CSN_0; // Spi enable for write a spi command
//SpiWrite(WC); // Write config command写放配置命令
for (i=0;i<11;i++) // Write configration words写放配置字
{
SpiWrite(RFConf);
}
CSN_1; // Disable Spi
}
//-----------------------------------------------------发送数据打包---------------------------------------------------
void TxPacket(uchar *TxRxBuf)
{
uchar i;
//Config905();
CSN_0;
SpiWrite(WTP); // Write payload command
for (i=0;i<4;i++)
{
SpiWrite(TxRxBuf);// Write 32 bytes Tx data
}// Spi enable for write a spi command
CSN_1;
delay_ms(1); // Spi disable
CSN_0; // Spi enable for write a spi command
SpiWrite(WTA); // Write address command
for (i=0;i<4;i++) // Write 4 bytes address
{
SpiWrite(TxAddress);
}
CSN_1; // Spi disable
TRX_CE_1; // Set TRX_CE high,start Tx data transmission
delay_ms(1); // // while (DR!=1);
TRX_CE_0; // Set TRX_CE low
}
//----------------------------------------------------------设置发送状态---------------------------------------------
void SetTxMode(void)
{
TRX_CE_0;
TXEN_1;
delay_ms(1); // delay for mode change(>=650us)
}
//-----------------------------------------------设置发送状态---------------------------------------------------
void SetRxMode(void)
{
TXEN_0;
TRX_CE_1;
delay_ms(1); // delay for mode change(>=650us)
}
//-------------------------------------------------判断数据接收状态-----------------------------------------------------
unsigned char CheckDR(void)//检查是否有新数据传入 Data Ready
{
DDRB=((0<<PB0)|(0<<PB1));//先置为输入读状态
if(DR==1 && PINB&BIT(1)==1 && PINB&BIT(0)==0)
{
// Delay(50);
return 1;
}
else
{
return 0;
}
DDRB=((1<<PB0)|(1<<PB1));//重置为输出
}
//----------------------------------------------------读NRF905接收数据------------------------------------------------------------
void RxPacket(void)
{
uchar i;
delay_ms(1);
// TRX_CE=0; // Set nRF905 in standby mode
delay_ms(100);
TRX_CE_0;
CSN_0; // Spi enable for write a spi command
delay_ms(1);
SpiWrite(RRP);
for (i = 0 ;i < 4 ;i++)
{
TxRxBuf=SpiRead();// Read data and save to buffer
}
CSN_1;
delay_ms(10);
TRX_CE_1;
}
//--------------------------------------------------------数据接收------------------------------------------------
voidRX(void)
{
SetRxMode(); // Set nRF905 in Rx mode
while (CheckDR()==0);
delay_ms(10);
RxPacket();
}
unsigned char CheckCD(void)//Pin->检查是否已存在同频率载波
{
if (CD==1)
{
return 1;
}
else
{
return 0;
}
}
void timer0_init(void)
{
TCNT0 = 0x83; //1ms
TCCR0 = 0x03;//64
TIMSK = 0x01;
}
void timer0_ovf_isr(void)
{
TCNT0 = 0x83;
cnt++;
if(cnt==1000)
{
miao++;
cnt=0;
if(miao>59)
{
miao=0;
}
}
}
//-----------------------------------------------------------------------------------------------------------------
void main(void)
{
uchar i;
DDRB=0XF7;
DDRA=0X00;
timer0_init();
SREG=0X80;
nRF905Init();
Config905();
LCD_init();
while(1)
{
TxRxBuf=miao/10;
TxRxBuf=miao%10;
TxRxBuf=cnt/100;
TxRxBuf=cnt/10%10;
TxRxBuf=cnt%10;
LCD_write_char(0,0,num1]);
LCD_write_char(1,0,num1]);
LCD_write_char(2,0,':');
LCD_write_char(3,0,num1]);
LCD_write_char(4,0,num1]);
LCD_write_char(5,0,num1]);
LCD_write_string(0,1,TxRxBuf1);
SetTxMode();// Set nRF905 in Tx mode
TxPacket(TxRxBuf);// Send data by nRF905
//TxPacket(TxRxBuf1);
}
}
接收:
#include <iom16.h>
#include <macros.h>
#include"delay.h"
#include"lcd_init.h"
//---------------------------------------------------配置口定义---------------------------------------------------
#define DATA7 (DATA_BUF&BIT(7))!= 0
#define DATA0 (DATA_BUF&BIT(0))!= 0
#define uint unsigned int
#define uchar unsigned char
#define TXEN_1 (PORTB|=BIT(0))
#define TXEN_0 (PORTB&=~BIT(0))
#define TRX_CE_1 (PORTB|=BIT(1))
#define TRX_CE_0 (PORTB&=~BIT(1))
#define PWR_1 (PORTB|=BIT(2))
#define PWR_0 (PORTB&=~BIT(2))
#define MISO (PINB&BIT(3))
#define MOSI_1 (PORTB|=BIT(4))
#define MOSI_0 (PORTB&=~BIT(4))
#define SCK_1 (PORTB|=BIT(5))
#define SCK_0 (PORTB&=~BIT(5))
#define CSN_1 (PORTB|=BIT(6))
#define CSN_0 (PORTB&=~BIT(6))
//---------------------------------------------------NRF905状态IO----------------------------------------------------
#define AM PINA&BIT(0)
#define DR PINA&BIT(1)
#define CD PINA&BIT(2)
//-------------------------------------------------------nrf905控制指令-------------------------------------------
#define WC0x00
#define RC0x10
#define WTP0x20
#define RTP0x21
#define WTA0x22
#define RTA0x23
#define RRP0x24
unsignedchar DATA_BUF;
//---------------------------------------------------发送数据缓冲区-------------------------------------------------
unsigned char TxRxBuf;
unsigned char TxRxBuf1[];
//------------------------------------------------NRF905寄存器配置------------------------------------------------
unsigned charRFConf=
{
0x00, //配置命令//
0x4c, //CH_NO,配置频段在430MHZ
0x0c, //输出功率为10db,不重发,节电为正常模式
0x44, //地址宽度设置,为4字节
0x04,0x04, //接收发送有效数据长度为32字节
0xCC,0xCC,0xCC,0xCC, //接收地址
0x58, //CRC充许,8位CRC校验,外部时钟信号不使能,16M晶振
};
uchar TxAddress={0xcc,0xcc,0xcc,0xcc};
char tf;
//------------------------------------------------延时------------------------------------------------------------
//---------------------------------------------------SPI读函数-----------------------------------------------------
unsigned char SpiRead(void)
{
unsigned char j;
for (j=0;j<8;j++)
{
DATA_BUF=DATA_BUF<<1;
SCK_1;
if (MISO) //读取最高位,保存至最末尾,通过左移位完成整个字节
{
DATA_BUF|=BIT(0);
}
else
{
DATA_BUF&=~BIT(0);
}
SCK_0;
}
return DATA_BUF;
}
//-------------------------------------------------SPI写函数----------------------------------------------------------
void SpiWrite(unsigned char send)
{
unsigned char i;
DATA_BUF=send;
for (i=0;i<8;i++)
{
if (DATA7) //总是发送最高位
{
MOSI_1;
}
else
{
MOSI_0;
}
SCK_1;
DATA_BUF=DATA_BUF<<1;
SCK_0;
}
}
//------------------------------------------------------初始化nRF905---------------------------------------------
void nRF905Init(void)
{
CSN_1; // Spidisable
SCK_0; // Spi clock line init low
DDRA=0XFF;
PORTA=0XFF;
DDRA=0X00;
PWR_1; // nRF905 power on
TRX_CE_0; // Set nRF905 in standby mode
TXEN_0; // set radio in Rx mode
}
//-----------------------------------------------------初始化寄存器-----------------------------------------------
void Config905(void)
{
uchar i;
CSN_0; // Spi enable for write a spi command
//SpiWrite(WC); // Write config command写放配置命令
for (i=0;i<11;i++) // Write configration words写放配置字
{
SpiWrite(RFConf);
}
CSN_1; // Disable Spi
}
//-----------------------------------------------------发送数据打包---------------------------------------------------
void TxPacket(uchar *TxRxBuf)
{
uchar i;
//Config905();
CSN_0;
SpiWrite(WTP); // Write payload command
for (i=0;i<4;i++)
{
SpiWrite(TxRxBuf);// Write 32 bytes Tx data
}// Spi enable for write a spi command
CSN_1;
delay_ms(1); // Spi disable
CSN_0; // Spi enable for write a spi command
SpiWrite(WTA); // Write address command
for (i=0;i<4;i++) // Write 4 bytes address
{
SpiWrite(TxAddress);
}
CSN_1; // Spi disable
TRX_CE_1; // Set TRX_CE high,start Tx data transmission
delay_ms(1); // // while (DR!=1);
TRX_CE_0; // Set TRX_CE low
}
//----------------------------------------------------------设置发送状态---------------------------------------------
void SetTxMode(void)
{
TRX_CE_0;
TXEN_1;
delay_ms(1); // delay for mode change(>=650us)
}
//-----------------------------------------------设置发送状态---------------------------------------------------
void SetRxMode(void)
{
TXEN_0;
TRX_CE_1;
delay_ms(1); // delay for mode change(>=650us)
}
//-------------------------------------------------判断数据接收状态-----------------------------------------------------
unsigned char CheckDR(void)//检查是否有新数据传入 Data Ready
{
DDRB=((0<<PB0)|(0<<PB1));//先置为输入读状态
if(DR==1 && PINB&BIT(1)==1 && PINB&BIT(0)==0)
{
// Delay(50);
return 1;
}
else
{
return 0;
}
DDRB=((1<<PB0)|(1<<PB1));//重置为输出
}
//----------------------------------------------------读NRF905接收数据------------------------------------------------------------
void RxPacket(void)
{
uchar i;
delay_ms(1);
// TRX_CE=0; // Set nRF905 in standby mode
delay_ms(100);
TRX_CE_0;
CSN_0; // Spi enable for write a spi command
delay_ms(1);
SpiWrite(RRP);
for (i = 0 ;i < 4 ;i++)
{
TxRxBuf=SpiRead();// Read data and save to buffer
}
CSN_1;
delay_ms(10);
TRX_CE_1;
}
//--------------------------------------------------------数据接收------------------------------------------------
voidRX(void)
{
SetRxMode(); // Set nRF905 in Rx mode
//while (CheckDR()==0);
delay_ms(10);
RxPacket();
delay_ms(10);
}
unsigned char CheckCD(void)//Pin->检查是否已存在同频率载波
{
if (CD==1)
{
return 1;
}
else
{
return 0;
}
}
//-----------------------------------------------------------------------------------------------------------------
void main(void)
{
uchar i;
DDRB=0XF7;
DDRA=0X00;
DDRC=0XfF;
nRF905Init();
Config905();
LCD_init();
while(1)
{
RX();
LCD_write_char(0,0,num1]);
w_12864(1,num1]);
w_12864(1,':');
w_12864(1,num1]);
w_12864(1,num1]);
w_12864(1,num1]);
//LCD_write_string(0,1,TxRxBuf1);
//CSN_1;
delay_ms(1);
}
} 怎么就不更新啦 好东西啊mark!!!!!!!!!! 无线串口调试手记(三)——两种平台的源程序
这几天 楼主 回家种地了现在才到学校,经过两天的 辛苦调试,终于在此刻有了最终的成果,
这次给大家带来的代码是两个单片机平台的 分别是 STC89C58RD+ 以及飞思卡尔的Freescale XS128
平台的,这样参加飞思卡尔智能车比赛的同学也有福了,可以拿过去直接用了。
同时我也相信,这应该是ourdev上最完美的 nRF905 的驱动,大家自己看看。
一点说明: 这里所放出的两份源代码都是最简单的,没有附加任何东西,只是单纯的收和发,旨在为了
大家,更好的理解。
点击此处下载 ourdev_669466PCXJ0B.rar(文件大小:76K) (原文件名:MCS-51.rar)
点击此处下载 ourdev_669467TF0ZA7.rar(文件大小:234K) (原文件名:WirelessSP-Xs128mma.rar)
等再隔几天,我会上传最终的无线串口的程序。
假以时日。。。。 我不知道 为什么 这么好的帖子没有人顶 没有人帮我至酷。。。
好难受啊 以前也玩过,我记得可以实现多个模块组网 我真是伤心透了。。。。 标记 ding.................
我也在弄nrf905,还不会,来跟楼主学习 mark 有点骚了,淡定啊,阿莫来看看才是关键 刚好要学学nrf905.很实用。 最近也在搞NRF905,用的是51单片机,STC12LE5A60S2晶振采用22.1184M
我也希望做一个协议。
希望有兴趣的,有相关经验的朋友进来讨论啊。
QQ群:58163037
加入时候说明:来自OURDEV。 请问在建筑里面能传多远呢?能穿透多少墙?我最近也在做无线通信,买了个nRF905模块调试,传的距离太近了。 顶起! 资料不能下载,还是要顶一下{:smile:} 顶顶,学习啦 学习中,望有更多内容。 mark and mark 楼主,你好,最近在搞nrf905,请问这模块能不能发送汉字,然后在1602显示出来?请问在程序的哪里改?小弟是菜鸟,问得不好不要见怪! ....学习了。。。 winfisher 发表于 2011-8-9 02:44 static/image/common/back.gif
你要把标题名改成:XX项目共享,肯定一堆人进来mark。
哈哈,这位兄弟说的有道理 楼主没有坚持自己啊!! 必须的肯定顶,留着以后学习i一下! mark下,感觉很有用处. 好东西,学习一下无线知识。。。。 最近在搞NRF905,目前只能实现发射接收,参考一下资料。。。,谢谢
几年后重新拿起这个 不错,顶下 。。。学习了 也正在学习,mark!
学习。谢谢楼主分享。 非常好的教程 楼主莫伤心,我来支持你。请继续吧。 开源项目 支持楼主 无线串口之 一步一步教你 调试 nRF905 谢谢分享!
页:
[1]