Atualmente, estou projetando um circuito que pode gravar dados de um sensor e salvá-los em uma EEPROM. Meus dois dispositivos (EEPROM e, para fins de teste, um RTC) são conectados via um barramento I2C a um PIC16F887 µC. No entanto, a faixa de operação da tensão de dois dispositivos não é a mesma (5v para a EEPROM, 3,3 para o RTC) e minha bateria é de 9V.
Por isso, projetei um circuito eletrônico com um deslocador de nível composto por MOSFETs para a fiação SDA / SDL. Além disso, adicionei dois reguladores de tensão LM317 para alimentar os dispositivos (9V-> 3.3V e 9V-> 5V). Como não sou especialista em projetar essas coisas, agradeceria se você pudesse dar uma olhada no que eu fiz e me dizer se fiz algo terrivelmente errado!
Respostas:
Apesar de outros comentários, a solução em si é boa. Eu vejo alguns problemas menores embora.
Os resistores de pull-up de 10k no barramento não são suficientemente rígidos, especialmente se você deseja usar velocidades de barramento mais altas.
Você precisa de capacitores de desacoplamento de entrada e saída em seus reguladores lineares e CIs digitais. 100nF é um bom começo para os ICs digitais e para os reguladores lineares, 100nF nas entradas e 1μF nas saídas.
fonte
Sim, você fez coisas esquemáticas terrivelmente erradas. Para nivelar corretamente seus níveis de tensão, consulte Endereço secundário I2C não reconhecido (algumas vezes) O MAX3373E IC é usado para alteração de nível. Observe que os resistores pull-up são mostrados nas linhas SDA e SCK. No entanto, ao usar o MAX3373E, os resistores pull-up não são necessários, pois o MAX3373E possui pull-ups embutidos nos dois lados das linhas de E / S. Existem outros CIs disponíveis para mudança de nível também. Você pode ir para Digi Key ou Mouser e pesquisar.
fonte