Capo d'Orlando
Offline
Sr. Member
Karma: 0
Posts: 302
Electronics & Web Dev, Unix User, Ω LEO, Rock/Deep Music, Tech/Science/Finance addicted, Ski/Snowboard and much more …
|
 |
« on: January 01, 2013, 01:36:14 pm » |
Buonasera gente ! Tanti auguri a tutti !  Sto costruendo un data logger, con sensore dht, mpl115a2, gps/gsm shield e sd shield. Quando compilo il primo sketch (pre_final3_at), ho il seguente output (tutto ok): CONTROLLO COMUNICAZIONE MODULI IN CORSO Modulo DHT: OK Modulo MPL115A2: OK Modulo GSM/GPS: OK Reset del GPS in corso, 60 secondi Attivazione del GPS in corso, 180 secondi **************************************
0.000000;0.000000;0.000000;11.90;69.60;102.30; 3807.957847;1443.556526;67.453888;11.80;69.90;102.30; 3807.958406;1443.559435;67.726128;11.70;69.80;102.30; 0.000000;0.000000;0.000000;11.70;69.70;102.14; 3807.921071;1443.520643;65.850891;11.60;69.80;102.14; 3807.956760;1443.559905;66.605232;11.60;69.80;102.02; 3807.950549;1443.557208;67.353096;11.70;70.00;102.26; 3807.951304;1443.559770;67.430756;11.60;70.00;102.26; 3807.951304;1443.559770;67.430756;11.70;70.00;102.26;
[...]
Mentre con il secondo sketch (pre_final3_at_sd), dove viene aggiunto il necessario per scrivere sulla sd, ho il seguente output (tutto sballato):
Modulo DHT: OK
Modulo DHT: OK
Modulo DHT: OK
[...]
Può essere un problema di Ram ? Ovvero la scrittura su sd finisce le ultime risorse disponibili ? In allegato trovate gli sketch completi di output ! Grazie
|
|
|
|
« Last Edit: January 02, 2013, 12:08:32 pm by anerDev »
|
Logged
|
|
|
|
|
Offline
Edison Member
Karma: 26
Posts: 1339
You do some programming to solve a problem, and some to solve it in a particular language. (CC2)
|
 |
« Reply #1 on: January 01, 2013, 01:56:35 pm » |
Per una rapida verifica io farei così: usa la funzione freeRam() (cercala qui o con google, ce ne sono diverse), e prova ad usare la macro F() per tutte le stringhe literal che hai.
Uno string literal è ad esempio "CIAO".
|
|
|
|
|
Logged
|
|
|
|
|
Capo d'Orlando
Offline
Sr. Member
Karma: 0
Posts: 302
Electronics & Web Dev, Unix User, Ω LEO, Rock/Deep Music, Tech/Science/Finance addicted, Ski/Snowboard and much more …
|
 |
