Получаем результат от датчика
Получаем результат от датчика
Определим макросы команд, чтобы нам было легче писать код
#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:
На все отосланные байты датчик ответил подтверждением. А вот ответ:
Если посчитать по формуле из даташита, то получится 40-41% отн. влажности. Сразу же после получения ответа формируем новый запрос и получаем ответ по температуре:
Здесь в кадр попал задний фронт линии SDA, который сформировал датчик. По нему мы видим, что с момента готовности результат измерений и до первого такта на линии SCK прошло всего 110 мкс. Здесь уже показывать не буду, но скажу, что на измерение RH (8 бит) у датчика ушло 14 мс, а на измерение температуры (12 бит) - 63 мс. Результат в разы лучший, чем у DS18B20.
0 Комментариев
Рекомендуемые комментарии
Комментариев нет
Присоединяйтесь к обсуждению
Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.