DHT11 nasıl çalışır haberleşme mantığı nedir ?

Başlatan tekniker_murat, 06 Mayıs 2017, 01:27:11

tekniker_murat

Herkese selamun aleyküm hayırlı geceler diliyorum.

Şimdi bir projemde Pic ile kullanılmak üzere DHT11 ile çalışma yapmam gerekiyor lakin bu dht11 in çalışma mantığını anlayamadım.

Datasheetine bakıyorum 1-wire iletişim ile çalıştığını söylüyor.

Reset sinyali yolluyor ardından da dht11 i okumaya geçiyor mantığında bir yazı var datasheetinde, Ama bu reset sinyalini aslında birazcık farklı tasarlamış gibi yani haberleşme pinini bir müddet lojik 1 de saklıyor sonra lojik 0 e çekiyor 40mikro saniye bilmem ne yapıyor falan...

Hadi bunlar o kadar sorunlu şeyler değil de asıl mesele ve anlamadığım kısım şurası:

4 byte alanda olmak üzere 1 byte nem tam - 1 byte nem ondalık değeri 1 byte ısı tam - 1 byte ısı ondalık değerini desimal olarak okur getirir registere yazar diyor.

Ardından da bir tane byte ile de doğru haberleşip haberleşemediğini kontrol etmeye çalışıyor bu da mantıklı yani şöyle :
nem tam + nem ondalık + ısı tam + ısı ondalık = kontrol şeklinde bir mantığa dayatmış yani sensörün yolladığı en son byte nem ve ısı tam ve ondalık değerlerinin komplesinin toplamı gibi bişiy olmuş oluyor...

Lakin owreset ve read komutları ile okuma yapıyorum hiç bir değer almıyor ?

Proton basic ile yahutta mikro C ile yazılım yapabilmeye çalışıyorum bununla uğraşan kimse var ise bir el atabilir mi ?
[email]murat.yagci.1984@gmail.com[/email]

kantirici

#1
dht-11'in iletişim protokolü 1-wire denilse de dallas'ın one wire protokolünden farklı. Dolayısıyla ds18b20 için kullanılan fonksiyonları doğrudan kullanamazsın.

Burada detaylı anlatım ve örnek kod var. http://embedded-lab.com/blog/measurement-of-temperature-and-relative-humidity-using-dht11-sensor-and-pic-microcontroller/

yuppi

'************************************************* ***************
'* Name : DHT11_A *
'* Author : Bob Marshall *
'* Date : 3/27/2013 *
'* Version : 1.1 *
'* Notes : Compiler Version 3.5.5.5 *
'* : *
'************************************************* ***************

;-------------------------------------------------------------------------------
;**** Added by Fuse Configurator ****
; Use the Fuse Configurator plug-in to change these settings

Device = 16F628A

Config FOSC_HS, WDTE_OFF, PWRTE_ON, MCLRE_ON, BOREN_ON, LVP_OFF, CPD_OFF, CP_OFF

;**** End of Fuse Configurator Settings ****
;-------------------------------------------------------------------------------

Xtal = 16
Declare LCD_Interface = 4
Declare LCD_DTPin PORTB.4
Declare LCD_ENPin PORTB.2
Declare LCD_RSPin PORTB.0
Declare LCD_Lines = 2
Declare LCD_Type = 0
All_Digital = true

' Special LCD Character Definitions
Print $FE,$40,$07,$05,$05,$07,$00,$00,$00,$00 '0 - Degree

Dim DataIn As Byte 'hi pulse from sensor
Dim ChkSum As Byte
Dim Index As Byte
Dim SenData As Dword

While
SenData=0:ChkSum=0
TRISA.0 = 0 'portb o/p
PORTA.0=1 'make high
DelayMS 50 'wait for a while
PORTA.0=0:DelayMS 18 'send 18ms low
PORTA.0=1:DelayUS 30 'send 30us hi
DataIn = PulsIn PORTA.0,1 'wait for hi

If DataIn < 33 Then
Cls
Print At 1,1, "Sensor not ready" ' if < 80us loop
GoTo SNR
EndIf

For Index = 31 To 0 Step -1
DataIn = PulsIn PORTA.0,High 'recieve pulses from sensor
If DataIn > 18 Then SetBit SenData,Index
Next Index


For Index = 7 To 0 Step -1
DataIn = PulsIn PORTA.0,High
If DataIn > 18 Then SetBit ChkSum,Index
Next Index


Cls
Print At 1,1,"Check Sum = ",Dec ChkSum
Print At 2,1,"H:",Dec SenData.Byte3," %"
Print At 2,10,"T:",Dec SenData.Byte1,0,"C"


'If ChkSum <> (sendata.Byte1 + sendata.Byte3) Then
' Cls
' Print At 1,1,"Check Sum Error!"


Bunun iş görmesi lazım.İnceler sen olayın çözümünüde görürsün.
Kolay gelsin.
Ben DHT11 den vazgeçip DH22 ye kullanmıştım.