Современная электроника №8/2022
ИНЖЕНЕРНЫЕ РЕШЕНИЯ 42 WWW.SOEL.RU СОВРЕМЕННАЯ ЭЛЕКТРОНИКА ◆ № 8 2022 Барометр-гигрометр-термометр с батарейным питанием на базе MEMS-датчика BME280, микроконтроллера EFM8SB10F8 и ЖКИ-модуля H1313. Часть 2 Рис. 1. Последовательность многократного чтения по SPI (адреса скорректированы) Это вторая часть статьи о барометре-гигрометре-термометре на базе MEMS-датчика BME280 (компании Bosch Sensortec), нового микропотребляющего 51-совместимого микроконтроллера (МК) EFM8SB10F8 (Silicon Laboratories) и ЖКИ-модуля H1313 на базе контроллера HT1616 (Holtek). В этой части рассмотрены программирование и конструктивные особенности прибора. Алексей Кузьминов (г. Москва) 1-я часть статьи закончилась на рас- смотрении проблемы с потерей содер- жимого регистра с адресом 0xF7. Реше- ние проблемы можно осуществить двумя способами. Первый способ – после выполнения подпрограммы записи адреса 0xF7 сразу же прочитать содержимое SPI0DAT (это и будет содер- жимое адреса 0xF7), а затем уже осуще- ствить чтение подпрограммой чтения, в результате чего получим содержимое адреса 0xF8, и далее прочитать осталь- ные байты стандартным образом. Второй способ состоит в том, что вна- чале следует записать (подпрограммой записи) не адрес 0xF7, а адрес на едини- цу меньше, т.е. адрес 0xF6, а затем уже прочитать все 9 байт. Оба способа, как выяснилось, работают, однако второй, по мнению автора, более предпочтите- лен, поскольку он позволяет воспользо- ваться стандартными подпрограммами чтения и записи по SPI. Ниже приведён фрагмент основной программы, где показано, как это сделать. Во-первых, вначале следует уста- новить совмещение (объединение) 4-байтного числа (uint32_t dw) с массивом из 4 однобайтных чисел (uint8_t b[3]) с 4 элементами: b[0], b[1], b[2] и b[3]. Это совмещение требуется, чтобы, с одной стороны, иметь воз- можность работы с 4-байтным чис- лом (например, ADC_P) для расчётов давления по формулам, приведённым в справочном листке (с учётом калибро- вочных коэффициентов), с другой – производить однобайтное чтение по интерфейсу SPI (он, как известно, однобайтный). Такое совмещение при- водит к тому, что массив из 4 однобайт- ных чисел b[3] и одно 4-байтное чис- ло dw перераспределяют одно и то же место в памяти. Другими словами, массив b[3] строго определяет число dw, и наоборот, dw строго определя- ет массив b[3]. Это совмещение при- ведено ниже. union { uint8_t b[3]; uint32_t dw; }ret; Ниже приведён фрагмент основ- ной программы, в котором осущест- вляется чтение начиная с адреса 0xF6 (BME280_REG_PRESS_MSB – 1), т.е. на единицу меньше адреса старшего бай- та давления (в начале программы уста- новлена директива #define BME280_ REG_PRESS_MSB 0xF7). Самый старший элемент массива (ret.b[3]) не использу- ется, поэтому он должен быть обнулён. ret.b[3] = 0x00; outspi(BME280_REG_PRESS_MSB - 1); //адрес 0xF6 ret.b[2] = inspi(); //содержимое 0xF7. ret.b[1] = inspi(); //содержимое 0xF8. ret.b[0] = inspi(); //содержимое 0xF9. adc_P = (ret.dw >> 4) & 0xFFFFF; . . . Таким образом, прочитав все три бай- та, можно получить правильные пока- зания АЦП (ADC_P) из числа ret.dw . Остальные 6 байт для температуры и влажности читаются аналогично. Кстати, в справочном листке BME280 в качестве примера приведена после- довательность (по времени) много- кратного чтения по SPI (SPI multiple byte read), как раз начиная с регистра с адресом 0xF6 (figure 13 из datasheet). С учётом вышесказанного на рис. 1 при- ведён этот рисунок со скорректирован- ными адресами. Теперь по поводу вывода информа- ции на ЖКИ. Подобный ЖКИ ранее применялся в стационарных теле- фонных (и кассовых) аппаратах, при- ставках для АОН и других устройствах. Выпускался он в огромных количе- ствах. Названий у этого ЖКИ также очень много: КО-4B, КО-4В2, HT1611, HT1613, НТ1616 и др. О его программи- ровании подробно написано в справоч- ном листке на контроллер, например, HT1616C (Timer with Dialer Interface, компании Holtek). Хотя выпуск это- го ЖКИ давно прекращён, его легко купить (например, на Авито и др. подоб- ных ему сайтах). Кроме того, можно также легко купить б/у приставку для АОН (не дороже 100–300 руб.) и изъять из неё этот ЖКИ. ВЖКИ встроены часы, Start RW Stop 1 1 1 1 0 1 1 0 bit15 bit14 bit13 bit12 bit11 bit10 bit9 bit8 bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 CSB = 1 Data byte Data register - address F7h Register address (F6h) CSB = 0 Control byte Data byte Data register - address F6h F7h F8h
RkJQdWJsaXNoZXIy MTQ4NjUy