Блок для Расширение GPIO с помощью MCP23017 (CJMCU-2317)
БЛОК ВВОДА_ВЫВОДА MCP23017. ------------------------------------------------------------------------------------------------------------------------------------ Блок осуществляет обмен с регистрами mcp23017 через шину i2c по адресу=addr. Может быть установлен любой адрес. Если адрес <0, устройство не используется, Обычно mcp23017 выпускаются с базовым адресом 0x20 (32 десятичный). Это адрес по умолчанию установлен в библиотеке как "базовый адрес". Пространство адресов может меняться входами a0,a1,a2 mcp23017 - всего восемь адресов. Если аddr в диапазоне 0-7, то к этому значению будет прибавлено значение базового адреса. --------------------------------------------------------------------------------------------------------------------------------- Блок может работать с библиотекой RT_HW_MAIN.h и без неё. Если до вызова блока шина i2c не инициализирована, блок инициализирует её. --------------------------------------------------------------------------------------------------------------------------------- Блок содержит два регистра A и B, кадый из которых может настроен на вывод или ввод - всего шесть режимов: Настройка регистров определяется параметрами пользователя РЕГИСТР_А и РЕГИСТР_B (char): 'U' - вход с подтяжкой внутренним регистром к Vcc и с инверсией; 'u' - вход с подтяжкой внутренним регистром к Vcc без инверсии; 'I' - вход без подтяжки к Vcc и с инверсией; 'i' - вход без подтяжки к Vcc без инверсии; 'O' - выход прямой; 'o' - выход с инверсией. -------------------------------------------------------------------------------------------------------------------------------------- Обмен с устройством осуществляется периодически с периодом, определяемый параметром "ПЕРИОД В ТИКАХ". Один тик =50мс. Если ПЕРИОД В ТИКАХ = -1, устанавливается значения периода =10 (соотвествует 500 мс). При обмене с устройством избыточные операции обмена (не изменились входные данные или регистр не настроен на соответствующий режим) пропускаются. Этим достигается разгрузка шины i2c. -------------------------------------------------------------------------------------------------------------------------------------- Алгоритм поиска устройства на шине i2c: 1.При инициализации устанавливается параметр состояния устройства="поиск устройства не оуществлялось" (=0). 2. При первом запуске осуществляется поиск устройства на шине i2c. Если устройство найдено, вчерез 50мс) выполняется дополнительный (контрольный) поиск и устанавливается параметр состояния устройства="устройство обнаружено и готово к работе"(=2). 3. Если устройство не найдено, то делается дополнительные 4-попытки обнаружения с периодом 100мс. 4. Если устройство после дополнительных попыток не обнаружено, то устанавливается параметр состояния устройства="после поиска устройство не обнаружено"(=1). 5. В дальнейшем поиск устройства осуществляется с периодичностью 1 сек. Эти запросы на шине i2c по длительности минимально короткие и шину не перегружают.