FrequencyTimer2, problema con Interrupt

Ho realizzato un sistema con questi componenti:
Arduino UNO R3
N° 2 LCD alfanumerici SPI con la libreria LiquidCrystal_1
http://playground.arduino.cc/Main/LiquidCrystal
Clock Calendar DS1307 con la libreria DS1307new
4 termometri DS18B20 con la libreria OneWire

Visualizzo
l'orario sul primo LCD e
i termometri sul secondo LCD e sul Serial Monitor

Funziona tutto però l'orario visualizza a scatti causa il tempo di lettura
ed elaborazione dei termometri.

Per questo motivo pensavo di utilizzare l'interrupt, cosi ho provato
la libreria FrequencyTimer2 ma si blocca.

FrequencyTimer2 utilizza il Timer 2 non sono riuscito a capire se gli
altri componenti che utilizzo usano lo stesso Timer.

Qualche idea?

Penso sia difficile aiutarti senza vedere lo sketch, non puoi pubblicarlo racchiudendolo tra i tag "code /code"?

Se non hai grandi problemi di precisione sulla misura delle temperatura, ti consiglio di limitare la precisione dei DS18B20 a 9 bit.

Infatti, la tabella dei tempi di conversione parla chiaro:
9 bit (0,5°C/98ms)
10 bit (0,25°C/188ms)
11 bit (0,125°C/375ms)
12 bit (0,0625°C/750ms)

busco:
Per questo motivo pensavo di utilizzare l'interrupt, cosi ho provato
la libreria FrequencyTimer2 ma si blocca.

FrequencyTimer2 utilizza il Timer 2 non sono riuscito a capire se gli
altri componenti che utilizzo usano lo stesso Timer.

Qualche idea?

Ho dato un'occhiata alla OneWire, nelle sue funzioni disattiva gli interrupt per cui il blocco della FrequencyTimer è sicuramente dovuto a questo.

leo72:
Ho dato un'occhiata alla OneWire, nelle sue funzioni disattiva gli interrupt per cui il blocco della FrequencyTimer è sicuramente dovuto a questo.

Grazie a tutti.

@leo
adesso mi è chiaro, ho provato anche gli altri Timer e il risultato è sempre stato lo stesso.

Una soluzione potrebbe essere quella di utilizzare un microcontrollore per gestire i
termometri e un secondo per le altre elaborazioni, visualizzazione ecc.

Una soluzione potrebbe essere usare il mio Looper (vedi firma in calce oppure cerca nei Megatopic), è uno scheduler che non usa gli interrupt ma si basa su millis() per cui non soffri dei problemi del blocco degli interrupt.

leo72:
Una soluzione potrebbe essere usare il mio Looper (vedi firma in calce oppure cerca nei Megatopic), è uno scheduler che non usa gli interrupt ma si basa su millis() per cui non soffri dei problemi del blocco degli interrupt.

Ho provato Looper però non vedo miglioramenti, sicuramente non l’avrò applicato bene.
L’ho provato con alcuni tempi 10, 100, 500 e 1000, visualizza ogni 3, 4 secondi,
naturalmente vorrei vedere l’rologio avanzare ogni secondo.

Allego lo schetch che ho preparato, molto grezzo, dove ho evidenziato con asterischi
le modifiche inerenti al Looper.

Termometri_09.ino (19.2 KB)

Lo scheduler software come il Looper funziona fin tanto che l'intervallo di esecuzione di un job è pari o superiore alla durata del ciclo principale (interrupt compresi). Se in tutto questo hai qualcosa che occupa la CPU del micro più dell'intervallo, va da se che il Looper verrà eseguito al primo momento disponibile.