Newsgroup: it.hobby.elettronica.digitale
Titolo: Memoria dati per un PIC

Salve a tutti, la domanda è forse banale, ma mi chiedevo qual'è la
memoria che convenga collegare ad un PIC ( in particolare il 18F4525 )
da usare come buffer temporaneo in un'applicazione di acquisizione
dati.
Il problema è che il processo di acquisizione non si deve sospendere
finchè non è completato e deve mantenere la stessa velocità di
campionamento ( due byte ogni 20 uS ) per tutto il periodo ( 1-2
minuti )
Ho provato a scaricare i dati direttamente sul PC via USB, ma
purtroppo ci sono delle interruzioni a causa del riempimento del
buffer della porta e della sospensione del programma di acquisizione
lato PC ( ho già provato ad aumentare la priorità del processo, ma il
problema rimane )
L'idea è quella di collegare al PIC un buffer su cui caricare i dati
acquisiti da scaricare poi con calma sul PC in un secondo tempo.
L'ideale sarebbe una memoria FIFO, ma mi sembra che non esistano delle
dimensioni che mi servono ( almeno 16Mb x 8 ).
Ho dato un'occhiata alle schedine SD collegate via SPI, ma mi pare che
si portino dietro una complessità di gestione che per questa
applicazione mi sembra eccessiva.
Idee ?
Grazie,
Marco

 applicazione mi sembra eccessiva.
Se tu usassi un AVR ti potrei segnalare librerie che permettono di gestire
la FAT32 per poter poi leggere la microSD sul PC.
In alternativa, scrivere su una SD senza file system è molto semplice,
basta poi rileggere i dati col micro stesso e mandarli al PC via seriale o
USB.

 USB.
Hai per caso qualche link a cui fare riferimento ?

 applicazione mi sembra eccessiva.
questo implementando un filesystem (es: fat)
senza filesystem interagire con una periferica spi è relativamente 
semplice... trovi molto se cerchi con google
tieni però presente che le schedine basate su flash hanno un numero 
massimo di cicli di scrittura garantiti... è un numero elevato tipo 100k 
e per un uso standard (copiare dei file da pc a pc, macchina 
fotografica, ecc...) sono ok
l'alternativa è un banco di sram collegato al pic solo che per 16MB ti 
servono 24 linee di indirizzo;
secondo me però se usi la sram come buffer e non come storage ti serve 
molto meno di 16MB...
quando il pc non ti accetta altri dati tu li metti nel buffer e quando 
il pc è pronto a ricevere tu prelevi dal buffer
-ice-

applicazione mi sembra eccessiva.
Se devi implementare un filesystem ssicuramente, ma è fattibile dipende se hai
abbastanza risorse disponibili sul µC.
--
ciao
  Stefano

MPao:

Non lo trovo più, mi pare fosse di qualche croato. Comunque con Google vedo
che anche di librerie per scrivere in FAT ce n'è a bizzeffe...
http://elm-chan.org/fsw/ff/00index_p.html
http://avenhaus.de/EEG/MMC/MMC.shtml
Questa è per far funzionare Petit FatFs sui PIC:
http://jonas.haksberg.net/post/2010/03/07/Petit-FatFs-on-a-PIC18.aspx

che anche di librerie per scrivere in FAT ce n'è a bizzeffe...
Forse era tedesco:
http://www.ulrichradig.de/index.html
http://www.ulrichradig.de/home/uploads/File/AVR_MMC_SD/MMC_SD_SourceCode.zip
ma è per AVR, in Germania i pic hanno poca fortuna,
--
ciao
  Stefano

 ma � per AVR, in Germania i pic hanno poca fortuna,
Anche quello del croato lo era. Del resto, se poi vuoi metterti anche a
implementare FAT16 o 32, col PIC ndo vai?

 implementare FAT16 o 32, col PIC ndo vai?
Grazie a tutti per le indicazioni : mi avete dato un sacco di
materiale da studiare.
Condivido che la scelta del PIC è poco felice al crescere della
complessità, ma, purtroppo in questo caso è obbligata.
Torno presto con altre domande appena mi sono fatto un'idea più
precisa.
Ciao,
Marco

 implementare FAT16 o 32, col PIC ndo vai?
la fat32 l'ho implementata sul 16f877a;
certo non potendo tenere tutto il buffer da 512 bytes nella ram memoria 
interna le prestazioni sono scadenti
giï¿œ meglio con la serie 18f che mi ha permesso di mandare in decodifica 
uno stream dati mp3 256kbps cbr leggendo direttamente da harddisk
aggiungendo una sram all'esterno ed implementando una specie di 
double-buffering si ottiene una soluzione decisamente migliore anche se 
non ho idea di quanto sarebbe piï¿œ performante lo stesso codice su un arm 
oppure su un 8051
-ice-

MPao ha scritto:

ciao
prova a vedere qui:
http://www.ramtron.com/products/nonvolatile-memory/serial.aspx
sono delle ram seriali non volatili, che si trovano nei vari siti di 
e-commerce.
se non hai problemi di piedini, ci sono quelle parallele:
http://www.ramtron.com/products/nonvolatile-memory/parallel.aspx
queste memorie combinano le migliori prestazioni delle ram con quelle 
delle e2prom
durante la fase di acquis. e tra una fase e l'altra puoi trasferire i 
dati che hai
posto nella ram del micro all'esterno. usi 2x2Byte di ram per crearti un 
doppio
buffer di transizione.
se usi il C crearti questa cosa con un Pic è molto semplice e non 
importa che passi
ad altri uC (AVR...per esempio)
emi

delle e2prom
Ma costicchiano, e il massimo che si trova in seriale č 128K*8
in parallelo un po di piů ma in package BGA. (auguri)
A lui servono almeno 16Mb x 8, le ramtron sono fuori portata.
--
ciao
  Stefano