aumento di memoria

Buona sera a tutti, sono nuovo, anche se è ormai un mesetto che leggo qua e la. Ho messo le mani sul mio arduino uno a giugno e sono ansioso di cominciare. Dopo aver giocherellato un po' con qualche led do deciso di cominciare a pensare a qualcosa di serio. è stato allora che mi sono imbattuto in questa discussione

dopo essere arrivato in fondo ho notato con profondo dispiacere che era ferma da parecchi mesi.
nonostante ciò ho deciso di cominciare a pensare a una macchinina che crea la mappa della casa.
Dopo essermi dilungato in un minimo di presentazione (non mi pare che ci sia un topic apposta per farlo) vi sottopongo la mia domanda:
la memoria di arduino è grande 32256 byte, il che è un po' pochino, specie per farci una piantina un minimo accurata!!!! mi chiedevo quindi se è possibile attaccargli una memoria esterna, una chiavetta USB o altro.
Nelle risposte vi chiederei di usare un linguaggio semplice, per un profano che ha da poco visto la luce XD XD

Ringrazio per le risposte e mi scuso se l'argomento era già stato trattato, non l'ho trovato.

certo puoi usare un Sd card, delle EEPROM (son davvero semplici queste :slight_smile: ) volendo anche le pennette USB ma la cosa si complica non poco perchè devi scriverti un driver apposito....
Io fossi in te manderei tutti i dati in tempo reale ad un pc e con una qualche GUI ti disegni man mano la mappa :slight_smile:

Ciao

Il modo migliore per affrontare un problema del genere e senz'altro usare una sd card esterna.
Esistono alcuni shield su internet, ma il più famoso è senz'altro quello di adafruit con clock esterno: https://www.adafruit.com/products/243&zenid=7fb78c3e3a6d565cabab654760ebbff4

Sempre sul sito di adafruit ci sono molti tutorial in generale su come programmare arduino e, in particolare, le sd cards:
http://www.ladyada.net/make/logshield/index.html
http://www.ladyada.net/products/microsd/

buon lavoro

a.

Sono doverose un paio di precisazioni.

Quella che tu intendi come "memoria" di 32256 byte è in realtà la memoria di tipo Flash che l'Atmega utilizza per memorizzare il programma (o "sketch"). Siccome stiamo parlando di architetture HW di tipo Harvard, abbiamo la memoria del codice separata da quella delle variabili. La memoria destinata alla gestione delle variabili è la SRAM, ed in un Atmega328 questa memoria è di soli 2048 byte. Esiste anche un terzo tipo di memoria, una EEPROM interna da 1024 byte utilizzabile per salvare dati che devono restare anche in caso di assenza di alimentazione, ma la memoria normalmente usata per la gestione dei dati volatili, creati a runtime, è la SRAM. Quindi la tua mappa non verrebbe salvata nella Flash di 32K ma nella piccola SRAM di 2K (a meno di tecniche particolari che non sto ad illustrare).

Detto ciò, espandere la memoria interna (Flash/SRAM) di un Atmega328 non è possibile: il micro è fatto per indirizzare solo la memoria interna. Però è possibile, come ti hanno suggerito, utilizzare delle memorie esterne riscrivibili e/o non volatili, tipo schede SD oppure EEPROM o altro ancora. Le SD vengono gestite come sul PC, quindi usate per la creazione di file. Le EEPROM vengono invece usate per salvare dati in formato binario.

leo72:
Sono doverose un paio di precisazioni.

Quella che tu intendi come "memoria" di 32256 byte è in realtà la memoria di tipo Flash che l'Atmega utilizza per memorizzare il programma (o "sketch"). Siccome stiamo parlando di architetture HW di tipo Harvard, abbiamo la memoria del codice separata da quella delle variabili. La memoria destinata alla gestione delle variabili è la SRAM, ed in un Atmega328 questa memoria è di soli 2048 byte. Esiste anche un terzo tipo di memoria, una EEPROM interna da 1024 byte utilizzabile per salvare dati che devono restare anche in caso di assenza di alimentazione, ma la memoria normalmente usata per la gestione dei dati volatili, creati a runtime, è la SRAM. Quindi la tua mappa non verrebbe salvata nella Flash di 32K ma nella piccola SRAM di 2K (a meno di tecniche particolari che non sto ad illustrare).

Detto ciò, espandere la memoria interna (Flash/SRAM) di un Atmega328 non è possibile: il micro è fatto per indirizzare solo la memoria interna. Però è possibile, come ti hanno suggerito, utilizzare delle memorie esterne riscrivibili e/o non volatili, tipo schede SD oppure EEPROM o altro ancora. Le SD vengono gestite come sul PC, quindi usate per la creazione di file. Le EEPROM vengono invece usate per salvare dati in formato binario.

Vero, infatti credo intendesse proprio salvare nella flash....
poi per le eeprom puoi usare lo stesso micro per farti restituire tutti i dati via seriale ma nel tuo caso credo sarebbe molto più semplice o la diretta trasmissione ad un pc oppure l'SD card....

