Moin,
ich habe mir eine eigene DS18S20 Bibliothek geschrieben. Diese kann ich
soweit benutzen, jetzt mache ich kein MatchROM sondern ein SkipROM
Befehl.
Den MatchRom habe ich auch implementiert, aber ich erhalte für jedes
gesendete Bit stehts ein True zurück.
Ich kann in mein sendendes Rom zuvor irgendeinen Unsinn schreiben, das
wird jedoch alles akzeptiert.
Am Ende kriege ich mit MatchROM nach dem Starten einer
Temperaturwandlung einen Timeout, da auch da bis in die Unendlichkeit
ein True gesendet wird.
Ich habe natürlich nur einen Sensor an die Schnittstelle angeschlossen.
ReadROM liefert auch korrekte Daten, die CRC wie auch der FamilyCode
sind korrekt.
Im Folgenden mein Code. Mache ich hier prinzipiell etwas falsch?
1 | bool DS18X20::matchROM(){
|
2 | if(oOneWire.reset()){
|
3 | oOneWire.setByte(0x55);
|
4 |
|
5 | ROMCode.u8CRC = calcCRC(&ROMCode.u8Family, 7);
|
6 |
|
7 | uint8_t * u8p = &ROMCode.u8Family;
|
8 |
|
9 | for(uint8_t i = 0; i < 64; i++){
|
10 | bool bVal = u8p[i / 8] & (1 << (i%8)) ? true : false;
|
11 | oOneWire.setBool(bVal);
|
12 |
|
13 | if(!oOneWire.getBool()){
|
14 | return false;
|
15 | }
|
16 | }
|
17 |
|
18 | return true;
|
19 | }
|
20 | else{
|
21 | return false;
|
22 | }
|
23 | }
|