On Thu, 23 Aug 2018 00:33:05 -0500, R0b0t1
<r03...@gmail.com> wrote:

>Can you briefly describe its protocol? Does it look anything like
>Dallas/Maxim Semi 1-wire or I2C, or is it something else? If it is
>either of those the I2C or SPI peripheral likely could do it. Even if
>not the SPI peripheral may work.

This is what the datasheet says (times here are the nominal ones):

1. It uses a 1-wire connection with 5K pullup and open drain drivers.

2. The master requests data by pulling the wire low for 1 ms

3. The sensor then waits 30 us before setting the wire low for 80 us
followed by high for 80 us.

4. Next follows 40 bits of data each composed of:
   - Low level for 50 us
   - High level for bit value depenednt time:
     Bit = 0 time = 26 us
     Bit = 1 time = 70 us

5. After the 40 bit transfer the line is held low for 50 us, then
released.

Data are sent as 4 bytes (16 bit humidity, 16 bit temp) followed by
one parity byte. The bytes are sent MSB first.

The DHT driver for Arduino ESP8266 (in C) seems to measure and stuff
pulse widths into an array during the transfer and after the fact
evaluates the bits depending on the recorded widths.

My problem is that I don't see how I could measure the high level
pulse widths....
Possibly a loop where the input level is checked:

function MeasureHighPulse: cardinal;
var
  Ts, Te: cardinal;
const
  Tmax = 100;  //Max allowed pulse length
begin
  Ts := TickCountus();  //Need a tickcount with us resolution...
  Te := Ts;
  while InputPin(Sensorpin) = 1 do
  begin
    Te := TickCountus();
    if Te - Ts > Tmax then
    begin
      Te := Ts;
      break;
    end;
  end;
  Result := Te - Ts;
end;

I will need a higher resolution GetTickCount for this...
The usleep() function is somethingh I have never seen before, but I
guess it "sleeps" for a certain number of microseconds...


-- 
Bo Berglund
Developer in Sweden

_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to