logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[aTmega8] [C winavr/avrstudio] [DS18B20] crc

czech_w 26 Sty 2010 22:03 2394 2
  • #1 7597563
    czech_w
    Poziom 12  
    znalazłem coś takiego oblicza crc z np. DS18B20 lub iButon

    
    static __inline__ uint8_t _crc_ibutton_update  	(  	uint8_t   	 __crc,
    		uint8_t  	__data	 
    	) 			[static]
    
    

    Optimized Dallas (now Maxim) iButton 8-bit CRC calculation.

    Polynomial: x^8 + x^5 + x^4 + 1 (0x8C)
    Initial value: 0x0

    See http://www.maxim-ic.com/appnotes.cfm/appnote_number/27

    The following is the equivalent functionality written in C.

    
        uint8_t
        _crc_ibutton_update(uint8_t crc, uint8_t data)
        {
            uint8_t i;
    
            crc = crc ^ data;
            for (i = 0; i < 8; i++)
            {
                if (crc & 0x01)
                    crc = (crc >> 1) ^ 0x8C;
                else
                    crc >>= 1;
            }
    
            return crc;
        }
    


    mój problem polega na tym co mam przekazać do funkcji co jest "crc" a co "data"
    a) odczytane 2 bajty temperatury (chyba nie)
    b) jak czytać tylko 9 bajt z ds'a
    c) czytałem że DS18B20 ma dwie opcje generowania CRC
    1) z ROM
    2) Scratchpad
    zależy mi na CRC z Scratchpad

    Wiem że zamieszałem ale się trochę pogubiłem co z czym.
  • #2 7597905
    marek-c
    Poziom 19  
    np:

    unsigned char crc = 0;

    gdzeiśtam_send(byte1);
    crc_update(crc, byte1);
    gdzeiśtam_send(byte2);
    crc_update(crc, byte2);
    gdzeiśtam_send(byte3);
    crc_update(crc, byte3);
    gdzeiśtam_send(byte4);
    crc_update(crc, byte4);
    gdzeiśtam_send(crc);


    do funkcji przesyłasz : crc - zmienna - aktualizowana, data - to co wysłane tzn. aktualizuje crc... na podstawie kolejnych 'data' obliczane jest crc


    poniał?


    Pozdrawiam Marek
  • #3 7597977
    czech_w
    Poziom 12  
    w 9 bajcie jest CRC z DS więc po co mam czytać po kolei (to wiem) nie wiem jak odczytać tylko 9 bajt to raz a 2 może się mylę ale gdzieś czytałem że ds18B20 może podać CRC z ROM lub z notatnika.
    Nie czytać tylko generować

    Może źle rozumuje ale CRC z kodu serii unikalnego id i czegoś tam z ROM to nie to samo co CRC z z kodu serii id i crc notatnika . Może to to samo ale wolę się upewnić bo zdania są podzielone w dokumentacjach które czytałem i elektrody i z google w woli ścisłości
REKLAMA