@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:
On the receiver side the code (as per the thread referenced earlier) would look like this: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
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.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
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