Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronic Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

Register Log in

[PIC] Question About Crc8 Picbasic Implementation

Nexting

Newbie level 4
Joined
Apr 12, 2016
Messages
5
Helped
0
Reputation
0
Reaction score
0
Trophy points
1
Location
Medellin
Activity points
49
Hi To All:

im Trying to build a vending unit that uses serial data to get general information counters,status,serial an anotherInfo. I´m trying to implement a crc routine based in this Picbasic crc8 routine.
Code:
CRC8:
FOR CRC_IDX = 0 to 7
IF (CRC.7 ^ CRC_IN.7) THEN
CRC = (CRC << 1) ^ CRC_Poly 'equals($31)
ELSE
CRC = CRC << 1
eNDIF
CRC_IN = CRC_IN << 1
NEXT CRC_IDX
RETURN
But this only works when do you have the hex string value previously defined on the code this is not my case,for example when i need interrogate the serial id i send the value in hex ($23,$47) the right reply for the unit is reply ($23,$47) serial number($01,$08,$24,$36,$49) and crc8(?)this data not always the same and could change in new units. my question is this the most simple way to build a crc? could be implemented when the data is out over Hserout? or perhaps is more complex. Sorry for extend this explanation but is not to clear for me. Really appreciatte any advice about this issue.

Best Regards

Nexting
 

betwixt

Super Moderator
Staff member
Joined
Jul 4, 2009
Messages
14,108
Helped
4,674
Reputation
9,362
Reaction score
4,414
Trophy points
1,393
Location
Aberdyfi, West Wales, UK
Activity points
120,567
I'm not sure I understand the question.

The algorithm is the same regardless of the format the digits are presented. I think this is written in Oshonsoft BASIC so the only reference with a '$' before it is a comment. I think it should work whatever the number format is.


Brian.
 

FvM

Super Moderator
Staff member
Joined
Jan 22, 2008
Messages
46,732
Helped
13,872
Reputation
27,992
Reaction score
12,516
Trophy points
1,393
Location
Bochum, Germany
Activity points
272,762
The CRC algorithm as functional as such, question is how it's used in the application, if CRC is initialized correctly, how you feed CRC_IN. This can't be seen from your code snippet.
 

Nexting

Newbie level 4
Joined
Apr 12, 2016
Messages
5
Helped
0
Reputation
0
Reaction score
0
Trophy points
1
Location
Medellin
Activity points
49
Hi Thanks for answers

sorry maybe some confuse about just i put the crc calculation i find a complete example to try to explain better.
Code:
CRC      VAR BYTE
CRC_IDX  VAR BYTE
CRC_IN   VAR BYTE
CRC_Poly CON $31

CRC8:
    FOR CRC_IDX = 0 to 7
        IF (CRC.7 ^ CRC_IN.7) THEN
            CRC = (CRC << 1) ^ CRC_Poly
        ELSE
            CRC = CRC << 1
        ENDIF
        CRC_IN = CRC_IN << 1
    NEXT CRC_IDX
RETURN

X      VAR BYTE

CRC = 0
FOR X = 0 TO 8
    LOOKUP X,[$AD, $42, $CB, $16, $05, $06, $00, $6C, $0E], CRC_IN 'pre defined value
    HSEROUT [HEX2 CRC_IN]
    GOSUB CRC8
NEXT X    
HSEROUT [HEX2 CRC]
when Testing This code i obtain on the output AD 42 CB 16 05 06 00 6C 0E and (CRC 87),my case is when receive in hex 23,47 the transmits sends hex 23 47 01 08 24 36 49 and crc8(?), however in te above example the value is stored on a lookup routine and i can´t store the value the value on then because lookup function don´t let you use variable array this always need to be constant. in my project the ouput data is changing constantly, i want to know if i can implemement this crc8 routine to process the ouput string in real time and could add the calculate crc on the output data?, or if maybe i can apply a better method. Again Thanks For the time an comments.

Best Regards

Nexting
 

betwixt

Super Moderator
Staff member
Joined
Jul 4, 2009
Messages
14,108
Helped
4,674
Reputation
9,362
Reaction score
4,414
Trophy points
1,393
Location
Aberdyfi, West Wales, UK
Activity points
120,567
Basic language is horrible - such a non-standard version of it is even worse!

I can't work out what "HSEROUT [HEX2 CRC_IN]" is supposed to do. The reference manual says:
HSEROUT statement is used for serial transmission. HSEROUT statement may have multiple arguments separated by ','. One can use string variables and constants, numeric variables and byte numeric constants. If '#' sign is used before the name of a variable then its decimal string representation is sent to the serial port.
So what is 'HEX2' and what do the square brackets indicate or do they just appear in the output stream?

Brian.
 

FvM

Super Moderator
Staff member
Joined
Jan 22, 2008
Messages
46,732
Helped
13,872
Reputation
27,992
Reaction score
12,516
Trophy points
1,393
Location
Bochum, Germany
Activity points
272,762
You need to review the PICBASIC manual. HEX2 means two hex digit formatting.

In my view, the original question hasn't much to do with CRC algorithm. It's more general how to implement a specific program flow. Unfortunately, I don't understand what's the exact problem. Of course, the CRC8 routine can be used with variable output data. But you didn't tell about your application, the actual data source and so on.
 

Nexting

Newbie level 4
Joined
Apr 12, 2016
Messages
5
Helped
0
Reputation
0
Reaction score
0
Trophy points
1
Location
Medellin
Activity points
49
Hello:

Thanks For answers, I don,t looking about Hserin or Hserout Formating, this is a simple example to try to explain my need, my question is about crc routine implementation about insert the crc when serial information is coming in or going out. In the above example in the lookup the data are fixed and crc calculate that stream in my case the data is not the same always and need calculate while data is incoming or out. The properly question is that the crc routine posted in the first post could done that ?.


Thanks Again

Best Regards
 

FvM

Super Moderator
Staff member
Joined
Jan 22, 2008
Messages
46,732
Helped
13,872
Reputation
27,992
Reaction score
12,516
Trophy points
1,393
Location
Bochum, Germany
Activity points
272,762
The properly question is that the crc routine posted in the first post could done that ?
The answer was already given: Yes.

That's how CRC calculation works, you initialize the CRC variable, call the routine for every message byte and have the message CRC.
 

Toggle Sidebar

Part and Inventory Search


Welcome to EDABoard.com

Sponsor

Sponsor

Design Fast


×
Top