Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2014
    Messaggi
    22

    [Arduino] Gestione INTERRUPT

    Buongiorno,
    stavo realizzando un programma che visualizza a display l'ora ed esegue altre funzioni in contemporanea con un ATMEGA128A e un DS1307 per l'ora.

    Se metto nel loop le funzioni lo sketch funziona correttamente mentre quando vado ad inserire nel loop la funzione dell'ora( che in pratica ''prende'' l'ora dal DS1307 ogni secondo e la stampa a display) le altre funzioni sembrano bloccarsi; l'ora rimane visualizzata correttamente a display ma sembra impedire l'esecuzione delle altre funzioni.

    A questo punto mi chiedo: ho bisogno di gestire le varie funzioni tramite degli interrupt??

  2. #2
    Bah, non vedendo il codice è difficile risponderti. Inoltre ho visto che c'è una libreria bella e pronta ( RTClib ) fatta apposta per dialogare col DS1307.

    Comunque mi pare strano che il polling blocchi l'esecuzione delle altre funzioni nel loop.

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2014
    Messaggi
    22
    Quote Originariamente inviata da paolino_delta_t Visualizza il messaggio
    Bah, non vedendo il codice è difficile risponderti. Inoltre ho visto che c'è una libreria bella e pronta ( RTClib ) fatta apposta per dialogare col DS1307.

    Comunque mi pare strano che il polling blocchi l'esecuzione delle altre funzioni nel loop.

    Ecco il mio loop:




    void loop() {

    ////////////////////////////////////////////////////////////
    ////////////////////CHANGE STATE////////////////////////////
    ////////////////////////////////////////////////////////////


    // read the CHST input pin:
    buttonState = digitalRead(StateChange);


    // compare the Pin to its previous state
    if (buttonState != lastButtonState) {
    // if the state has changed, increment the counter
    if (buttonState == HIGH) {
    // if the current state is HIGH then the radio has sent the call


    stamp();

    }


    }

    // save the current state as the last state,
    //for next time through the loop
    lastButtonState = buttonState;






    // Display time right on the upper line
    lcd.setCursor(12, 0);
    lcd.print(rtc.getTimeStr());


    // Display date in the lower right corner
    lcd.setCursor(10, 1);
    lcd.print(rtc.getDateStr());


    // Wait one second before repeating
    delay(20);

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2014
    Messaggi
    22
    Sono giunto alla conclusione che il continuo "interrogare" il DS1307 per ottenere l'ora mi fa perdere il segnale che mi serve controllare che arriva sul pin StateChange.
    In pratica il segnale che mi serve rimane a livello alto per troppo poco tempo e il micro essendo impegnato nella gestione dell'ora non lo vede.

    Ora domanda: avendo descritto a grandi linee il mio problema, utilizzando un interrupt sul pin dove arriva il segnale che mi serve controllare posso risolvere il problema o devo cercare altre soluzioni??
    Ultima modifica di jamal87; 06-06-2014 a 09:21

  5. #5
    Il problema è il rimbalzo http://www.maffucci.it/2011/06/13/ar...lantirimbalzo/

    Del resto l'interrogazione del DS1307 richiede si un certo tempo, ma se in quel lasso di tempo tieni il pulsante costantemente premuto, comunque alla successiva chiamata a digitalRead, il segnale risulterebbe alto lo stesso.

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2014
    Messaggi
    22
    Quote Originariamente inviata da paolino_delta_t Visualizza il messaggio
    Il problema è il rimbalzo http://www.maffucci.it/2011/06/13/ar...lantirimbalzo/

    Del resto l'interrogazione del DS1307 richiede si un certo tempo, ma se in quel lasso di tempo tieni il pulsante costantemente premuto, comunque alla successiva chiamata a digitalRead, il segnale risulterebbe alto lo stesso.


    No ma il segnale non mi arriva da un pulsante; nel programma non ho ancora sostituito il nome della variabile buttonState........non è comunque un pulsante il segnale mi arriva da un integrato ed ha la lunghezza temporale di 1ms

    Utilizzando dei pulsanti funziona perchè una volta premuti il tempo è superiore a 1ms e il micro riesce a leggerlo in tempo ma col segnale in uscita dall'integrato no.

  7. #7
    Allora non ti resta che usare gli interrupt. E' evidente che la lettura dal DS1307 ti fa trovare fuori tempo quando poi vai a leggere il segnale proveniente dall'integrato.

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2014
    Messaggi
    22
    Risolto utilizzando gli interrupt!!!! Grazie dell'aiuto

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.