Hallo! viele von euch haben sich ja schon mit dem HP03S von Pollin beschäftigt. Ich habe diesen nun auch mal an einen PIC angeschlossen. Betreibe den I2C Bus mit 100 kHz. Die Koeffizienten lassen sich problemlos auslesen und liegen in den spezifizierten Bereichen. 32 kHz liegt an, und MCLR liegt nun auf high. Das Auslesen der AD Werte, erfolgt wie im Datenblatt angegeben. doch leider bekomme ich für Druck und Temperatur die gleichen Werte. Es ist der Wert er Temperatur. Dieser stimmt und verändert sich entsprechend bei Erwärmung. Der Wert für den Druck entspricht demnach D2. Es ist kein Problem der Variablen. Hat jemand von euch dieses verhalten beobachten können?
1 | void read_AD(void){ |
2 | |
3 | mLED_1_On(); |
4 | // mclr on
|
5 | Delay10TCYx(24); |
6 | |
7 | StartI2C(); // Startsequenz erzeugen |
8 | |
9 | WriteI2C(0xEE); // Adresse |
10 | |
11 | WriteI2C(0xFF); // Controllbit |
12 | |
13 | WriteI2C(0xF0); // |
14 | |
15 | StopI2C(); |
16 | |
17 | |
18 | |
19 | Delay10TCYx(200); |
20 | |
21 | |
22 | |
23 | StartI2C(); // Startsequenz erzeugen |
24 | |
25 | WriteI2C(0xEE); // Adresse |
26 | |
27 | WriteI2C(0xFD); // Controllbit |
28 | |
29 | RestartI2C(); |
30 | |
31 | WriteI2C(0xEF); |
32 | |
33 | D[0].byte2.hnib = ReadI2C(); |
34 | |
35 | AckI2C(); |
36 | |
37 | D[0].byte2.lnib = ReadI2C(); |
38 | |
39 | NotAckI2C(); |
40 | |
41 | StopI2C(); |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | StartI2C(); // Startsequenz erzeugen |
48 | |
49 | WriteI2C(0xEE); // Adresse |
50 | |
51 | WriteI2C(0xFF); // Controllbit |
52 | |
53 | WriteI2C(0xE8); // |
54 | |
55 | StopI2C(); |
56 | |
57 | |
58 | |
59 | Delay10TCYx(200); |
60 | |
61 | |
62 | |
63 | StartI2C(); // Startsequenz erzeugen |
64 | |
65 | WriteI2C(0xEE); // Adresse |
66 | |
67 | WriteI2C(0xFD); // Controllbit |
68 | |
69 | RestartI2C(); |
70 | |
71 | WriteI2C(0xEF); |
72 | |
73 | D[1].byte2.hnib = ReadI2C(); |
74 | |
75 | AckI2C(); |
76 | |
77 | D[1].byte2.lnib = ReadI2C(); |
78 | |
79 | NotAckI2C(); |
80 | |
81 | StopI2C(); |
82 | |
83 | |
84 | |
85 | mLED_1_Off(); |
86 | //mclr off
|
87 | |
88 | |
89 | |
90 | |
91 | }
|
Das ist der Code zum Auslesen. Gruß Peter
Guten Abend, heute hatte ich die Möglichkeit weiter mit dem Sensor zu arbeiten. Nachdem ich mal versucht habe nur die Werte für den Luftdruck auszulesen klappte es auf Anhieb. Nun war klar, dass der Fehler irgend etwas damit zu tun haben musste, dass auch der Wert für die Temperatur ausgelesen wird. Es stellte sich heraus, dass die Verzögerung mittels Delay10TCYx(20); viel zu kurz war. Ein typischer Copy und Past Fehler. Es sollte Delay10KTCYx(20); heißen. Also ein Dalay dass 1000 mal länger ist. Nun Klappt auch das auslesen mit dem PIC18F4550. Falls jemand Interesse hat, lade ich den Quellcode gerne hoch. Gruß Peter
hey peter ich beschäftige mich ebenfalls mit dem HP03S und naja ich bin ein totaler anfänger ich versuche mit dem Arduino uno den sensor anzusteuern nur hab ich keine ahnung was ich da genau machen soll XD wäre echt super wenn du den code hochladen würdest lg
Hallo Peter, ich hätte auch großes Interesse an deinem Quellcode. LG
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.