在API模式下使用Xbee的Tx LPC2148与Rx Xbee和Relay不起作用

时间:2014-03-29 13:11:17

标签: api xbee

我开始使用xbee series 2处理lpc2148。 在发送方面,我在API模式下使用lpc2148和xbee协调器, 和Rx方面我在路由器AT模式下使用盾牌上的xbee。 我希望XBee激活一个D3引脚,可以用来打开Rx端的继电器

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);
 }  
 }  

我无法在我的Rx端获得任何通信或数据。 D3引脚输出波动仍然很低。 请指导这一点...

使用Serial.write函数,这个程序可以正常使用arduino。

此致 维杰

1 个答案:

答案 0 :(得分:0)

您使用的是正确的波特率吗?您确定已正确连接TX / RX并且没有越过它们吗?如果你启用了硬件流控制,那么进入XBee的RTS信号是否被断言? XBee模块是否通电并接收足够的电流?

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

您能否判断XBee模块是否正在接收您的请求,可能是通过在高输出和低输出之间切换ATD0并检查LED或示波器?您是否有任何硬件可用于监控两个设备之间的串行流,以查看它是否发送您认为您正在发送的字节?你确定它正在计算正确的校验和(以某种方式转储字节并尝试通过X-CTU运行它们以查看它们是否有效)。

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