Pages: [1] 2 3 ... 5   Go Down
Author Topic: ciclare in background  (Read 3437 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Full Member
***
Karma: 0
Posts: 106
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

salve a tutti,

vorrei sapere se con Arduino esiste la possibilità, ad esempio, di continuare a far lampeggiare un led piuttosto che il backcolor di un display metre si esegue dell'altro codice.


grazie
Logged

Catania
Offline Offline
Sr. Member
****
Karma: 0
Posts: 346
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Certo, a tal proposito questo link potrebbe esserti illuminante:
http://arduino.cc/en/Tutorial/BlinkWithoutDelay
Logged

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 333
Posts: 22996
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ci sono 2 metodi.
Il primo è quello più semplice e prevede l'uso di schedulare delle azioni a determinati intervalli semplicemente usando la funzione millis(). Per comprendere meglio il concetto, esamina l'esempio BlinkWithoutDelay: lì trovi 1 azione schedulata ogni 1000 ms, il lampeggio di un led, ma il concetto si può estendere ed applicare ad altri dispositivi.

L'altro metodo, più complesso e che prevede una conoscenza maggiore del microcontrollore, prevede di creare o riusare un simil sistema operativo real timer (RTOS) a cui affidare dei compiti da eseguire ad intervalli programmati.
Logged


Catania
Offline Offline
Sr. Member
****
Karma: 0
Posts: 346
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Un'altro metodo, meno complesso rispetto al RTOS, è quello di sfruttare gli interrupt di un timer interno per eseguire codice a intervalli regolari. Ad esempio potresti mettere la logica del programma dentro il loop() e inserire il lampeggio del led dentro una chiamata interrupt.

(Hey Leo...vedo che ci siamo quasi smiley-wink)
Logged

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 574
Posts: 12665
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ci sono 2 metodi.
Il primo è quello più semplice e prevede l'uso di schedulare delle azioni a determinati intervalli semplicemente usando la funzione millis(). Per comprendere meglio il concetto, esamina l'esempio BlinkWithoutDelay: lì trovi 1 azione schedulata ogni 1000 ms, il lampeggio di un led, ma il concetto si può estendere ed applicare ad altri dispositivi.

L'altro metodo, più complesso e che prevede una conoscenza maggiore del microcontrollore, prevede di creare o riusare un simil sistema operativo real timer (RTOS) a cui affidare dei compiti da eseguire ad intervalli programmati.
oooh LLeo, stasera ti si tiene a parlare, così si festeggia, maremma diecimila! smiley-grin
Logged


Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 333
Posts: 22996
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Un'altro metodo, meno complesso rispetto al RTOS, è quello di sfruttare gli interrupt di un timer interno per eseguire codice a intervalli regolari. Ad esempio potresti mettere la logica del programma dentro il loop() e inserire il lampeggio del led dentro una chiamata interrupt.
Volevo inserirlo anche io. Però è bene sempre specificare che le operazioni da inserire negli interrupt devono essere poco impegnative in termini di risorse altrimenti si rischia di bloccare eccessivamente l'esecuzione del programma principale, e che non richiedano l'intervento di funzioni esterne pilotate da altri interrupt: il caso più semplice è l'impossibilità all'interno di un interrupt di usare la millis, ad esempio, per via del fatto che tale funzione è agganciata ad un altro interrupt. E la chiamata ad un interrupt disattiva gli altri interrupt.

Quote
(Hey Leo...vedo che ci siamo quasi smiley-wink)
Uh oh....  smiley
Logged


Catania
Offline Offline
Sr. Member
****
Karma: 0
Posts: 346
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
oooh LLeo, stasera ti si tiene a parlare, così si festeggia, maremma diecimila! smiley-grin
Mike, ci penso io  smiley-lol

Quote
Però è bene sempre specificare che le operazioni da inserire negli interrupt devono essere poco impegnative in termini di risorse altrimenti si rischia di bloccare eccessivamente l'esecuzione del programma principale, e che non richiedano l'intervento di funzioni esterne pilotate da altri interrupt: il caso più semplice è l'impossibilità all'interno di un interrupt di usare la millis, ad esempio, per via del fatto che tale funzione è agganciata ad un altro interrupt. E la chiamata ad un interrupt disattiva gli altri interrupt.
Infatti ho specificato che poteva usare una funzione molto semplice come il lampeggio che non è impegnativa in termini di risorse.
E' vero che non si può usare la millis() ma come abbiamo visto ormai la delayMicroseconds() è stata ampiamente "sdoganata" e ho notato che viene usata anche da sviluppatori "seri" dentro le interrupt services  smiley-lol
Logged

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 333
Posts: 22996
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ci sono 2 metodi.
Il primo è quello più semplice e prevede l'uso di schedulare delle azioni a determinati intervalli semplicemente usando la funzione millis(). Per comprendere meglio il concetto, esamina l'esempio BlinkWithoutDelay: lì trovi 1 azione schedulata ogni 1000 ms, il lampeggio di un led, ma il concetto si può estendere ed applicare ad altri dispositivi.

L'altro metodo, più complesso e che prevede una conoscenza maggiore del microcontrollore, prevede di creare o riusare un simil sistema operativo real timer (RTOS) a cui affidare dei compiti da eseguire ad intervalli programmati.
oooh LLeo, stasera ti si tiene a parlare, così si festeggia, maremma diecimila! smiley-grin
Se mi chiamano in causa, come posso non rispondere?  smiley-yell
Logged


Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 333
Posts: 22996
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
oooh LLeo, stasera ti si tiene a parlare, così si festeggia, maremma diecimila! smiley-grin
Mike, ci penso io  smiley-lol
Bravo bravo  smiley-wink

Quote
Però è bene sempre specificare che le operazioni da inserire negli interrupt devono essere poco impegnative in termini di risorse altrimenti si rischia di bloccare eccessivamente l'esecuzione del programma principale, e che non richiedano l'intervento di funzioni esterne pilotate da altri interrupt: il caso più semplice è l'impossibilità all'interno di un interrupt di usare la millis, ad esempio, per via del fatto che tale funzione è agganciata ad un altro interrupt. E la chiamata ad un interrupt disattiva gli altri interrupt.
Infatti ho specificato che poteva usare una funzione molto semplice come il lampeggio che non è impegnativa in termini di risorse.
E' vero che non si può usare la millis() ma come abbiamo visto ormai la delayMicroseconds() è stata ampiamente "sdoganata" e ho notato che viene usata anche da sviluppatori "seri" dentro le interrupt services  smiley-lol
[/quote]
Vero, però se uno non sa dei problemi di millis all'interno di interrupt immagino che non abbia le conoscenze per sapere che delayMicroseconds non è invece affetta da questo problema.
Logged


Catania
Offline Offline
Sr. Member
****
Karma: 0
Posts: 346
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bene, detto questo...Mike stai pronto con la bottiglia  smiley-grin
Logged

Catania
Offline Offline
Sr. Member
****
Karma: 0
Posts: 346
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Già 10K!???
Beh, congratulazioni "Shannon member"  smiley
Logged

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 574
Posts: 12665
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

AUGURI!!!
Logged


Catania
Offline Offline
Sr. Member
****
Karma: 0
Posts: 346
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Mike stai pronto con la bottiglia
Detto...fatto! smiley-grin
Logged

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 574
Posts: 12665
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Mike stai pronto con la bottiglia
Detto...fatto! smiley-grin
ti sembro il tipo che si tira indietro per una bottiglia di champagne?  smiley-mr-green
Logged


Catania
Offline Offline
Sr. Member
****
Karma: 0
Posts: 346
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ti sembro il tipo che si tira indietro per una bottiglia di champagne?  smiley-mr-green
Me ne guarderei bene dal pensarlo.  smiley
Leo, nel frattempo sarà andato a festeggiare con gli amici smiley-lol
Logged

Pages: [1] 2 3 ... 5   Go Up
Jump to: