Go Down

Topic: Organizzare temporizzazioni di 40 porte (Read 973 times) previous topic - next topic

pablos

Aug 19, 2012, 10:59 am Last Edit: Aug 19, 2012, 11:43 am by pablos Reason: 1
Buongiorno

Ho 40 porte output che dovrebbero possedere ciascuna 10 orari ON e 10 orari OFF giornalieri/settimanali strutturati così gg,mm,aa,hh,mm,ss, questi dati vengono presi da un file ini su SD e scritti sullo stesso file da una pagina html compilando dei campi, questo passaggio già lo faccio, mi resta da fare i controlli sullo sketch

Inizialmente pensavo di creare un array tipo "byte port_on[39][9][5];"  e "byte port_off[39][9][5];"
Poi ho pensando che ci sono troppi cicli annidiati per leggere tutto, se registrassi dei long con un programma che converte data e ora in timestamp potrei avere solo un array "long port_time[39][9][9];"  dove 10 sono i timestamp on e 10 i timestamp off.
Dovrei creare il programma per vedere quanto tempo impiega a fare tutti i controlli se ne vale o meno la pena, altrimenti quale altro metodo più veloce posso utilizzare prima di sbattermi ore e ore per nulla?
Pensavo anche di fare in modo che il programma si registrasse i timer più vicini ad essere eseguiti e che terminati quelli si andasse a prendere un altra serie (4-5) da esguire, non saprei .....
Come potrei strutturarlo per avere la massima efficienza, visto che arduino fa anche molte altre cose.

Questo in previsione di trasferire il programma su arduino due che ha un clock di quasi 6 volte più veloce
Qualsiasi suggerimento è gradito :) grazie
no comment

uwefed

Ti sevrvono veramente gli anni e i secondi?

Un array [39] ha 39 elementi e non 40. L' indice va da 0 a 38.

In tutti i casi non funziona. Gli array sono troppo grandi per essere memorizzati nella RAM di Arduino xx e in parte Arduiono MEGA xx.
"byte port_on[39][10][5];"  e "byte port_off[39][10][5];"  sono 2 volte 1950Byte ovvero 3900Byte
"long port_time[39][9][9];" sono 12636 Byte.

Non credo che hai bisogno della Arduino DUE a causa della veocitá di esecuzione ma piu per avere abbastanza RAM.
Sulla Arduino MEGA é possibile aggiungere RAM per avere 64K Byte di RAM interna.

Per favore spiegaci cosa vuoi fare per poterti consigliare la strada da intraprendere.

Ciao Uwe



leo72

40*10*6*byte sono 2400 byte. 2 array di questo tipo sono 4800 byte, devi per forza usare un supporto esterno.

Anche 40*10*long sono 1600 byte, per 2 array sono 3200 byte.

Le alternative sono:
1) usare un Atmega1284: ha 16 kB di SRAM e 4 kB di EEPROM, potresti memorizzare ad esempio gli array di unsigned long nella EEPROM del chip
2) usare una memoria esterna, come ad esempio un chip EEPROM da 8 o 16 kB a cui accedi via I2C

Nel caso 1) però il tuo progetto poi non lo trasporti sulla DUE dato che hai un chip differente.
Nel caso 2) il passaggio è banale. Resta da capire la velocità che vuoi tu, ma se gli orari sono con risoluzione minima di 1 secondo immagino che fare la scansione di 80 dati da EEPROM non porti via più di 1 secondo di tempo. C'è però da tener conto del tempo di elaborazione del resto del codice: sommando i 2 valori, se ottieni più di 1 secondo di tempo di calcolo complessivo potresti saltare un allarme, sia esso ON che OFF

pablos

#3
Aug 19, 2012, 11:58 am Last Edit: Aug 20, 2012, 11:29 am by pablos Reason: 1
Quello che voglio fare e che sto facendo è una piattaforma arduino programmabile da file ini su sd, l'utente imposta la porta INPUT o OUTPUT, i timer e operazioni da eseguire in successione all'evento, tutto da pagina web, molte di queste cose già le fa, mi mancano i timer
Arduino mega ha a disposizione 54 porte tolte alcune necessarie al sistema, facciamo che solo 30 le metto programmabili a scelta dell'utente, togliamo i secondi che in effetti non servono, bhe forse anche l'anno posso eliminare.

Quote
Non credo che hai bisogno della Arduino DUE a causa della veocitá di esecuzione ma piu per avere abbastanza RAM.

bhe la differenza ce l'avrei eccome già adesso con un webserver noto una lentezza non indifferente.

ciao
no comment

pablos

#4
Aug 19, 2012, 12:05 pm Last Edit: Aug 19, 2012, 12:11 pm by pablos Reason: 1
@Leo
Ho 256Kb e ne sto usando 45k e non sto usando 4Kb di eeprom.
Per il passaggio alla DUE ovvio dovrò rivedere il programma, ma tutta la parte parsing dei file non credo cambierà, la parte ethernet sarà di rivedere, gestione scrittura lettura sd sarà da rivedere, ma buona parte sarà utilizzabile.
Mi auguro esca già con libreria ethernet e SD e alcune fondamentali. spero  :smiley-eek:
no comment

Go Up