Pic12F683 ile DHT22 Sensör Kullanımı Hk.

Başlatan zeus48, 01 Kasım 2018, 21:56:24

zeus48

Arkadaşlar mrb.  Dht22 ile ilgili formdaki yazıları okmudum ve verilen kodları kullanarak devreyi yaptım çalışıyor.
Fakat bir sorun var.  sensörü spreyle soğutarak eksi dereceye getiriyorum. sorun  00 dan sonra direk -4  e geçiyor.Birazdaha
sprey le soğutuyorum -11 falan geliyor. Kendi haliyle  ortam ısısında yavaş yavaş ısınmasını bekliyorum  -4 geliyor  oradan  00 geliyor . Yani  -1,-2,-3  yok atlıyor . Elimde 3 ad dht22 var hepsinde aynı şeyi yapıyor . Yazılım altta . Yorumu olan varmı. İyi çalışmalar




'****************************************************************                                       *
'*  İŞLEMCİ :12f 683 kullanıldı                             *
'****************************************************************
Include "MODEDEFS.BAS"
@ __config _INTRC_OSC_NOCLKOUT & _WDT_ON & _MCLRE_OFF & _CP_ON
DEFINE OSC 4
CMCON0=7
ANSEL=0
GPIO=0
TRISIO =%00000010
GPIO=0
;OPTION_REG=7
Z VAR BYTE
Z=0
S VAR BYTE
E VAR BYTE
R VAR BYTE
S=0
E=0
R=0

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
SYMBOL LCD =GPIO.2
SYMBOL DCIK=GPIO.0


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

symbol DHT22=GPIO.1
I        VAR BYTE
TAMRUT   VAR WORD
ONDARUT VAR BYTE
TAMISI     VAR WORD
ONDAISI   VAR BYTE
CONTROL var byte
ISARET VAR BYTE
SAY VAR BYTE
SYMBOL VERI_BILGI=PORTB.6
SAY=0
VERI_BILGI=0


PAUSE 2000
GOTO GOS
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;



BASLA:       
      GOSUB DHT22OKU
      PAUSE 50
      GOTO EKRAN
      pause 2000
      GOTO BASLA
     
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

DHT22OKU:
           output DHT22
           DHT22=1:PAUSEUS 5
           DHT22=0
           pause 5      '1-10 ms bekle
           DHT22=1         'Data pinini High yap
           Pauseus 40      '40 us bekle
           INPUT DHT22
           PAUSEUS 5
           WHILE DHT22=0:WEND
           PAUSEUS 80

          ;IF DHT22=1 then GOTO DHT22_HATA
           
           
          TAMRUT=0
          FOR I=15 TO 0 STEP-1  'MSB bitleri önce geleceği için döngümüzü tersten kuruyoruz.
             WHILE DHT22=0:WEND 
             PAUSEUS 30
             IF DHT22=1 THEN TAMRUT.0[I]=1
             WHILE DHT22=1:WEND
           NEXT

          TAMISI=0
          FOR I=15 TO 0 STEP-1  'MSB bitleri önce geleceği için döngümüzü tersten kuruyoruz.
             WHILE DHT22=0:WEND
             PAUSEUS 30
             IF DHT22=1 THEN TAMISI.0[I]=1
             WHILE DHT22=1:WEND
           NEXT
         
          CONTROL=0
          FOR I=7 TO 0 STEP-1  'MSB bitleri önce geleceği için döngümüzü tersten kuruyoruz.
             WHILE DHT22=0:WEND
             PAUSEUS 30
             IF DHT22=1 THEN CONTROL.0[I]=1
             WHILE DHT22=1:WEND
           NEXT
          OUTPUT DHT22
          DHT22=0
          IF TAMISI.BIT15=1 THEN
          ;TAMISI=TAMISI-48
          ISARET="-"
          ONDARUT=TAMRUT//10
          TAMRUT=TAMRUT/10
          ONDAISI=TAMISI//10
          TAMISI=TAMISI/10
           ELSE
           ISARET="+"
          ONDARUT=TAMRUT//10:TAMRUT=TAMRUT/10
          ONDAISI=TAMISI//10:TAMISI=TAMISI/10
          ENDIF
         
         
          RETURN

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

EKRAN:
      ;ONDARUT=TAMRUT//10:TAMRUT=TAMRUT/10
      ;ONDAISI=TAMISI//10:TAMISI=TAMISI/10
     ; LCDOUT $FE,$80,"NEM=",DEC TAMRUT,",",DEC ONDARUT
     ; LCDOUT $FE,$C0,"ISI=",dec TAMISI,",", DEC ONDAISI
      PAUSE 100
      ;RETURN
      S=TAMRUT
      E=TAMISI
      R=0
      IF ISARET="-" THEN R=5
      GOTO GOS
     

GOTO BASLA

END
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


GON:

;SEROUT2 DCIK,813,[REP$AA\5,REP$00\5,REP$FF\5]'uyandirma sinyali preambl
SEROUT2 DCIK,813,["A","D","E",S,E,R]
SEROUT2 DCIK,813,["A","D","E",S,E,R]
SEROUT2 DCIK,813,["A","D","E",S,E,R]
SEROUT2 DCIK,813,["A","D","E",S,E,R]
PAUSE 5
SEROUT2 DCIK,813,["A","D","E",S,E,R]
SEROUT2 DCIK,813,["A","D","E",S,E,R]
SEROUT2 DCIK,813,["A","D","E",S,E,R]
SEROUT2 DCIK,813,["A","D","E",S,E,R]
  PAUSE 5
SEROUT2 DCIK,813,["A","D","E",S,E,R]
SEROUT2 DCIK,813,["A","D","E",S,E,R]
SEROUT2 DCIK,813,["A","D","E",S,E,R]
SEROUT2 DCIK,813,["A","D","E",S,E,R]

DCIK=0
PAUSE 100
GOTO BASLA
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;LCD GOSTER;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
GOS:

SEROUT2 LCD,813,["A","D","E",S,E,R]
SEROUT2 LCD,813,["A","D","E",S,E,R]
SEROUT2 LCD,813,["A","D","E",S,E,R]
SEROUT2 LCD,813,["A","D","E",S,E,R]
PAUSE 5
SEROUT2 LCD,813,["A","D","E",S,E,R]
SEROUT2 LCD,813,["A","D","E",S,E,R]
SEROUT2 LCD,813,["A","D","E",S,E,R]
SEROUT2 LCD,813,["A","D","E",S,E,R]
PAUSE 200
GOTO BASLA

ete

Her sıcaklık okuması arasına 2 sn lik gecikme koymuşsun sence bu aldığın sonuç bu gecikmeye göre normal değilmi?
Bence normal. Ayrıca sensörü zoraki soğutur ve oda daha sıcak bir ortamda bulunursa soğutmayı kestiğin anda hızla ısınır ve ara kademeleri atlar buda normal. Bence denemeni kış ortamında dışarıda yap.
Ete

Powered by EzPortal