- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 10 von 18

Thema: CRC von Dallas 1 Wire?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    02.06.2005
    Alter
    33
    Beiträge
    203

    CRC von Dallas 1 Wire?

    Hallo,wider nach etlichen jahren nur mitlesen:
    ich hab ein problem, bei mir funktioniert die selbstgeschreibene CRC funktion nicht.
    Ich poste mal den Code und bitte mal den Code zu überlesen, ich find einfach den fehler nicht.
    Code:
    #define CRC8POLY 0x99
    //die CRC funktion von oneWire vll. wird es ausgelagert.
    uint8_t oneWireCrc(uint8_t *datastream , uint8_t Anzahlbytes)
    {
        uint8_t i,crc8=0,tmp=datastream[0];
        for (i = 0; i < (Anzahlbytes*8); ++i) {
            if (((crc8 & 0x80) ? 1 : 0) != (tmp&0x01))//TODO dieses kontrollieren
                crc8 = (crc8 << 1) ^ CRC8POLY;
            else
                crc8 <<= 1;
            tmp=(tmp<<1)|((datastream[i/8]<<(i%8))&(1<<8));//TODO dies kontrollieren
        }
        return tmp;
    }
    Danke an alle die mein miststück von Code lesen und vll. den Fehler finden, und ja es ist eine Abwandlung von Wikipedia.
    MfG

    der aller dümmste Anfänger

    bitte bei schwerwiegenden Rechtschreibfehlern oder Unleserlichkeiten eine PN schreiben
    Danke

    http://www.openmoko.org/

  2. #2
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Code:
    tmp=(tmp<<1)|((datastream[i/8]<<(i%8))&(1<<8));//TODO dies kontrollieren
    Diese Zeile macht für mich schon mal gar keinen Sinn. Mit tmp als uint8_t macht die Zeile nichts weiter als "tmp <<= 1;". Was sollte die Zeile denn eigentlich machen?
    MfG
    Stefan

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    02.06.2005
    Alter
    33
    Beiträge
    203
    also ich denke es sollte auf das LSB von TMP das MSB von dem n. Byte von dem Array "datastream" das um i%8 verschoben ist legen. (aber ganz ehrlich ich verstehe selber das CRC nicht ganz)
    MfG

    der aller dümmste Anfänger

    bitte bei schwerwiegenden Rechtschreibfehlern oder Unleserlichkeiten eine PN schreiben
    Danke

    http://www.openmoko.org/

  4. #4
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Ok, ich habe mal die Maxim App-Note zum 1-Wire CRC (http://www.maxim-ic.com/app-notes/index.mvp/id/27) überflogen. Und bevor ich nun deinen Code zerpflücke, mache ich einfach mal einen Alternativvorschlag:
    Code:
    uint8_t doCRC8 (uint8_t data, uint8_t crc) {
    
        for (uint8_t i = 0; i < 8; i++) {
    
            uint8_t fb = (crc ^ data) & 0x01;
            crc >>= 1;
            if (fb)
                crc ^= 0x8c;
            data >>= 1;
        }
    
        return crc;
    }
    
    
    uint8_t blockCRC (uint8_t *data, uint8_t size) {
    
        uint8_t crc = 0;
    
        for (uint8_t i = 0; i < size; i++)
            crc = doCRC8(data[i],crc);
    
        return crc;
    }
    MfG
    Stefan

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    02.06.2005
    Alter
    33
    Beiträge
    203
    Ok, das ist eine super Idee, wird heute eingebaut. Meine version war nur hingepfuscht das gebe ich offen zu.
    Danke!!
    MfG

    der aller dümmste Anfänger

    bitte bei schwerwiegenden Rechtschreibfehlern oder Unleserlichkeiten eine PN schreiben
    Danke

    http://www.openmoko.org/

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    02.06.2005
    Alter
    33
    Beiträge
    203
    Also ich hab jetzt mal ausprobiert und versucht zu lesen: ziemlich alles klar bis auf:
    Code:
     crc ^= 0x8c;
    Warum 0x8C und nicht 0x99, da ja das 8., 5.,4 und 1. bit eine 1 sein soll?
    Und es funkt bei mir nur mit 0x99 fehler bei mir im Code oder etwas anderes?
    Danke nochmals für deine Lösung.
    MfG

    der aller dümmste Anfänger

    bitte bei schwerwiegenden Rechtschreibfehlern oder Unleserlichkeiten eine PN schreiben
    Danke

    http://www.openmoko.org/

Ähnliche Themen

  1. DALLAS Sensor
    Von H.Brill im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 6
    Letzter Beitrag: 11.04.2010, 07:09
  2. 2-wire 3-wire protokoll. Hilfe!
    Von schlaflos im Forum Assembler-Programmierung
    Antworten: 3
    Letzter Beitrag: 18.01.2008, 13:53
  3. 1-Draht Bus von Dallas mit 3 Temp Sensoren DS1820 ???
    Von Claus Mehrholz im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 24.10.2005, 15:46
  4. Dallas ds2401
    Von d.zimmermann im Forum Elektronik
    Antworten: 4
    Letzter Beitrag: 10.04.2005, 19:13
  5. Dallas DS 18S20 Temperatur Sensor an C-Control?
    Von saschakp im Forum Controller- und Roboterboards von Conrad.de
    Antworten: 4
    Letzter Beitrag: 20.08.2004, 13:47

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests