В настоящее время я разрабатываю схему, которая может записывать данные с датчика и сохранять данные, записанные в EEPROM. Мои два устройства (EEPROM и для тестирования RTC) подключены через шину I2C к PIC16F887 µC. Однако рабочий диапазон напряжения двух устройств не одинаков (5 В для EEPROM, 3,3 для RTC), и моя батарея - это батарея 9 В.
Поэтому я разработал электронную схему со сдвигом уровня, состоящую из MOSFET для проводки SDA / SDL. Кроме того, я добавил два стабилизатора напряжения LM317 для питания устройств (9 В -> 3,3 В и 9 В -> 5 В). Поскольку я не являюсь экспертом в разработке таких вещей, я был бы признателен, если бы вы посмотрели на то, что я сделал, и сказали бы, сделал ли я что-то ужасно неправильно!
Ответы:
Несмотря на другие комментарии, само решение в порядке. Я вижу несколько мелких проблем, хотя.
10-кратные подтягивающие резисторы в шине недостаточно жесткие, особенно если вы хотите использовать более высокие скорости шины.
Вам нужны входные и выходные развязывающие конденсаторы на ваших линейных регуляторах и цифровых ИС. 100 нФ - хорошее начало для цифровых интегральных схем и линейных регуляторов, 100 нФ на входах и 1 мкФ на выходах.
источник
Да, вы сделали что-то на своей схеме, что ужасно неправильно. Для правильного сдвига уровня напряжения см. Адрес ведомого устройства I2C, не подтвержденный (иногда) . Микросхема MAX3373E используется для сдвига уровня. Обратите внимание, что подтягивающие резисторы показаны на линиях SDA и SCK. Однако при использовании MAX3373E подтягивающие резисторы не требуются, поскольку MAX3373E имеет встроенные подтягивающие элементы с обеих сторон линий ввода / вывода. Есть и другие микросхемы, доступные для смещения уровня. Вы можете перейти к Digi Key или Mouser и искать.
источник