Ti suggerirei, intanto, di consultare il datasheet del microcontrollore in causa.
Da pag.29 è descritta la gestione (utillizzo) degli interrupts.
Potresti fare riferimento a quello generato a seguito della variazione di stato di uno degli ingressi della porta B abilitati per questa funzione.
Utilizzi l'ingresso per rilevare la variazione del segnale (inizio segnale) e sul medesimo ingresso rilevi la successiva variazione (fine segnale).
Ad ogni variazione (inizio o fine) avviene l'attivazione dell'interrupt associato con conseguente esecuzione della routine che devi sviluppare (routine che verrebbe comunque richiamata a prescindere dal tipo di interrupt).
All'interno di questa routine in concomitanza dell'evento "inizio", attivi il Timer0 che vai, dopo, a fermare o comunque a "leggere" nel momento in cui si verifica l'evento "fine".
Predisponi anche, nella routine di gestione degli interrupts, la parte per l'interpretazione dell'interrupt generato, a sua volta, dall'overflow del Timer0 in modo tale da tenere conto di questa prima "saturazione" e ripristinare immediatamente la funzionalità del timer stesso.
Questa può essere una soluzione, penso.
Saluti
Misurare intervallo stato alto pin
Moderatore:
Paolino
22 messaggi
• Pagina 2 di 3 • 1, 2, 3
0
voti
Scusa,
WALTERmwp, cosa intendi quando dici:
Si potrebbe inizializzare il tmr0 all'avvio e ogni volta che viene letto, o sbaglio? Giusto per curiosità
?Predisponi anche, nella routine di gestione degli interrupts, la parte per l'interpretazione dell'interrupt generato, a sua volta, dall'overflow del Timer0 in modo tale da tenere conto di questa prima "saturazione" e ripristinare immediatamente la funzionalità del timer stesso.
Si potrebbe inizializzare il tmr0 all'avvio e ogni volta che viene letto, o sbaglio? Giusto per curiosità
0
voti
Ciao
phase, in effetti non mi sono espresso in modo del tutto esaustivo.
Avevo inteso scrivere che, una volta avviato il timer come conseguenza del rilevamento del primo evento, non è detto che non vada in overflow (anche più di una volta) prima del rilevamento del secondo evento; in tal caso è necessario ripristinarlo (incrementando comunque di uno una variabile che tenga conto dell'overflow) a fronte dell'insorgenza dell'interrupt relativo (interrupt di overflow del timer).
Per questo deve essere abilitato l'interrupt associato al timer e previsto il suo rilevamento nella routine di gestione degli interrupts.
Saluti
Avevo inteso scrivere che, una volta avviato il timer come conseguenza del rilevamento del primo evento, non è detto che non vada in overflow (anche più di una volta) prima del rilevamento del secondo evento; in tal caso è necessario ripristinarlo (incrementando comunque di uno una variabile che tenga conto dell'overflow) a fronte dell'insorgenza dell'interrupt relativo (interrupt di overflow del timer).
Per questo deve essere abilitato l'interrupt associato al timer e previsto il suo rilevamento nella routine di gestione degli interrupts.
Saluti
W - U.H.F.
-

WALTERmwp
30,2k 4 8 13 - G.Master EY

- Messaggi: 8982
- Iscritto il: 17 lug 2010, 18:42
- Località: le 4 del mattino
0
voti
Ragazzi, grazie a tutti per le risposte!
in effetti avevo pensato anche io ( dopo aver riletto con calma il datasheet) di rilevare gli interrupt delle porte B e quindi avviare e stoppare il TMR0, ma a quanto pare non vi sono istruzioni per far partire il timer0 in un determinato momento, sembra che il TMR0 si attivi automaticamente quando il PIC viene alimentato.
Vi risulta?
Mi dai il link del datasheet ? in quello che ho io , a pagina 29 viene trattatol' argomento 5.0 I/O PORTS
il datasheet che ho trovato è PIC16F62X sul sito microchip
Grazie
in effetti avevo pensato anche io ( dopo aver riletto con calma il datasheet) di rilevare gli interrupt delle porte B e quindi avviare e stoppare il TMR0, ma a quanto pare non vi sono istruzioni per far partire il timer0 in un determinato momento, sembra che il TMR0 si attivi automaticamente quando il PIC viene alimentato.
Vi risulta?
WALTERmwp ha scritto:Da pag.29 è descritta la gestione (utillizzo) degli interrupts.
Mi dai il link del datasheet ? in quello che ho io , a pagina 29 viene trattatol' argomento 5.0 I/O PORTS
il datasheet che ho trovato è PIC16F62X sul sito microchip
Grazie
0
voti
Io ho fatto riferimento al microcontrollore da te indicato in apertura; comunque non dovrebbe essere un problema recuperare il datasheet.
Sarebbe sufficiente cercarlo ma se hai qualche difficoltà il link è questo.
Si può scrivere a proposito di tutto, quindi anche dei timers ma, se mi consenti un suggerimento, prima d'altro, prova a guardati il documento con calma poi, eventualmente, se ne discute.
Se tu dovessi avere qualche difficoltà con l'inglese ( ... la pigrizia è da escludere però), non c'è problema, basta chiedere e insieme se ne viene fuori.
Saluti
Sarebbe sufficiente cercarlo ma se hai qualche difficoltà il link è questo.
Si può scrivere a proposito di tutto, quindi anche dei timers ma, se mi consenti un suggerimento, prima d'altro, prova a guardati il documento con calma poi, eventualmente, se ne discute.
Se tu dovessi avere qualche difficoltà con l'inglese ( ... la pigrizia è da escludere però), non c'è problema, basta chiedere e insieme se ne viene fuori.
Saluti
W - U.H.F.
-

WALTERmwp
30,2k 4 8 13 - G.Master EY

- Messaggi: 8982
- Iscritto il: 17 lug 2010, 18:42
- Località: le 4 del mattino
0
voti
Sto facendo un po di confusione, in questi giorni ho recuperato il 16F628 , il datasheet.
ho studiato il datasheet e sono riuscito a far lampeggiare un led con l'uso del timer0.
Sempre dal datasheet ho visto la possibilità di intercettare Interrupt da alcune porte B (solamente 4 generano un interrupt).
Quindi sono arrivato alla tua stessa conclusione, intercettare l' interrupt della portaB, quindi avviare TMR0 , e gestire gli interrupt del TMR0, ricavando così , il tempo in cui un segnale è a livello alto.
Purtroppo nel datasheet non trovo la possibilità di avviare il TMR0 in un determinato istante, ne deduco che questo sia attivo fin dall' avvio del PIC.
Se questa mia ipotesi venisse confermata, si potrebbe pensare di contare gli interrupt del timer0 avvenuti durante il singolo interrupt avvenuto sulla porta B,cioè, quanti interrupt overflow del timer0 sono avvenuti tra il primo ed il secondo interrupt della porta B?
Che ne pensi?
ho studiato il datasheet e sono riuscito a far lampeggiare un led con l'uso del timer0.
Sempre dal datasheet ho visto la possibilità di intercettare Interrupt da alcune porte B (solamente 4 generano un interrupt).
Quindi sono arrivato alla tua stessa conclusione, intercettare l' interrupt della portaB, quindi avviare TMR0 , e gestire gli interrupt del TMR0, ricavando così , il tempo in cui un segnale è a livello alto.
Purtroppo nel datasheet non trovo la possibilità di avviare il TMR0 in un determinato istante, ne deduco che questo sia attivo fin dall' avvio del PIC.
Se questa mia ipotesi venisse confermata, si potrebbe pensare di contare gli interrupt del timer0 avvenuti durante il singolo interrupt avvenuto sulla porta B,cioè, quanti interrupt overflow del timer0 sono avvenuti tra il primo ed il secondo interrupt della porta B?
Che ne pensi?
0
voti
In una risposta precedente hai parlato di ms... Esattamente qual è la durata massima dell'impulso?
0
voti
E allora, se fai i conti, con il tmr0 non dovresti aver bisogno di contare gli interrupt ma semplicemente leggere il contenuto del timer una volta finito l'impulso. Qunado tu inizializzi il timer azzeri il conteggio, quindi se lo inizializzi il conteggio riparte dal valore da te fissato, quindi non ti importa che inizia a contare all'avvio del micro oppure no 
0
voti
... si un po, comunque se hai cambiato micro (scrivevi a proposito del PIC16F84A) vale sempre quanto avevo già scritto (a meno di eccezioni dovute alla variazione dell'oggetto ma non credo).Davide90 ha scritto:Sto facendo un po di confusione
Il timer ( ... con il 16F628 hai anche più periferiche a disposizione) lo gestisci in funzione delle tue esigenze quindi lo fai partire quando e come vuoi tu: è una risorsa che puoi controllare, come altre.
Hai così la possibilità di determinare la durata del segnale con una risoluzione temporale definita e determinata dalle impostazioni del timer stesso.
Saluti
W - U.H.F.
-

WALTERmwp
30,2k 4 8 13 - G.Master EY

- Messaggi: 8982
- Iscritto il: 17 lug 2010, 18:42
- Località: le 4 del mattino
22 messaggi
• Pagina 2 di 3 • 1, 2, 3
Torna a Firmware e programmazione
Chi c’è in linea
Visitano il forum: Nessuno e 2 ospiti

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)


