Pagina 1 di 1

Startup con pulsante premuto per 3 secondi

MessaggioInviato: 14 apr 2016, 13:40
da kiltro
Buongiorno a tutti,

sono nuovo alla programmazione dei microcontrollori e mi sto attualmente cimentando con il 12F509, Baseline a 8 bit.
Sto seguendo alcuni tutorial trovati in rete, ma per ora non ho trovato ancora nulla che mi spieghi come realizzare questo:

Alla pressione di un pulsante PER PIU' DI 3 SECONDI parte il codice principale che fa accendere un led.
Stessa cosa per lo spegnimento, premendo il pulsante PER PIU DI 3 SECONDI il led si spegne.

Voi come lo realizzereste?
Mettendo il PIC in sleep in presenza di alimentazione per svegliarlo dopo i 3 secondi di pressione e viceversa per lo spegnimento?
Come posso impostare i 3 secondi di attesa sotto i quali il LED non si accende (o non si spegne)?

Re: Startup con pulsante premuto per 3 secondi

MessaggioInviato: 29 apr 2016, 10:07
da IlGuru
Il 12F509 ha un timer da 256bit ed un clock interno a 4MHz il che vuol dire 1 ciclo macchina ogni micro secondo.
Con queste due informazioni puoi programmare TMR0 e facendolo partire da 6 ogni volta che scatta l'interrupt del timer puoi incrementare un contatore di 2 byte ogni 250 micro secondi.

Con il PIC in sleep, quando premi il tasto lo risvegli con un interrupt on change e confronti lo stato del pin collegato al pulsante ed il valore del contatore.
Se il tasto è ancora premuto quando il contatore supera il valore 12.000 significa che il pulsante è stato premuto per un T > 1 \mu s \times 250 \times 12000 = 3000000 \mu s = 3 s

A quel punto fai quel che devi fare, tra cui rimettere in sleep mode il PIC

Re: Startup con pulsante premuto per 3 secondi

MessaggioInviato: 29 apr 2016, 10:25
da Brianz
12F509 è un Baseline è ha alcune limitazioni:
- non dispone di interrupt
- il Timer0 non può essere una sorgente di wakeup perché in sleep non è attivo.
- nei Baseline il wakeup da sleep equivale ad un reset e modifica sia TRIS che OPTION
Col che occorre reinizializzare e se necessario discriminare la causa del reset.

Quindi:
- POR: inizializzazioni processore. Abilitazione pin change wakeup
- sleep
Al wakeup per cambio stato pin:
- avvio conteggio
- durante lo svolgimento del conteggio, verifica dello stato del pulsante : se on per >tempo richiesto, accende LED
- attesa apertura contatto + debounce
non vedo la necessità di mandarlo in sleep con il LED acceso dato che il consumo di questo sarà superiore a quello del micro
- attesa chiusura contatto e ripetizione del conteggio
- se >tempo, led off e passa in sleep dopo avere abilitato il pin change.