TSL25721 - problem z wiarygodnością wyników pomiarów

Linux jako system PC i Embedded
Regulamin forum
Aby łatwiej poruszać się w zagadnieniach to prosimy aby w temacie, na samym początku, w nawiasach prostokątnych umieszczać hasło wiodące dla opisywanego problemu np. [Debian], [System embedded], [Linux Mint] itp.
Awatar użytkownika
StaryAnoda_NEW
Newb
Newb
Posty: 67
Rejestracja: środa 04 kwie 2018, 16:48

TSL25721 - problem z wiarygodnością wyników pomiarów

Postautor: StaryAnoda_NEW » sobota 29 wrz 2018, 13:07

Hej

Posiadam czujnik TSL25721. Używam noty katalogowej https://dl.btc.pl/kamami_wa/tsl25721fn.pdf.
Czujnik po dokonaniu obliczeń zwraca bardzo duże wartości, zapewne nierealne.
Zrzut ekranu.png

Czy może ktoś sprawdzić czy poprawnie realizuję te rzutowania dla wartości LX1 i LX2.

Kod: Zaznacz cały

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/i2c-dev.h>
#include <linux/i2c.h>
#include <sys/time.h>


#define TSL25721_ADDRESS (0x39)


int i2c_fd, ret;
float tsl25721_sunlight;

void TSL25721_write_register(uint8_t address, uint8_t value);
uint8_t TSL25721_read_register(uint8_t address);
void TSL25721_get_sunlight(float *sunlight);


int main(void)
{
        i2c_fd = open("/dev/i2c-1", O_RDWR);
        if(i2c_fd < 0)
        {
                printf("Failed to open the i2c bus\n");
                return EXIT_FAILURE;
        }

        ret = ioctl(i2c_fd, I2C_SLAVE, TSL25721_ADDRESS);
        if(ret < 0)
                printf("Failed to acquire bus access and/or talk to slave\n");
                return EXIT_FAILURE;
        }

        TSL25721_write_register(0x80 | 0x0F, 0x00); //1x gain
        TSL25721_write_register(0x80 | 0x01, 0xDB); //101ms
        TSL25721_write_register(0x80 | 0x00, 0x03); //Power ON ALS ENABLE

   for(;;)
        {
                TSL25721_get_sunlight(&tsl25721_sunlight);
                //printf("TSL25721: SUNLIGHT: %.2f lux\n", tsl25721_sunlight);
                sleep(1);
        }
        return EXIT_SUCCESS;
}
void TSL25721_write_register(uint8_t address, uint8_t value)
{
        uint8_t data_write[2] = {address, value};
        write(i2c_fd, data_write, sizeof(data_write));
}

uint8_t TSL25721_read_register(uint8_t address)
{
        uint8_t data_read;
        write(i2c_fd, &address, sizeof(address));
        read(i2c_fd, &data_read, sizeof(data_read));
        return data_read;
}

void TSL25721_get_sunlight(float *sunlight)
{
        uint8_t data_read[4];
        int c0, c1;
        float cpl, lux1, lux2;

        data_read[0] = TSL25721_read_register(0x80 | 0x14);
        data_read[1] = TSL25721_read_register(0x80 | 0x15);
        data_read[2] = TSL25721_read_register(0x80 | 0x16);
        data_read[3] = TSL25721_read_register(0x80 | 0x17);

        c0 = (data_read[0] << 8);
        c0 |= data_read[1];


        c1 = (data_read[2] << 8);
        c1 |= data_read[3];

        cpl = ((float)101 * (float)1) / (float)60.0;
        lux1 = ((float)1 * (float)c0 - 1.87f * (float)c1) / cpl;
        lux2 = ((0.63f * (float)c0) - (float)1 * (float)c1) / cpl;

       
        printf("%.2f lux || %.2f lux\n", lux1, lux2);
}
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
done is better than perfect

Awatar użytkownika
piotrek
Newb
Newb
Posty: 81
Rejestracja: niedziela 05 lis 2017, 02:46

Re: TSL25721 - problem z wiarygodnością wyników pomiarów

Postautor: piotrek » sobota 29 wrz 2018, 15:05

A możesz podać przykładowe wartości c0 i c1 oraz oczekiwaną wartość lux1 i lux2?
Zamiast pisać "(float)101" możesz napisać 101.0f

Awatar użytkownika
StaryAnoda_NEW
Newb
Newb
Posty: 67
Rejestracja: środa 04 kwie 2018, 16:48

Re: TSL25721 - problem z wiarygodnością wyników pomiarów

Postautor: StaryAnoda_NEW » sobota 29 wrz 2018, 15:55

Hej

Zrzut ekranu.png


Dzięki za informację o tych rzutowaniach. Poprawie to przy następnej rewizji programu.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
done is better than perfect


Wróć do „GNU/Linux”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 1 gość