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.
Riconoscimento del positive-edge-triggered
Moderatore:
Paolino
13 messaggi
• Pagina 1 di 2 • 1, 2
1
voti
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!
Gli oscillatori non oscillano mai, gli amplificatori invece sempre
Io HO i poteri della supermucca, e ne vado fiero!
0
voti
Ciao
harpefalcata e benvenuto su EY, comunque ... qui, in questa sezione, "Notizie, annunci, ricerche, presentazioni" ...
Sarebbe utile anche sapere quale microcontrollore impiegheresti.
Saluti
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.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.
Sarebbe utile anche sapere quale microcontrollore impiegheresti.
Saluti
W - U.H.F.
-

WALTERmwp
30,2k 4 8 13 - G.Master EY

- Messaggi: 8986
- Iscritto il: 17 lug 2010, 18:42
- Località: le 4 del mattino
2
voti
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
0
voti
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.
0
voti
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
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.
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
- nota: non è necessario "citare" tutto il messaggio di riferimento, basta una parte.EcoTan ha scritto:harpefalcata ha scritto:cronometrare il T-low
Ci sono dei pin di ingresso ...
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
WALTERmwp il 11 ago 2015, 20:40, modificato 1 volta in totale.
Motivazione: Riduzione citazione e nota relativa
Motivazione: Riduzione citazione e nota relativa
-

harpefalcata
326 1 3 6 - Stabilizzato

- Messaggi: 422
- Iscritto il: 28 lug 2015, 21:03
0
voti
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
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.
-

WALTERmwp
30,2k 4 8 13 - G.Master EY

- Messaggi: 8986
- Iscritto il: 17 lug 2010, 18:42
- Località: le 4 del mattino
0
voti
- nota: non è necessario "citare" tutto il messaggio di riferimento, basta una parte.WALTERmwp ha scritto:Non mi è ancora ben chiaro quale'è la parte del periodo
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
WALTERmwp il 11 ago 2015, 20:38, modificato 1 volta in totale.
Motivazione: Riduzione citazione e nota relativa
Motivazione: Riduzione citazione e nota relativa
-

harpefalcata
326 1 3 6 - Stabilizzato

- Messaggi: 422
- Iscritto il: 28 lug 2015, 21:03
0
voti
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
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
13 messaggi
• Pagina 1 di 2 • 1, 2
Torna a Firmware e programmazione
Chi c’è in linea
Visitano il forum: Nessuno e 18 ospiti

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)




