zHz00 Untitled

среда, 22 апреля 2020
23:59 Как я потерял два бита
Основа управляющих сигналов микроконтроллера -- система GPIO. Можно ножку микроконтроллера выставить в нолик, а можно в единичку. К ножке либо что-то подключают напрямую, либо что-то подключают не напрямую.

Ножек ограниченное количество, и иногда их не хватает. В таком случае ставят микросхему, которая называется экспандер (расширитель портов). Она управляется по трём, скажем, проводам по интерфейсам I2C или SPI, а на выходе у неё целых 16 проводов. Естественно, это медленнее, чем управлять напрямую, но зато ножек мнооого.

Читаю документацию на одну из таких микросхем. Схема ножек понятная. Тут управление, тут биты. Ножки битов обозначены P00, P01 и так далее. Читаю про регистр управления. Регистр управления 16-битный. Можно настроить, будут ножки работать на вход или на выход. Тоже понятно. Смотрю схему всей платы. Мне надо в программе установить направление "на вывод" для ножки номер... P17. Это готовая схема, сделанная другими людьми. Может быть, опечатка?

Смотрю ещё раз на ножки микросхемы. Там есть ножки P16 и P17 (это последняя ножка). Вы уже догадались, чем я был обеспокоен? от P00 до P17 -- всего получается 18 ножек, а не 16. То есть, экспандер не 16-битный, а 18-битный. Но все управляющие регистры показывают на то, что бит только 16. Где же настройки для ещё двух бит? И самое главное, для каких бит? В описании регистров настройки вместо обозначения P00, P01... были обозначения C0.0, C0.1...

Почему вообще такое странное число бит, 18?

Может быть, последние два бита управляются только синхронно с самым старшим настраиваемым?
Может быть, управление ими располагается в каком-нибудь другом регистре?
Может быть, они вообще не настраиваются, а предназначены для постоянного использования с определённой конфигурацией?

Посмотрим-ка, какая конфигурация предусмотрена для каждого бита в таблице назначения ножек. Так-так. Вроде везде написано одно и то же. Постойте, а где биты P08 и P09? После P07 почему-то сразу идёт P10. И на схеме расположения ножек эти ножки тоже отсутствуют. То есть, всё было правильно. Ножек было только 16. Просто они были пронумерованы от 00 до 07, а потом от 10 до 17.

А почему?

Потому что экспандер был разделён на два восьмибитных порта. Первая цифра обозначала номер порта, а вторая -- номер бита в порте. Я к этому, увы, был не готов. Раньше я всегда работал с 16-битными портами со сквозной нумерацией ножек. Но это моя проблема. А проблема составителей документации в том, что две цифры, обозначающие разные по смыслу вещи, стоят в названии ножки подряд. Обычно в таких случаях ножи называют P0_0.

@темы: Борьба с техникой, Электроника

URL
вечером поехали в ресторан, а когда уходили отттуда подар...
Ну воть и настало лето.... новое, неповторимое, единсвенн...
"Кто я, какой я?" Естественный, "само собо...
Зовут на сплавы в выходные:о))...поеду обязательно[изобра...
Италию тоже люблю:) 2:0... всех люблю.. почти... а Р...
Близится сессия! 70 рисунков сделаны, даже больше. Жаль, ...

23.04.2020 в 08:42

23.04.2020 в 08:42
Там явно где-то есть заметка, что номера ножек записаны в восьмеричной системе счисления :)
URL

23.04.2020 в 14:22

23.04.2020 в 14:22
цифры, обозначающие разные по смыслу вещи, стоят в названии ножки подряд

Зато сколько символов сэкономили!
URL

23.04.2020 в 15:53

23.04.2020 в 15:53
Обычно в таких случаях ножи называют P0_0.

> ножи

Надо же, и сюда приплёл… :P

-- Minoru
URL
Добавить комментарий

Расширенная форма

Подписаться на новые комментарии
Получать уведомления о новых комментариях на E-mail