Bom dia,
estou fazendo um projeto onde tenho que guardar 10 strings de 5000 caracteres, em uma memoria nao volatil. (sera um banco de dados que pode ser modificado, por comando. )
como nao tenho espaco nem na eeprom e nem na ram, pensei em utilizar a flash.
só que o progmem nao oferece uma funcao para gravar e somente para ler.
alguem sabe onde eu encontro esta informacao? pelo que vi so é possivel com o bootloader. eu nao tenho outra saida a nao ser toda vez que for modificar, regravar o programa inteiro??
Tags:
Permalink Responder até Ric4rdo Pedr0s0 em 10 outubro 2012 at 11:48
Cartão SD, pode ser uma alternativa para vc?
Permalink Responder até leandro hatimine em 10 outubro 2012 at 12:16
como tem espaco na flash, queria colocar tudo la.
mas vou dar uma pesquisada nas placas de SD
Permalink Responder até Mauro Assis em 10 outubro 2012 at 12:07
A melhor biblioteca de acesso à flash do Arduino que eu conheço é essa: http://arduiniana.org/libraries/flash/
Com ela vc declara variáveis que serão automaticamente salvas na memória flash, se livrando da amolação de lidar com ela diretamente.
Abracadabraço,
Mauro Assis
Permalink Responder até leandro hatimine em 10 outubro 2012 at 12:21
eu posso usar isso quando eu tiver rodando o programa??!
ex:
se chegar '1' pela serial, eu leio os 100 proximos valores e gravo na flash.
se chegar '2' imprimo o que foi guardado em todos os arrays.
Permalink Responder até Mauro Assis em 10 outubro 2012 at 12:38
Cara... não sei, só testando para ver. Eu usei só como leitura.
Tempos atrás eu fiz uma rotina que lê e grava long usando a lib EEPROM.h que vem no Arduino. Vc poderia adaptá-la para string, aí vai:
void WriteLongEEPROM(byte addr, long val)
{
for(int long offset=0;offset < sizeof(long); offset++)
{
long b = (val >> (offset * 8)) & B11111111;
EEPROM.write(addr+offset,b);
}
}
long ReadLongEEPROM(byte addr)
{
long result = 0;
for(int long offset=0;offset < sizeof(long); offset++)
{
long b=EEPROM.read(addr+offset);
result = result | (b (offset * 8));
}
return result;
}
Permalink Responder até leandro hatimine em 10 outubro 2012 at 15:51
o unico problema é que a EEPROM só cabe 4k.
vou tentar ver com a flash..se nao der, verei com o SD mesmo....
obrigado.
Permalink Responder até Mauro Assis em 10 outubro 2012 at 12:08
PS: um shield com cartão SD também seria uma alternativa.
Permalink Responder até Luis Filipe Rossi em 11 outubro 2012 at 3:02
Acredito que seja possível, porém não sei como seria com o IDE do Arduíno pois você precisaria mudar o Linker. Assim como o Bootloader, o seu programa também pode reescrever a memória do Atmega. Esta escrita é feita em páginas e não byte a byte. De forma ao compilador não utilizar tais páginas reservadas para código você precisa modificar o linker que é o arquivo que define tudo isto. Tendo feito isto basta modificar a memória como descrito na página 269 do datasheet.
Porém o Arduino convencional não tem memória suficiente para 50KB ou seja 5000 x 10 bytes.
O mais simples é usar uma eeprom externa ou uma flash externa.
Abraços
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
Por: R$ 29,00
Ou em até 6x de
R$ 5,18
Por: R$ 150,00
Ou em até 18x de
R$ 10,00
Por: R$ 195,00
Ou em até 18x de
R$ 13,00
(ADS1102C) - 100MHz - 2 Canais
Por: R$ 1920,00
Ou em até 18x de
R$ 127,96
© 2013 Criado por Marcelo Rodrigues.