Delphi-PRAXiS
Seite 1 von 2  1 2   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi DHT22 auslesen (https://www.delphipraxis.net/208686-dht22-auslesen.html)

Schuby 7. Sep 2021 07:22

DHT22 auslesen
 
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

Incocnito 7. Sep 2021 07:47

AW: DHT22 auslesen
 
In wiefern bekommst du denn die Bits zurück? Sind das 8 einzelne Booleanwerte?

LG
Incocnito

pustekuchen 7. Sep 2021 07:57

AW: DHT22 auslesen
 
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.

Schuby 7. Sep 2021 07:57

AW: DHT22 auslesen
 
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

Klaus01 7. Sep 2021 08:00

AW: DHT22 auslesen
 
.. 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

Schuby 7. Sep 2021 08:08

AW: DHT22 auslesen
 
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

Klaus01 7. Sep 2021 08:27

AW: DHT22 auslesen
 
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

Schuby 7. Sep 2021 08:40

AW: DHT22 auslesen
 
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

Rollo62 7. Sep 2021 11:53

AW: DHT22 auslesen
 
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

generic 7. Sep 2021 16:22

AW: DHT22 auslesen
 
Nutzt du den AVR-GCC ?
https://github.com/efthymios-ks/AVR-DHT


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:30 Uhr.
Seite 1 von 2  1 2   

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