Hlavní stránka‎ > ‎

Teplota, vlhkost SHT11 (Assembler)

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Tímto článkem bych rád  poodhalil sériovou komunikaci kombinovaného čidla Sensirion SHT11.
Jedná se o digitální teplotní a vlhkostní čidlo vzduchu kalibrované už od výrobce, které je aplikováno v pouzdře SIL 4 pin.
Z obrázků jsou patrná možná provedení čidla a jeho ochranný filtr. Toto čidlo krom uvedených vlastností jako je měření teploty, relativní vlhkosti a z toho vypočítaného rosného bodu je vybaveno vlastním vyhříváním a kontrolou nízkého napájecího napětí. Vnitřní vyhřívání čidla může být v případě nebezpečí kondenzaci vody obslužným progrtamem zapnuto. Toto vyhřívání při odběru 8 mA a 5V navýší teplotu čidla o 5 °C.
Nízký stav napájení čipu je indikován napětím pod hranici 2,45 V s přesností +/- 0,05 V.
Čidlo před každým měřením ze své kalibrační  paměti přehrává kalibrační data senzorů, to má za následek měření veličin o 8 ms pomaleji.
Z výroby je nastaveno, že čidlo vysouvá naměřená data s rozlišením 14 bitů (teplota) a 12 bitů (vlhkost). Hloubka rozlišení těchto AD převodů může být natavena i na
12 bitů (teplota) a 8 bitů (vlhkost). Pro délky čtení  naměřených dat teploty (T) nebo relativní vlhkosti (RH) platí tyto časy 11/55/210 ms při AD rozlišení  8/12/14 bit.
 
Základní technické údaje čidla SHT11
Měření vlhkosti:
Rozlišení: typ. 0,03%RH
Opakovatelnost: +/- 0,1% RH
Rozsah měření: 0 – 100% RH
Měření teploty:
Rozlišení: 0,01 °C
Opakovatelnost: +/- 0,1°C
Rozsah měření: -40 – 123,8 °C
Napájecí napětí: 2,4 – 5,5V
Odběr proudu: 550µA (měření) , 28µA (průměr) , 0,3µA (spánek)

Převod digitálních hodnot na fyzikální hodnoty
Pro kompenzaci nelinearit senzoru výrobce doporučuje použít tento vztah pro výpočet relativní vlhkosti:
RHlineární = c1 + c2*SORH + c3*SORH2
Kde SORH je hodnota RH přečtená z čidla a konstanty se určují z této
tabulky:          
                             

 c1

 c2   

 c3   

 
 -4     0,0405       -2,8E-6    12 bit SORH
 -4    0,648          -7,2E-4    14 bit SORH          
 
Pro teploty odlišné od 25°C je vhodné relativní vlhkost dále kompenzovat podle vztahu:
Rhsprávný = (TC – 25)*(t1 + t2*SORH) + RHlineární
Kde t1 = 0,01, t2 = 0,00008 (t2 = 0,00128 pro 8 bit SORH)
Teplotní senzor je více lineární, takže i výpočet je jednodušší :
Teplota = d1 + d2 * SOT
Kde koeficienty d1 a d2 :
 

SOT

d1

d2

 14 bit 5V  -40  0,01
 12 bit 5V  -40  0,04
 14 bit 3V  -38,4  0,0098
 12 bit 3V  -38,4  0,0392
 
př:
RHtru – Výpočet lineární a teplotně kompenzované relativní vlhkosti.
RHtru = ((T°C  - 25) * (0,01 + (0,00008 * RH))) + (-0,0000028 * RH2) + (0,0405 * RH) + (-4,0)
Se znalostí teploty a relativní vlhkosti lze vypočítat rosný bod (DP).
Zjednodušený vzorec je:
LogEW = 0,66077 + 7,5*T/(237,3+T) + (log10(RH)-2)
DP = ((0,66077 – log EW)*237,3) / (logEW – 8,16077)
 
př:
RH = 10%, T=25°C … EW = 23,7465, DP = -8,69°C 

Program pro výpočet rosného bodu (Windows) a jeho popis naleznete ZDE.

   

 Adresa  SHT11 = tři nejvyšší bity bajtu tj.: (000).

              Příkaz

