اطلاعیه

Collapse
No announcement yet.

کمک در برنامه dht11

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    کمک در برنامه dht11

    سلام من برنامه dht11 که بسکام نوشته شده از یک سایت روسی بود دانلود کردم فقط یک مشکل دارم اونم میخام اعداد به صورت اعشاری نمایش داده بشه یا بهتر بگم دقت دما و روطبت را میخام به صورت یک ردقم اعشاری نمایش بده برنامه این است

    $regfile = "m8def.dat"
    $crystal = 8000000


    Config Lcdpin = Pin , Rs = Pinb.0 , E = Pinb.4 , Db4 = Pinb.3 , Db5 = Pinb.1 , Db6 = Pinb.2 , Db7 = Pinb.5
    Config Lcd = 16 * 2
    Cursor Off


    Declare Sub Get_th(t As Byte , H As Byte)

    'vamos ligar o sensor no pino D.6
    Dht_put Alias Portc.5 ' aqui usamos como saída
    Dht_get Alias Pinc.5 ' e aqui usamos como entrada !
    Dht_io_set Alias Ddrc.5 ' aqui mudamos entrada < - > saída

    Dim T As Byte 'Temperatura
    Dim H As Byte 'Umidade
    Dim Crc As Byte 'CRC do medidor
    Dim Mybyte As Byte
    Dim Sensor_data As String * 40 'buffer para os 5 bytes
    Dim Tmp_str8 As String * 8 'string temporária para receber 8 bits
    Dim Count As Byte 'contador para os bits recebidos

    Enable Interrupts

    Set Dht_io_set
    Set Dht_put

    Lcd "AVRproject.ru"
    Lowerline
    Lcd "DHT11 sensor"

    Do
    Waitms 1500
    Call Get_th(t , H)
    Cls
    Lcd "TMP: " ; T ; "C"
    Lowerline
    Lcd "PHP: " ; H ; "%"

    Loop

    Sub Get_th(t As Byte , H As Byte)

    Count = 0
    Sensor_data = ""
    Set Dht_io_set 'vira saída
    Reset Dht_put 'nivel 0 na saída
    Waitms 25 'tempo de espera pro dht11 25mseg

    Set Dht_put 'volta nivel 1 na saída
    Waitus 40 'espera 40 useg
    Reset Dht_io_set 'vira entrada
    Waitus 40 'espera mais 40 useg
    If Dht_get = 1 Then 'se continua 1 tem algo errado
    H = 1 'pois deveria estar em 0 !
    Exit Sub
    End If


    Waitus 80 'espera 80 useg
    If Dht_get = 0 Then 'agora tem de estar 1 !
    H = 2 'se tiver 0 , deu erro
    Exit Sub
    End If


    While Dht_get = 1 : Wend 'espera iniciar transmissão

    Do
    While Dht_get = 0 : Wend 'começou a transmissão
    Waitus 30 'voltou a nivel 1, espera 30 useg
    If Dht_get = 1 Then 'se apos 30 useg continua 1, então o bit é 1
    Sensor_data = Sensor_data + "1" 'coloca 1 no buffer de dados
    While Dht_get = 1 : Wend 'espera esse bit 1 terminar
    Else 'se apos 30 useg virou 0, então o bit é 0
    Sensor_data = Sensor_data + "0" 'coloca zero no buffer
    End If
    Incr Count ' incrementa contador de bits
    Loop Until Count = 40 ' repete para 40 bits totais

    Set Dht_io_set
    Set Dht_put



    Tmp_str8 = Left(sensor_data , 8) '8 bit avale rtomat
    H = Binval(tmp_str8) 'tabdil be meghdar adadi

    Tmp_str8 = Mid(sensor_data , 17 , 8) '8 adadeh a temperatura
    T = Binval(tmp_str8)

    Tmp_str8 = Right(sensor_data , 8) 'os ultimos 8 são o CRC
    Crc = Binval(tmp_str8) '


    Mybyte = T + H ' o CRC é a soma da umidade + temperatura
    If Mybyte <> Crc Then ' considerando 8 bits
    H = 3 ' se não bateu, erro !
    End If

    End Sub
    ممنون میشه اگه راهنمای کنید

    #2
    پاسخ : کمک در برنامه dht11

    با سلام لطفا سورس شماتیک و و فایل پروژه را هم بدهید
    سپاس

    دیدگاه


      #3
      پاسخ : کمک در برنامه dht11

      سلام با تشکر از شما
      برنامه و شماتیک خدمت شما
      http://s3.picofile.com/file/8202026276/test.bmp
      http://s6.picofile.com/file/8202026426/dht11.bas.html
      اگه یه توضیح هم در مورد برنامه بهم بدی خیلی ممنون میشم
      بسکام خیلی کم بلدم

      دیدگاه


        #4
        پاسخ : کمک در برنامه dht11

        سلام
        کسی نبود به من کمک کنه

        دیدگاه

        لطفا صبر کنید...
        X