Misurare un evento

Conoscere per quanto tempo un tasto è stato premuto è utile per gestire menu differenti utilizzando un solo pulsante.

È un’operazione diffusa in molte apparecchiature elettroniche per gestire l’impostazione dell’orologio interno quando si chiede di premere il pulsante per 1 secondo per impostare le ore, premere per 2 secondi per impostare i minuti, premere per tre secondi per impostare i secondi e così di seguito.

Oggetti da inserire nel 3D System Panel

durata eventi 3dSys

Dal menu Inputs, selezionare  e aggiungere nel 3D System Panel il pulsante sw_push; da Properties, collegare il pulsante al pin 2 della porta D.

Dal menu Outputs, selezionare e aggiungere nel 3D System Panel due Lamp_led; da Properties, collegare i pulsanti, rispettivamente  al pin 0 e al pin 1 della porta B.

Variabili di progetto

durata eventi variabili

In Project explorer:

  • Creare la variabile count di tipo UINT.
  • Creare la variabile push di tipo Bool.
  • Creare la variabile time di tipo UINT.

Macro Time

durata eventi 5

Quando si seleziona il tipo di Timer Interrupt da utilizzare, è necessario ricordare che:

  • TMR0 è utilizzata per gestire la funzione Delay.
  • TMR2 è utilizzato per la funzione TONO.
  • TMR1 e TMR2, condividono la frequenza con PWM, cambiando il valore del prescaler, cambiano le funzioni gestite dal Timer Interrupt; il PWM è una di queste funzioni.
durata eventi macro

La macro “time”, è collegata allo interrupt TMR2; il valore del prescaler determina quante volte il secondo, il programma richiamerà la macro “time”.

La macro “time”, controlla se il pulsante collegato alla porta D, bit 2, è premuto.

  • Se il pulsante è premuto, incrementa la variabile “time” con l’espressione time = time + 1
  • Se il pulsante non è premuto, controllo se “time = 0
  • Se “time” = 0, il programma ripete il controllo.
  • Se “time” è diverso da zero, la funzione Calcolo,  “count” =“time, resetta, “time”.

Ciclo principale

durata eventi 6

La funzione Decisione, if count > 5000,  inserita nel ciclo principale, controlla se il pulsante è premuto per un tempo superiore al superamento del valore 5000 della variabile count, in tal caso esegue il percorso di destra:

  • Accende il led collegato al pin 1 della porta B.
  • Lo mantiene acceso per un secondo.
  • Spegne il led, riportando il pin 1 a zero.
  • Azzera la variabile count con count = 0 ,
durata eventi 9

Se il pulsante è premuto prima che la variabile count raggiunga il valore 5000, il programma prosegue .

La funzione Decisione if count >10, controlla che il pulsante sia premuto per un valore maggiore di 10, in tal caso:

  • Accende il led collegato al pin 0 della porta B.
  • Lo mantiene acceso per un tempo di 300 millisecondi.
  • Spegne il led , portando a zero il pin 0 della porta B.
  • Azzera la variabile count.

diagramma di flusso completo

C code

rick 3Riccardo Monti