• Welcome to LusoRobótica - Robótica em Português.
 

SD card read/write + Arduino

Started by brunomartins, 04 de May de 2009, 13:08

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

brunomartins

Pessoal, estou tentando implementar o código em do link abaixo:

http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1206874649

Mas, como tenho pouca experiência ainda estou encontrando um pouco de dificuladade de montar o circuito para o SD.

Alguém poderia me ajudar?

Explicando o circuito e o código?

Obrigado.

Achei muito bom esse código, queria muito conseguir implementar...
_______________________________
Bruno Martins

TigPT

Qual a dificuldade mais concretamente?

Já arranjaste um suporte para o cartão de memória, assim como as respectivas resistências de 1.8K e de 3.3K para poderes fazer a montagem!?

brunomartins

Caro amigo,

Já comprei sim o suporte, e as resistências..
eu só quero ter certeza do circuito a ser montado..
pelo que estudei o cartão SD é sensível e queima com facilidade...

Gostaria que alguém redesenhasse o circuito explicando se possível o passo a passo..

Pelo que eu entendi precisa de uma saída de 3,3v, mas o arduino já tem uma saída assim, para que as resistências?

fiquei meio perdido, acredito que não esteja entendendo o que o amigo fez no trabalho dele...
_______________________________
Bruno Martins

TigPT

O arduino disponibiliza 3.3V mas contudo as saídas dos pins digitais dão 5V, e o cartão funciona a 3.3V, assim cada sinal de dados entro um dispositivo e o outro tem que ser convertido para os 3.3V para evitar que o arduino queime o cartão. Quanto ao pin DO (Data Out) não necessita de conversão, porque mesmo o cartão a dar 0~3.3V, o Arduino consegue interpretar como sendo 0~5V.

Dai as resistências para baixar a tensão de saída do Arduino antes de entrar no cartão.

brunomartins

Thiago, obrigado. Consegui entender. Vou tentar montar o circuito e se conseguir tudo certo posto aqui no fórum pro pessoal.

Você conhece sobre SPI? Andei estudando e vou ter que implementar para poder fazer o leitor SD.
_______________________________
Bruno Martins

TigPT

De nada.. e é Tiago.

Se utilizares as pesquisas encontras informação como por exemplo este post:
http://lusorobotica.com/index.php/topic,695.0.html

brunomartins

Alguém sabe algum site que vende essa placa para SD?

Não vou ter tempo de implementar e so me resta comprar...
_______________________________
Bruno Martins


brunomartins

_______________________________
Bruno Martins

delphi

http://www.futurlec.com/Mini_SC.shtml

Se alguem estiver a pensar encomendar algum avise que tambem estou interessado, ou se encontrarem algum mais barato.

Por outro lado, não sei que mais vale comprar um desses leitores de cartões usb baratuxos e o desmontar todo...



Quote from: brunomartins on 13 de May de 2009, 18:57
Alguém sabe algum site que vende essa placa para SD?

Não vou ter tempo de implementar e so me resta comprar...
www.saborapalco.com - Companhia de Teatro Amador
www.megavaquinha.com - Uma mega aposta no euromilhões de um grupo de mega amigos

brunomartins

Alguém já comprou por esse site?

http://www.futurlec.com/

Queria saber se ele é confiável...
_______________________________
Bruno Martins

jagsilva

Boas.
Já comprei no futurlec e nao tive problemas.

a sparkfun tambem tem.

jaime

brunomartins

Fiz uma compra la nesse final de semana...
agora estou so aguardando chegar...
:D
_______________________________
Bruno Martins

brunomartins

#13
pessoal alguem tentou implementar esse codigo?

o meu fika dando erro aparecendo a msg de erro do progrma..ou intao fika repetindo o menu direto
sera alguem tem alguma ideia ai?
obrigado

o codigo ta ai

#include <sd-reader_config.h>
#include <sd_raw.h>
#include <sd_raw_config.h>





int print_disk_info();
int sample();
int readDisk();

byte incomingByte;
void printWelcome();
long int address;
byte tempBytes[2];


void setup()
{
 
 Serial.begin(9600);
 delay(1000);

 printWelcome();
 if(!sd_raw_init())
 {
    Serial.println("MMC/SD initialization failed");      
 }
 print_disk_info();
}



void loop()
{
   int i;    
   
   if(Serial.available()>0)
   {
        incomingByte=Serial.read();
   
      switch(incomingByte)
      {
          case 114:
                    readDisk();
                    break;
          case 115:
                    sample();
                    break;
          default:
                    break;
      }
   }    
}

int sample()
{
   int i,j;
   int temp;
   byte low;
   byte high;
   byte inByte;
   
   Serial.println();
   Serial.println();
   Serial.println("Sampling..");
   for(i=0;i<500;i=i+2)
   {
       if(Serial.available()>0)
       {
           inByte=Serial.read();
           if(inByte==113) return 0;
       }
       temp=analogRead(0);
       Serial.print(temp,DEC);
       Serial.print(" ");
       
       //Convert int to 2 bytes
       low=temp&0xFF;
       high=temp>>8;
      // Serial.print(temp,DEC);
       //Serial.print(low,DEC);
       //Serial.print(high,DEC);
   
       tempBytes[0]=low;
       tempBytes[1]=high;
       
       if(!sd_raw_write(i,tempBytes,2))
       {
         Serial.print("Write error");
       }
       //sd_raw_sync();
       delay(5000);
       
 Serial.println();
     
   }
   
   return 1;
}


int readDisk()
{
   byte low;
   byte high;
   byte info[2];
   int i;
   int  result;
   Serial.println();
   for(i=0;i<50;i=i+2)
   {
       sd_raw_read(i,info,2);
 
       //Serial.print(info[0],DEC);
       //Serial.print(" ");
       //Serial.print(info[1],DEC);
       low=info[0];
       high=info[1];
       result=high<<8;
       //result<<8;
       Serial.print(" ");
       Serial.print(result+low,DEC);
       Serial.print(" ");
   }
 
}

void printWelcome()
{
   Serial.println("------------------------");
   Serial.println("Data sampling system");
   Serial.println("send r to read disk");
   Serial.println("send s to start sampling");
   Serial.println("send q to stop sampling");
   Serial.println("Ready.....");
   Serial.println("-------------------------");
}


int print_disk_info()
{


   struct sd_raw_info disk_info;
   if(!sd_raw_get_info(&disk_info))
   {
       return 0;
   }

   
   Serial.println();
   Serial.print("rev:    ");
   Serial.print(disk_info.revision,HEX);
   Serial.println();
   Serial.print("serial: 0x");
   Serial.print(disk_info.serial,HEX);
   Serial.println();
   Serial.print("date:   ");
   Serial.print(disk_info.manufacturing_month,DEC);
   Serial.println();
   Serial.print(disk_info.manufacturing_year,DEC);
   Serial.println();
   Serial.print("size:   ");
   Serial.print(disk_info.capacity,DEC);
   Serial.println();
   Serial.print("copy:   ");
   Serial.print(disk_info.flag_copy,DEC);
   Serial.println();
   Serial.print("wr.pr.: ");
   Serial.print(disk_info.flag_write_protect_temp,DEC);
   Serial.print('/');
   Serial.print(disk_info.flag_write_protect,DEC);
   Serial.println();
   Serial.print("format: ");
   Serial.print(disk_info.format,DEC);
   Serial.println();
   Serial.print("free:   ");
 
   return 1;
}



vlw a ajuda
_______________________________
Bruno Martins

joaopedrocmp

Desculpem la reabrir este tópico.

Arranjei um leitor de cartões estragado e decidi fazer uma board de teste, o layout é o seguinte:



ja experimentei varios pinos e varias libraries ,mas todas davam erro ao iniciar.

Alguém tem uma com o respetivo wiring que tenha experimentado e funcionado?