-
HSEROUT problem
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???
-
Re: HSEROUT problem
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
-
Re: HSEROUT problem
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??
-
Re: HSEROUT problem
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