BS2 & XBee w/n receive from BS1 & XBee
I am working on a remote transmitter based on a BS1 and a Series 1 XBee. For now I am just trying to send the condition of a switch closure, but will use a DS1620 for temperature data after I get this chunk of code working. I fully subscribe to the "small bites" methodology.
I first used a pair of BS2's because I'm more familiar with that code. I got it to work with some help from Tracy Allen. So now I'm essentially "porting" the Transmitter part of this code to the BS1. Simplified BS2 Receiver code:
Simplified BS1 Transmitter code:
Circuit includes switch on Pin 7 with a 10k pull-up resistor and the XBee connections as per the Tutorial V1.0
The BS1 Transmitter code will, on its own, display the correct info via the DEBUG statement. However the corresponding switch condition is not transmitted to and/or displayed on the Receiver DEBUG statement.
The three major difference between the BS1 and BS2 TX code are:
1) Baud rates limited to 2400 on the BS1; Changed code to accomodate BS1 limit
2) The Decimal modifier for the BS1 is # and is DEC for the BS2
3) The format of the SEROUT statements as follows:
I think the problem may be the format of the SEROUT statement for the BS1 vs. BS2. For the BS2, the XBee configuration SEROUT statements include a CR inside the brackets, i.e. SEROUT Tx,Baud,["ATD6 1,CN",CR]. The BS1 will not allow the CR so I'm forced to use SEROUT Tx,Baud,("ATD6 1,CN"). I don't think the bracket vs. parenthesis is a problem, but I think the XBee is looking for that CR and is not getting it with what is allowed by the BS1 code formatting.
Has anyone sucessfully used a BS1 to control an XBee? It seems that the XBee came out way after the BS1 and most people have only interfaced it with the BS2.
Any and all comments, suggestions are welcome
falcon
I first used a pair of BS2's because I'm more familiar with that code. I got it to work with some help from Tracy Allen. So now I'm essentially "porting" the Transmitter part of this code to the BS1. Simplified BS2 Receiver code:
' {$STAMP BS2} ' {$PBASIC 2.5} ' *************** Constants & PIN Declarations *********** Baud CON 396 '2400 baud Rx PIN 15 ' XBee DIN Tx PIN 14 ' XBee Dout RTS PIN 11 ' XBee RTS - Used later ' ************** Variable Declarations ****************** Switch VAR Byte PAUSE 500 DEBUG "Configuring XBee...",CR PAUSE 2000 ' Guard Time SEROUT Tx,Baud,["+++"] ' Command mode sequence PAUSE 2000 ' Guard Time SEROUT Tx,Baud,["ATD6 1,CN",CR] ' RTS enable (D6 1) ' ************** Main LOOP ****************************** PAUSE 500 ' 1/2 second pause to stabilize comms DEBUG "Awaiting Byte Data...",CR DO SERIN Rx\RTS,Baud,500,TimeOut1,[DEC Switch] ' Use Timeout to wait for byte TimeOut1: DEBUG CRSRXY, 0, 5, DEC Switch, CR LOOP
Simplified BS1 Transmitter code:
' {$STAMP BS1} ' {$PBASIC 1.0} SYMBOL Switch = B11 SYMBOL XB_Sleep = 3 SYMBOL TX = 4 ' XBee TX SYMBOL Win = 7 SYMBOL BAUD = N2400 DEBUG "Configuring XBee...",CR PAUSE 2000 ' Guard Time SEROUT Tx,Baud,("+++") ' Command mode sequence PAUSE 2000 ' Guard Time SEROUT Tx,Baud,("ATD6 1,CN") ' RTS enable (D6 1) PAUSE 1000 SEROUT Tx,Baud,("ATBD 1,CN") ' Change BAUD rate to 2400 SEROUT Tx,Baud,("ATSM 1") main: Switch = PIN7 'load with current switch state DEBUG #Switch, CR SEROUT Tx, Baud, (#Switch) PAUSE 15 DEBUG CLS GOTO main
Circuit includes switch on Pin 7 with a 10k pull-up resistor and the XBee connections as per the Tutorial V1.0
The BS1 Transmitter code will, on its own, display the correct info via the DEBUG statement. However the corresponding switch condition is not transmitted to and/or displayed on the Receiver DEBUG statement.
The three major difference between the BS1 and BS2 TX code are:
1) Baud rates limited to 2400 on the BS1; Changed code to accomodate BS1 limit
2) The Decimal modifier for the BS1 is # and is DEC for the BS2
3) The format of the SEROUT statements as follows:
I think the problem may be the format of the SEROUT statement for the BS1 vs. BS2. For the BS2, the XBee configuration SEROUT statements include a CR inside the brackets, i.e. SEROUT Tx,Baud,["ATD6 1,CN",CR]. The BS1 will not allow the CR so I'm forced to use SEROUT Tx,Baud,("ATD6 1,CN"). I don't think the bracket vs. parenthesis is a problem, but I think the XBee is looking for that CR and is not getting it with what is allowed by the BS1 code formatting.
Has anyone sucessfully used a BS1 to control an XBee? It seems that the XBee came out way after the BS1 and most people have only interfaced it with the BS2.
Any and all comments, suggestions are welcome
falcon
Comments
I still don't know if the actual problem is on the TX or RX end though. I confirmed that the CR must be in the SEROUT statement by going back to the BS2 & XBee transmitter configuration and trying it with and without the CR. While the BS2 editor would not cause an error with the CR in the SEROUT statement (as the BS1 did), that data only successfully made it to the Receiver with the CR present.
So, I need to use the above statement to get the data to the Receiver, but the BS1 editor will not accept that statement.
I tried using the following statement with the CR character from the ASCII table but that did not correct the issue either.
Is there a work-around for getting that CR in the BS1 SEROUT statement?
falcon