Page 1 of 1

Durata di un impulso

PostPosted: 30 Sep 2012, 16:43
by Reset
Salve a tutti, mi ritrovo a misurare la durata di un impulso
generato dal passaggio di un oggetto, che viaggia su nastro
trasportatore , che interrompe il raggio di due coppie di
fotocellule disposte a distanza di un metro .
Il tutto al fine di ricavare la velocità per dosarla attraverso
il pilotaggio del motore
Quindi l'interruzione del primo raggio attiva un banale
flip flop , interrompendo il secondo raggio lo resetta
l'uscita di questo flip-flop e connessa ad un pin di un
at90s8515 , ho utilizzato l'istruzione PULSIN ma da neofita
del linguaggio non riesco ricavare nulla di funzionale
Utilizzo la scheda STK500 visualizzando il valore misurato
inviandolo sul registro della porta B ove sono connessi
8 led

Inizialmente ho scritto questo listato :


Declare Function Iopulse () As Word
Dim Valore As Word
Dim Tempo As Word
Inputpin Alias Pind.O
Config Portb = OUtput
Portb = &HFF

Valore = Iopulse ()
Portb = low(Valore)
loop
End
Function Iopulse () As Word
While Inputpin <> O : Wend
Tempo = O
While Inputpin = O
Incr Tempo
Wend
Iopulse = Tempo
End Sub


Help me ....
Come sempre , accetto suggerimenti hardware e software
Saluti e grazie

Re: Durata di un impulso

PostPosted: 30 Sep 2012, 20:35
by deluca
reset,
putroppo visionando il tuo codice, capisco e mi rendo conto delle tue difficoltà nel gestire la funzione che hai posto in essere.

il codice deve essere in grado di gestire i segnali provenienti dalle 2 fotocellule... non è necessario un FF esterno.
per avere una misura precisa, anche se relativa, puoi implementare il conteggio attraverso l'uso di 2 interrupt (1) o attraverso l'uso di un timer(2).

1) - un segnale int resetta ed avvia un counter, il secondo int ferma il conteggio e ne mostra il valore che può provenire dall'incremento di una variabile.
2) - oppure il primo segnale resetta ed attiva il timer che inizia a decrementare, il secondo blocca il timer e ne mostra il valore.

purtroppo il codice che hai postato non sarebbe funzionale poichè non avresti nulla di sincrono visto che il tutto viene gestito con cicli loop e while.
Come avevi pensato un ulteriore metodo abbastanza semplice sarebbe quello di usare PULSEIN ma nel modo corretto.

Hai stimato la velocità del nastro trasportatore? cm/sec ?

dimmi se hai capito.
ciao

Re: Durata di un impulso

PostPosted: 01 Oct 2012, 09:50
by Reset
Grazie per avermi risposto ,
Ho intuito il suggerimento , ma non ho mai utilizzato il timer interno alla
cpu , ho letto un po l'esempio del help di mcselec , ho trovato qualche difficoltà
nella impostazione del prescaler . Per una facile comprensione mi ricollego
all'oggetto timer del vb , che impostato l'intervallo e avviato lui genera
un evento timer ogni intervallo ed esegue le istruzioni prefissate .
Ho rimontato l'hardware utilizzando due pin , uno per ogni fotocellula
il nastro in condizioni normali viaggia a circa 2 cm al secondo
Saluti e ancora grazie

Re: Durata di un impulso

PostPosted: 01 Oct 2012, 17:09
by Fagos
secondo me dovresti smanettare proprio con i timer del micro.
io mi concentrerei sul timer1 che va bene per tempi abbastanza lunghi.
hai detto che il nastro si muove lentamente ad una vel di 2cm sec, quindi per percorrere un metro avrai 100/2= 50 secondi. giusto?
questo tempo mi sembra esagerato per rilevare la velocità del nastro, ma visto che non sono un esperto aspetterei altri pareri.

quale versione di bascom stai utilizzando?
ciao

Re: Durata di un impulso

PostPosted: 01 Oct 2012, 17:51
by deluca
ciao ragazzi, ok per la misura del tempo usando i timer.
ma....
il nastro trasportatore per percorrere un metro impiegherebbe circa 50 secondi (con i sensori posti alla distanza di un metro)
che risoluzione vuoi nella misura? ovvero, la misura ti serve per regolare la velocità del motore a loop chiuso o si tratta solo di una indicazione da visualizzare.

Inoltre: a che freq di clock stai facendo lavorare il tuo micro? da questo dipende fortemente sia la risoluzione temporale sia il tempo massimo che il timer1 può gestire.

ES: freq di clock 8Mhz, prescaler=1024 otteniamo un periodo pari a 0,000128 sec che moltiplicati per i 16bit(65536) del timer1 diventano 8,388 secondi max.

quindi alla freq di clock di 8Mhz il timer1 potrebbe gestire un massimo di 8 secondi circa che non sono abbastanza per misurare la velocità di un 2cm/sec andando a prelevare i segnali ad un metro di distanza uno dall'altro.

Ti consiglio di trovare il modo per avvicinare i sensori.... diciamo 8/10 cm.

facci sapere altro.... spero di essere stato chiaro.

Re: Durata di un impulso

PostPosted: 03 Oct 2012, 13:10
by Reset
Ciao , grazie a tutti , ho valutato in modo attento il suggerimento di De Luca
mi è venuto in mente , il metodo che utilizzavano alcuni giradischi per rendere stabile
la velocità del piatto . Ho fissato sulla circonferenza della puleggia che da il moto al
nastro trasportatore una serie di L disposte a una distanza di 4 cm , circonferenza e altri
dati meccanici ne ho tenuto conto , ricavando un tempo di 450 ms circa tra fotocellula 1 e 2
Chiaro l'esempio del calcolo , esposto da De Luca , di quanto vale l'evento TIMER0 a seconda del clock
e dell'impostazione del prescaler .
Quindi nella stesura del software , la fotocellula uno pone a zero il timer e lo avvia ( start timer0 )
la fotocellula 2 lo ferma ( stop timer0 ) , a questo punto devo ricavare il valore in secondi
da inviare al display , ed è qui che sono fermo ......
saluti

Re: Durata di un impulso

PostPosted: 03 Oct 2012, 14:00
by Micos
reset,
quando dici che sei fermo, dove sei fermo, spiegati meglio perchè non è chiaro.
hai scritto qualcosa o devi ancora iniziare a scrivere il codice?
se hai scritto un pò di codice postalo così capiamo meglio quali sono i tuoi problemi.
ciao

Re: Durata di un impulso

PostPosted: 03 Oct 2012, 16:28
by deluca
@reset,
prova a postare il codice che hai scritto finora, senza di quello difficilmente potremo aiutarti.
non ho capito dove ti sei fermato, sei riuscito a scrivere qualcosa o no?

inoltre dove hai collegato i segnali provenienti dalle fotocellule?
di che tipo di segnali stiamo parlando? npn, pnp, uscita ttl, contatto pulito na.nc o altro?