 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
SimonS Član



Pridružen-a: Čet 01 Jul 2004 11:18 Prispevkov: 4766 Aktiv.: 20.14 Kraj: Kobarid
|
Objavljeno: Tor Apr 15, 2008 1:22 pm Naslov sporočila: senzor SHT in CRC |
|
|
Pozdrav
Je komu uspelo racunati CRC za omenjeni senzor? Meni mi vedno vraca napako Moj programcek izgeda a tako:
Koda: |
void SHT_crc(unsigned char ukaz,unsigned char msb,unsigned char lsb,unsigned char crc)
//----------------------------------------------------------------------------------
// izracun CRCja
{
unsigned char a=0;
a= a^ukaz;
a= CRC_tab[a];
a= a^msb;
a= CRC_tab[a];
a= a^lsb;
a= CRC_tab[a];
if (!(a == crc)) sht.napaka =1; //vrne napako ob napacnem CRCju
}
|
in se tabela:
Koda: |
static const char CRC_tab[256]={
0, 49, 98, 83, 196, 245,166, 151,185, 136,219, 234,125, 76, 31, 46, 67, 114,33, 16,
135, 182,229, 212,250, 203,152, 169,62, 15, 92, 109,134, 183,228, 213,66, 115,32, 17,
63, 14, 93, 108,251, 202,153, 168,197, 244,167, 150,1, 48, 99, 82, 124, 77, 30, 47,
184, 137,218, 235,61, 12, 95, 110,249, 200,155, 170,132, 181,230, 215,64, 113,34, 19,
126, 79, 28, 45, 186, 139,216, 233,199, 246,165, 148,3, 50, 97, 80, 187, 138,217, 232,
127, 78, 29, 44, 2, 51, 96, 81, 198, 247,164, 149,248, 201,154, 171,60, 13, 94, 111,
65, 112,35, 18, 133, 180,231, 214,122, 75, 24, 41, 190, 143,220, 237,195, 242,161, 144,
7, 54, 101, 84, 57, 8, 91, 106,253, 204,159, 174,128, 177,226, 211,68, 117,38, 23,
252, 205,158, 175,56, 9, 90, 107,69, 116,39, 22, 129, 176,227, 210,191, 142,221, 236,
123, 74, 25, 40, 6, 55, 100, 85, 194, 243,160, 145,71, 118,37, 20, 131, 178,225, 208,
254, 207,156, 173,58, 11, 88, 105,4, 53, 102, 87, 192, 241,162, 147,189, 140,223, 238,
121, 72, 27, 42, 193, 240,163, 146,5, 52, 103, 86, 120, 73, 26, 43, 188, 141,222, 239,
130, 179,224, 209,70, 119,36, 21, 59, 10, 89, 104,255, 206,157, 172 };
|
Program za branje je sledec:
Koda: |
s_start(); //posljemo start
sp_byte(M_TEM);
for (i=0;i<0x5fffff;i++) if (!(IOPIN0 & DATA)) break; //pocakaj, da senzor opravi meritev
if (IOPIN0 & DATA) sht.napaka = 1; //... ali prekinitev cez ~2 sec in sporocimo napako
msb = sb_byte(ACK); //beri prvi bajt (MSB)
rezultat = msb;
rezultat <<= 8;
lsb = sb_byte(ACK); //beri drugi bajt (LSB)
rezultat |= lsb;
crc =sb_byte(noACK); //beri checksum
vrni = sp_temp(rezultat);
for (i=0;i<0x60ffff;i++); // 0.8sec, da se nam senzor ne ugreje prevec!
SHT_crc(M_TEM, msb, lsb, crc); // racunamo CRC za temperaturo
|
Prilagam se dokumentacijo:
p.s. primer iz dokumentacije pravilno izracuna:
Opis: |
|
 Download |
Ime datoteke: |
CRC_Calculation_SHTxx_v1.03.pdf |
Velikost datoteke: |
123.46 KB |
Downloadano: |
3 krat |
_________________ Lep dan
Simon |
|
Nazaj na vrh |
|
 |
SimonS Član



Pridružen-a: Čet 01 Jul 2004 11:18 Prispevkov: 4766 Aktiv.: 20.14 Kraj: Kobarid
|
Objavljeno: Tor Apr 15, 2008 3:24 pm Naslov sporočila: |
|
|
Uh, sem spregledal. V PDFju pise, da je treba obrniti rezultat, preden primirjamo z tabelo (hecno, zakaj jim je bilo tega treba )
Delujoca koda zgleda tako:
Koda: |
unsigned char c,b,a=0;
a= a^ukaz;
a= CRC_tab[a];
a= a^msb;
a= CRC_tab[a];
a= a^lsb;
a= CRC_tab[a];
for(b = c = 0; c < 8; c++) //obrnemo vrednost rezultata bit7=bit0, bit6=bit1,...
{
b = (b << 1) + (a & 1);
a >>= 1;
}
if (!(b == crc)) sht.napaka =1; //vrne napako ob napacnem CRCju
|
_________________ Lep dan
Simon |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 485 dni
Powered by phpBB © 2001, 2005 phpBB Group
|