Dipende come intende salvare la mappa della casa.
Potrebbe anche considerare un chip Flash. Oppure le FRAM, memorie RAM non volatili. Insomma, ci sono tanti sistemi da usare come contenitori esterni.

ratto93:
... volendo anche le pennette USB ma la cosa si complica non poco perchè devi scriverti un driver apposito....

Oltre a SW apposita serve anche HW aggiuntiva per avere un HOST-USB e poter usare una pennetta di memoria USB.
La cosa piú semplice rimane la SD-Card dato la semplicita di collegamento e la dimensione disponibile (parecchi GByte di spazio.
Ciao Uwe

Grazie a tutti per le risposte.
Per la mappa diciamo che il modo più semplice e casereccio di costruirla è la banalissima e costosissima (in spazio) matrice. Quindi per il primo tentativo pensavo di farla così e poi magari modificarla col tempo.
Quindi, se non sbaglio, nonostante ciò che pensavo io in partenza fosse sbagliato, la SD card risolverebbe i miei problemi????

arcer:
Quindi, se non sbaglio, nonostante ciò che pensavo io in partenza fosse sbagliato, la SD card risolverebbe i miei problemi????

Puoi usare sia una EEPROM esterna sia una SD, dipende da come organizzi i dati e da quanti dati devi memorizzare.
Una EEPROM I2C da 64 kB di dati (una 24LC512) costa pochi euro, per una SD devi usare un alloggio apposito ed una circuiteria leggermente più complessa. Inoltre le librerie di gestione di una SD consumano da 8 a 12 kB di memoria (forse anche di più), dipende dalle funzionalità che ricerchi.

Comunque, se organizzi i dati in una matrice, 64 kB di spazio contengono 65536 dati. In teoria puoi organizzare i dati in una griglia 8*8 kB, non sono pochi.

Se vuoi fare un matrice anch' io suggerisco un EEprom perché puoi piú semplicemente accedere a ogni cella di memoria mentre sulla SD lavori con file.
Ciao Uwe

non so il tuo grado di preparazione, se vuoi presentarti c'è l'OFF TOPIC topic XD
comunque ti consiglio di fare un robot che eviti gli ostacoli e usi motori stepper (o motori con un encoder per conoscerne la posizione).

io volevo fare quello che tu hai in mente e voglio ancora ma per motivi di tempo non ho ancora iniziato, conto nei prossimi mesi scuola permettendo (ora sarà estate ma sto studiando come un laureando in fisica quantistica nonostante debba andare in 3° superiore =() però ti consiglio una cosa del genere:
robot->xBee (o modulo wireless)->pc
nel pc usi phyton o processing o un programma .net che hanno librerie per disegnare linee, punti ecc. le comunicazioni le fai via seriale e devi inviare numero di step (nel programma devi mettere il raggio della ruota) e un segnale sui 4 lati del robot che indichino la presenza di ostacoli. quindi se vie è un ostacolo davanti il robot deve da solo girarsi finchè non vede che non vi sono ostacoli.

siccome è una cosa complessa ti consiglio di lasciare gli algoritmi di "disegno" al pc che un processore 64 bit a minimo 1GHz direi che fa molto di più di un 8bit a 16MHz e non hai priblemi di spazio :wink:

Grazie, ho tutto il resto dell'estate per decisere,
vi farò sapere se ci saaranno progressi XD

OT sui robot:
un “robot” è indipendente, altrimenti non è un robot, è un dispositivo radiocomandato.

Sarà sicuramente molto più facile realizzare qualcosa controllato dal PC, ma un aggeggio indipendente è 100 volte più figo. E poi mica deve mappare la casa al cm2, quando ha una mappatura con risoluzione di 25cm ha già una bella mappa. Ad esempio, una stanza di 5+4 mt richiede 2016 celle da 2525cm. Ogni cella può così essere 1 o 0, a seconda che ci sia un ostacolo oppure no. Un appartamento medio di 85 mq lo si può mappare con 1360 celle (1 mq=44 celle=16; 8516=1360), una cifra molto ragionevole.

flameman:

uwefed:
Se vuoi fare un matrice anch' io suggerisco un EEprom perché puoi piú semplicemente accedere a ogni cella di memoria mentre sulla SD lavori con file.

mah, volendo si puo' anche non far uso del filesystem, cioe' volendo, e dico volendo, nulla vieta di saltare il layer filesystem fat e di considerare il dispositivo a blocchi per quello che e': ovvero un array di blocchi da 512byte (o 1024) cad

Flameman.... ti faccio un appunto non volermene male.... a volte parli troppo come dire.... complicato.... non tutti conoscono in modo così approfondito i componenti e si rischia di fargli fare confusione...
ciò non togli che fai bene a rispondere :slight_smile:

ma no :slight_smile:
guarda che hai frainteso....
io non posso definirmi un esperto ma so bene come funziona il filesystem eccetera dico solo.... parla in maniera più semplice per chi ne sa meno di te.... io ti ammiro molto perchè come Astrobeed, Uwe, Leo, Menniti e tutti gli altri ne sapete un sacco.. la mia non voleva essere una critica ma un semplice consiglio di quelli che si danno al bar bevendo una birra assieme tra amici... davvero :slight_smile: