Capture and compare serial data


Results 1 to 17 of 17

Threaded View

  1. #6


    Did you find this post helpful? Yes | No

    Default a checksum..

    @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
    Last edited by Dennis; - 6th April 2010 at 01:34.

Members who have read this thread : 0

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts