Newsgroup: it.hobby.elettronica.digitale
Titolo: Leggere dati con PC, come?

Ho un dispositivo con i seguenti segnali su 3 cavi: un clock (CLK)(forse più
che clock, strobe comunque...), una linea dati (DATA) sincrona con il clock
(il dato e' stabile in corrispondenza del negative-edge (fonte negativo) del
clock, insomma commuta prima che questo scenda) e un altro che chiamero'
CTR. Il CLK e DATA lavorano solo quando CTR è basso, nell'altro caso sono
inattivi a livello alto. La logica e' tutta TTL attiva-bassa e il clock puo'
anche variare da 200 HZ fino ad un massimo di 12KHz (DATA fino a 12000 bit
per secondo). Vorrei interfacciarlo
in qualche modo con il PC (preferibilmente su seriale o parallela) per
leggere/elaborare i dati. Per il programma dovrei cavarmela io, non so però
come interfacciarlo a livello Hardware. Qualcuno a qualche idea? Vanno bene
anche link a qualcosa di simile. Grazie

 anche link a qualcosa di simile. Grazie
La cosa piu' semplice e' la parallela:
http://members.xoom.it/stor/elettronica/parallela/parallela.htm
In uscita la parallela comanda tranquillamente delle porte logiche. In
ingresso invece puo' fare fatica a leggere se la porta logica esterna non e'
bufferata (una open collector con 1K di pull-up o una porta tipo 74HC244
vanno bene). Un esempio di circuito con segnali molto simili al tuo caso che
ho collegato alla parallela e' in:
http://members.xoom.it/stor/elettronica/las/las.htm
ciao
Claudio

Ho guardato il sito ma sono un po' disorientato: praticamente io dovrei
leggere uno stream da diciamo circa 600 bit che arrivano sincroni con un
clock che non e' stabile, ma puň aumentare o diminuire in frequenza e non
posso metterlo
in attesa.
Cosi:
ctr:   -----_____________----
clk:  -------__--__--__--__---
data:-------______-----___---
bit:    #    #    1    1     0    1   #
solo molto piů lungo!
Puo' fare questo il tuo dispositivo?  Mi sembra che carichi prima i dati in
uno shifter e poi vengano letti in seguito.
Dove dovrei collegare i miei 3 cavi? Tempo fa avevo costruito un contatore
con "contatore" 74393 uno shifter da 8 bit 74166 che veniva caricato con il
numero conteggiato e poi andavo a leggerlo dalla porta parallela in modo
seriale utilizzando il pin 12 della centronix. Aiuto!

Mariolimmenso ha scritto nel messaggio ...

Non ho capito due cose:
- il link è monodirezionale o bidirezionale
- a che ti serve il segnale CTR? Se ho capito bene i quando CTR è alto i il
clock è inattivo quindi i circuiti di ricezione, che sono sincroni con la
linea CLK, non sono attivati. In altre parole: se ignori la linea CTR non
otterrei lo stesso risultato?
Se il link è monodirezionale per risolvere il tuo problema io utilizzerei la
porta parallela collegando la linea di CLK alla linea ACK e la linea DATA
ad una delle linee dati della porta parallela (per es. DATA0).
La porta parallela standard può essere programmata per generare un
interrupt quando la linea ACK ha una commutazione (non mi ricordo se
verso il basso o verso l'altro, eventualmente il fronte attivo puoi essere
invertito con una logica esterna).
Il tuo SW dovrebbe quindi essere attivato dall'interrupt della LPT (non
mi ricordo se IRQ5 o IRQ7) leggendo il dato presente sulla linea DATA0.
Questo sistema può funzionare solo se il dato rimane stabile dopo il
fronte attivo della linea CLK per un tempo necessario alla routine di
interrupt di leggerlo.
Se non sei sicuro di ciò dovresti inserire un flip-flop tipo D esterno
attivato dalla linea CLK.
In internet dovresti trovare informazioni sufficienti per programmare
la parallela. Se hai difficoltà fatti vivo.
Ciao
Paolo

  Se hai difficoltà fatti vivo.
Sicuramente! grazie e ciao

