Pagina 1 di 2

Riconoscimento del positive-edge-triggered

MessaggioInviato: 10 ago 2015, 14:20
da harpefalcata
Ciao a tutti,

Sono nuovo del forum e, non avendo trovato alcuna sezione per la presentazione passo direttamente a fare una richiesta.

I presupposti sono questi: io programmo microcontrollori PIC esclusivamente in assembly, e mi trovo in una situazione, nella quale ricevo da un controller esterno una semplice onda quadra, della quale dovrò cronometrare il T-low.

Impostare i timer e cronometrare l'onda in entrata non è un problema, però mi sono accorto che il mio firmware potrebbe funzionare molto meglio se potessi sincronizzare le sequenze di lettura con i fronti dell'onda entrante.

In pratica mi servirebbe scrivere una routine che mi permetta di scoprire se il segnale in ingresso è un positive-edge triggered, od un negative-edge.

Usando le istruzioni standard potrei riuscirci ma rischierei di inserire una latenza eccessiva, perché l'onda in ingresso ha un duty-cycle dell'ordine dei 6 uS, e quindi comincerei a rimanere un po' agli sgoccioli.

In definitiva la domanda è: conoscete un metodo efficace e il più possibile rapido per scoprire in ogni momento se l'onda entrante è positive-edge o negative-edge?

Grazie mille e a presto.

Re: Riconoscimento del positive-edge-triggered

MessaggioInviato: 10 ago 2015, 15:29
da obiuan
harpefalcata ha scritto:Ciao a tutti, Sono nuovo del forum...


ciao e benvenuto,

harpefalcata ha scritto:In definitiva la domanda è: conoscete un metodo efficace e il più possibile rapido per scoprire in ogni momento se l'onda entrante è positive-edge o negative-edge?


mi spieghi che cosa intendi con onda quadra "positive edge" o "negative edge"?

Re: Riconoscimento del positive-edge-triggered

MessaggioInviato: 10 ago 2015, 15:41
da WALTERmwp
Ciao Foto Utenteharpefalcata e benvenuto su EY, comunque ... qui, in questa sezione, "Notizie, annunci, ricerche, presentazioni" ...

harpefalcata ha scritto:però mi sono accorto che il mio firmware potrebbe funzionare molto meglio se potessi sincronizzare le sequenze di lettura con i fronti dell'onda entrante.
beh, non è una rivelazione, se devi misurare la durata della parte di periodo in cui il segnale è "low" o "high" è quello che occorre fare, come minimo; a meno ch'io non abbia interpretato male.
Sarebbe utile anche sapere quale microcontrollore impiegheresti.

Saluti

Re: Riconoscimento del positive-edge-triggered

MessaggioInviato: 10 ago 2015, 15:45
da boiler
harpefalcata ha scritto:In pratica mi servirebbe scrivere una routine che mi permetta di scoprire se il segnale in ingresso è un positive-edge triggered, od un negative-edge.


Questi attributi non sono applicabili a un segnale ma, per esempio, ad un flip-flop.
La domanda non ha quindi senso.

Boiler

Re: Riconoscimento del positive-edge-triggered

MessaggioInviato: 10 ago 2015, 15:50
da WALTERmwp
Probabilmente si riferisce semplicemente al fronte di salita, o di discesa, di un segnale in ingresso a un micro.

Saluti

Re: Riconoscimento del positive-edge-triggered

MessaggioInviato: 10 ago 2015, 16:32
da EcoTan
harpefalcata ha scritto:cronometrare il T-low

Ci sono dei pin di ingresso denominati "input capture" i quali hanno proprio questa funzione: ad ogni fronte registrano la lettura di un timer e lanciano un interrupt.
Sai usare gli interrupt cioè come scrivere una ISR? E' chiaro che la differenza fra l'ultima e la penultima lettura dà la durata. Distinguere il T-low non è un problema, puoi leggere appunto lo stato dell'ingresso o usare due interrupt differenti per i due fronti, che si abilitano a vicenda.

Re: Riconoscimento del positive-edge-triggered

MessaggioInviato: 11 ago 2015, 13:48
da harpefalcata
Probabilmente mi sono espresso molto male, cercherò di chiarirmi.

