Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Rilevare un segnale logico prima di un altro

Elettronica lineare e digitale: didattica ed applicazioni

Moderatori: Foto Utentecarloc, Foto Utenteg.schgor, Foto UtenteBrunoValente, Foto UtenteIsidoroKZ

1
voti

[1] Rilevare un segnale logico prima di un altro

Messaggioda Foto Utentedbe8f » 18 lug 2013, 11:45

Buongiorno O_/ ,

Sono nuovo sul forum e vivo nella Svizzera francese. Il mio italiano non è 100% giusto ma cercherò di non fare troppi errori di ortografia durante la scrittura dei miei post.

Grazie per la vostra indulgenza :D !!!

Ecco la mia domanda :
Vorrei rilevare un segnale logico che arriva prima di un altro, con flip-flop D, JK, RS, ... o altro ma no con dei uP tipo PICXXXX.
E 'possibile fare con questo tipo di circuito integrato (fli-flop) e, se sì, mi pottete aiutare o mi pottete disegnare un diagramma ?

Sperò essere stato abbastanza chiaro nel descrivere il mio problema perché non ho esperienza in electronica :cry: .

Allego una tabella di verità e un chronogramma che descrive il mio caso. DB e DBS sono gli ingressi e VIT è l'uscita .
TV_Réseau.JPG
TV_Réseau.JPG (65.06 KiB) Osservato 5960 volte


L'entrate linee T4 e T6 sono identiche, ma l'uscita è una volta a 0 e una volta a 1. Dipende da T3 e T5. Infatti, nella linea T3 DB è impostato (arriva prima) a 1 e DBS a 0 e alla linea T5 è il contrario.

In anticipo Vi ringrazio per le Vostre ripsoste.
Cordialmente.
Avatar utente
Foto Utentedbe8f
35 3
 
Messaggi: 20
Iscritto il: 16 lug 2013, 18:19
Località: Svizzera francese

1
voti

[2] Re: Rilevare un segnale logico prima di un altro - un AIUTO

Messaggioda Foto Utenteboiler » 18 lug 2013, 12:39

Dimmi se ho capito bene:
VIT\left(n\right) = 1 \iff DB\left(n\right) = 1\;\&\; DBS\left(n\right) = 1 \;\&\; DBS\left(n-1\right) = 1

Se è così si può facilmente fare con una porta AND e un flip-flop per generare il ritardo. Ti serve però un clock. Ce l'hai?

Ciao Boiler
Avatar utente
Foto Utenteboiler
26,4k 5 9 13
G.Master EY
G.Master EY
 
Messaggi: 5612
Iscritto il: 9 nov 2011, 12:27

1
voti

[3] Re: Rilevare un segnale logico prima di un altro - un AIUTO

Messaggioda Foto Utentedbe8f » 18 lug 2013, 13:17

Ciao Boiler,

Grazie per la tua risposta.

Mi dispiace ma non capisco bene la formula che mi hai dato. Se riesci a spiegarmelà in un altro modo magari riesco a risponderti.
(n) vuol dire a un'istante T ?

Non è solo un problema di ritardo perche DBS non passera obligatoriamente a 1 e la durata che DBS passi a 1 puo durare da 1 secondo apiù secondi.

Per il "clock" non ce l'ho, ma posso generarlò dopo.

Descrivo il caso in un altro modo.
Se l'entrata DB passa dallo stato 0 a 1 (linea T3) prima che (il titolo: Rilevare un segnale logico prima di un altro) DBS passi dallo stato 0 a 1 (linea T4) allora l'uscita VIT rimane a 0.
Se l'entrata DBS passa dallo stato 0 a 1 (linea T5) prima che (il titolo: Rilevare un segnale logico prima di un altro) DB passi dallo stato 0 a 1 (linea T6) allora l'uscita VIT passa a 1.
In qualsiasi caso se DB è passata da 0 a 1, l'uscita deve ritornare à 0 dopo che DB sia ritornata a 0.

Cordialmente
Dario.
Ultima modifica di Foto Utentedbe8f il 18 lug 2013, 13:30, modificato 1 volta in totale.
Avatar utente
Foto Utentedbe8f
35 3
 
Messaggi: 20
Iscritto il: 16 lug 2013, 18:19
Località: Svizzera francese

1
voti

[4] Re: Rilevare un segnale logico prima di un altro