Code bin Code Dec
rezervováno 0000 000x  0
Teplota 0000 0011  3
Vlhkost 0000 0101  5
číst STATUS 0000 0111  7
zapsat do STATUS 0000 0110  6
rezervováno 0000 101x 0001 110x  10-28
Soft reset, výrobní nastavení Status                                   
0001 1110  30
Po zapnutí čekej min. 11 ms (start čidla)
 
STATUS registr bits
 
 Bit   Type   Popis  Nastaveno z  výroby
 7  rezervováno  ‘0’   
 6   R  vybitá baterie (detekce nízkého napětí) ‘0’ pro Vdd > 2.47,  ‘1’ pro Vdd < 2.47
       pozn.: Níže uvedené bity nejsou aktualizovány po měření.
 5   rezervováno  ‘0’  
 4   rezervováno     ‘0’   
 3    pro testování (nepoužívat)   ‘0’   
 2  R/W   vytápění čidla   ‘0’  pro vypnuto
 1  R/W  kopírování kalibrační paměti  ‘0’  pro načítání
 0   R/W  rozlišení AD převodu senzorů

’1’ = 8 bit relativní vlhkot / 12 bit teplota 

’0’ = 12 bit relativní vlhkot / 14 bit teplota

 
Sériové rozhraní SHT11 (obousměrné 2-vodiče) je optimalizována pro čidlo odečítání a spotřebu energie a není kompatibilní s I2C.
Vnitřní architektura čidla, jeho zapojení a způsob komunikace je patrný z následujících obrázků.
 
 
 
 
 
 
Pro představu uvádím výpis programu jazyka Assembler nahraného do kontroléru fa Microchip např.: PIC16F873.
Procedura TEPL vrací 14 bitovou honotu teploty, procedura RH vrací 12 bitovou hodnotu relativní vlhkosti, procedura REG vrací 8 bitovou hodnotu příznaků registru STATUS.
PIC je taktován krystalem 4,00 Mhz, vývod PICu RC3 je použit jako hodinový výstup SCL, výod PICu RC4 je použit jako obousměrný datový vývod  DAT.
 
 
 

Ram                     EQU       20h                 ;První adresa paměti RAM pro PIC16F873 - 368 bajtů (20h - 7Fh)
Znak                     EQU       Ram+1           ;Univerzální promněná
SHT_command      EQU       Ram+2           ;SHT 11 Byt příkazu
SHT_Byte             EQU       Ram+3           ;Byte přijatých dat
SHT_2Byt             EQU       Ram+4           ;1-2 DEC = číslo přijatého bytu

#define               SHT_Dat   PORTC,4        ;SHT data DAT
#define               SHT_Clk   PORTC,3        ;SHT hodiny CLK

 

TEPL                                                       ;Procedura vyčítání Teploty
                          movlw          3
                          movwf          SHT_command
                          call              SHT_T_H
                          Return

RH                                                            ;Procedura vyčítání Vlhkosti
                          movlw          5
                          movwf          SHT_command
                          call              SHT_T_H
                          Return


REG                                                           ;Procedura vyčítání registrů 7 SHT11 - čidlo teploty a vlhkosti
                          movlw          7
                          movwf          SHT_command
                          call              SHT_R_Status 
                          Return

;***************************************************************************
; SHT 11_Wait Measure
;***************************************************************************
SHT_Wait
  btfsc  SHT_Dat   ;Kontrola prijmu byte od slave- měřící prodleva
  goto  $-1
  Return
;***************************************************************************
; SHT 11_start
;***************************************************************************
SHT_Start
  Bank1
  bcf  TRISC,4    ;Přepne pin RC4 na výstupní SDA
  bcf  TRISC,3    ;Přepne pin RC3 na výstupní SCL
  Bank0

  bsf  SHT_Dat
  bcf  SHT_Clk
  nop
  bsf SHT_Clk
  nop
  bcf  SHT_Dat
  nop
  bcf  SHT_Clk
  nop
  nop
  nop
  bsf  SHT_Clk
  nop
  bsf  SHT_Dat
  nop
  bcf  SHT_Clk
  Return
;***************************************************************************
; SHT 11_zapise byte na sběrnici a ověří acknovledge
;***************************************************************************
SHT_Write
SHT_AA   bcf  STATUS,C
  rlf  SHT_command,f
  btfss  STATUS,C
  goto  SHT_A
  bsf  SHT_Dat
  goto  SHT_B
