Show Posts
Pages: 1 2 [3] 4 5 ... 8
31  International / Megatopic / Re: leOS - un semplice OS per schedulare piccoli task on: November 29, 2012, 08:04:52 am
ok grazie!
32  International / Megatopic / Re: leOS - un semplice OS per schedulare piccoli task on: November 28, 2012, 03:01:19 pm
sucsate un'ultima domanda sul display lcd e poi finisco l'off topic: quando ho il buffer pronto ed è il momento di inviarlo all'lcd, è meglio tenermi anche una copia del buffer precedente, confrontarlo con l'attuale e inviare al display solo le differenze, o va bene fare un clear() dell'lcd e inviare il buffer intero?
in pratica non dovrebbe cambiare niente, ma la soluzione migliore qual'è?
se facessi clear() prima sarebbe più semplice...

tornando a leOS
a me serve che un task venga eseguito ogni 1000 millisecondi esatti, quindi uso leOS e non leOS2 perchè 1000 non è multiplo di 16.
se però volessi eseguire il task ogni 2000 millisecondi (multiplo di 16), il task verrebbe eseguito ogni 2 secondi esatti o ogni 2 secondi ± 16ms ?
33  International / Megatopic / Re: leOS - un semplice OS per schedulare piccoli task on: November 26, 2012, 12:19:08 pm
invece che aggiornare il buffer software ogni loop() non è più conveniente aggiornarlo solo nel momento in cui devo stamparlo sul display?
sul display devo stampare dei valori di alcune variabili e dei valori letti con analogRead(), quindi penso che sia inutile aggiornare di continuo il buffer, se poi lo stampo sul display solo una volta al secondo.
forse non ho capito quello che intendi?
34  International / Megatopic / Re: leOS - un semplice OS per schedulare piccoli task on: November 26, 2012, 09:52:04 am
grazie dei consigli, però sia che aggiorni prima un buffer o che aggiorni direttamente il display leggendo i dati al momento, devo temporizzare comunque la print() sul display, quindi in pratica per la funzione per scrivere sul display devo per forza fare un controllo tipo il blinkwithoutdelay, o ho capito male?
35  International / Megatopic / Re: leOS - un semplice OS per schedulare piccoli task on: November 25, 2012, 02:41:57 pm
il mio problema è che devo aggiornare un display lcd, e lo vorrei fare non più velocemente di ogni secondo, perchè se no non si leggerebbe bene e non mi serve istantaneamente vedere le variazioni.
farò con il metodo blinkwithoutdelay, è una buona idea secondo te?
36  International / Megatopic / Re: leOS - un semplice OS per schedulare piccoli task on: November 25, 2012, 08:37:14 am
ok, grazie mille!

per il problema dei lavori gravosi che avevo chiesto qualche pagina fà, è una buona idea fare con leOS i compiti meno gravosi che voglio siano fatti sempre con un intervallo preciso, e fare con looper il resto?
37  International / Megatopic / Re: leOS - un semplice OS per schedulare piccoli task on: November 24, 2012, 03:28:41 pm
Quindi mi basta mettere 2000 come intervallo in addTask() ?
Sul tuo sito però ho letto una cosa diversa: http://www.leonardomiliani.com/?p=516
Quote
Con miaFunzione indicate la funzione che volete schedulare, con intervallo un numero non più grande di 1000 (potete modificare questo valore nel file leOS.cpp) che indica ogni quanti ms volete far ripetere la vostra funzione.
38  International / Megatopic / Re: leOS - un semplice OS per schedulare piccoli task on: November 24, 2012, 03:29:26 am
ciao, con la versione 1 come faccio ad aumentare l'intervallo minimo da 1000 a 2000 millisecondi?
ho guardato in leOS.cpp ma l'unico 1000 che trovo è F_CPU == 1000000UL
39  International / Software / Re: Atmega 328P senza quarzo on: November 13, 2012, 11:42:38 am
nono, hai capito benissimo, anzi, grazie di tutte le informazioni, ora ho le idee più chiare smiley-wink
40  International / Software / Re: Atmega 328P senza quarzo on: November 13, 2012, 07:54:15 am
grazie delle risposte!
ma se carico il bootloader poi se lo programmo via isp non ci sarà nessuna differenza tra caricarlo non caricarlo oltre al fatto di dover settare i fuse?

per l'operazione con avrdude l'atmega và collegato via isp all'arduino normalmente come per le altre operazioni?

il mio problema era il quarzo, perchè se è necessario per forza lo devo comprare e poi visto che ce l'ho tanto vale lasciare lavorare l'atmega a 16MHz, se invece di fabbrica esce a 1MHz posso portarlo a 8MHz senza quarzo esterno visto che è già impostato per usare l'oscillatore interno?
41  International / Software / Re: Atmega 328P senza quarzo on: November 12, 2012, 12:10:22 pm
se di fabbrica è a 1MHz per portarlo da 1MHz a 8MHz non mi serve il quarzo ma mi basta modificare il file boards.txt dell'ide come descritto nella guida del Menniti?
quindi in pratica se io uso un arduino uno come programmatore isp:
  • modifico il file boards.txt e aggiungo l'atmega a 8MHz con l'oscillatore interno
  • carico sull'arduino uno lo sketch ArduinoISP selezionando come board l'arduino uno
  • collego l'atmega328p via isp all'arduino uno
  • carico lo sketch sull'atmega328p nuovo selezionando come board l'atmega a 8MHz