Messaggioda Foto Utentedbe8f » 18 lug 2013, 13:25

Boiler,

Rilegendo la tua formula credo di avere capito quello che vuoi dire.
La risposta è SI, è proprio così.

Però puoi tenere conto del mio post precedente dove dico che :
In qualsiasi caso se DB è passata da 0 a 1, l'uscita deve ritornare a 0 dopo che DB sia ritornata a 0.

Questo significa che il flip-flop deve essere "risetato" (RESET).

Tutto questo è possibile con la sola porta AND ed un flip-flop ?

Cordialmente
Dario.
Avatar utente
Foto Utentedbe8f
35 3
 
Messaggi: 20
Iscritto il: 16 lug 2013, 18:19
Località: Svizzera francese

0
voti

[5] Re: Rilevare un segnale logico prima di un altro - un AIUTO

Messaggioda Foto UtenteDoeM » 18 lug 2013, 23:43

dbe8f ha scritto:In qualsiasi caso se DB è passata da 0 a 1, l'uscita deve ritornare à 0 dopo che DB sia ritornata a 0.


Questo comportamento però non corrisponde al comportamento da te riportato nel "chronogramma"... Nel grafico riportato l'uscita ritorna a 0 dopo che DBS è ritornata a 0. Qual è il comportamento corretto?
Inoltre ti è possibile ricostruire un clock sincrono a quello dei due segnali?
Avatar utente
Foto UtenteDoeM
580 2 6
Expert
Expert
 
Messaggi: 182
Iscritto il: 11 lug 2011, 1:09

1
voti

[6] Re: Rilevare un segnale logico prima di un altro

Messaggioda Foto UtenteDoeM » 19 lug 2013, 0:25

Comunque ho buttato giù un paio di possibili soluzioni. Per ora ho risolto il dubbio con l'assunto che l'uscita si resetti non appena DBS torna basso.

La prima è molto semplice, ma è critica la temporizzazione reciproca dei due segnali; probabilmente non funziona, perché è probabile vada in metastabilità in caso di transizione contemporanee. Si assume che il FF tipo D sia rising edge triggered ed il RESET sia attivo basso.



Un'altra soluzione è molto più sicura ma anche più complicata. In quest'altro caso ho optato per risolvere l'ambiguità delle transizioni contemporanee in salita dei due segnali con la priorità dell'attivazione dell'uscita VIT. Essa viene resettata sempre quando DBS torna basso. In questo caso i FF D hanno ingressi set e reset attivi alti, ma non è comunque un problema invertire i livelli logici. Gli ingressi non collegati vanno messi al livello inattivo.
Attenzione che questo circuito è asincrono. L'ultimo FF D è anche sostituibile con un più semplice SR.

Avatar utente
Foto UtenteDoeM
580 2 6
Expert
Expert
 
Messaggi: 182
Iscritto il: 11 lug 2011, 1:09

1
voti

[7] Re: Rilevare un segnale logico prima di un altro

Messaggioda Foto Utentedbe8f » 19 lug 2013, 12:06

Buongiorno DoeM,

Grazie mille per le soluzioni che mi hai datte :ok: .
Vista l'ora del post, non vorrei che tu ci passassi troppo tempo.

La prima soluzione con un solo FF l'avevo provata ieri collegata come la foto allegata e ho visto che funziona quasi al 100%
http://www.servimg.com/image_preview.php?i=3&u=18413670
FF - D_V1.0.JPG
FF - D_V1.0.JPG (18.09 KiB) Osservato 5880 volte

Solo che a secondo dello stato di DB l'uscita Q rimane a 1 allora che vorrei che scendesse à 0 :(

Ma il problema è ancora più complesso che l'immaginavo. Vogliate scusarmi se non ho messo tutta la descrizione del progetto perché mi sembrava un po complessa (la descrizione) e pensavo che con 1 o 2 FF bastava a risolvere il problema. Vedo che non è proprio così, il problema è veramente complesso.

Infatti, il progetto è gestire un plastico di ferromodelismo con dei blocchi automatici (troncchi, sezioni) a un solo binario ma nelle entrambi direzioni.

