Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Misurare intervallo stato alto pin

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[11] Re: Misurare intervallo stato alto pin

Messaggioda Foto UtenteWALTERmwp » 15 ago 2014, 0:29

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
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
30,2k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 8982
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

0
voti

[12] Re: Misurare intervallo stato alto pin

Messaggioda Foto Utentephase » 18 ago 2014, 0:38

Scusa, Foto UtenteWALTERmwp, cosa intendi quando dici:

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à :-)
Avatar utente
Foto Utentephase
50 4
New entry
New entry
 
Messaggi: 82
Iscritto il: 23 apr 2013, 16:28

0
voti

[13] Re: Misurare intervallo stato alto pin

Messaggioda Foto UtenteWALTERmwp » 18 ago 2014, 1:36

Ciao Foto Utentephase, 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
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
30,2k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 8982
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

0
voti

[14] Re: Misurare intervallo stato alto pin

Messaggioda Foto UtenteDavide90 » 18 ago 2014, 23:33

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?

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
Avatar utente
Foto UtenteDavide90
29 6
Frequentatore
Frequentatore
 
Messaggi: 130
Iscritto il: 5 lug 2012, 11:34

0
voti

[15] Re: Misurare intervallo stato alto pin

Messaggioda Foto UtenteWALTERmwp » 18 ago 2014, 23:51

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
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
30,2k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 8982
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

0
voti

[16] Re: Misurare intervallo stato alto pin

Messaggioda Foto UtenteDavide90 » 19 ago 2014, 0:08

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?
Avatar utente
Foto UtenteDavide90
29 6
Frequentatore
Frequentatore
 
Messaggi: 130
Iscritto il: 5 lug 2012, 11:34

0
voti

[17] Re: Misurare intervallo stato alto pin

Messaggioda Foto Utentephase » 19 ago 2014, 0:15

In una risposta precedente hai parlato di ms... Esattamente qual è la durata massima dell'impulso?
Avatar utente
Foto Utentephase
50 4
New entry
New entry
 
Messaggi: 82
Iscritto il: 23 apr 2013, 16:28

0
voti

[18] Re: Misurare intervallo stato alto pin

Messaggioda Foto UtenteDavide90 » 19 ago 2014, 0:16

Dovrebbe essere 2 ms.
Avatar utente
Foto UtenteDavide90
29 6
Frequentatore
Frequentatore
 
Messaggi: 130
Iscritto il: 5 lug 2012, 11:34

0
voti

[19] Re: Misurare intervallo stato alto pin

Messaggioda Foto Utentephase » 19 ago 2014, 0:26

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 :-)
Avatar utente
Foto Utentephase
50 4
New entry
New entry
 
Messaggi: 82
Iscritto il: 23 apr 2013, 16:28

0
voti

[20] Re: Misurare intervallo stato alto pin

Messaggioda Foto UtenteWALTERmwp » 19 ago 2014, 1:39

Davide90 ha scritto:Sto facendo un po di confusione
... 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).
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.
Avatar utente
Foto UtenteWALTERmwp
30,2k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 8982
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

PrecedenteProssimo

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti