Sleep PIC16F84A

Jun 26, 2005 3 Replies

Ciao ragazzi volevo chiedervi una cosa circa la funzione sleep. Una volta uscito dalla funzione sleep che bit devo settare affinchè possa ritornare in sleep? Mi spiego meglio: Ho inglobato in un programma basic una statement asm (quello relativo allo sleep, visto che il mikrobasic non lo consente). Ho letto il datasheet e dice che per lo sleep con wake-up dovuto ad un interrupt bisogna:



1) Far precedere allo sleep il CLRWDT
2) Settare GIE ad 1
3) Invocare lo SLEEP

Io ho fatto esattamente cosi ma succede una cosa strana il pic mi entra in sleep mode solo la prima volta, le volte successive invece non mi caga neanche di striscio :(( a cosa è dovuto? Devo resettare qualche bit affinche possa rientrare in sleep?



Grazie a tutti per l'aiuto :)


può darsi che tu non abbia reso il ciclo "continuo" ? sai, tipo while(1) in c, che crea un ciclo infinito.. in picbasic è del tipo

*inizio*

etichetta:

istruzione istruzione istruzione

goto etichetta

*end.*

stefano

Ecco il pezzo incriminato

while true asm SLEEP NOP end asm ... ... (altre istruzioni) ... wend

Va in sleep solo la prima volta, se poi lo risveglio alla ripetizione del ciclo non entra più in sleep mode :((

Grazie per la risposta

"Airone" ha scritto nel messaggio news:23Cve.30185$ snipped-for-privacy@tornado.fastwebnet.it...

Vado a memoria, spero di non confondere i microcontrollori. Se non ricordo male il PIC esce dalla condizione di sleep quando il bit di interrupt enable e il corrispondente bit interrupt flag sono entrambi settati. Se all'esecuzione dell'istruzione sleep questi bit sono già settati, il uC non esegue l'istruzione. Quindi, una volta uscito dalla condizione di sleep dovresti verificare quale evento ti ha risvegliato e resettare il corrispondente flag di interrupt. In pratica devi vedere la condizione di risveglio dallo sleep come qualcosa che ha a che fare con uno stato e non con un fronte.

Fabio.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required