LusoRobótica - Robótica em Português

Sistemas específicos => Arduino / AVR => Tópico iniciado por: Alentejo em 28 de Julho de 2009, 12:15

Título: Gravar no sd card
Enviado por: Alentejo em 28 de Julho de 2009, 12:15
Ola bom dia!! eu gostaria que me podesem dar uma ajuda! Eu tou a tentar gravar um ficheiro no sd card e nesse ficheiro ter lá "Bom dia" e dps o consiga ver no hiperterminal!! Agradeço desde ja a vossa atensão!!abraços
Título: Re:Gravar no sd card
Enviado por: ricard0g0mes em 28 de Julho de 2009, 15:47
http://www.roland-riegel.de/sd-reader/index.html

http://www.alfonsomartone.itb.it/kfmdxc.html

Pesquisa: http://www.google.pt/search?hl=pt-PT&q=read+sd+card+arduino&btnG=Pesquisa+do+Google&meta=&aq=f&oq=
Título: Re:Gravar no sd card
Enviado por: Alentejo em 28 de Julho de 2009, 16:18
Obrigado Ricardo!!Ja consigo escrever no cartao e ler atraves do hiperterminal!!Abraços
Título: Re:Gravar no sd card
Enviado por: ricard0g0mes em 28 de Julho de 2009, 16:43
Obrigado Ricardo!!Ja consigo escrever no cartao e ler atraves do hiperterminal!!Abraços

naquilo que puder ir ajudando ;)
Título: Re:Gravar no sd card
Enviado por: Alentejo em 29 de Julho de 2009, 10:49
Ricardo sera possivel nós fazermos um ficheiro sem termos de o escrever no cartao? Isto é eu tou a utilizar o arduino onde tenho o sd card ligado a ele e queria por la ficheiros sem ter que os escrever no cartao!Obrigado
Título: Re:Gravar no sd card
Enviado por: ricard0g0mes em 29 de Julho de 2009, 10:52
Ricardo sera possivel nós fazermos um ficheiro sem termos de o escrever no cartao? Isto é eu tou a utilizar o arduino onde tenho o sd card ligado a ele e queria por la ficheiros sem ter que os escrever no cartao!Obrigado

não entendi a pergunta...
queres por ficheiros no cartao sem ter de os escrever... nao entendo.
explica-te melhor...
Título: Re:Gravar no sd card
Enviado por: Alentejo em 29 de Julho de 2009, 11:04
As paginas que você me indicou eu consegui escrever e ler o conteudo de um ficheiro!!Mas esse ficheiro foi inserido por mim no proprio cartao do sd card!! O que eu pertendia era agora programar de modo a fazer ficheiros no sd card!! Percebeu?
Título: Re:Gravar no sd card
Enviado por: iMartins87 em 23 de Agosto de 2009, 20:16
Fiz esta montagem com o seguinte código:

Citar
#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;
}



Mas no entanto não consigo escrever nada no cartão SD porque mal inicio o HyperTerminal ele começa com o seguinte:

Citar
------------------------
Data sampling system
send r to read disk
send s to start sampling
send q to stop sampling
Ready.....
-------------------------

rev:    28
serial: 0x8F94BC8E
date:   1
7
size:   512229376
copy:   0
wr.pr.: 0/0
format: 0
free:

Sampling..
552
546
553
554
555
556
556

...e os números continuam e não param!!!

Alguém me pode dizer se isto é normal, caso não o que posso fazer para poder resolver esta situação?

Título: Re:Gravar no sd card
Enviado por: Njay em 24 de Agosto de 2009, 00:04
Com o código que tens sim, é perfeitamente normal. Ele vai imprimir números cerca de 250 vezes, com 5 segundos de intervalo entre cada impressão:

for (i = 0; i < 500; i = i + 2)
{
     (...)

     temp = analogRead(0);
     Serial.print(temp, DEC);
     Serial.print(" ");

     (...)

     delay(5000);
     Serial.println();
}

Só pára se carregares na tecla "q" minúscula (ascii 113; percebia-se logo se estivesse escrito 'q' em vez de 113), por causa desta parte:

if (Serial.available() > 0)
{
    inByte = Serial.read();
    if (inByte == 113) return 0;
}