Newsgroup: it.comp.programmare
Titolo: Piccolo software cronometro cercasi

Ciao a tutti
Premetto che di programmazione ne so poco...
Sto' creando un piccolo cronometro-conta chilometri per una pista per
piccole auto radiocomandate.
IL software dovrebbe cronometrare il tempo che impiega la macchina a fare
10cm con il seguente hardware: Due sensori raggi infrarossi collegati alla
"parallela in parallelo", in questo modo riesco a dare lo start e lo stop al
pc e al cronometro che dovrà fare la conversione tempo calcolato,con lo
spazio percorso (10 cm).
Qualcuno puo' darmi una mano?
Grazie mille e buon anno a tutti
.::Direktor::.

 ha scritto nel messaggio
news:A5_X7.10254$s04.4...@news.infostrada.it...


 .::Direktor::.
Diamo per scontato che tu sia su una macchina IA32 con SO Linux 
e che vuoi una mano in C++:
#include <sys/time.h>
template <double distanza = 10>
class Cronometro {
    timeval myStartTime;
    timeval myStopTime;
public:
    void start() { gettimeofday(&myStartTime);   }
    void stop() { gettimeofday(&myStopTime);   }
 
    double vel() const { 
        double start = myStartTime.tv_sec + 
                              ( myStartTime.tv_usec / 10000000 );
        double end = myStopTime.tv_sec + 
                              ( myStopTime.tv_usec / 10000000 );
        return distanza / (end - start);
    }
};
E poi visto che tu sei un programmatore come quelli di una volta
ti sara' facilissimo integrare questa classe nel tuo SW.
La V
PS. Forse ora capirai perche' nessuno ti ha dato una risposta.
Ciao
Gaetano
--
#exclude <windows>
printf("\t\t\b\b\b\b\b\b");.
printf("\t\t\b\b\b\b\b\b");
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

mha...programmatori di una volta non ce ne sono piu'.......
acquire:
	push	dx
	mov	dx, 0379h
	in	al, dx
	pop	dx
	shr	al, 4
	xor	al, 7
	ret
start:	call	acquire
	mov	bl, al
wait1:	call	acquire	
	cmp	al, bl
	je	wait1
	cli
	db	0fh, 031h
	shl	edx, 16
	shr	eax, 16
	mov	dx, ax
	mov	count, edx
wait2:	call	acquire	
	cmp	al, bl
	je	wait2
	db	0fh, 031h
	sti
	shl	edx, 16
	shr	eax, 16
	mov	dx, ax
	mov	edx, eax
	sub	eax, count
Se le macchinine viaggiano a diciamo 36 km/h, l'errore commesso e' circa
il quattro per cento, supponendo che il sistema sia "tarato" e che venga
preso in considerazione il ritardo nell'esecuzione del codice. E inoltre
ho considerato trascurabile il ritardo isteretico sul chip 8255.
Leonardo
-- 
".signature": bad command or file name

...ho premesso che di programmazione ne so kuasi nulla...ok.....in un attimo
di mio inkazzamento ho risposto male pure a voi..skusate!
Questo codice con cosa lo compilo?
Io il pc che usero' girerà solo in dos.
Quali pin controlla della parallela questo codice?
Queste sono le mie ultime domande poi non vi rompo piu' :)
Grazie intanto per i consigli


 > Qualcuno puo' darmi una mano?
no, mi servono tutte e due. ;-)
Maurizio
-- 
Maurizio Sambati
Skice Software
E-mail: 
gsm...@inwind.it
--------------------------

 ti è mai venuto in mente che sei stato un po' vago? :-)