L'idea di questo rilevamento è che se un treno arriva in una tratta t, quando transita alla tratta t+1, il rilevatore di consumo di corrente della tratta t+1 invia un informazione a la tratta t che deve fermare il treno ma come è il medesimo treno, la cartina di controllo della tratta t non deve tenerne conto fin tanto il treno non ha superato l'intera tratta t. Ma se il treno in tratta t si ferma e non va in tratta t+1, e che un treno t2 arriva sulla tratta t+1, la tratta t deve tenere conto del rilevamento perché il treno t1 se vuole partire nella direzione della tratta t+1 non è possibile essendo occupata da t2 #-o #-o #-o. Mi sa che non è tutto facile questo !!! Che ne pensi ???

Distinti salutì
Dario
Avatar utente
Foto Utentedbe8f
35 3
 
Messaggi: 20
Iscritto il: 16 lug 2013, 18:19
Località: Svizzera francese

1
voti

[8] Re: Rilevare un segnale logico prima di un altro

Messaggioda Foto UtenteDoeM » 19 lug 2013, 15:14

dbe8f ha scritto:Solo che a secondo dello stato di DB l'uscita Q rimane a 1 allora che vorrei che scendesse à 0 :(

Se ho ben capito la questione, per resettare l'uscita allora sarebbe sufficiente collegare DB anche ad un ingresso di reset asincrono del flip-flop.

dbe8f ha scritto:L'idea di questo rilevamento è che se un treno arriva in una tratta t, quando transita alla tratta t+1, il rilevatore di consumo di corrente della tratta t+1 invia un informazione a la tratta t che deve fermare il treno ma come è il medesimo treno, [...]. Mi sa che non è tutto facile questo !!! Che ne pensi ???

Sinceramente ho delle difficoltà a capire la struttura del sistema, anche perché non ho alcuna esperienza nell'ambito del ferromodellismo. Riusciresti a spiegarti un po' più dettagliatamente, magari con l'aiuto di disegni? Non riesco ad esempio a capire che segnali tu abbia a disposizione come ingressi; DB e DBS cosa rappresentano? VIT?
Avatar utente
Foto UtenteDoeM
580 2 6
Expert
Expert
 
Messaggi: 182
Iscritto il: 11 lug 2011, 1:09

1
voti

[9] Re: Rilevare un segnale logico prima di un altro

Messaggioda Foto Utentedbe8f » 19 lug 2013, 16:30

Ciao DoeM,

Grazie per la tua risposta.

Capisco che non è facile capire tutto.
Per la tua prima frase:
Se ho ben capito la questione, per resettare l'uscita allora sarebbe sufficiente collegare DB anche ad un ingresso di reset asincrono del flip-flop.

Ho provato a collegare DB a tutti gli ingressi ma c'è sempre una situazione che non funziona. Tu come la vedevi collegata ?

Per la seconda frase:
Sinceramente ho delle difficoltà a capire la struttura del sistema, ...
Allego un disegno che ti posso spiegare.

I trattini rossi sono le separazioni di tratto, i trattini blu sono le separazioni di rilevamento in un tratto, ce n'è sono due perché si puo andare in entrambe le direzioni.

Il rilevamento e un segnale di 12V, inviato da un elettronica (DB o DBS) che fa commutare un relè, da una locomotiva che arriva su un tratto (assorbimento di corrente). VIT è un segnale logico che è inviato a un elettronica che se VIT è a livello 0 (OV) il treno continuà a velocità normale, se invece VIT è a livello 1 (12V) fa commutare un relè che fa ralentare la locomotiva nel tratto grande e la ferma nel tratto piccolo.

Se facciamo un'equivalenza, DB corrisponde al rilevamento del tratto "Bloc-1" (B-1) e DBS corrisponde al rilevamento del tratto "Bloc 1" (B1). Lo si vede sul allegato.

1) Quindi nel mio caso, quando il treno T1 (composto di due locomotive) passa dal tratto B-1 al tratto B1, il sistema rileva che c'è un assorbimento di corrente al tratto B1 e invia l'informazione al tratto B-1 che fa ralentare e fermare il treno. Ma in questa situazione non è normale (si vede nel allegato VIT = 1 in colore rosso perché è lo stesso treno che transita da B-1 a B1 (questo corrisponde alle linee T3 e T4 della mia tabella di verità).

2) Ma immaginando che T1 sta nella tratta B-1 e che si ferma, e mentre è fermo arriva un treno T2 sulla tratta B1 allora il sistema rileva che c'è un assorbimento di corrente al tratto B1 e invia l'informazione al tratto B-1 che fa ralentare e fermare il treno. In questa situazione è normale (questo corrisponde alle linee T5 e T6 della mia tabella di verità) perché se il treno T1 vuol ripartire in direzione del tratto B1, non puo farlo perché c'è T2 che blocca il tratto. Nella medesima situazione, se T2 è gia fermo sulla tratta B1 e T1 arriva sulla tratta B-1 il treno T1 si deve inevitabilmente fermare (questo corrisponde alle linee T5 e T6 della mia tabella di verità)

