www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

senzor SHT in CRC

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Periferija
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
SimonS
Član
Član



Pridružen-a: Čet 01 Jul 2004 11:18
Prispevkov: 4766
Aktiv.: 20.14
Kraj: Kobarid

PrispevekObjavljeno: Tor Apr 15, 2008 1:22 pm    Naslov sporočila:  senzor SHT in CRC Odgovori s citatom

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:



CRC_Calculation_SHTxx_v1.03.pdf
 Opis:

Download
 Ime datoteke:  CRC_Calculation_SHTxx_v1.03.pdf
 Velikost datoteke:  123.46 KB
 Downloadano:  3 krat


_________________
Lep dan
Simon
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
SimonS
Član
Član



Pridružen-a: Čet 01 Jul 2004 11:18
Prispevkov: 4766
Aktiv.: 20.14
Kraj: Kobarid

PrispevekObjavljeno: Tor Apr 15, 2008 3:24 pm    Naslov sporočila:   Odgovori s citatom

Uh, sem spregledal. V PDFju pise, da je treba obrniti rezultat, preden primirjamo z tabelo (hecno, zakaj jim je bilo tega treba Evil or Very Mad )
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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Periferija Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
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: 486 dni


Powered by phpBB © 2001, 2005 phpBB Group