Newsgroup: it.hobby.elettronica.digitale
Titolo: Fronti e polling

Ciao,
prendiamo un tipico pulsante collegato all'ingresso di un uC che chiude 
verso gli 0V, pull-up verso Vdd. Se l'ingresso č dotato di interrupt sul 
fronte il problema non si pone :)
Supponiamo invece di non avere a disposizione interrupt ma di dover 
monitorare l'ingresso (o piů di uno) a manina. Ci interessa il cambio di 
stato, ovvero il momento della chiusura o dell'apertura.
Quale č la soluzione piů snella dal punto di vista dell'occupazione del 
tempo processore in linguaggio C?
Io pensavo a qualcosa del genere:
char in_status, in_shadow, changed;
in_status = in_shadow = ... //leggo gli ingressi che mi servono
for (;;) {  // ciclo principale del programma
...
in_status = ... //leggo gli ingressi che mi servono
changed = in_status ^ in_shadow;
in_shadow = in_status;
if (changed & 1 << 5) ... // verifico se č cambiato lo stato del 5o bit
...
}
Ha senso? Si puň fare di meglio?
Marco / iw2nzm

 
Spiegati meglio, perchè testi il 5^ bit?
ciao Frank

 Spiegati meglio, perchè testi il 5^ bit?
Era un esempio :)
Solo per far capire come poi intendevo gestire la cosa!
Marco / iw2nzm

 Marco / iw2nzm
Potresti usare il timer e salvare il dato all'interno di una variabile 
dopo di che la gestisci o tramite il main per esempio
Ciao Sergio

 ha scritto nel messaggio 
news:KLoyi.93538$U01.8...@twister1.libero.it...

Il tuo codice rileva sia fronti di salita che di discesa...č previsto? :)
Mauro 

 Il tuo codice rileva sia fronti di salita che di discesa...č previsto? :)
Si, nel senso che se ho bisogno di usare un solo fronte metto un if per 
filtrare il fronte opposto. Quello che vorrei capire č se si puň 
ottimizzare ulteriormente o se c'č un metodo piů intelligente.
Ciao!
Marco / iw2nzm

 ottimizzare ulteriormente o se c'č un metodo piů intelligente.
In questi giorni sto lavorando ad un modellino ferroviario e devo proprio 
gestire dei pulsanti...io utilizzo delle union per i vari flag, ma ai fini 
dei tempi non penso faccia differenza...a proposito te come gestisci i 
rimbalzi del pusante (con interrupt) per evitare problemi?
Mauro 

 rimbalzi del pusante (con interrupt) per evitare problemi?
Quando posso preferisco gestirli via hardware: pull-up da 10k e 
condensatore da 100n e non ho mai avuto un problema di rimbalzi.
Se invece devo gestirli forzatamente da sw, al momento dell'interrupt 
memorizzo lo stato del pulsante e faccio partire un timer di qualche 
decina di ms (se puoi fare una misura con l'oscilloscopio vedi subito 
che valore inserire). All'overflow del timer verifico se lo stato del 
pulsante è ancora lo stesso: se si questo è il vero valore dell'ingresso 
altrimenti memorizzo nuovamente lo stato e ripeto il ciclo fino a che 
non trovo il valore stabile.
Ma sono sempre più propenso a inserire un condensatore in più ma vivere 
tranquillo senza preoccuparmi dei rimbalzi!
A proposito, già che ci siamo: esistono le R-pack utilissime per i 
pull-up. Esistono anche i C-pack? Non ne ho mai visti in giro...
Marco / iw2nzm

 pull-up. Esistono anche i C-pack? Non ne ho mai visti in giro...
son tornato :)
si dovrebbero esserci ne ho visti tempo fa su RS o Distrelec...
da uno sguardo va.
coals 

 son tornato :)
Vedo! Ti avevo scritto in un altro thread se eri tornato o scrivevi da 
un Internet Point ma il server non mi ha pubblicato il post :)
Ciao!
Marco / iw2nzm