Quale memoria?

Salve a tutti, qualcuno saprebbe dirmi se esiste una memoria di qualsiasi genere che abbia le seguenti caratteristiche?

-almeno 32Kb di memoria
-non utilizzi pin analogici ma solo digitali
-sia veloce quanto la memoria dell'arduino
-esistono già delle librerie per arduino

Chiedo troppo?? Grazie mille a tutti!!

PS, già ho provato alcune memorie ad alta capacità, ma non avendo trovato librerie non riesco ad utilizzarle... ecco ad esempio un topic che ho aperto quasi due anni fa: Arduino Forum

Penso stiamo parlando di memoria EEProm?

microchip ha a catalogo varie memorie economiche, ma tu escludi i2c, perché impegna due pin analogici. Quindi non rimane che SPI, o triwire.
Per triwire hai ragione so per certo che non c'è nulla perché serviva anche a me, per SPI non ho controllato, comunque non dovrebbe essere complicato gestire il protocollo SPI, specie con arduino.

Ti consiglio di consultare RS usando la ricerca per selezione di campo es solo memorie SPI, spazio dati, contenitore ecc.

Ciao.

Di quale Arduino parli?

Una memoria esterna non é mai veloce come quella interna perché l' interfaccia (I2C o SPI) é seriale e non paralella e percui anche se il Bus funzionasse con la velocitá del clock avresti sempre almeno una 30 o piú cicli per dare l' indirizzo alla mamoria e poi trasmettere il dato. 15 e 8 Bit e alcuni bit di controllo o tempi di clock persi.
Il I2C in realtá lavora con 400kHz e il SPI con 1/4 del clock del processore.
Se metti una memoria paralella devi pilotarla in modo complicato emulando con i Pin un sistema BUS di interfacia paralella. Perdi un sacco di tempo nello sketch oltre che dovresti programmare in assembler.

L'ATMega1280/2560 sul Arduino MEGA /MEGA2560 ha la modalitá di EXTENDEND Memory per la ram.

schedina comerciale:
http://ruggedcircuits.com/html/megaram.html o
http://ruggedcircuits.com/html/quadram.html sempre usabile in blocchi da 64kByte.

Ciao Uwe

GianfrancoPa:
Salve a tutti, qualcuno saprebbe dirmi se esiste una memoria di qualsiasi genere che abbia le seguenti caratteristiche?

Forse è meglio che dici cosa devi fare con questa memoria e se deve essere di tipo ram o eeprom, in tutti i casi le caratteristiche che chiedi sono incompatibili con Arduino come ti ha già spiegato Uwe.

Avete ragione, cercherò di spiegare i motivi delle mie richieste:

-non utilizzi pin analogici ma solo digitali
Nel piccolo progettino che sto conducendo riesco a campionare del segnale audio ad una velocità prossima ai 40kHz (in realtà è scritto 38,5kHz). Ho preso esempio dal codice che si trova in questo link: http://www.instructables.com/id/Arduino-Audio-Input/step7/Interrupt/. Leggendo, viene spiegato che per raggiungere questa velocità di acquisizione devono essere disabilitate tutte gli ingressi analogici ad eccezione di quello utilizzato per il segnale audio. Per tale ragione non posso utilizzare memorie I2C. Ovviamente ho provato ugualmente a mettere una memoria EEPROM e a controllarla per mezzo del bus I2C ma il programma andava in blocco.

-sia veloce quanto la memoria dell'arduino
-abbia almeno 32Kb di memoria
Inizialmente la mia intenzione era quella di elaborare i dati man mano che venivano acquisiti, solo che ho notato che l'elaborazione fa perdere molto tempo ed il campionamento finale che ottengo è abbastanza scadente. Per tale ragione ho pensato che fosse prima necessario acquisire tutta la traccia e solo dopo effettuare le varie elaborazioni, ma a quella frequenza di campionamento mi serve un sacco di memoria. Con la memoria dell'arduino UNO (la prima versione se non sbaglio) riesco al massimo a conservare circa 1500 variabili di tipo byte, poi non riesco ad andare oltre. Se provo a conservare un maggior numero di dati, quando mando in esecuzione il programma, noto che comincio ad avere errori, suppongo per il probabile sforamento della ram.
Supponendo quindi di dover procedere prima alla memorizzazione della traccia (circa 0,3 sec), e successivamente alla sua elaborazione, mi serve una memoria capace di supportare una velocità di 40kHz, ammesso e concesso che la memoria dell'Arduino (usando lo sketch del link che ho riportato) riesca a salvare a questa velocità e che in realtà il campionamento che ottengo non sia di ordine inferiore.

L'idea della RAM aggiuntiva sembra allettante, ma nell'ipotesi di voler poi fare una versione standalone andrei a complicare tutto, con alta probabilità di non riuscire nello scopo. Ho letto anche della possibilità di emulare l'I2C con dei pin digitali.

Ovviamente potrei agire in altri modi, riducendo il campionamento ad esempio, ma prima di sacrificare la qualità dei dati ricevuti volevo esplorare altre soluzioni, ovviamente sempre se realizzabili. Spero di avervi dato gli spunti giusti per aiutarmi a compiere le scelte migliori!

Grazie mille!

GianfrancoPa:
-non utilizzi pin analogici ma solo digitali

