Newsgroup: it.hobby.elettronica.digitale
Titolo: PIC16CXX and SLEEP

Ho realizzato un semplice programma con un
PIC16C55, uno stupido cronometro. Ora vorrei
utilizzare l'istruzione SLEEP per "addormentare"
il micro dopo che non sono rilevati tasti premuti
per tot tempo. Il problema stà nel fatto che, se è
attivo, il watchdog risveglia il micro e quindi
vanifica lo scopo della SLEEP stessa. Dal datasheet
si rileva che la SLEEP agisce su un bit del registro
STATUS, ma non mi risulta che sia possibile consultare
tale bit durante il sonno del micro. D'altronde per
risvegliare il micro servono o un reset sul pin MCLR
o l'intervento del watchdog stesso, in ambedue i casi
ci sarebbe un clear del registro di stato.
Forse mi è sfuggito qualcosa.
Help
LG
-----------------------------------------------------------------
Get free personalized email from Lycos at 
http://it.lycosmail.com
--
Posted from 
rmx07.iname.net
 [165.251.8.75]
via Mailgate.ORG Server - 
http://www.mailgate.org

 per tot tempo.....
Ciao,
Purtroppo non posso aiutarti piu' di tanto, comunque potresti  fare
cosi': attiva i WDT con un tempo di circa 1/10 sec (prescaler=16),
esegui lo sleep (da quale ti risveglierai dopo circa 1/10 di sec),
controlla lo stato dei pulsanti (se sono tutti sulla stessa porta puoi
farlo con 4 istruzioni), se i puls. sono tutti a riposo (nessuno
premuto) torna ad eseguire lo sleeep. Anche se non è una condizione
ottimale hai una buona riduzione dei consumi. Se ancora non hai
comperato il materiale ti conviene migrare su un PIC piu' recente che
consente il risveglio da SLEEP per un qualsiasi interrupt (ad esempio
una variazione dello stato di un ingresso della PORTB, cosa che farebbe
proprio al tuo caso).
Ciao Massimiliano
P.S. Se non sai cosa fare del tuo progetto potresti inviarlo ad Adriano
Venturini che lo pubblichera' volentieri sul suo sito HE2
http://www.tanzilli.com/users/he2

vanifica lo scopo della SLEEP stessa. Dal datasheet
sarà una cosa stupida, non sono molto esperto:
e tu "riaddormentalo" subito, meglio che niente.
MazE
--
per rispondere togliete gli "*" dall'email - remove "*" from address to reply
"2000: Siamo finalmente nell'ultimo anno del 2°millennio"

 vanifica lo scopo della SLEEP stessa.
C'e` un problema di fondo nel tuo ragionamento: non ha molto senso usare il
watchdog in sistemi che usano la SLEEP. Il watchdog serve in quei programmi che
vengono eseguiti continuativamente e per cui e` necessario un minimo di 'fault
tolerance'. Sono rare le applicazioni 'amatoriali' in cui e` utile attivare il
watchdog.
Per fare un cronometro si deve invece usare TMR0, il prescaler e le
interruzioni per l'overflow di TMR0.
--
Bye! Lorenzo Lutti
http://www.geocities.com/SiliconValley/Peaks/6258/

Venturini che lo pubblichera' volentieri sul suo sito HE2
Quando sarà a punto non mancherò di farlo.
Ciao e grazie per la risposta
Luigi -VR-
--
Posted from 
laguna.tiscalinet.it
 [195.130.224.86]


 watchdog.....
Questo puoi farlo tramite il flag TO (STATUS, bit 4): Questo bit viene settato
dall'istruzione SLEEP (oltre che dal CLRWDT e da un power-up) e azzerato solo da
un'intervento del WDT.
Quindi TO=0 "risveglio" causato da WDT overflow, TO=1 "risveglio" causato da MCLR o
all'accensione.
Comunque esegui qualche prova, ti fornisco indicazioni leggendo i DS (oltretutto
l'inglese lo sto imparando adesso, a scuola solo francese), non ho esperienze
dirette con questa famiglia di PIC.
Ciao
Massimiliano

 all'accensione.....
Ancora Ciao,
Dopo aver inviato il messaggio precedente ho scoperto questa tabellina (table 7.6 a
pag.41 del DS 30453B) ed è proprio quello che stai cercando:
TO... PD ...RESET was caused by
..1 .....1 ......Power-up (POR)
..u .....u ......MCLR reset (normal operation) (1)
..1 .....0 .....MCLR wake-up reset (from SLEEP)
..0 ....1...... WDT reset (normal operation)
..0.... 0...... WDT wake-up reset (from SLEEP)
Ciao
Massimiliano