Servus und Hallo, ich habe ein Problem mit meinem SHT75 Temperatur und Feuchte-Sensor. Und zwar bekomme ich diesen an meinem PIC 16F877a nicht zum laufen. Mein Quellcode ist im Anhang Gibt es jemanden, der mit dem Sensor Erfahrung hat und ebenfalls wie ich in Assembler programmiert? Jemand ne Idee, was ich falsch mache oder wo der Fehler ist. Vielleicht in der Initialisierung…. Danke Gruß
Hi Daniel, ich habe ein Projekt mit SHT11 an einem 16F628 (glaube ich). Kann ich heute abend mal raussuchen - schon 3 Jahre her...
Hallo Daniel, ich habe mein Projekt noch mal hervorgekramt. Leider ist der Code derart mit Hilfe von Makros realisiert, dass die SHT-Ansteuerung nur schwer nachvollziehbar ist. Diese Seite hat mir damalsgeholfen (Wetterstation mit PIC und SHT): http://www.njqrp.org/digitalhomebrewing/pic-wx/pic-wx-3.html Kannst dir ja mal die SHT-Routinen ansehen. Für die Linearisierung der Feuchtemessung gibt es eine Vereinfachung (über drei Geraden). Das spart erheblich RAM und Zeit. Sag Bescheid, wenn du Daten lesen kannst. Dann such' ich mal die Lienearisierung raus. TD
Hallo Daniel, von hier schwierig zu sagen... Und ohne Oszi kann man nur probieren. Wenn du meinst, es könnte an der Frequenz liegen, dann einfach viele nop's einbauen. Zur Abweichung: Könnte es sein, dass du im 8/12 Bit Modus misst, beim Rechnen aber die Formeln für den 12/14 Bit Modus verwendest? (Manchmal hat man ja solche Tage...) Ich werde (morgen) mal versuchen die relevanten Teile aus meinem Code zu extrahieren.
Okay ich habe das Problem gerade eben beseitigt!. Argh. Was ich mir aber immer noch nicht erklären kann ist die Abweichung bei der Messung. Hat dazu jemand eine Idee? Gruß
Hallo, wie oft mißt du pro Sekunde? Hast du schon mal zurückgerechnet wenn Temp=5680 (Data = 1011000110000) und dann mal mit Oszi vergleichen. Zum Anfang hatten wir auch ein paar Probleme mit dem SHT75. Aber er hat definitiv keine Abweichung zu Anderen Sensoren (bzw. nur im Nachkommabereich). Gruß
Hallo Daniel, ich werde dann wohl mal heute abend mein Projekt "auseinandernehmen". Ich habe einen 16F628 verwendet. Für die Berechnungen (Multiplikation/Division) habe ich Routinen aus den AN's von Microchip genommen. Genaueres werde ich dir heute abend schreiben. Hast du immer noch Probleme mit den Abweichungen? Bei meinem Projekt sind Abweichungen uninteressant, da ich nur die Differenz zwischen zwei Sensoren benötige. Solange beide dieselbe Abweichung haben ist's egal.
Hallo Daniel, hier habe ich mal die Linearisierung der Luftfeuchte-Messung aus meinem Projekt extrahiert. Wie gesagt, ich habe viele Makros verwendet, hierbei allerdings nicht. Die Linearisierung erfolgt dabei durch Näherung über drei Geraden (Quelle siehe unten). Die gemessenen RH Daten (2 Bytes vom Sensor) müssen in SHTxx1DataByte1 und SHTxx1DataByte2 übergeben werden. Dann call SHTxx1LinearizeHumidity aufrufen. RH wird in W zurückgegeben. Wenn Du willst, kann ich dir auch das komplette Projekt senden (E-Mail?). Aber ich glaube nicht, dass du da durchsteigst (ich habe da selbst mittlerweile Schwierigkeiten ;-) Viel Glück!
1 | ; Benötigte Variablen: |
2 | cblock |
3 | SHTxx1Data:0 ; 16 Bit Data |
4 | SHTxx1DataByte1 ; RAM to store measurement Hi byte |
5 | SHTxx1DataByte2 ; RAM to store measurement Lo byte |
6 | SHTxx1DataCRC ; RAM to store measurement CRC byte |
7 | Temp1 |
8 | Temp2 |
9 | endc |
10 | |
11 | ; : |
12 | ; : |
13 | ; : |
14 | |
15 | ;------------------------------------------------------------------------------ |
16 | ; LinearizeHumidity |
17 | ; |
18 | ; Kompensation der Nichtlinearität der RH-Kennlinie des SHT-Sensors |
19 | ; Methode: Näherung über 3 Geraden für 12 Bit Genauigkeit |
20 | ; von Claudiu Chiculita |
21 | ; claudiu.chiculita@ugal.ro |
22 | ; http://www.ac.ugal.ro/staff/ckiku/software |
23 | ; |
24 | SHTxx1LinearizeHumidity: |
25 | |
26 | SHTxx1RH128 equ Temp1 |
27 | SHTxx1RH32 equ Temp2 |
28 | |
29 | movf SHTxx1DataByte1,w ; x/128 |
30 | movwf SHTxx1RH128 |
31 | rlf SHTxx1DataByte2,w |
32 | rlf SHTxx1RH128,f |
33 | ; |
34 | swapf SHTxx1DataByte1,w ; x/32 |
35 | andlw 0xf0 |
36 | movwf SHTxx1RH32 |
37 | swapf SHTxx1DataByte2,w |
38 | andlw 0x0f |
39 | iorwf SHTxx1RH32,f |
40 | bcf STATUS,C |
41 | rrf SHTxx1RH32,f |
42 | ; |
43 | movlw 4 |
44 | subwf SHTxx1DataByte1,w |
45 | btfsc STATUS,C |
46 | goto SHTxx1_LH_f2 |
47 | movf SHTxx1RH128,w ; x<1024 |
48 | addlw -3 |
49 | addwf SHTxx1RH32,f |
50 | movlw 200 ; do not go below 0 |
51 | subwf SHTxx1RH32,w |
52 | btfsc STATUS,C |
53 | clrf SHTxx1RH32 |
54 | goto SHTxx1_LH_end |
55 | SHTxx1_LH_f2 |
56 | movlw 10 |
57 | subwf SHTxx1DataByte1,w |
58 | btfsc STATUS,C |
59 | goto SHTxx1_LH_f3 |
60 | movf SHTxx1RH32,w ; 1024<=x<2560 |
61 | addlw 4 |
62 | movwf SHTxx1RH32 |
63 | goto SHTxx1_LH_end |
64 | SHTxx1_LH_f3 |
65 | movf SHTxx1RH128,w ; 2560<=x |
66 | addlw -24 |
67 | subwf SHTxx1RH32,f |
68 | |
69 | SHTxx1_LH_end |
70 | movf SHTxx1RH32,w |
71 | return |
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.