Problema con la comunicación SPI entre Arduino / Atmega328P y Raspberry Pi

4

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 con 3.3V usando su propio cristal interno de 8MHz en lugar de un externo de 16MHz. El Atmega fue alimentado desde el pin 3.3v de Raspberry Pi. Podría 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 5 V alimentado desde una CC externa (LM317, etc.) usando un cristal externo de 16MHz. Obviamente, los pines Atmega de 5 V no pueden hablar con los pines de 3,3 V Pi, por lo que obtuve un Convertidor de nivel lógico bidireccional ( enlace ). Este es mi esquema actual:

Mi código SPI ya no funciona y no estoy seguro de por qué. ¿Es esta la forma correcta de conectar 5V Atmega y 3.3V Pi para la comunicación SPI? ¿Me faltan conexiones?

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 el Atmega y el Pi, por lo que se adapta a mis necesidades. Algún día tendré que probar algunas de las sugerencias a continuación.

    
pregunta darkadept

1 respuesta

2

El problema con los convertidores de nivel es que solo pueden ir tan rápido. Intenta reducir la velocidad de tu SPI.

Si tiene un alcance, verifique los niveles en las señales para asegurarse de que sean lo suficientemente altos, especialmente la línea del reloj, en ambos lados.

    
respondido por el evildemonic

Lea otras preguntas en las etiquetas