Arduino SD

Voy a comentar los problemas que he tenido intentando hacer hablar a un Arduino Duemilanove con una tarjeta SD montada en una breakout de Sparkfun.

Los problemas se resumen en que las tarjetas SD trabajan con niveles lógicos de 3.3 voltios, y mi Arduino con 5 voltios.

Lo más fácil hubiera sido hacer pasar las señales del Arduino a la SD a través de un 74HC4050 pero como no lo tenía a mano use un par de Logic Level Converters también de Sparkfun con el objetivo de convertir los 5v del Arduino a los 3.3v del SD.

Para las pruebas, usé los ejemplos que vienen en la librería sdfatlib. Concretamente el sketch QuickStart.

La cosa es que no me inicializaba la tarjeta SD. Me volví loco comprobando conexiones hasta que enchufé el osciloscopio a la salida del conversor de nivel. Y aquí estaba el problema, porque las entradas que pasaban por el conversor de nivel a través de las patas RX, los valores lógicos 5v los convertia a algo asi como 2.48v. Al cambiar a las patas TX del conversor de nivel, el nivel lógico subió hasta lo esperado,  los 3.3 voltios, con lo que todo empezó a funcionar de maravilla.

Así que ojo con el conversor de nivel de Sparkfun. Yo ya me estoy surtiendo de unos 74HC4050 para la próxima vez.

Os recuerdo el pinout que he utilizado

Arduino [pin 10] – SD [CS / Chip Select]  pasado por el conversor de nivel
Arduino [pin 11] – SD [DI / MOSI]  pasado por el conversor de nivel
Arduino [pin 12] – SD [DO / MISO]  conexión directa
Arduino [pin 13] – SD [CLK]  pasado por el conversor de nivel

En la foto siguiente veis además de los conversares de nivel y la tarjeta SD un IMU del que hablaremos en otra entrada.

 

Javi

 

Leave a Reply