Skocz do zawartości

Wartość licznika (counter > 16) w przykładzie kodu na DHT11 do Raspberry PICO


xolcom

Pomocna odpowiedź

Hej.

W przykładach do PICO odnośnie DHT11 (sekcja "gpio/dht_sensor") w funkcji: void read_from_dht(dht_reading *result) w pętli for jest licznik, który jak rozumiem zlicza czas stanu logicznego DHT_PIN.

void read_from_dht(dht_reading *result) {
    int data[5] = {0, 0, 0, 0, 0};
    uint last = 1; //flaga sprawdza czy DHT jest w stanie Lo czy Hi
    uint j = 0; //zmienna do obslugi tablicy data[]

    gpio_set_dir(DHT_PIN, GPIO_OUT);
    gpio_put(DHT_PIN, 0);
    sleep_ms(20); //Host the start signal down time 20ms
    gpio_set_dir(DHT_PIN, GPIO_IN);

#ifdef LED_PIN
    gpio_put(LED_PIN, 1);
#endif
    for (uint i = 0; i < MAX_TIMINGS; i++) {
        uint count = 0; //to będzie raczej licznik sprawdzający jak długo trwa impuls tzn czy jest 0 czy 1, liczy czas trwania stanu pinu DHT_PIN czy to nie będzie zmienna sprawdzająca czy nie zostały przesłane już wszystkie bity z bajta danych? 255 to cały bajt, program czyta 4 bloki po 8 bajtów int RH i dec RH oraz int Temp i dec Temp
        while (gpio_get(DHT_PIN) == last) {
            count++;
            sleep_us(1);
	        if (count == 255) break;
        }
        last = gpio_get(DHT_PIN);
        if (count == 255) break;

        if ((i >= 4) && (i % 2 == 0)) {
            data[j / 8] <<= 1;  //wartości spełniające założenie to: 0, 8, 16, 24, 32 czyli 5 bajtów(4bajty danych i suma kontrolna), ale 1/8 jest traktowane jako 0, 2/8=0, 3/8=0, 4/8=0 aż do 8/8=1
                                //stąd wartości pomiędzy 0,8,16,24,32 to bity poszczególnych bajtów
            if (count > 16) data[j / 8] |= 1;
            j++;
        }
    }

Jeśli dla stanu logicznego tego czujnika 0: ~26µs (max 30µs), dla 1: ~70µs licznik zmienia się co 1µs to wg. mnie zawsze będzie większy niż 16 czyli tablica data[5] będzie wypełniona samymi 1.

Ja to rozumiem tak, że jeśli np. count > 30 to powinna być 1 wszystko o krótszym czasie to 0.

Gdzie popełniam błąd w rozumowaniu?

Pozdrawiam 

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.