Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Riconoscimento del positive-edge-triggered

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] Riconoscimento del positive-edge-triggered

Messaggioda Foto Utenteharpefalcata » 10 ago 2015, 14:20

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.
Avatar utente
Foto Utenteharpefalcata
326 1 3 6
Stabilizzato
Stabilizzato
 
Messaggi: 422
Iscritto il: 28 lug 2015, 21:03

1
voti

[2] Re: Riconoscimento del positive-edge-triggered

Messaggioda Foto Utenteobiuan » 10 ago 2015, 15:29

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"?
_______________________________________________________
Gli oscillatori non oscillano mai, gli amplificatori invece sempre

Io HO i poteri della supermucca, e ne vado fiero!
Avatar utente
Foto Utenteobiuan
5.894 3 10 13
Master
Master
 
Messaggi: 980
Iscritto il: 23 set 2013, 23:45

0
voti

[3] Re: Riconoscimento del positive-edge-triggered

Messaggioda Foto UtenteWALTERmwp » 10 ago 2015, 15:41

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
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
30,2k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 8986
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

2
voti

[4] Re: Riconoscimento del positive-edge-triggered

Messaggioda Foto Utenteboiler » 10 ago 2015, 15:45

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
Avatar utente
Foto Utenteboiler
26,4k 5 9 13
G.Master EY
G.Master EY
 
Messaggi: 5600
Iscritto il: 9 nov 2011, 12:27

0
voti

[5] Re: Riconoscimento del positive-edge-triggered

Messaggioda Foto UtenteWALTERmwp » 10 ago 2015, 15:50

Probabilmente si riferisce semplicemente al fronte di salita, o di discesa, di un segnale in ingresso a un micro.

Saluti
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
30,2k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 8986
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

0
voti

[6] Re: Riconoscimento del positive-edge-triggered

Messaggioda Foto UtenteEcoTan » 10 ago 2015, 16:32

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.
Avatar utente
Foto UtenteEcoTan
7.720 4 12 13
Expert EY
Expert EY
 
Messaggi: 5421
Iscritto il: 29 gen 2014, 8:54

0
voti

[7] Re: Riconoscimento del positive-edge-triggered

Messaggioda Foto Utenteharpefalcata » 11 ago 2015, 13:48

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.
Ultima modifica di Foto UtenteWALTERmwp il 11 ago 2015, 20:40, modificato 1 volta in totale.
Motivazione: Riduzione citazione e nota relativa
Avatar utente
Foto Utenteharpefalcata
326 1 3 6
Stabilizzato
Stabilizzato
 
Messaggi: 422
Iscritto il: 28 lug 2015, 21:03

0
voti

[8] Re: Riconoscimento del positive-edge-triggered

Messaggioda Foto UtenteWALTERmwp » 11 ago 2015, 14:09

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
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
30,2k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 8986
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

0
voti

[9] Re: Riconoscimento del positive-edge-triggered

Messaggioda Foto Utenteharpefalcata » 11 ago 2015, 14:15

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
Ultima modifica di Foto UtenteWALTERmwp il 11 ago 2015, 20:38, modificato 1 volta in totale.
Motivazione: Riduzione citazione e nota relativa
Avatar utente
Foto Utenteharpefalcata
326 1 3 6
Stabilizzato
Stabilizzato
 
Messaggi: 422
Iscritto il: 28 lug 2015, 21:03

0
voti

[10] Re: Riconoscimento del positive-edge-triggered

Messaggioda Foto UtenteEcoTan » 11 ago 2015, 14:16

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
Avatar utente
Foto UtenteEcoTan
7.720 4 12 13
Expert EY
Expert EY
 
Messaggi: 5421
Iscritto il: 29 gen 2014, 8:54

Prossimo

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 22 ospiti