Infine, per i due casi identici (T1 vuole andare da B-1 a B1) abbiamo un comportamento differente del sistema.

Speò essere stato abbastanza chiaro, non è facile da spiegare.

Grazie mielle ancora DoeM.
A presto... devo partire per andare a prendere il treno (quello verò :D :D :D ) perché vado a lavorare in treno.
Détection_HOm_1.JPG
Détection_HOm_1.JPG (14.45 KiB) Osservato 5860 volte

Dario
Avatar utente
Foto Utentedbe8f
35 3
 
Messaggi: 20
Iscritto il: 16 lug 2013, 18:19
Località: Svizzera francese

1
voti

[10] Re: Rilevare un segnale logico prima di un altro

Messaggioda Foto Utenteboiler » 19 lug 2013, 16:48

dbe8f ha scritto:Ma il problema è ancora più complesso che l'immaginavo. Vogliate scusarmi se non ho messo tutta la descrizione del progetto perché mi sembrava un po complessa (la descrizione) e pensavo che con 1 o 2 FF bastava a risolvere il problema. Vedo che non è proprio così, il problema è veramente complesso.


Il problema (o meglio, la soluzione) è sicuramente semplice, ma devi definire esattamente cosa vuoi.
In elettronica digitale per definire comportamenti logici si usano delle tabelle in cui hai il valore dell'uscita per tutti i possibili valori in entrata. Per tenere le cose semplici si può usare, oltre a 0 e 1, lo stato X. X sta per "don't care" e significa che in quel caso il segnale può essere indifferentemente 0 o 1.

Facciamo un esempio banalissimo con una porta AND:

Codice: Seleziona tutto
A   B   |   Z
----------------
0   0   |   0
0   1   |   0
1   0   |   0
1   1   |   1


Questa tabella caratterizza in modo completo e univoco la funzione di una porta AND: l'uscita Z vale 1 se e soltanto se le entrate A e B sono entrambe 1.

Una tabella di questo tipo non ha memoria: non ti dice nulla della dipendenza dal passato. Se nel ciclo precedente le entrate erano 0 o 1 non ci interessa.

Nel tuo caso invece abbiamo una dipendenza dal passato, quindi introduci nella tabella (dalla parte degli ingressi) una colonna chiamata A(n-1) che indica il valore di A nel ciclo precedente.

Ti preparo la tabella con gli ingressi, tu completa le uscite:
Codice: Seleziona tutto
DB(n-1)   DB(n)   DBS(n-1)   DBS(n)   |   VIT
-------------------------------------------------
   0        0         0        0      |    ?
   0        0         0        1      |    ?
   0        0         1        0      |    ?
   0        0         1        1      |    ?
   0        1         0        0      |    ?
   0        1         0        1      |    ?
   0        1         1        0      |    ?
   0        1         1        1      |    ?
   1        0         0        0      |    ?
   1        0         0        1      |    ?
   1        0         1        0      |    ?
   1        0         1        1      |    ?
   1        1         0        0      |    ?
   1        1         0        1      |    ?
   1        1         1        0      |    ?
   1        1         1        1      |    ?


Gli ingressi (n-1) rappresentano lo stato passato.
Gli ingressi (n) rappresentano lo stato presente.

Io credo di aver capito cosa vuoi fare e si fa veramente con un paio di componenti e senza problemi, ma per sicurezza (e per esercizio) completa la tabella qui sopra.

Saluti Boiler
Avatar utente
Foto Utenteboiler
26,4k 5 9 13
G.Master EY
G.Master EY
 
Messaggi: 5612
Iscritto il: 9 nov 2011, 12:27

Prossimo

Torna a Elettronica generale

Chi c’è in linea

Visitano il forum: Nessuno e 134 ospiti