Hallo Leute, Es hat doch bestimmt jemand einen MS5611 Drucksensor im Einsatz? Ich bekomme die CRC Prüfung der Koeffizienten partout nicht hin. Von der Adresse 7 (0xAE) lese ich 0x1C18 aus dem PROM. Laut Datenblatt sollen dort 4 bit CRC enthalten sein. Wenn ich mir das Codebeispiel anschaue, setzt sich das letzte Byte aus 4 Nullen und eben dem 4 CRC bits zusammen. Nur passt da weder 0x1C noch 0x18 in das Muster! Kann mir jemand dabei helfen? Wäre schön - Danke.
Hier das Datenblatt: http://www.meas-spec.com/downloads/MS5611-01BA03.pdf Auf Seite 12 steht: Guckst du in application note AN520! Hier brauchst du nicht mal selbst programmieren, sondern nur kopieren! AN520: http://www.meas-spec.com/downloads/C-Code_Example_for_MS56xx,_MS57xx_%28except_analog_sensor%29_and_MS58xx_Series_Pressure_Sensors.pdf Gruß
Hm danke Kaplic, aber natürlich habe ich beide Dokumente schon studiert! Und schnödes Kopieren ist erstens nicht mein Stil und entfällt, weil ich die CRC engine des Mikros benutzen will. Also die Frage war, ob mir jemand sagen kann, welcher Wert sein Sensor auf der Adresse 7 "serial code and CRC" gespeichert hat? Danke
Oder vielleicht kann mir jemand sagen, welchem CRC Polynom folgender Algorithmus entspicht: ich dachte es ist x^1 +1
1 | for (cnt = 0; cnt < 16; cnt++) // operation is performed on bytes |
2 | { // choose LSB or MSB |
3 | |
4 | if (cnt%2==1) n_rem ^= (unsigned short) ((n_prom[cnt>>1]) & 0x00FF); |
5 | else n_rem ^= (unsigned short) (n_prom[cnt>>1]>>8); |
6 | |
7 | for (n_bit = 8; n_bit > 0; n_bit--) |
8 | {
|
9 | if (n_rem & (0x8000)) |
10 | {
|
11 | n_rem = (n_rem << 1) ^ 0x3000; |
12 | }
|
13 | else
|
14 | {
|
15 | n_rem = (n_rem << 1); |
16 | }
|
17 | }
|
18 | }
|
19 | n_rem= (0x000F & (n_rem >> 12)); // final 4-bit reminder is CRC code |
Welcher Wert bei anderen Chips auf Adresse 7 steht, ist doch egal und hilft Dir nicht weiter. Die CRC mit der Engine des Micros zu berechnen, wenn Du die schon mit dem Beispielcode nicht hinbekommst, wird das Problem auch nicht lösen. Da die CRC auch nur einmalig berechnet wird, macht das auch keinen Sinn. Nimm mal meinen Code von https://github.com/AeroQuad/AeroQuad/blob/development/Libraries/AQ_BarometricSensor/BarometricSensor_MS5611.h um zu sehen, dass der MS5611 ok ist, danach kannst Du das ja immer noch anders machen.
CRC ist ok, wenn ich den Beispielcode laufen lasse. Das mit der CRC engine vom Mikro ist mehr so als Übung gedacht. Hat keinen nennenswerten Vorteil, ich weiß. Der code sieht halt eleganter aus (es wären nur 5 Zeilen). Mich irritiert halt der Aufbau des LSB auf Adresse 7. Es heißt: die letzten 4 bit sind der CRC code und bei der Berechnung ist das letzte Byte null zu setzten. Wie zum Teufel kommt dann 0x18 zustande (0b0001 1000)? Wieso ist das vierte bit gesetzt (0x10)? Aber sicherlich läuft das unter der Kategorie - don't care.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.