Vai al contenuto
PLC Forum


Stand-by Pic


Condor

Messaggi consigliati

Ho realizzato un circuitino con un 16f877,dove alla porta B ho collegato un display lcd e nella porta A,rispettivamente 0,1,2,3 quattro pulsanti.

E' possibile dopo aver messo in stand-by il micro,farlo riaccendere alla pressione di un dei quattro pulsanti?

grazie

Link al commento
Condividi su altri siti


Si puoi svegliarlo con l'interrupt per cambio di stato .

Pero' il cambio di stato e' solo per RB4,5,6,7. quindi ti suggerisco di cambiare il collegamento e usare la porta B per i pulsanti.

Uno stralcio del manuale del 877...

12.13.1 WAKE-UP FROM SLEEP

The device can wake-up from SLEEP through one of

the following events:

1. External RESET input on MCLR pin.

2. Watchdog Timer Wake-up (if WDT was

enabled).

3. Interrupt from INT pin, RB port change or

peripheral interrupt.

External MCLR Reset will cause a device RESET. All

other events are considered a continuation of program

execution and cause a “wake-up”. The TO and PD bits

in the STATUS register can be used to determine the

cause of device RESET. The PD bit, which is set on

power-up, is cleared when SLEEP is invoked. The TO

bit is cleared if a WDT time-out occurred and caused

wake-up.

The following peripheral interrupts can wake the device

from SLEEP:

1. PSP read or write (PIC16F874/877 only).

2. TMR1 interrupt. Timer1 must be operating as an

asynchronous counter.

3. CCP Capture mode interrupt.

4. Special event trigger (Timer1 in Asynchronous

mode using an external clock).

5. SSP (START/STOP) bit detect interrupt.

6. SSP transmit or receive in Slave mode

(SPI/I2C).

7. USART RX or TX (Synchronous Slave mode).

8. A/D conversion (when A/D clock source is RC).

9. EEPROM write operation completion

Other peripherals cannot generate interrupts since during

SLEEP, no on-chip clocks are present.

Link al commento
Condividi su altri siti

  • 3 weeks later...

Ho fatto Ora funziona tutto però ho un'altro problemino/one

Ti spiego,la scheda che stò realizzando,dovrebbe gestire una macchina per la vendita automatica,uso un 18f452

che è del tutto simile ad un 16f877 con il doppio della memoria,al quale ho collegato un selettore di monete,un display, 4 tasti selezione più uno per la programmazione,4 motori con relativi 4 finecorsa e 4 sensori presenza prodotto ed una serie di led per segnalare la regolarità o l'irregolarità della varie selezioni.

Ho scritto praticamente tutto il software,il quale funziona perfettamente tranne una cosa,sempre riguardante lo stand-by

Siccome la macchina ha la possibilità di funzionare sia a rete che a batterie,quando seleziono in fase di programmazione macchina,il funzionamento a batterie ,qui abilito lo stand-by,dopo x secondi si spengono le periferiche Display compreso ed il pic và in stand-by,al suo risveglio,che avviene appunto o premendo un tasto o inserendo una moneta nel seettore,il display non scrive più o meglio mi fà una riga di rettangoli neri "le manca l'nizializzazione"

Come posso fare a risolvere questo problema?

Come compilatore uso il proton+ ho provato a farle ricare dopo il risveglio la stringa di inizializzazione ma non me la prende.

C'è la possibilità di mettere anche il display in stand-by,con qualche istruzione,in modo che tenga in memoria l'inizializzazione?

Ciao

Grazie

Link al commento
Condividi su altri siti

Potresti fare una cosa,

Non spegnere tutto il display , ma solo spegnere il backlight e disabilitare la visualizzazione dei caratteri.

Se vuoi propio togliere l'alimentazione , allora devi mandare tutti i codici di inizializzazione dopo aver aspettato il tempo minimo di accensione dell'lcd.

Ti consiglio di fare una routine tipo init_display e di chiamarla durante la prima accensione e dopo ogni risveglio dallo sleep.

