Jump to content
Sign in to follow this  
  • entries
    8
  • comments
    7
  • views
    489

Получаем результат от датчика

parovoZZ

139 views

Получаем результат от датчика
Определим макросы команд, чтобы нам было легче писать код

#define SHT1x_Get_Temp    0b00000011
#define SHT1x_Get_Humidity    0b00000101
#define SHT1x_Write_Status    0b00000110
#define SHT1x_Status    0b00000001

Определим буфер в виде массива

volatile    uint8_t    data[8];

Т.к. с одним из элементов буфера мы будем работать в прерывании, то массив у нас с квалификатором volatile.
Пишем код получения данных:

SHT_USI_Init();               
                      
    data[3] = SHT1x_Write_Status;            // Записываем в датчик настроечные данные
    data[4] = SHT1x_Status;            // 8bit RH / 12bit Temp

    data[7] &= 0b00011111;            // Обнуляем биты с ошибками от датчика SHT1x
                        // Понижаем тактовую частоту для работы с I2C
    CLKPR = (1<<CLKPCE);            // Разрешить изменение прескалера тактовой частоты
    CLKPR = (1<<CLKPS2);            // Устанавливаем частоту 500 кГц
                      
    data[7] |= (SHT_USI_Start_Transceiver(&data[3], 0)<<7);
                        //
    data[4] = SHT1x_Get_Humidity;            // Первый байт RH - нули
                        // Нули никуда передавать не будем,
    data[7] |= (SHT_USI_Start_Transceiver(&data[4], 1)<<6);    // но функция пишет два байта,
                        // поэтому под первый байт подаем
    WDT_int_125mS;                // элемент массива, который впоследствии
                        // перепишется
    data[3] = SHT1x_Get_Temp;

    data[7] |= (SHT_USI_Start_Transceiver(&data[3], 1)<<5);

Забегая вперед, скажу, что в элементе data[7] у нас живут биты с ошибками. Но о них позже.
Подключаем ЛА и смотрим. Сформированный нами старт, загрузка настроек в датчик и запрос измерения RH:

SHT1x_res1.thumb.png.bf8732bc83cc9296cb86f1d23194b6b3.png

На все отосланные байты датчик ответил подтверждением. А вот ответ:

SHT1x_res2.thumb.png.959db9ed933434d3ce6d4e2200513e1e.png

Если посчитать по формуле из даташита, то получится 40-41% отн. влажности. Сразу же после получения ответа формируем новый запрос и получаем ответ по температуре:

SHT1x_res3.thumb.png.919331efa33bb120a13369962a2db694.png

Здесь в кадр попал задний фронт линии SDA, который сформировал датчик. По нему мы видим, что с момента готовности результат измерений и до первого такта на линии SCK прошло всего 110 мкс. Здесь уже показывать не буду, но скажу, что на измерение RH (8 бит) у датчика ушло 14 мс, а на измерение температуры (12 бит) - 63 мс. Результат в разы лучший, чем у DS18B20.

 



0 Comments


Recommended Comments

There are no comments to display.

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Add a comment...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...