In pratica il bootloader non lo devo neanche usare, è corretto?

Per togliere il divisore x8 del clock non mi basta modificare i fuse nel file boards.txt e caricare via isp come scritto nella guida?
Non capisco cosa devo fare con avrdude, o lo fa l'ide direttamente?

Comunque, c'è un modo per sapere se l'atmega è settato per andare proprio a 1MHz e non 8MHz o 16MHz?
42  International / Software / Re: Atmega 328P senza quarzo on: November 12, 2012, 10:50:33 am
Stò leggendo la guida.
Se io ho un atmega328p vergine senza bootloader sarà settato per lavorare a 16MHz o a 1MHz?
Per farlo lavorare a 8MHz devo per forza caricargli il bootloader prima di caricargli lo sketch?

p.s. penso di programmarlo ISP
43  International / Hardware / Re: Quale atmega 328 per arduino uno on: November 12, 2012, 08:53:01 am
Cercando su ebay mettendo luogo: nel mondo ho trovato questo:
http://www.ebay.it/itm/1PCS-IC-ATMEL-DIP-28-ATMEGA328P-PU-ATMEGA328P-PN-/261077151726
viene dalla cina, costa 2,50 euro e le spedizioni sono gratuite.
secondo voi ci si può fidare?
44  International / Megatopic / Re: leOS - un semplice OS per schedulare piccoli task on: November 11, 2012, 04:53:52 am
l'analog read è gravosa (0.2millisecondi circa), stampare su LCD ancora di più.

0.2millisecondi vuol dire che dopo 5000 letture il tuo timer della millis() sballa di 1 secondo

Non tanto il fatto di stamparci sopra, se comunica in i2c sono 100Kbit/s, o 400Kbit/s se modifichi le libreria e il modulo supporta la fastI2c, però il vero problema è che l'esse umano non vede più velociemente di circa 20/50millisecondi, se poi parliamo di leggere arriviamo al secondo e rotto smiley

nel tuo caso sarebbe da attivare a livello di registri l'interrupt per il completamento della lettura analogica. All'interrupt del leos fai partire la lettura analogica (che lavora in parallelo, quindi non "spreca" cpu), al completamento viene lanciato un interrupt che mette il valore letto in una variaile volatile.

poi un altro task nel leos ogni secondo prende la variabile volatile e la stampa sull'LCD.

Il tempo impiegato dell'I2C, ma ancor meglio dalla SPI (fino a 5Mbit/s se ricordo bene, ma dipende dal modulo), è inifluente. Quello della seriale invece influisce, ma la Serial lavora per interrupt quindi in pratica lo sbattimento di cui sopra è già fatto, devi solo fare attenzione a non riempire il buffer seriale più in fretta di quanto esso non riesca a svuotasi

grazie lesto, ma se io metto il task con un intervallo di 1 secondo il display verrà aggiornato ogni secondo (e il valore da scrivere potrebbe rimanere uguale), quindi non penso ci siano problemi di aggiornamento troppo rapido da non riuscire a leggere.
il problema che tu dici è che se per scrivere sul display serve un certo tempo, la successiva ripetizione del task non verrà eseguita esattamente dopo l'intervallo dichiarato?

non ho usato looper perchè mi serve che il task venga eseguito ogni secondo, altrimenti dovrei fare un calcolo diverso tenendo conto del tempo passato dall'inizio del task al successivo inizio con millis(), ma con leos è meno complicato.
a proposito, se metto un intervallo di 1 secondo il task successivo inizierà 1 secondo dopo l'inizio del precedente o dopo un secondo dalla fine del precedente?

potrei fare calcolare il valore al task senza stamparlo sul display ma solo salvandolo in una variabile come ha detto lesto, ma poi anziche fare un altro task per scrivere sul display, mettere in loop() la scrittura sul display leggendo la variabile e alla fine di loop() mettere un delay?
45  International / Megatopic / Re: leOS - un semplice OS per schedulare piccoli task on: November 10, 2012, 11:05:09 am
È una buona idea far fare tutto il lavoro a delle funzioni richiamate con leOS e lasciare il loop() vuoto se non serve eseguire in continuazione il codice o è meglio lasciare la parte principale in loop() e mettere un delay alla fine?
I task dovrebbero essere compiti semplici, che occupano poco tempo CPU, in modo da non rallentare l'esecuzione delle altre funzioni basate su interrupt. Se il tuo caso ricade in questo esempio, puoi anche inserire tutto in task e lasciare il loop vuoto. Se hai un compito che invece è molto gravoso, conviene inserirlo nel loop (e qui puoi rallentarne l'esecuzione con un delay).

Usare un analogRead() e poi stampare un valore su un display con LiquidCrystal non dovrebbe essere troppo gravoso?
Pages: 1 2 [3] 4 5 ... 8