Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

PIC18f4520 CRC(Cyclic Redundancy Check) & ibutton

[es] :: Elektronika :: Mikrokontroleri :: PIC18f4520 CRC(Cyclic Redundancy Check) & ibutton

[ Pregleda: 3236 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

milos_ladni
Milos Ladicorbic
nezaposlen
Vladimirovac

Član broj: 205593
Poruke: 16
195.252.70.*



Profil

icon PIC18f4520 CRC(Cyclic Redundancy Check) & ibutton12.01.2009. u 15:03 - pre 151 meseci
Pozdrav svima!!

Radim diplomski rad iz mikrokontrolera na temu "pristupna kontrola sa ibutton-om", potrebno mi je da izracunam CRC (Cyclic Redundancy Check) od primljenog podatka i na osnovu njega registrujem da li je doslo do greske! Koristim PIC18F4520 MPLAB i ASM!
Evo i podataka:
Preko serijske komunikacije se dobija 64 bita (8 bajtova) podataka od kojih prvih 8 predstavljaju serijski broj uredjaja, sledecih 48 jedinstveni serijski broj a poslednjih 8 bita CRC od predhodnih 56 bita...
Kako ja da izracunam CRC ako polinomni generator glasi: X^8+X^5+X^4+1
Moze i neko matematicko objasnjenje mada bi kod najbolje dosao.
Dole sam postavio i sliku sa jednim delom teksta iz data sheet-a.
Evo i promera sa jednog ibutton-a koji imam u ruci..

*********************************************
* CRC || IDENTIFIKACIONI BROJ || SERIJSKI BROJ *
*___________________________________________*
*_28_____00 00 11 3A A5 67__________01________*
*********************************************

Hvala unapred!!!!


Prikačeni fajlovi
 
Odgovor na temu

sinisa_s
Bremen

Član broj: 98726
Poruke: 55
*.iat.uni-bremen.de.



+3 Profil

icon Re: PIC18f4520 CRC(Cyclic Redundancy Check) & ibutton12.01.2009. u 18:05 - pre 151 meseci
Pozdrav,

kako racunati CRC, cak i kod je dat na mnogo mesta na netu. Malo googlanja i:

http://en.wikipedia.org/wiki/Cyclic_redundancy_check
http://www.netrino.com/Embedde.../How-To/CRC-Calculation-C-Code
http://www.sensirion.com/en/pd...culation_Humidity_Sensor_E.pdf

.... itd.

Bitno je da razumes zasto se koristi CRC i kako se racuna.
Sada samo to treba implementirati u ASM.

Pozdrav.


Sinisa
 
Odgovor na temu

VRadule
Vladimir Radulovic

Član broj: 191689
Poruke: 211
77.46.241.*



+8 Profil

icon Re: PIC18f4520 CRC(Cyclic Redundancy Check) & ibutton13.01.2009. u 09:16 - pre 151 meseci
Ja sam koristio tabelu, imaš objašnjeno u maxim-ovom AN-u kako se koristi tabela umesto matematike ili ti šiftovanja.

Evo ti primer u mikroBasicu, za ds1820 temperaturni senzor. Kada ospojiš senzor ili bilo koji pin senzora prijaviće grešku na lcd-u,
ako isto uradiš bez CRC kontrole prijavljulje ili 12.5 ili 85 stepeni, ako se dobro sećam.

Code:

program crc_chek

const crc_table as byte[256]=(
0,94,188,226,97,63,221,131,194,156,126,32,163,253,31,65,
157,195,33,127,252,162,64,30,95,1,227,189,62,96,130,220,
35,125,159,193,66,28,254,160,225,191,93,3,128,222,60,98,
190,224,2,92,223,129,99,61,124,34,192,158,29,67,161,255,
70,24,250,164,39,121,155,197,132,218,56,102,229,187,89,7,
219,133,103,57,186,228,6,88,25,71,165,251,120,38,196,154,
101,59,217,135,4,90,184,230,167,249,27,69,198,152,122,36,
248,166,68,26,153,199,37,123,58,100,134,216,91,5,231,185,
140,210,48,110,237,179,81,15,78,16,242,172,47,113,147,205,
17,79,173,243,112,46,204,146,211,141,111,49,178,236,14,80,
175,241,19,77,206,144,114,44,109,51,209,143,12,82,176,238,
50,108,142,208,83,13,239,177,240,174,76,18,145,207,45,115,
202,148,118,40,171,245,23,73,8,86,180,234,105,55,213,139,
87,9,235,181,54,104,138,212,149,203,41,119,244,170,72,22,
233,183,85,11,136,214,52,106,43,117,151,201,74,20,246,168,
116,42,200,150,21,75,169,247,182,232,10,84,215,137,107,53)

dim scratch_pad as byte[9]
dim tmp_sign,i,j   as byte
dim text        as string[6]

sub function crc_check(dim byref data as byte[9])as byte
  dim j,i,crc as byte
 
   j=0
   i=0
   crc=0
   
   for j=0 to 8
      i = crc xor data[j]
    crc = crc_table[i]
   next j
   
   if crc=0
   then result=255       'CRC O.K
   else result=0         'CRC-ERROR
   end if
end sub

main:

   text   = "Temp:"
   adcon1 = 255
   PORTA  = 255
   PORTB  =   0
   TRISA  = 255
   TRISB  =   0
   Lcd_Init(PORTB)
   lcd_cmd(LCD_CURSOR_OFF)
   lcd_out(1, 1, text)
   lcd_chr(2, 10, 223)
   lcd_chr(2, 11, "C")
    while true
   
    ow_reset(PORTA, 5)
    ow_write(PORTA, 5, $CC)
    ow_write(PORTA, 5, $44)
    delay_ms(1)
    i = ow_reset(PORTA, 5)
    ow_write(PORTA, 5, $CC)
    ow_write(PORTA, 5, $BE)
''''''''''''''''''''''''''''''''''''''''''''''''''''
'Read all Cratch-pad and store in 9 byte array
''''''''''''''''''''''''''''''''''''''''''''''''''''
    for j=0 to 8
    scratch_pad[j]=ow_read(porta,5)
    next j
    'scratch_pad[7].7=1     'this bit is always zero
                            'corrupting data packet
                            ' only for test
                           
 ''''''''''''''''''''''''''''''''''''''''''''''''''''
 ' call cyclic redundancy check sub function
 ''''''''''''''''''''''''''''''''''''''''''''''''''''
    i=crc_check(scratch_pad)

    if i                         ' if true crc is o.k.
    then if scratch_pad[1]=255
         then  tmp_sign="-"
               scratch_pad[0]= not scratch_pad[0]
               scratch_pad[0]=scratch_pad[0]+1
         else  tmp_sign="+"
         end if
         
          scratch_pad[1] = (scratch_pad[0] and $01) * 5
          scratch_pad[0] =  scratch_pad[0]>>1
         
          ByteToStr(scratch_pad[0], text)
          lcd_chr(2, 7, tmp_sign)
          lcd_chr(2, 8, text[1])
          lcd_chr(2, 9, text[2])
          lcd_chr(2, 10, 46)

          ByteToStr(scratch_pad[1], text)
          lcd_chr(2, 11, text[2])
          lcd_out(2,2,"     ")
''''''''''''''''''''''''''''''''''''''''''''''''''''''
' if crc_check return false then print error
'''''''''''''''''''''''''''''''''''''''''''''''''''''
    else lcd_out(2,2,"CRC-ERROR ")
    end if
    delay_ms(500)
wend
end. 

 
Odgovor na temu

Stojan Trifunovic

Član broj: 15156
Poruke: 366
*.smin-1.sezampro.yu.



+8 Profil

icon Re: PIC18f4520 CRC(Cyclic Redundancy Check) & ibutton13.01.2009. u 10:10 - pre 151 meseci
Ukoliko zelite pored diplomskog i da shvatite principe funkcionisanja CRC-a, mislim da su najpristupacnije objasnjen u sledecem tekstu:
Ross N. Williams - A Painless Guide to CRC Error Detection Algorithms

Ipak, source (u asembleru za PIC16 seriju - verzija sa tabelom) imate u Microchipovom AN730. Jeste da je za PIC16, ali konverzija za PIC18 nije preterano teska.

Verovatno bi Vam pomogao i source (sa CRC) koji se vec koristi za ibutton (opet asembler za PIC16 seriju).
Prikačeni fajlovi
 
Odgovor na temu

milos_ladni
Milos Ladicorbic
nezaposlen
Vladimirovac

Član broj: 205593
Poruke: 16
195.252.70.*



Profil

icon Re: PIC18f4520 CRC(Cyclic Redundancy Check) & ibutton13.01.2009. u 12:02 - pre 151 meseci
Hvala svima.

Mislim da je najbitnije kao sto je i stojan rekao da ja shvatim princip funkcionisanja a za kod cemo posle lako

Pokusacu da odradim to preko vikenda pa se javljam od ponedeljka sa najnovijim vestima...

Pozz
 
Odgovor na temu

[es] :: Elektronika :: Mikrokontroleri :: PIC18f4520 CRC(Cyclic Redundancy Check) & ibutton

[ Pregleda: 3236 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.