Ops. Mi sono accorto di un errore (o imprecisione).
La soluzione che ti ho proposto funziona solo se la parallela
può essere programmata in modo bidirezionale, cosa che
è possibile su quasi tutti i PC attuali ma che non è standard.
Infatti la linea DATA0 che io ti avevo detto di usare nella parallela
standard è una linea di uscita che può diventare ingresso solo
se la parallela ammette il modo bidirezionale.
Meglio quindi collegare la tua linea DATA ad una delle
linee di ingresso della parallela, per es. PaperEnd.
Ne appofitto per darti un link sull'uso della parallela (se
non lo hai già): 
www.lvr.com
Ciao
Paolo

 Puo' fare questo il tuo dispositivo?  Mi sembra che carichi prima i dati
in > uno shifter e poi vengano letti in seguito. > Dove dovrei collegare i
miei 3 cavi? Tempo fa avevo costruito un contatore > con "contatore" 74393
uno shifter da 8 bit 74166 che veniva caricato con il > numero conteggiato e
poi andavo a leggerlo dalla porta parallela in modo > seriale utilizzando il
pin 12 della centronix. Aiuto!
E' vero, il mio circuito non serve direttamente per questo scopo. Mi sembra
che quella di Paolo sia una buona idea a patto di riuscire a gestire
l'interrupt della lpt... In alternativa, se mi trovassi di fronte ad un
problema come questo, penso che userei un misto hardware/microcontrollore o
microprocessore per acquisire i dati e fornirli in un formato piu'
"semplice" da leggere con il PC, ad esempio con il link LAS che in questo
caso andrebbe bene.
Oppure si potrebbe anche pensare a una versione "ingrandita" del LAS fatta
con una memoria ram che viene scritta dal dispositivo (cosi' a occhio il
clock dovrebbe comandare il segnale di write della ram e l'avanzamento del
contatore indirizzi), il segnale CTR sarebbe importantissimo per segnalare
al pc quando puo' leggersi i dati (e il pc dovrebbe riazzerare il contatore
e inviare un suo clock per farlo avanzare). In questo modo la ram puo'
incamerare tutti i bit che servono a qualsiasi velocita' anche variabile, e
poi il pc se la legge con comodo... l'unico inghippo e' che il pc deve
finire di leggere i dati prima che il dispositivo ne invii degli altri.....
Le idee mi  vengono mentre scrivo... un'altra possibilita' e' usare un
registro fifo circolare asincrono in cui le operazioni di lettura e
scrittura possono avvenire contemporaneamente, e' dotato di contatori di
indirizzo write pointer e read pointer  indipendenti e dispone dei segnali
di fifo vuoto/pieno/mezzo pieno... al momento pero' non trovo il nome
dell'integrato e non so se si puo' trovare facilmente....
ciao
Claudio

Scusate ragazzi, ma non è molto più economico
costruire un semplice circuito con un microcontrollore
come ad esempio un pic o un avr ed un max232 e collegare
il tutto alla seriale evitando accessi a basso livello
all'hardware del pc che complicherebbe le cose?
D'altra parte il tipo di seriale sincrona di cui stai parlando
é molto simile alla classica SPI che é fornita di serie sugli
avr90s4414 e avr90s8515, basta solo configurare in modo corretto
i registri di controllo della seriale SPI in modo da
selezionare la modalità slave e la giusta polarità e fase
del segnale di clock.
oltretutto é già corredato anche di seriale 232 hardware quindi
basterebbe un semplice programmino che legga i dati dalla SPI,
li metta in un buffer ciclico se la velocità massima della 232 é
minore della velocità massima della SPI, e da questo buffer li
scriva sulla 232.
Più semplice da fare che da descrivere.
la soluzione con classico PIC16F84 ha il problema che durante
la ricezione dei dati dalla tua interfaccia seriale sincrona,
non possono essere trasmessi dati sulla 232 perché ciò falserebbe
le temporizzazioni, anche se un adeguato uso degli interrupt potrebbe
giovare a far funzionare il tutto.
spero di essere stato di aiuto.
il tutto potresti provare ad alimentarlo dalla seriale del PC per
evitare l'uso di un alimentazione esterna o mediante il cavo della tastiera.
sinceramente scarterei le soluzioni con fifo e cose simili dal costo non
indifferente e di quasi prossima allo 0 reperibilità.
Alessio Morale

indifferente e di quasi prossima allo 0 reperibilità.
ma perche':
CD40105 o solo '40105 per gli amici: costa duemila lire, e' una FIFO
16x4 e dovrebbe bastare per leggere 12Kbit/s anche dal PC piu' lento
(lavornado in assembler); comunque, dato il costo, nessuno vieta di
mettere due 40105 in cascata...
datasheet? sul sito ST:  HCF40105B.