Escribir en la tarjeta SD de forma económica

Entonces, aquí está el escenario:

Tengo un Arduino y una tarjeta SD. Desafortunadamente, no tengo uno de los escudos elegantes y no tengo tiempo para pedir uno. Como sabemos, los Arduino funcionan con 5 V y las tarjetas SD funcionan con 3,3 V. Estaba pensando que podría usar una serie de divisores de voltaje para que los datos vayan del Arduino a la tarjeta (MOSI, Reloj, SS) hasta el voltaje correcto, pero no estoy seguro de armar un circuito elevador .

¿Necesitaría incluso un circuito elevador para la línea MISO, o podría simplemente alimentarlo directamente al Arduino? ¿Alguien tiene alguna idea aparte de las que mencioné?

Un divisor de resistencia no funcionará para la línea VCC. Las tarjetas SD pueden consumir hasta 100 mA.
@TurboJ, nunca tuve la intención de usar un divisor para la línea VCC. Arduinos tiene una línea de suministro dedicada de 3.3V, en caso de que no lo supiera.

Respuestas (2)

Si no tiene el reloj SPI corriendo rápido, y usa la referencia de Arduino para configurar la división del reloj para el periférico SPI a bastante baja (sub MHz sería bueno), definitivamente puede salirse con la suya con un simple cambio de nivel de voltaje con resistencias.

No se preocupe si las señales que regresan al Arduino solo son de 3,3 V, se detectará como lógica ALTA (solo solo, pero funciona).

Personalmente, he hecho esto con un Arduino Uno y una tarjeta SD de Sparkfun. Usé una placa de pruebas y algunas resistencias. Mantenga los cables cortos, por supuesto.

Esta es la forma más barata y barata de hacerlo, pero honestamente recomiendo algún tipo de cambiador/traductor de nivel, que con muy poca investigación puedes encontrar en Internet.

EDITAR: si ayuda, usé resistencias de menos de 5K Ohm. Como descubrieron los de Adafruit, 10K es demasiado alto. Específicamente 1.8K y 3.6K

Gracias. Planeo volver más tarde y hacerlo de la manera correcta, pero cuando solo necesitas un registrador de datos simple para algo dentro de unas horas, las cosas se vuelven mucho más complicadas y baratas. Tenemos resistencias por ahí, pero no creo que solo tengamos un cambiador de nivel por ahí.
@ user38168 Agregué los valores de resistencia que usé, si eso ayuda. Asegúrese de que la salida de 3,3 V de su arduino se utilice para alimentarlo.
Gracias por dar los valores de resistencia también. Y solo para confirmar que funciona, usó las bibliotecas de tarjetas SD Arduino estándar, ¿verdad?
ATMega a 5V probablemente aceptará niveles de 3.3V, pero no es necesario. Esta especificación SD garantiza una tensión de salida alta mínima de 0,75 Vdd = 2,475 V, mientras que ATMega necesita 0,6*Vdd = 3 V.
@user38168 sí, bibliotecas de tarjetas SD estándar. Conseguí que devolviera correctamente su ID y especificaciones a través del bus SPI e imprimiera en un monitor serie en Arduino IDE.
@venny correcto, pero según mi prueba simple, siempre que se suministre suficiente voltaje y no suceda nada extraño, el IO es el nivel completo de VCC (3.3V)

esquemático

simular este circuito : esquema creado con CircuitLab

Simplemente use diodos para cambiar el nivel entre un AVR de 5 V y un lector/grabador de tarjetas SD de 3,3 V. Las resistencias de 10K deben estar en el módulo de la tarjeta SD, pero si no lo están, deberá agregarlas.

No, no es una buena idea. Los pullups proporcionan un impulso sustancialmente más débil que el ejemplo de resistencia en serie.