In effetti ora che ci penso sono stato non un po',ma molto vago!
Praticamente dovrei collegare 2 sensori a infrarossi, cha a sua volta danno
il segnale di start e stop al cronometro.
Elettricamente è come se ci fosse sole un sensore ad infrarossi visto che
sono in parallela.
Supponiamo di averne solo uno.
La macchina passa, il led a infrarossi viene coperto dal passaggio
dell'auto,e il fototransistor non riceve piu' la luce infrarossa, quindi in
questo caso da un segnale alla parallela (pero' non so su quale pin) che fa
partire il software che cronometra. Ad un ennesimo passaggio della macchina
per lo stesso punto,quindi interrompendo di nuovo la barriera infrarosso, il
fototransistor non riceve di nuovo luce e da il segnale di stop sullo stesso
pin (o su un altro?).
Magari poi automaticamente si potrebbe fare l'operazione di spazio fratto
tempo per avere la velocità media!
Avendo invece 2 sensori in parallela e distanti uno dall'altro 10 o 20 cm si
puo' avere la velocità in un detrminato punto (magari in un rettilineo).
Non passano piu' macchine ma una sola.
Ecco quelo che mi serve
Riepilogo:
Un semplice software che grazie ad un segnale di stop e start su un pin
della parallela cronometri il tempo,e magari se è possibile faccia il
calcolo spazio fratto tempo per avere la velocità.
Grazie mille
.::Direktor::.

per essere piu' preciso l'hardware che usero' sarà questo
http://home1.inet.tele.dk/mosgaard/tech.htm
 il secondo schema che si trova
nella pagina.Il software da loro fornito non da la velocità ma da un tempo
su tutto il giro.
Ciao e grazie
.::Direktor::.

> je wait1
devono diventare
wait1:	call acquire
	cmp al, bl
	je wait1
; Qui la macchina e' irradiata
	mov bl, al
wait1b:	call acquire
	cmp al, bl
	je wait1b
Quindi il programma puo' essere utilmente riscritto come segue.
Attenzione: sarebbe piu' comodo usare l'IRQ della parallela, e per avere
una miglior portabilita', non si dovrebbe usare il Pentium Cycle Counter
Una versione in C meno precisa si trova qui:
 
http://et.nmsu.edu/~etti/fall96/computer/printer/printer.html
main:	mov	al, 34h		; Attiva il PC timer
	call	timer		; 
	mov	bl, 0xFF	; Inserisce uno stato impossibile
	call	waitir		; Acquisisce lo stato REALE
	call	waitir		; Aspetta che il primo CXP si attivi
	call	waitir		; Aspetta che la macchinina passi oltre
	call	gettime		; Legge il timer
	mov	_time2, ax	; E lo salva
	mov	_time1, dx	;
	call	waitir		; Aspetta che il secondo CXP si attivi
	call	waitir		; Aspetta che la macchinina passi oltre
	call	gettime		; Legge il timer
	mov	_time4, ax	; E lo salva
	mov	_time3, dx	;
	mov	al, 36h
	call	timer
	ret
_time2	dw	0		; Tempo 1, in microsecondi (?)
_time1	dw	0		
_time4	dw	0		; Tempo 2, in microsecondi (?)
_time3	dw	0
acquire:cli
	push	dx
	mov	dx, 0379h
	in	al, dx
	pop	dx
	sti
	ret
waitir:	call	acquire		; Legge la parallela, BL=stato precedente
	cmp	al, bl		; controlla se e' cambiato lo stato
	je	waitir		; No, aspetta
	mov	bl, al		; Si', salva lo stato
	ret			; e ritorna
timer:	cli
	out	43h, al
	out	40h, 0
	out	40h, 0
	sti
	ret
; Restituisce il valore di OCW3 in microsecondi
; in DX:AX (forse)
gettime:cli
	push	bx
	mov	dx, 20h
	mov	al, 0Ah
	out	dx, al
	xor	al, al
	out	43h, al
	in	al, dx
	mov	di, ax
	in	al, 40h
	mov	bl, al
	in	al, 40h
	mov	bh, al
	not	bx
	in	al, 21h
	mov	si, ax
	mov	al, 0FFh
	out	21h,al
	mov	ax, 40h
	mov	es, ax
	mov	dx, es:[06Ch]
	mov	ax, si
	out	21h,al
	sti
	mov	ax, di
	test	al, 1
	jz	done
	cmp	bx, 0FFh
	ja	done
	inc	dx
done:	mov	ax, bx
	pop	bx
	ret
Non l'ho provato. Caveat emptor :-)


 wrote in message
IxhZ7.24906$s04.1...@news.infostrada.it...


SI...ok.....ma ci avevo già pensato,ma mi serve la conversione istantanea da
tempo a velocità....
.::Direktor::.