PDA

View Full Version : Hserin



Dinoden
- 5th December 2016, 04:06
Hi.
I am having a problem trying to receive certain data over one byte using the WAIT ( ) modifier in PBP.
Here is my problem shown below. These are the characters that I receive from a certain chip when I send a reset to it.


Sent data:

HSerout ["AT+RST",13,10]


Received data (HSERIN):


2nd boot version : 1.5
SPI Speed : 40MHz
SPI Mode : DIO
SPI Flash Size & Map: 8Mbit(512KB+512KB)
Ai-Thinker Technology Co. Ltd.
ready



The problem is that I only want to display "ready" on my 2X16 display.


hserin [WAIT("ready"),RX0,RX1,RX2,RX3,RX4]

hserin [WAIT($79),RX0,RX1,RX2,RX3,RX4]

hserin [WAIT("r","e","a","d","y"),RX0,RX1,RX2,RX3,RX4]

hserin [WAIT($72,$65,$61,$64,$79),RX0,RX1,RX2,RX3,RX4]


I tried all these above variations and none work for me. If I use the "." at the end of "Ltd."
in the above example it would work because I would get everything after the "." which is "ready"
Problem is that there are "." before the "Ltd." like at the "1.5" so I get everything after that.

How does one go about doing this. Do I use "WAITSTR". If yes, I have tried and dont quite understand how to use it.
Hope this makes sense.

Help is greatly appreciated.
Thanks

richard
- 5th December 2016, 05:18
hserin [WAIT("Ltd."),skip 2 ,RX0,RX1,RX2,RX3,RX4]
the skip 2 is for the expected CR,LF {CHR13,CHR10}

Then rx0--4 should be "ready"

Dinoden
- 6th December 2016, 16:38
Thanks Richard!
This looks good! I'll give it a try.
Don't know why I did not think of this? Over thinking maybe?
Thanks again.

Dinoden
- 11th December 2016, 23:47
Hi Richard.
I don't quite get somehing with HSERIN. Your first example worked great I got "ready" on my 2X16 display. But after that I cant get
any other replys to work They just sit there waiting.

EG.

I am sending out "AT+CWMODE=1" and my reply is:

AT+CWMODE=1

OK

I would like to start the next command after receiving "OK" so I know the first setting was excepted before I go on to the next.
But for some reason the PIC never "sees" "OK".


Test program:


LCDOut $FE,1,"Setting STA mode"
LCDOut $FE,$C0,"Please wait....."

pause 2000

HSerout ["AT+CWMODE=1",13,10]
hserin [WAIT("OK") ,RX0,RX1,RX2,RX3,RX4,RX5]

pause 2000

LCDOut $FE,1,"Set connection "
LCDOut $FE,$C0,"Please wait....."

pause 2000

HSerout ["AT+CIPMUX=1",13,10]


I never get to "Set connection ". Just hangs on WAIT("OK").

I have tried to go back to start of program in case the reply was missed with this

hserin 100,start, [WAIT("OK") ,RX0,RX1,RX2,RX3,RX4,RX5]

but it will go around and around for ever.

I hate to bother you again but I have spent most of the weekend and I just cant get it.
Any help would be appreciated .

Thanks

richard
- 12th December 2016, 01:18
HSerout ["AT+CWMODE=1",13,10]
hserin [WAIT("OK") ,RX0,RX1,RX2,RX3,RX4,RX5]


the device responds

OK(chr13,chr10) or OK(chr10)

so
RX0=13,RX1=10 and then hserin will wait forever trying to fill rx2-5 because no more serial data is forthcoming


either use a timeout or

hserin [WAIT("OK") ]

Art
- 12th December 2016, 15:20
With hserin you can receive one byte at a time into a buffer until you see the return character,
and then look at the rest of the command you received.

Dinoden
- 13th December 2016, 04:13
Okay. Will try tomorrow.
Thanks again for your help.

Dinoden
- 13th December 2016, 04:16
Thanks for the info! Tomorrow I will try again.