AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

DHT22 auslesen

Ein Thema von Schuby · begonnen am 7. Sep 2021 · letzter Beitrag vom 7. Sep 2021
Antwort Antwort
Seite 1 von 2  1 2   
Schuby

Registriert seit: 25. Dez 2018
93 Beiträge
 
#1

DHT22 auslesen

  Alt 7. Sep 2021, 07:22
Guten morgen,
ich lese gerade mit einen uC den DHT22 Sensor.
Dieser Senssor gibt mir 40 Bit zurück.

Ich stehe jetzt vor dem Problem wie ich die ersten 8Bit in ein Byte bekomme.
wie macht man das genau ? mit shl oder shr



mfg Schuby
  Mit Zitat antworten Zitat
Incocnito

Registriert seit: 28. Nov 2016
208 Beiträge
 
#2

AW: DHT22 auslesen

  Alt 7. Sep 2021, 07:47
In wiefern bekommst du denn die Bits zurück? Sind das 8 einzelne Booleanwerte?

LG
Incocnito
  Mit Zitat antworten Zitat
Benutzerbild von pustekuchen
pustekuchen

Registriert seit: 27. Aug 2010
264 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: DHT22 auslesen

  Alt 7. Sep 2021, 07:57
Hallo,

hier ist Beschrieben wie die Daten aufgebaut sind.
https://cdn-shop.adafruit.com/datash...sor+AM2302.pdf

Die ersten 16-Bit sind die rel. Luftfeuchte. Die nächsten 16 Bit die Temperatur.

Da du jedes Bit einzeln rein bekommst (HBF) speicherst du die am besten jeweils in einem Byte. Das Byte schiebst du dann mit shl jeweils um 1 Stelle weiter und addierst das neue Bit.
Delphi programming is awesome.
  Mit Zitat antworten Zitat
Schuby

Registriert seit: 25. Dez 2018
93 Beiträge
 
#4

AW: DHT22 auslesen

  Alt 7. Sep 2021, 07:57
Ja das sind 40Bits die ich über einen uC bekomme, im mom schreibe ich die Bits im uC
in einen String also ob es eine 1 oder eine 0 ist, und dann sende ich den String über Serielle
an mein Delphi Tool. Aber in mein Delphi Tool muss ich die 40 Bits in 5 Byte
speichern.



mfg schuby
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.752 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: DHT22 auslesen

  Alt 7. Sep 2021, 08:00
.. kannst Du die 40 Bits im uC nicht in ein Buffer schreiben,
diesen übertragen und in deinem Programm als array[0..4] of Byte einlesen.
Die Strings zu empfangen und umzuwandeln halte ich für etwas suboptimal.

uC ist ein Raspi oder ein Arduino?

Grüße
Klaus
Klaus

Geändert von Klaus01 ( 7. Sep 2021 um 08:12 Uhr)
  Mit Zitat antworten Zitat
Schuby

Registriert seit: 25. Dez 2018
93 Beiträge
 
#6

AW: DHT22 auslesen

  Alt 7. Sep 2021, 08:08
Ich Arbeite nicht mit Raspi oder ein Arduino,
mein uC ist ein Xmega.


Ja sicher würde ich gerne in m,einen uC die ersten 16 Bit
in ein Word speichern, aber ich weiß nicht wie.

Vor 20 Jahren konnte ich das mal, mit shl und $80
Ichj weiß aber nicht mehr wie das richtig geht


mfg Schuby
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.752 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: DHT22 auslesen

  Alt 7. Sep 2021, 08:27
Delphi-Quellcode:
type

  TData = packed record
    hum: Word;
    tmp: Word;
    checksum: Byte;
  end;

  TDataRecord = packed record
    case Integer of
      0: (data: TData);
      1: (rawData: Array[0..4] of Byte);
  end;

var
  dataSet: TDataRecord

datasSet.rawData := // Daten aus dem uC
tmp := dataSet.data.tmp;
hum := dataSet.data.hum;
mit diesen Hilfskonstrukten, sollte es einfach sein,
die Daten aus einem Buffer zu extahieren,

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Schuby

Registriert seit: 25. Dez 2018
93 Beiträge
 
#8

AW: DHT22 auslesen

  Alt 7. Sep 2021, 08:40
Hallo Klaus, Danke für deine Hilfe.

Mir wäre es aber lieber wenn mir jmd sagen könnte
wie ich ein ww 16Bit Word auffüllen kann

ww : word;

Bekomme ich eine 0 brauche ich nur ww shl 1;
Kommt aber eine 1 ? wie schiebe ich dann eine 1 rein.


mfg Schuiby
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.882 Beiträge
 
Delphi 12 Athens
 
#9

AW: DHT22 auslesen

  Alt 7. Sep 2021, 11:53
Es gibt auch die Klasse TBits, ich kann aber nicht sagen wie performant die ist.
Kannst ja mal im Quellcode stöbern.

Jedenfalls erleichtert die den Umgang mit Bits ein wenig.

Ich würde mir aber auch einen record zusammenbauen, wo dann die zu erwartenden Felder direkt drinstehen,
und diesen entsprechend befüllen.

Das Bitschieben einer 1 müsste ungefähr so gehen:
LVal := LVal + ($01 shl LPos ); // LPos 0, ... 7 für ein Byte
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.415 Beiträge
 
Delphi XE5 Professional
 
#10

AW: DHT22 auslesen

  Alt 7. Sep 2021, 16:22
Nutzt du den AVR-GCC ?
https://github.com/efthymios-ks/AVR-DHT
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz