@Charles and Dave
I definitely agree with the checksum idea , in fact, it is the checksum concept that has led to the confusion
As a reference let's use this thread (thanks Art for his input!)
http://www.picbasic.co.uk/forum/showthread.php?t=12492
SO from that thread POST #2 one possible method of checksumming is described, since it's fairly straight forward we could use that as a reference.
So the bytes I would like to transmit are declared as
WNUM,XNUM,YNUM and ZNUM respectively.
***NOTE that this fairly trivial when comparing each byte of a single transmission BUT I am transmitting the same thing 4 times and that's whats confusing me.
The reason I want to do it 4 (or more) times is because from what I have seen in my tests the first one and/or second received line is usually damaged/corrupted so I figured it is probably best if I compare the third and 4th transmitted lines. Does that make sense?
Here's an example of the transmit code:
Code:
WNUM as byte
XNUM as byte
YNUM as byte
ZNUM as byte
CHECKSUM as byte
CHECKSUM = $3F
'now do the XOR checksumming
Checksum = Checksum ^ WNUM
Checksum = Checksum ^ XNUM
Checksum = Checksum ^ YNUM
Checksum = Checksum ^ ZNUM
'and now TX the data 4 times
main:
low led 'set led low
If GPIO.2 = 1 then main 'check button
send:
for counter = 0 to 3
DEBUG train,train,train,train,train,synk,WNUM,XNUM,YNUM,ZNUM,CHECKSUM,$d,$a
next counter
high led 'set led high
pause 200
goto main
end
On the receiver side the code (as per the thread referenced earlier) would look like this:
Code:
'Variables begin here
SYNK VAR BYTE
SYNK = $7E
WNUM VAR BYTE
XNUM VAR BYTE
YNUM VAR BYTE
ZNUM VAR BYTE
CHECKSUM var byte 'this holds the received checksum
CHECKSUM_CHECK var byte 'hold the XOR'd value
Checksum_Check = $3F 'this is the checksum value to XOR with
'Variables end here
DEBUGIN [WAIT(SYNK),WNUM,XNUM,YNUM,ZNUM,CHECKSUM]
' wait for SYNK, when received store next 4 bytes in variables WNUM,XNUM,YNUM,ZNUM
'then send these to hyperterminal or serial program or wherever
'checksum the received bytes using XOR with 3F
Checksum_Check = Checksum_Check ^ WNUM
debug "xNUM checksum_check is ",HEX checksum_check
Checksum_Check = Checksum_Check ^ XNUM
debug "wNUM checksum_check is ",HEX checksum_check
Checksum_Check = Checksum_Check ^ YNUM
debug "yNUM checksum_check is ",HEX checksum_check
Checksum_Check = Checksum_Check ^ ZNUM
debug "zNUM checksum_check is ",HEX checksum_check
IF Checksum_Check = Checksum THEN
DEBUG "WNUM is ",DEC WNUM,"XNUM is ",DEC XNUM,"YNUM is ",DEC YNUM,"ZNUM is ",DEC ZNUM,$d,$a
ENDIF
BUT as you can see the receive code only does its thing for each received line. I want to store all 4 lines of data then do a compare of the received lines 3 and 4.
See the problem is if only one transmission is made (one line) and there is a corruption of a byte (checksum mismatch anywhere in the line) then the TX fails. That is why I thought to send and receive 4 lines (or more) of the same thing and then do a compare.
I am totally confused (again)
PLEASE HELP..........!
Kind regards
Dennis
Bookmarks