lunes, 21 de febrero de 2011

Arduino + tarjeta SD

De lo que se trata hoy es en conseguir leer y escribir en una tarjeta SD con arduino (mega168) con los minimos componentes posibles.

para conseguir los resultados se requieren los siguientes componentes:

1x Arduino 168 Duemilanove o superior
3x resistencias 3300ohm
3x resistencias 1800ohm

el esquema logico del asunto es como el siguiente ( obtenido de los foros de arduino.cc)

como se puede apreciar, la comunicacion con la tarjeta usa el protocolo SPI, usando los puertos hardware de la placa Arduino, pines 13,12,11,10 ( se pueden usar otros pines usando SPI por software, pero no se tratará de eso en este post)

el divisor de voltaje que aparece se implementa en los pines del bus SPI, es debido a que la tarjeta opera a 3.3 voltios y el Atmega, y sus puertos a 5 ( ojo a este detalle )

la idea era hacer una mini-shield que encaje encima de la placa para poder hacer las pruebas de una manera fiable, el esquema hardware seria como lo siguiente:


con el entretenido metodo del ataque quimico se consigue una PCB bastante resultona, algo como:


tambien he modificado un adaptador SD-MicroSD soldandole una tira de pines de tipo 2.54mm para poder pincharlo a un zocalo hembra estandard como se aprecia en la foto:


Una vez comprobado que tenemos el hardware listo, vamos a meternos en en tema, lo primero que tenemos que hacer es descargarnos la maravillosa libreria sdfat version 16bits http://code.google.com/p/fat16lib/ la version original no funciona bien con el arduino 168 por falta de recursos,

una vez descargada extraemos la carpeta "Fat16" al directorio "libraries" del arduino ( ojo al descomprimir ya que no crea el directorio principal sino extrae todo al actual)

cd arduino-0022/libraries
unzip ../../fat16lib20101009.zip Fat16/*

Luego abrimos el IDE de Arduino y entramos en "File - > Examples - > Fat16 -> fat16info" ( por ejemplo ).
seguidamente lo compilamos, subimos a la placa y nos conectamos al puerto serie ( 9600 baudios )


el codigo cargado espera a que se le envie un caracter para empezar, asi no perder detalle de lo que va haciendo sobre la SD:


y sucess!!! yejalll

Notas: en las shields comerciales se usan integrados (como el 74HC4050) que regulan el voltaje de 5 a 3.3 voltios de una manera mucho mas eficaz que con los divisores de voltaje y que ademas aumentan considerablemente la velocidad de lectura/escritura.

2 comentarios :

  1. Bastante interesante....estoy empezando con arduino y mi primer proyecto (es para la facu) va a ser una consola de juegos, los cuales se veran en una matriz de leds y seleccionables a traves de un display lcd, mi pregunta es: como puedo hacer que el arduino busque los juegos en una tarjeta sd y los ejecute? ya que seguramente la memoria del microcontrolador no va a ser suficiente para guardarlos todos. Saludos

    ResponderEliminar
  2. buenas, echale un vistazo a este proyecto de los chicos de bricogeek que igual te interesa http://blog.bricogeek.com/noticias/diy/ardugame-juego-portatil-con-arduino-oled-y-acelerometro/ , lo de ejecutar codigo sd puedes mirar en la pagina de la libreria sdfat http://code.google.com/p/sdfatlib/

    ResponderEliminar