2014-03-29 53 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