Pagina 1 di 1

Sleep mode per PIC18f4550

MessaggioInviato: 16 mar 2014, 22:14
da chri36
Ciao a tutti :-) vorrei chiedervi una mano su come posso attivare la sleep mode sul mio pic18f4550 tramite un pulsante. Ho cercato esempi su internet ma per il mio PIC non ho trovato esempi. Da quel che ho capito serve un interrupt giusto? :-) o posso mandarlo in sleep mode anche senza interrupt usando un if o un while? :-)
Grazie mille in anticipo per l'aiuto :D

Re: Sleep mode per PIC18f4550

MessaggioInviato: 17 mar 2014, 0:05
da TardoFreak
La storia dell' if e del while non capisco cosa ci azzecchi con lo stato di sleep.
Quando la MPU è in sleep è ferma, viene poi risvegliata da un' interrupt, ad esempio un ingresso esterno di interrupt.
Sempre che tu la voglia far dormire davvero (lo si fa per motivi di consumo) altrimenti de devi solo fare in modo che aspetti qualcosa e non te ne frega niente dei consumi la "inluppi" e finito il chiasso.

Re: Sleep mode per PIC18f4550

MessaggioInviato: 17 mar 2014, 0:50
da giovannispina
chri36 ha scritto:Ciao a tutti :-) vorrei chiedervi una mano su come posso attivare la sleep mode sul mio pic18f4550 tramite un pulsante. Ho cercato esempi su internet ma per il mio PIC non ho trovato esempi. Da quel che ho capito serve un interrupt giusto? :-) o posso mandarlo in sleep mode anche senza interrupt usando un if o un while? :-)
Grazie mille in anticipo per l'aiuto :D


Ciao. Per svegliare un PIC tramite un pulsante ti basta collegarlo alla porta INT0 e poi accertarti che il PIC, prima che vada in modalità sleep, abbia il GIE (enable interrupt) settato a 1. Tutto qui. :)

Re: Sleep mode per PIC18f4550

MessaggioInviato: 17 mar 2014, 11:30
da Shockwaver
chri36 ha scritto:[...] attivare la sleep mode sul mio pic18f4550 tramite un pulsante. [...]

[...] posso mandarlo in sleep mode [...]

Spe' però da come hai scritto sembra che tu voglia mandare il PIC in sleep e non farlo uscire... ?%
Se così fosse ti basta un controllo sullo stato del pulsante nel ciclo principale del tuo programma che in caso avvia l'istruzione sleep con tutti gli annessi e connessi.
Farlo uscire poi è un altro conto e si fa come ti hanno suggerito prima Foto UtenteTardoFreak e succesivamente Foto Utentegiovannispina. Ricordati del delay. Trovi tutto sul datasheet

Re: Sleep mode per PIC18f4550

MessaggioInviato: 17 mar 2014, 11:46
da Paolino
Un'altra cosa molto importante. La modalità di sleep ha senso principalmente per motivi di riduzione dei consumi (come già fatto osservare da Foto UtenteTardoFreak). Invocare l'istruzione sleep non è però garanzia di consumi ridotti! Devi assicurarti di aver spento le periferiche che durante la modalità di sleep non servono, ad esempio il modulo ADC, qualche timer, la porta seriale, ecc. In questo modo, in sleep e con le periferiche spente, si ottengono davvero consumi minimi.
La scelta di cosa disattivare prima di sleep (che poi va riattivato al risveglio della CPU) dipende dall'applicazione.

Ciao.

Paolo.

Re: Sleep mode per PIC18f4550

MessaggioInviato: 17 mar 2014, 12:00
da Shockwaver
Dimenticavo. Settare il bit GIE non basta, bisogna anche settare il relativo bit dell'interrupt per il risveglio. Nell'esempio di Foto Utentegiovannispina il bit INT0IE nel registro INTCON.
Rimane da capire cosa devi fare...

Re: Sleep mode per PIC18f4550

MessaggioInviato: 19 mar 2014, 23:10
da chri36
Io vorrei che quando premo un pulsante su RB4 lui entri in sleep mode spegnendo un display che ho già configurato e tutto :) solo che non riesco a farlo andare in sleep mode :/

Re: Sleep mode per PIC18f4550

MessaggioInviato: 20 mar 2014, 0:33
da giovannispina
chri36 ha scritto:Io vorrei che quando premo un pulsante su RB4 lui entri in sleep mode spegnendo un display che ho già configurato e tutto :) solo che non riesco a farlo andare in sleep mode :/


Codice: Seleziona tutto
void main()
{
   // main loop

   for (;;) {
      // your code

      if (PORTB.B4)
         _asm { SLEEP }
   }
}


Dici così?