Hola, he estado leyendo y veo que no hay muchos que sepan del tema, pero espero conseguir la respuesta.
Mi proyecto me demanda entre otras cosas que el Pic conosca el modulo padre del Xbee que tiene que controlar.
Entonces,, tengo (PIC)-->Xbee (ED) <------> Xbee (R) -----> Xbee (C)----> PC
Si yo envio una trama de datos cualquiera no tengo problema, la historia comienza cuando yo quiero saber el MY del R, esto lo debo lograr con el comando "AT MY", tras haber ingresado al modo comando con la siguiente secuencia
(1 seg inactividad)
envio: +++
(1 seg inactividad)
devuelve: OK
envio: AT MY
devuelve (ej.): 5358
les muestro mi codigo con "mis intentos"
;--------------------- Project attributes ---------------------------
;Project name : Sistema remoto Personal
;
;Author : Carlos Germán Ruiz
;
;Version : 1.0.0 ~ 11/06/2012
;
;----------------------- Compiler settings --------------------------
Declare SHOW_SYSTEM_VARIABLES = OFF ; At simulation in Proteus not show internal variables
Declare FSR_CONTEXT_SAVE = OFF ; Do not save FSR register context
Declare Reminders = OFF ; Turn off reminders
Declare Warnings = OFF ; Turn off warnings
;-------------------------- Base settings --------------------------
Device = 16F876A ; Chosen Picmicro
Xtal = 20 ; Oscillator 20 MGz
;-------------------------- USART --------------------------
Declare Hserial_Baud 9600 ; USART speed, baud
Declare Hserial_TXSTA = %00100000 ; Turn on USART transmitter
Declare Hserial_RCSTA = %10010000 ; Turn on USART receiver
;Declare Hserial_SPBRG 32 ; SPBRG register value for chosen speed
Declare Hserial_Clear = On ; Turn on automatic overflow error clear
Declare Rsin_Mode = TRUE
;-------------------------- Ports --------------------------
Declare PortB_Pullups = OFF ; Turn off PORTB pull-ups
Declare All_Digital = On ; Each port carries out the function by default
Input PORTB.0
Output PORTC.5
Symbol pb0 = PORTB.0
Symbol exbee = PORTC.5
Dim ID As Word
Dim i As Byte
Dim a As Byte
Dim aux[2]As Byte
Dim MP[4]As Byte
;----------------------------- SFR ------------------------------------
;-------------------------------- Start ----------------------------
;------------------------ Main program -----------------------
MainProgram:
i=0
a=0
High PORTC.5
HSerOut ["Asi no tiene k mandar nada"]
If PORTB.0 = 1 Then
; While a <=3
Low PORTC.5 ;activa el enable del Xbee
DelayMS 5000 ;tarda 13ms asi que espero 50ms
HSerOut ["HOLA COMO ESTAS?"]
DelayMS 1000
HSerOut ["+++"] ;entrar en modo AT del Xbee
DelayMS 500
DelayMS 500
;HSerIn [ID]
; For i=0 To 1 ;leo la respuesta del XB tiene que ser OK
; HSerIn[aux]
;DelayMS 10
; Next i
; If aux[0]=="O" Then
; If aux[1]=="K" Then ;si no es OK entonces vuelvo a intentar
HRSOut "AT MP" ;si salio bien entonces pido el MP
For i=0 To 3
;HSerIn[MP] ;guardo este valor que es el MY
HRSIn MP
;DelayMS 10
Next i
HSerOut ["AT CN"] ;salgo del modo AT!!!!!!!!!!
DelayMS 20
;For i=0 To 3
HSerOut["$",MP[0],MP[1],MP[2],MP[3]] ;envio este valor a traves del Xbee
;DelayMS 10
;Next i
; EndIf
; EndIf
DelayMS 1000
HSerOut ["AT CN"]
HSerOut ["termino 1 ciclo"]
; HSerOut [a]
; a= a+1
; Wend
EndIf
GoTo MainProgram ; Return to main program
Como veran he probado muchas variantes y aun asi no consigo pasar del "Hola como estas?"
tras eso pasan 2 cosas: o recivo como dato +++ o no pasa nada.
en el segundo caso creo que lo que sucede es que efectivamente estoy en modo de programación. pero no me devuelve el MY como informacion.
Este programa lo simule en Proteus con un virtual terminal (simulando ser un Xbee) y funciona de maravilla.
Los modulos Xbee transmiten correctamente y estan configurados para 9600, por lo que no secual es mi error.
Desde ya gracias al que pueda darme una mano.!
Atte. Germán.