Tengo un chip Atmega328P (que se usa como Arduino) que me gustaría conectar a una Raspberry Pi a través de SPI.
Originalmente tenía un Atmega328P funcionando a 3,3 V usando su propio cristal interno de 8 MHz en lugar de un cristal externo de 16 MHz. El Atmega fue alimentado desde el pin de 3.3v de la Raspberry Pi. Pude conectar directamente los pines MISO/MOSI/SCLK/CE0 entre los dos dispositivos y usé con éxito el Pi como maestro SPI y el Atmega como esclavo SPI.
Ahora quiero usar un Atmega328 a 5V alimentado desde CC externa (LM317, etc.) usando un cristal externo de 16MHz. Obviamente, los pines Atmega de 5 V no pueden comunicarse con los pines Pi de 3,3 V, así que obtuve un convertidor de nivel lógico bidireccional ( https://www.sparkfun.com/products/12009 ). Este es mi esquema actual:
Mi código SPI ya no funciona y no estoy muy seguro de por qué. ¿Es esta la forma correcta de conectar 5V Atmega y 3.3V Pi para comunicación SPI? ¿Me estoy perdiendo alguna conexión?
ACTUALIZACIÓN : terminé probando la comunicación I2C y funcionó de inmediato, así que creo que voy a cambiar a eso. Solo necesitaba comunicación de baja velocidad entre Atmega y Pi, por lo que se adapta a mis necesidades. Algún día tendré que probar algunas de las sugerencias a continuación.
El problema con los convertidores de nivel como ese es que solo pueden ir tan rápido. Intente reducir la velocidad de su SPI.
Si tiene un alcance, verifique los niveles de las señales para asegurarse de que sean lo suficientemente altos, especialmente la línea del reloj, en ambos lados.
Los condensadores C1 y C2 alrededor de su cristal son demasiado grandes y es probable que interfieran con su reloj. Consulte la hoja de datos de ATmega, deberían ser aproximadamente 22pF.
chris stratton