SHT_A   bcf  SHT_Dat
SHT_B
  bsf  SHT_Clk
  nop
  nop
  nop
  nop
  nop
  bcf  SHT_Clk
  movfw  SHT_command
  sublw 0
  btfss  STATUS,Z
  goto  SHT_AA    ;Zpet na odrolovani bytu
  bsf  SHT_Dat   ;Uvolní datový pin pro příjem ACK

  Bank1
  bsf  TRISC,4    ;Přepne pin RC4 na vstupní SDA
  Bank0

  bsf  SHT_Clk    ;9. puls pro ACK
  btfsc  SHT_Dat   ;Kontrola prijmu ACK od slave
  goto  $-1    ;ERR SHT
  bcf  SHT_Clk
  bsf  SHT_Dat   ;Uvolní datový pin
  Return
;***************************************************************************
; SHT 11_Přečte byte na sběrnici a pošle acknovledge
;***************************************************************************
SHT_Read
  movlw  8
  movwf  Znak
  clrf  SHT_Byte

SHT_RRR
  bsf  SHT_Clk
  nop
  nop
  nop
  nop
  nop
  btfss  SHT_Dat
  goto  SHT_R
  bsf  STATUS,C
  rlf  SHT_Byte,f
  goto  SHT_RR
SHT_R   bcf  STATUS,C
  rlf  SHT_Byte,f
SHT_RR
  bcf  SHT_Clk
  decfsz  Znak    ;Odrolování bitů
  goto  SHT_RRR

  Bank1
  bcf  TRISC,4    ;Přepne pin RC4 na výstupní SDA
  Bank0
  
  bcf  SHT_Dat   ;Vyslání ACK do slave
  nop
  bsf  SHT_Clk
  nop
  nop
  nop
  bcf  SHT_Clk

  Bank1
  bsf  TRISC,4    ;Přepne pin RC4 na vstupní SDA
  Bank0
  movfw  SHT_Byte
  call  RS_TX
  Return

;***************************************************************************
; SHT 11_Přečte byte na sběrnici a nepošle acknovledge-konec přenosu
;***************************************************************************
SHT_Read_End
  movlw  8
  movwf  Znak
  clrf  SHT_Byte
SHT_RRR_
  bsf  SHT_Clk
  nop
  nop
  nop
  nop
  nop
  btfss  SHT_Dat
  goto  SHT_R_
  bsf  STATUS,C
  rlf  SHT_Byte,f
  goto  SHT_RR_
SHT_R_   bcf  STATUS,C
  rlf  SHT_Byte,f
SHT_RR_
  bcf  SHT_Clk
  decfsz  Znak    ;Odrolování bitů
  goto  SHT_RRR_

  Bank1
  bcf  TRISC,4    ;Přepne pin RC4 na výstupní SDA
  Bank0

  bsf  SHT_Dat   ;Vyslání NoACK do slave
  nop
  bsf  SHT_Clk
  nop
  nop
  nop
  bcf  SHT_Clk

  Bank1
  bsf  TRISC,4    ;Přepne pin RC4 na vstupní SDA
  Bank0

  movfw  SHT_Byte
  call  RS_TX
  Return

;***************************************************************************
; SHT11 čtení TEPLOTA nebo VLHKOST
;***************************************************************************
SHT_T_H
  bcf  SSPCON,SSPEN
  call  SHT_Start
  call  SHT_Write
  call  SHT_Wait
  call  SHT_Read
  call  SHT_Read_End

  Bank1
  bsf  TRISC,4    ;Přepne pin RC4 na vstupní SDA
  bsf  TRISC,3    ;Přepne pin RC3 na vstupní SCL
  Bank0
  bsf  SSPCON,SSPEN
  Return

;***************************************************************************
; SHT11čtení Bytu STATUS
;***************************************************************************
SHT_R_Status
  bcf  SSPCON,SSPEN
  call  SHT_Start
  call  SHT_Write
  call  SHT_Read_End
  
  Bank1
  bsf  TRISC,4    ;Přepne pin RC4 na vstupní SDA
  bsf  TRISC,3    ;Přepne pin RC3 na vstupní SCL
  Bank0
  bsf  SSPCON,SSPEN
  Return