Spegnere problema modalità con timer 0 int - soluzione trovata!

S

seemanta

Guest
Salve,
Ho notato che dopo essere andato a dormire e svegliarsi, il mio timer 0 gestore di interrupt non vengono chiamate.

Il mio problema è questo:

Il mio micro riceve un interrupt esterna ogni secondo da un orologio in tempo reale.Questo interrupt esterna è legata a / INT0 del microrganismo.

Ho bisogno di luce di un LED per 10 secondi (allarme visivo).Ho calcolato quante volte il timer 0 sarebbe overflow in 10 secondi.Chiamiamo n questo conteggio '.Poi, nel mio timer 0 ISR, tengo un conteggio di quante volte l'ISR è stato chiamato.Quando questo numero di partite 'n' so che siano trascorsi 10 secondi e poi ho chiuso il LED verso il basso.

Il problema mi affrontare è che se vado a spegnere la modalità tra gli interrupt RTC, la mia LED continua a lampeggiare e non si ferma mai.Fondamentalmente il conteggio n '' non viene mai raggiunta.

Tuttavia, se scelgo di andare in modalità idle, invece di power down mode, tutto funziona e la mia LED non si accende dopo 10 secondi.

In qualche modo credo che questo sia dovuto al oscillatore arresto in power down mode e non fermarsi in modalità idle.Ma io non sono in grado di capire la connessione voce.

Per favore qualcuno può suggerire ciò che sta accadendo qui?Grazie in anticipo!

saluti,
SeemantaAggiunto dopo 2 ore 13 minuti:Ho avuto la causa di questo problema!Solo voluto condividere con il resto del edaboard'ians.

Ebbene, dal momento che l'oscillatore si blocca tra ogni interruzione, il TH0 e registri TL0 anche congelare durante il momento in cui il micro rimane al potere verso il basso.

È per questo che il tutto rallenta in modo efficace verso il basso, dal momento che per raggiungere il numero di 'micro n'the deve spendere più tempo di quanto si sarebbe speso con l'oscillatore in esecuzione tutto il tempo.

Credo che, questa è la prima volta qualcuno ha postato il problema e la soluzione così!

Spero che questo contribuirà a chiunque in futuro di fronte lo stesso problema
Anch'io di fronte!

saluti,
Seemanta

 
Salve,

Thanks a lot for sharing!

È possibile implementare il conteggio di n variabili nel tuo RTC routine e passare del LED se il numero è uguale a 10, poiché il RTC interrompe il controller di ogni 1 secondo e il ritardo richiesto è di 10 secondi

 
Sì, Rajeshkumar123,
Anche l'idea che mi è venuta in mente.

Tuttavia, con quel po 'di codice aggiuntivo sarebbe correre sempre nel mio PVR e ho voluto evitare che il mio PVR e mantenere il più piccolo e veloce possibile.

Ho pensato che avrei semplicemente avviare il timer e non pensarci più fino a quando l'interrupt per 10 secondi entra in gioco

Ma guarda come adesso avrei potuto rivedere la mia opinione.Con il potere verso il basso del codice, il registro overflow timer ogni 9 secondi, non 10 secondi.Vorrei ora dobbiamo controllare contro numeri magici nel TH0 e registri TL0 per ottenere l'esatta 10 secondi di ritardo!saluti,
Seemanta

 

Welcome to EDABoard.com

Sponsor

Back
Top