Piccolo consiglio , se e' un distribuitore automatico , quando e' in basso consumo il display deve visualizzare qualche cosa , perche se e' tutto spento , come posso fidarmi ad inserire una moneta ? .. e se me la mangia :unsure: ?

Link al commento
Condividi su altri siti

Grazie per la risposta ora provo.....

Per il piccolo consiglio,hai perfettamente ragione,il fatto è che ho provato in tutti i modi a farlo entrare in testa al BOSS,ma lui dice che deve funzionare così,anche perchè questa scheda và a sostituire una scheda gia esistente costruita in Spagna,che lavora in questo modo..quindi.......Il boss è il boss e allora.....

Ciao

Link al commento
Condividi su altri siti

a dimenticavo al risveglio non può mangiare nessuna moneta in quanto ho usato un particolare selettore con il preavviso in pratica lui è sempre inibito una volta riconusciuta la moneta in 10 ms comunica alla scheda di che valore è o meglio se si tratta della moneta 1 o 2 o 3 ecc poi la scheda in max 30 ms deve dire al selettore di accettarla in caso contrario viene restituita,quindi inserendo la moneta io ottengo solamente il risveglio e la moneta viene restituita

Link al commento
Condividi su altri siti

  • 3 weeks later...

Rieccomi nuovamente......ora il problema sono gli assorbimenti di corrente.

Attenendosi a qello che dice microchip, l'assorbimento del micro in sleep mode,dovrebbe aggirarsi intorno ai 40/50 uA,io invece non riesco a scendere al di sotto di 1.2 mA.

Prima di mettere il micro in sleep mode setto tutti gli I/O come imput "se non lo faccio l'assorbimento non scende al di sotto di 35/40 mA"dopodichè abilito l'interrupt,il WDT lo tengo disattivato

Cos'altro devo fare per far scendere questo dannato assorbimento?

Grazie Ciao :angry:

Link al commento
Condividi su altri siti

Volevo tornare sull'argomento dello SLEEP , anch'io ho un PIC pero' un 16F628 e ho collegato due tasti sugli ingressi PB4,PB5 utilizzando i pull-up interni , pero' non riesco a risvegliarlo , sapete darmi qualche indicazione ?

Ciao e grazie :)

Link al commento
Condividi su altri siti

Per svegliarlo devi prima di tutto abilitare l'interrupt per cambio di stato nelle porte PB4-7.

poi entrare in sleep , prova anche a disabilitare il watchdog che a volte da problemi....

Link al commento
Condividi su altri siti

Dunque ho fatto un pò di prove ed ho scoperto la causa di questo assorbimento elevato.

Per comodità,le resistenze di pull-up sui quattro tasti collegati ai piedini B4-7,le ho messe esterne,non ho abilitato quelle interne al pic e sono proprio queste la causa,cioè se le scollego dall'alimentazione,l'assorbimento scende a 35/40 microampere solamente che poi non posso più risvegliare il pic....allora ho provato ad abilitare quelle interne,risultato,mentre con quelle esterne collegate l'assorbimento è di circa 1.2 milliampere,con quelle interne sale fino a 3 milliampere.

Le resistenze che ho usato io sono da 10kohm,che cosa mi consigli per aggirare questo inconveniente?

se mettessi un valore più elevato tipo 33/47kohm?

Ciao Grazie

Link al commento
Condividi su altri siti

Volevo dirvi che ho risolto , il problema era legato al fatto che nella mia applicazione (un telecomando) in cui gestisco in un loop la sequenza corretta dei pulsanti per inviare i dati , abilitando l'interrupt di fatto mi bloccava l'esecuzione , ho risolto disabilitando l'interrupt RB nella subroutine dell'interrupt che serve quindi solo per venire risvegliato , e riabilito l'interrupt dopo aver spedito i dati e successivamente rimando il tutto in SLEEP.

Grazie ancora

Ciao :)

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...