La I2C non è analogica, è digitale, tutti i pin analogici non usati come tali si possono utilizzare come digitali, p.e. nel tuo caso usi A0 come input analogico e puoi usare A1-A2-A3-A4-A5 come I/O digitali, oppure A1-A2-A3 come I/O digitali e A4-A5 come I2C.
Se campioni a circa 40 kHz vuol dire che devi salvare in memeria 40000 campioni al secondo, con 32 kByte non memorizzi nemmeno un secondo di audio, inoltre trasferire 40 kByte al secondo tramite seriale richiede un banda minima di 320 kbps più l'overhead del bus, diciamo che con la I2C a 400 kbps sei al limite, potrebbe non bastare, sicuramente meglio usare la spi che arriva fino a 4 mbps come velocità di punta.
Altra considerazione sul tipo di memoria, le EEPROM non sono molto veloci in scrittura, però arrivi senza problemi ai 40 kBps richiesti, per contro hanno una vita limitata in scrittura e con il tuo uso è facile che in tempi brevi arrivi al massimo consentito, meglio usare una SSRAM SPI (Serial Static Ram) come la 23LC1024 di Microchip, è da 1 Megabit, quindi 128 kByte, lavora fino a 20 MHz di clock SPI e non ha alcun limite di scritture.

La traccia audio che devo registrare è di circa 0,3s, per cui dovrei registrare circa 12.000 byte in linea di massima, ma abbondare è sempre meglio.

Spero a casa di averne una di queste 23LC1024, in caso me la procuro. Ho visto che ci sono anche alcuni sketch di esempio per cui dovrei essere in grado di utilizzarla.

Grazie mille!!

Ciao Gianfranco,
proprio in questi giorni sto provando le memorie definite "Ferroelectric Nonvolatile RAM" della RAMTRON, garantite per 100 trilioni (10e14) di scritture/letture e con capacità di mantenere i dati per 10 anni. In particolare sto provando la FM25V20 da 2Mbit organizzati come 256KBytes (256K x 8bit) ... vd. qui : http://www.ramtron.com/products/nonvolatile-memory/serial-product.aspx?id=171

Dai miei test, usando un Arduino UNO R3, ed impostando il setClockDivider() della libreria SPI a "SPI_CLOCK_DIV2" (... il minimo che si può impostare ... pari ad un clock di 8MHz), leggo o scrivo 10'000 bytes in circa 20200 microSecondi (20,2 milliSecondi). La differenza tra il tempo di scrittura e quello di lettura e di qualche microSecondo quindi ... del tutto trascurabile.

Occhio, è un chip a 3.3v quindi ... occorre adattare i livelli dei vari pin :wink:

Guglielmo

P.S. : Il passo successivo sarà quello di realizzarci un piccolo "shield" di "espansione memoria" e di corredarlo di una semplice libreria per l'uso :slight_smile:

wow! Già ho acquistato la memoria di cui si parlava qualche post fa, terrò in considerazione la tua per usi futuri!

Grazie :wink:

Qua mi chiedo se non é meglio usare un Arduino DUE o qualche altra scheda con un controller/CPU da 32 Bit.
Ciao Uwe

Se devo essere onesto, nemmeno so quali caratteristiche abbia l'Arduino DUE... Appena ho qualche minuto cercherò di recuperare il tempo perduto :wink:

Ho letto le specifiche dell'Arduino DUE, ed è magnifico, sarebbe l'ideale per il mio scopo, ma il grande problema è che non mi sarebbe possibile poi fare la versione stand alone... Vediamo ormai come procede con l'UNO, mal che vada cambio direzione :wink:

Grazie!!

Qualcuno saprebbe dirmi dove trovare i 23LC1024?

Su RS non arrivano prima di metà a prile, su Farnell bisogna spendere almeno 50 euro+ iva. Ho provato a vedere se avevano l'Arduino DUE ma non l'hanno, per cui non saprei proprio come raggiungere quella spesa...
Mouser ho visto che ha spese di spedizione di 20 euro...

Altri negozi??

Grazie!!

C'è la 23K256 disponibile, è sempre in formato DIP8 e seriale SPI (max 20 MHz), ha un taglio di soli 32 kB (256 Kbit) ma se devi registrare 12 kB di dati ti basta.

Potrebbe fare al caso tuo?

Per si e per no li stavo cercando tutti e due, me ne metto 5 per tipo dentro. Comunque su Farnell ho trovato l'Arduino due, così supero i 50 euro :wink: Più tardi perfeziono l'acquisto!!

GianfrancoPa:
Per si e per no li stavo cercando tutti e due, me ne metto 5 per tipo dentro. Comunque su Farnell ho trovato l'Arduino due, così supero i 50 euro :wink: Più tardi perfeziono l'acquisto!!

Ma Farnell non spedisce ai privati... oppure ha cambiato politica?

Il primo ordine che ho fatto è andato a vuoto perchè non superavo i 50+iva di ordine. Ho ricevuto una mail da parte dei responsabili che mi spiegava l'accaduto, riporto uno stralcio:

Gentile Cliente,

Le comunico che purtroppo l’ordine in oggetto è stato cancellato in quanto per noi risulta incompleto.

Da poco Farnell ha aperto la vendita anche ai privati con clausole specifiche:
· Pagamento tramite carta di credito
· Valore minimo dell’ordine 50€ (iva e spese escluse)-( esclusi ordini per raspbrerry)
· Acquisto di componenti SOLO a stock presso i nostri magazzini (non si accettano ordini con materiale al momento non disponibile) – (esclusi ordini per raspbrerry)
· Inserimento nei commenti all’ordine (istruzioni speciali/altro): n° telefono fisso e codice fiscale completo

Quindi, se prima non si poteva, ora si può!

Bene, è da tenere a mente per i successivi acquisti. Grazie della precisazione :wink:

buono a sapersi... posso chiedere che ti serve 0.3sec di audio? sono curioso :grin:

Certo, tutto alla luce del sole :smiley: