Forum: Mikrocontroller und Digitale Elektronik SHT75 am PIC 16F877A


von Enrock J. (Firma: studi) (enrock)


Angehängte Dateien:

Lesenswert?

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ß

von tastendrücker (Gast)


Lesenswert?

Hi Daniel,

ich habe ein Projekt mit SHT11 an einem 16F628 (glaube ich). Kann ich 
heute abend mal raussuchen - schon 3 Jahre her...

von tastendrücker (Gast)


Lesenswert?

Mal sehen, ob ich heute dazu komme ;)

von tastendrücker (Gast)


Lesenswert?

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

von tastendrücker (Gast)


Lesenswert?

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.

von Enrock J. (Firma: studi) (enrock)


Lesenswert?

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ß

von Msp 4. (msp430_crew)


Lesenswert?

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ß

von tastendrücker (Gast)


Lesenswert?

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.

von tastendrücker (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.