PDA

View Full Version : HSEROUT problem



karlosguay
- 9th January 2012, 12:58
Hi:

I'm need send some characters in RS485. When I received a string from the master, then send the characters.

If I received next string:
02 10 02 cf 00 02 04 00 00 00 00 a9 9b
(code "hserin 15,PasoSerie,[b0,b1,b2,b3]"
"hserin 15,PasoSerie,[b4,b5,b6,b7,b8,b9,b10,b11,b12]")
then I send to the master:
02 10 02 cf 00 02 70 7c
(code "hserout [bs0,bs1,bs2,bs3,bs4,bs5,bs6,bs7,10]")
All is OK.


But if I received from the master:
02 03 02 e3 00 01 74 77
(code "hserin 15,PasoSerie,[b0,b1,b2,b3]")
then I send to the master:
02 83 01 70 f0.
(code "hserout [bs0,bs1,bs2,bs3,bs4,10]")

The problem: the master dont received this string. The master received another string:
0f 12 83 01 70 f0 0a

I'm working with 18F6720 and I dont know how repair this.

Any suggestion???

BH_epuk
- 10th January 2012, 20:02
Hard to say, could you post the entire tx/rx routine and details of hardware.
I presume your using a max485 or similer as the RS485 hardware interface to the PIC, the first thing that if this is half duplex are you seting the DE line (pin3 on the max485) high during tx ?
Another note on this is to ensure this remains high for a period of two bytes after the HSEROUT has completed otherwise data still being transmitted bu the UART would be corupted.

something like:

HSERIN xx,xxxxx,[xxxxxx] 'recieve data
DE = 1 'enable 485 tx
HSEROUT [xxxxxxxx] 'send data
PAUSE xxx 'wait two bytes
DE = 0 'disable 485 tx, enable 485 rx

karlosguay
- 11th January 2012, 10:23
Thanks,

the code used is

RXTX=1
pause 2
CREN=0

hserout [bs0,bs1,bs2,bs3,bs4,10]

pause 2
cren=1
RXTX=0
pause 2


RXTX is DE in MAX485 and CREN is RCSTA1.4.

I think the problem is in the input, i dont know the lenght of the string the master send me. When he send the string
02 03 02 e3 00 01 74 77
I read
hserin 15,PasoSerie,[b0,b1,b2,b3]
then I send

bs0=b0
bs1=b1+$80
bs2=$01
bs3=CRC.lowbyte
bs4=CRC.highbyte

RXTX=1
pause 2
CREN=0

hserout [bs0,bs1,bs2,bs3,bs4,10]

pause 2
cren=1
RXTX=0
pause 2


The master received next string:
0f 12 83 01 70 f0 0a

what's happening??

BH_epuk
- 11th January 2012, 19:44
Is there any way you can add in a DEBUG after the "hserin 15,PasoSerie,[b0,b1,b2,b3]"?
Just to output the raw recieved bytes to monitor in a terminal.

The other thing that you could do is to clear the RX FIFO before enabling the reciever with "cren = 1". Something like

temp = RCREG ' clear first byte
temp = RCREG ' clear second byte
cren = 1