2014-03-29 23 views
0

我开始用的XBee系列2 在发送端我在API模式下使用LPC2148具有的XBee协调, 和Rx端我是在LPC2148工作在路由器AT模式下在Shield上使用xbee。 我希望XBee能够激活一个D3引脚,它可以用来打开Rx端的继电器的Tx与LPC2148中的XBee,其中Rx的XBee与继电器API模式不工作

API帧格式如下代码使用c程序。

这里

#define Delimeter 0x7E 

void Init_UART1(void)     //This function setups UART1 
{ 
unsigned int Baud16; 
U1LCR = 0x83;     // DLAB = 1 
Baud16 = (Fpclk/16)/UART_BPS; 
U1DLM = Baud16/256;       
U1DLL = Baud16 % 256;      
U1LCR = 0x03; 
} 

void main() { 

Init_UART1(); 
LED1_ON(); 
setRemoteState(0x5);//AD3 config DOUT HIGH 
Delay(25); 
LED1_OFF(); 
setRemoteState(0x4);//AD3 config DOUT LOW 
Delay(25); 

void setRemoteState (char value) { 

UART1_Write(Delimeter);//start byte 
UART1_Write(0);//high part of length 
UART1_Write(0X10);//low part of length 
UART1_Write(0X17);//remote AT command 
UART1_Write(0X0);//frame id 0 for no reply 
UART1_Write(0X0); 
UART1_Write(0X0); 
UART1_Write(0X0); 
UART1_Write(0X0); 
UART1_Write(0X0); 
UART1_Write(0X0); 
UART1_Write(0XFF);// broadcast 
UART1_Write(0XFF);// broadcast 
UART1_Write(0XFF); 
UART1_Write(0XFE); 
UART1_Write(0X02);//apply changes immediately on remote 
UART1_Write('D');//writing on AD3 pin 
UART1_Write('3'); 
UART1_Write(value); 
sum = 0x17 + 0xFF + 0xFF + 0xFF + 0xFE + 0x02 + 'D' + '3' + value; 
UART1_Write(0xFF - (0xFF & sum));//checksum 

Delay(25); 
} 
} 

输入密码我不能够让我的接收方向的任何通信或数据。 D3引脚电压仍然很低。 请在这一点上指导...

这个程序工作正常与arduino使用Serial.write函数。

问候, 维杰

回答

0

您是否使用了正确的波特率?你确定你已经正确连接了TX/RX并且没有跨过它们吗?如果您启用了硬件流量控制,是否将XBee中的RTS信号置为有效? XBee模块是否启动并接收足够的电流?

如果您在其他设备(计算机通过FTDI的TTL到USB电缆)上监控XBee传输信号,您是否在启动时看到字节(我认为它在启动过程中会发送调制解调器状态)?如果您监视LPC2148发送信号,您是否看到您认为正在发送的字节流(确认您正在驱动UART1)?

您能否告诉XBee模块是否正在接收您的请求,可能是通过在高低输出之间切换ATD0并使用LED或范围进行检查?你有没有任何硬件可以用来监视两台设备之间的串行流,看看它是否发送你认为正在发送的字节?你确定它正在计算正确的校验和(以某种方式转储字节并尝试通过X-CTU运行它们以查看它们是否工作)。

如果您打算在LPC2148和XBee模块之间进行大量通信,您可能需要尝试将此Open Source ANSI C XBee Host Library移植到平台。它包含多层XBee帧处理,可减少需要编写的软件数量。

+0

虽然它没有直接回答问题,但我觉得这可以指导OP缩小问题的原因。另一个用户搜索相似的问题将受益于相同的说明。它开始作为评论,但很快变得太大。我是否应该将其分解为多个评论并将其作为答案删除? – tomlogic