« Reply #2 on: January 01, 2013, 02:22:22 pm » |
con lo sketch che funziona esce un 325 mentre con l'altro, dove ho aggiunto l'sd esce questo (tra l'altro si resetta dato che il controllo dei moduli deve avvenire una sola volta): --368
Modulo DHT: OK
-368
Modulo DHT: OK
-368
Modulo DHT: OK
Quindi l'SD va a saturare gli ultimi byte di Ram ?
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Edison Member
Karma: 26
Posts: 1339
You do some programming to solve a problem, and some to solve it in a particular language. (CC2)
|
 |
« Reply #3 on: January 01, 2013, 02:27:24 pm » |
Non ho idea di quanta ram necessiti la libreria SD.
Comunque hai provato F() ? Dovrebbe liberare un po' di ram.
|
|
|
|
|
Logged
|
|
|
|
|
Capo d'Orlando
Offline
Sr. Member
Karma: 0
Posts: 302
Electronics & Web Dev, Unix User, Ω LEO, Rock/Deep Music, Tech/Science/Finance addicted, Ski/Snowboard and much more …
|
 |
« Reply #4 on: January 01, 2013, 02:31:21 pm » |
No, ho provato lo sketch di esempio e non vedo nessun F() ! Come si deve settare ? Purtroppo la libreria del GPS richiede malta ram di suo. Ma già dal fatto che si riavvia non è un buon segno o sbaglio ? Quindi mi sa che devo passare all'Arduino Mega ! 
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Edison Member
Karma: 26
Posts: 1339
You do some programming to solve a problem, and some to solve it in a particular language. (CC2)
|
 |
« Reply #5 on: January 01, 2013, 02:40:04 pm » |
Serial.print("CIAO"); Serial.print(F("CIAO")); la seconda versione occupa meno RAM perché la stringa non viene letta nella RAM prima di essere "stampata", ma viene prelevata direttamente dalla PROGMEM. Effettua questa modifica su tutte le stringhe "literal", come ho detto prima, e vedi se non si riavvia più. Il riavvio del micro è un indicatore abbastanza certo di un problema di esaurimento RAM.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Edison Member
Karma: 26
Posts: 1339
You do some programming to solve a problem, and some to solve it in a particular language. (CC2)
|
 |
« Reply #6 on: January 01, 2013, 02:41:40 pm » |
PS: non vorrei sembrarti scortese, ma quando mi danno un suggerimento che non capisco di solito googlo 
|
|
|
|
|
Logged
|
|
|
|
|
Capo d'Orlando
Offline
Sr. Member
Karma: 0
Posts: 302
Electronics & Web Dev, Unix User, Ω LEO, Rock/Deep Music, Tech/Science/Finance addicted, Ski/Snowboard and much more …
|
 |
« Reply #7 on: January 01, 2013, 03:17:44 pm » |
Hai ragione  Niente da fare CIAO-368
Modulo DHT: OK
devo passare al Mega
|
|
|
|
|
Logged
|
|
|
|
|
Genova
Offline
Edison Member
Karma: 13
Posts: 2432
|
 |
« Reply #8 on: January 01, 2013, 04:41:22 pm » |
Non credo risolverai con una mega .... ma tu e skosso siete la stessa persona? perchè guarda caso il tuo sketch ha le stesse variabili di quelle di skosso che ha pubblicato ieri  ciao
|
|
|
|
|
Logged
|
Meglio imparare dalle cose inutili piuttosto che non imparare niente. [Arduino Mega R3 + Ethernet shield W5100 + SD card 8Gb FAT32]
|
|
|
|
Capo d'Orlando
Offline
Sr. Member
Karma: 0
Posts: 302
Electronics & Web Dev, Unix User, Ω LEO, Rock/Deep Music, Tech/Science/Finance addicted, Ski/Snowboard and much more …
|
 |
« Reply #9 on: January 01, 2013, 04:56:57 pm » |
Hauahau no no, forse utilizza il mio stesso modulo, SIM908 !
Comunque perché con il mega non risolvo ?
L'UNO ha 2 KB mentre il mega 8
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16431
Don't know what I do
|
 |
« Reply #10 on: January 01, 2013, 05:00:54 pm » |
Può essere un problema di Ram ? Ovvero la scrittura su sd finisce le ultime risorse disponibili ?
La libreria SD occupa un sacco di risorse. Controlla intanto il consumo statico del tuo sketch usando avr-size.
|
|
|
|
|
Logged
|
|
|
|
|
Genova
Offline
Edison Member
Karma: 13
Posts: 2432
|
 |
« Reply #11 on: January 01, 2013, 06:24:43 pm » |
Si la SD prende un bel po' di ram, soprattutto in lettura e scrittura infatti nel mio progetto ho dovuto abolirla per quanto riguarda il logger, per il caricamento all'avvio del sistema e per gli aggiornamenti dei dati va bene.
Puoi provare con una mega, ma se pensi di espandere lo sketch ti ritroverai come me di nuovo con dei limiti. Dovresti rivedere se tutte quelle matrici pubbliche le puoi spostare o passare tra le varie funzioni, verificare se gli int non superano i 255 e cambiarli in byte, alcune variabili dichiarale const se non variano .... ma soprattutto i serialprint lunghi danno un sacco di problemi. Studiare le librerie e vedere se puoi fare dei tagli, insomma rivederle. Tu attualmente stai occupando circa 290byte di variabili tutto il resto sta nelle librerie e nei tuoi messaggi seriali.
Arduino con il suo atmel sarebbe valido come strumento, ma pecca su librerie di funzionamento che hanno un po' di difetti, queste non sono ottimizzate per lavorare in simbiosi con molte altre, ciascun utente si inventa la lib usando più risorse di quelle che servono solo perchè a lui serviva quella, senza pensare che possono servirne anche altre nell'intero progetto... prendi ad esempio la libreria UDP per aggiornare i time dai server NTP, perchè mi mette una matrice da 255 byte quando il messaggio non supera i 16 byte (ma siii stiamo larghi non si sa mai), perchè molti nelle lib mettono int o long quando per certo le cifre non arrivveranno mai oltre il byte?
La morale è prendi anche 1terabyte, ma i programmatori dovrebbero pensare di più quando inventano e pubblicano librerie e sketch apparentemente formidabili.
ciao
|
|
|
|
|
Logged
|
Meglio imparare dalle cose inutili piuttosto che non imparare niente. [Arduino Mega R3 + Ethernet shield W5100 + SD card 8Gb FAT32]
|
|
|
|
Capo d'Orlando
Offline
Sr. Member
Karma: 0
Posts: 302
Electronics & Web Dev, Unix User, Ω LEO, Rock/Deep Music, Tech/Science/Finance addicted, Ski/Snowboard and much more …
|
 |
« Reply #12 on: January 01, 2013, 06:44:28 pm » |
@leo72: per consumo statico intendo quanto pesa tutto lo sketch ? @pablos: non so ancora lavorare a livello di libreria, cioè scomporle per capire dove migliorare/tagliare, ma avevo pensato pure io che queste librerie non sono molto ottimizzate, ma non al livello della tua spiegazione  . Oltre allo shield sd, gps/gsm, ed i due sensori, devo inserire questo trasmettitore: http://ukhas.org.uk/guides:linkingarduinotontx2Ora, secondo voi con la Mega risolvo tutti i problemi o mi conviene usare un altro Arduino Uno al solo scopo di salvare i dati sulla sd e trasmettere ? Ovvero nell'Arduino UNO #1 monto i sensori ed il gps/gsm shield, nell'Arduino UNO #2 monto l'sd shield e il trasmettitore, quindi collego il #1 al #2 che provvederà alla memorizzazione ? Grazie
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16431
Don't know what I do
|
 |
« Reply #13 on: January 02, 2013, 04:26:55 am » |
@leo72: per consumo statico intendo quanto pesa tutto lo sketch ?
Sì. Ma non il consumo di Flash (quello te lo dice già l'IDE) ma quello di RAM. http://www.leonardomiliani.com/?p=572@pablos e anerDev: vi consiglio la Petif FatFS: http://elm-chan.org/fsw/ff/00index_p.htmlè stata scritta per l'uso con i chip della famiglia Tiny ed ha quindi un consumo inferiore di risorse rispetto alla SD distribuita con l'IDE
|
|
|
|
|
Logged
|
|
|
|
|
Capo d'Orlando
Offline
Sr. Member
Karma: 0
Posts: 302
Electronics & Web Dev, Unix User, Ω LEO, Rock/Deep Music, Tech/Science/Finance addicted, Ski/Snowboard and much more …
|
 |
« Reply #14 on: January 02, 2013, 05:11:11 am » |
Esattamente, dove si trova avr-size ? Per quanto riguarda il Macintosh, entro su Arduino.app > Contents > Resources > Java e qua ho tutto il programma (cartella librerie, example, reference, etc etc) ma non riesco a trovare ave-size ! Invece ho trovato il file .hex che vi allego ! Invece per quanto riguarda Petit ora vedo come implementare questa libreria su arduino !  Grazie
|
|
|
|
|
Logged
|
|
|
|
|
|