Оглавление:
2025 Автор: John Day | [email protected]. Последнее изменение: 2025-01-13 06:58
I2C - это последовательный протокол, используемый для связи микроконтроллера с внешними периферийными устройствами, подключенными к той же цепи. Каждое периферийное устройство должно иметь уникальный идентификационный номер, называемый адресом, который используется для идентификации его как предполагаемого получателя данного сообщения. Эти адреса назначаются производителем устройства и в большинстве случаев не могут быть изменены. Сниффер сканирует все возможные адреса в поисках подключенных устройств и сообщает о найденных. Это помогает идентифицировать немаркированные чипы, так как затем адрес можно поискать в Google для получения дополнительной информации о чипе.
Это устройство имитирует на Arduino UNO поведение сценария Raspberry Pi i2cdetect, обнюхивая все возможные адреса i2c в поисках подключенных устройств и красиво распечатывая результаты на ЖК-экране 16x02.
Чтобы уместить все на экране, верхняя и нижняя части адреса печатаются над результатами, а верхняя часть - жирным шрифтом. Две кнопки позволяют перемещаться между адресами, показывая 16 адресов одновременно. В случае обнаружения устройства W будет напечатан, чтобы показать его как адрес записи, и R будет показан, если это адрес чтения. Если по этому адресу ничего не обнаружено, на экране будет отображаться дефис (-).
Шаг 1: материалы
Опция 1
1 х Arduino UNO
1 x 16x02 ЖК-экран
1x 10K потенциометр
1x 330 Ом резистор
3x кнопки
Соединительные кабели
1x переключатель уровня I2C (не на фотографии материалов)
Вариант 2
1 х Arduino UNO
LCD Keypad Shield (кнопки на экране не используются)
3x кнопки
Соединительные кабели
1x переключатель уровня I2C (не на фотографии материалов)
Вариант 2 - это тот, который будет построен, потому что это то, что у меня было под рукой в данный момент. Сдвигатель уровня является важной частью схемы, поскольку в настоящее время большинство устройств используют логику 3,3 В, а 5 В от Arduino повреждают их.
(На картинках зачеркнутый материал не требуется.)
Шаг 2: Схема
Схема довольно проста, используется стандартная распиновка для примеров Arduino для ЖК-дисплея, контакты по умолчанию для I2C и 3 запасных контакта для кнопок.
Если вы используете экран LCD Keypad Shield, распиновка ЖК-дисплея изменится, но это уже учтено в коде. Кнопки LCD Keypad Shield не используются, потому что для них требуется аналоговый метод опроса, который нарушает совместимость между двумя возможными схемами реализации (Shield и автономный ЖК-дисплей).
Шаг 3: Код
В случае использования экрана ЖК-клавиатуры, #define LCD_SHIELD необходимо оставить без комментария в начале эскиза. В противном случае закомментируйте его, чтобы использовать первую диаграмму.
Шаг 4: выводы
Для тестирования кода и схемы использовались микросхема BQ32000 RTC и акселерометр MMA8452Q. Как видно на рисунках, устройство определяет 4 адреса: 0x3A и 0xD0 как адреса записи и 0x3B и 0xD1 как адреса чтения. Эти адреса соответствуют тестовым устройствам, поэтому код работает.
Я хотел бы поблагодарить добрых девушек из Beijing Makerspace, Фу Яо и Лю Синь, за то, что они помогли мне получить материалы, необходимые для тестирования этого проекта, в такой короткий срок.