L'onda quadra che ho in ingresso è fortemente asimmetrica, in particolare ha un Ton che è, indicativamente, nell'intorno dei 6 uS, mentre un Tlow che varia nell'intorno dei 60 uS.

Ciò che a me interessa è di cronometrare l'intervallo di variazione di questo Tlow.

Con "Riconoscimento del positive edge triggered", in realtà io intendevo se esiste qualche tecnica che mi permetta di riconoscere ed agganciare il timer direttamente al segnale in ingresso.

Ad esempio con il mio controllore: un PIC18F2550 impiegando il Timer zero, esiste una particolare feature che permette al timer di cominciare a contare solo in corrispondenza dei fronti positivi o negativi: e sarebbe il bit T0SE del registro T0CON, descritto a pagina 129 del PDF del datasheet.

Io però non potrò usare questo timer, perché questo bit è associato solo alla funzione "counter" del timer stesso, mentre a me serve che sia in funzione timer per poter cronometrare il fronte basso.

Spero di essere stato più chiaro

EcoTan ha scritto:
harpefalcata ha scritto:cronometrare il T-low

Ci sono dei pin di ingresso ...
- nota: non è necessario "citare" tutto il messaggio di riferimento, basta una parte.

Conosco perfettamente sia gli interrupt, che il modulo capture.

Sono però ostile all'impiego degli interrupt, a maggior ragione in questa applicazione.

Se ho ben interpretato la tua indicazione, tu suggeriresti di scatenare un interrupt ad ogni tlow, corretto?

In questo modo però avrei una quantità smodata di routines di interrupt, difficili da gestire con tali tempistiche, inoltre rischierei di inchiodare costantemente il processore all'interno della ISR inutilmente, perdendo anche il sincronismo con gli altri task che dovrà eseguire il processore stesso.

Comunque grazie.

Re: Riconoscimento del positive-edge-triggered

MessaggioInviato: 11 ago 2015, 14:09
da WALTERmwp
Non mi è ancora ben chiaro quale'è la parte del periodo che intendi misurare.
Ho fatto un disegno molto approssimativo per avere un riferimento comune, quindi, potrebbe essere A piuttosto che B, A+B o altro ?

Mi pare poi ci siano delle contraddizioni in quanto hai scritto.
Un coerente impiego dell'irq deve essere funzionale ad una ottimizzazione delle risorse del microcontrollore in base alle tempistiche, non deve/dovrebbe essere considerato un problema.
Però probabilmente qualcosa a me sfugge.

Saluti

Re: Riconoscimento del positive-edge-triggered

MessaggioInviato: 11 ago 2015, 14:15
da harpefalcata
WALTERmwp ha scritto:Non mi è ancora ben chiaro quale'è la parte del periodo
- nota: non è necessario "citare" tutto il messaggio di riferimento, basta una parte.

L'onda che ho in ingresso il Ton rimane costante a 6 uS, ciò che varia è solo B, ed è quest'ultimo che io devo di volta in volta cronometrare.

Per quanto riguarda gli interrupt, io non ho molto capito cosa mi avesse consigliato ecotan in merito.
Se il consiglio fosse stato quello di scatenare un interrupt ad ogni Tlow dell'onda, io ho ribattuto che mi ritroverei con un'enorme quantità di richiami della procedura di interrupt, che sarebbero difficilmente gestibili, preferisco quindi escluderli totalmente e lavorare in polling.

La mia domanda in definitiva si riduce a: quale potrebbe essere la migliore tecnica software per fare in modo che il timer cominci a contare non appena comincia il tlow?

Grazie

Re: Riconoscimento del positive-edge-triggered

MessaggioInviato: 11 ago 2015, 14:16
da EcoTan
Alcuni moduli di input capture consentono di lanciare l'interrupt ogni 4 capture event, mentre le letture del timer avvengono ad ogni capture event e vengono accumulate in un buffer FIFO che poi viene svuotato tutto dalla ISR. In questo modo si riduce il carico di elaborazione; visto che hanno dedicato tante risorse a questo problema ciò secondo me indica che la strada da seguire è comunque quella.
Per cronometrare la sola semionda Off, direi che alla ISR basta leggere il pin per sapere in quale semionda si trova, anche se non lo trovo un metodo estremamente semplice ed affidabile..
PS il polling è bello però puoi farlo soltanto in un punto del programma