Перейти к содержанию
  • записей
    8
  • комментариев
    7
  • просмотра
    1 803

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


parovoZZ

759 просмотров

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

#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 Комментариев


Рекомендуемые комментарии

Комментариев нет

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Добавить комментарий...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...