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

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

Messaggioda Foto UtenteWALTERmwp » 11 ago 2015, 17:19

harpefalcata ha scritto: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?
la mia risposta, mia opinione, consiste nel suggerire l'utilizzo dell'irq per il rilevamento della variazione dello stato dell'ingresso del pin.

Configuri un pin della porta B per rilevare la variazione tramite interrupt.
Quando si verifica (la variazione) si scatena l'interrupt quindi, nella isr, interroghi lo stato del pin e se corrisponde a 0 esegui un reset del timer (scegli tu quale) per farlo immediatamente ripartire, mentre se corrisponde a 1 fermi il timer, ne copi il valore che corrisponde(rappresenta) al tempo durante il quale il segnale è rimasto basso (low).

Riscrivo che altre soluzioni, nell'ottica dell'economia della gestione delle risorse e dei tempi di elaborazione, risulterebbero essere più dispendiose e meno precise quale appunto sarebbe un monitoraggio (polling) del segnale inserito nel flusso del programma.

Potresti anche provare con il modulo CCP1(2), predisposto in "capture mode", ma credo si dovrebbe modificare la configurazione in run-time quindi preferibile la gestione diretta dell'evento.

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

4
voti

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

Messaggioda Foto Utenteobiuan » 12 ago 2015, 13:17

In alcuni micri degni di tale nome (per esempio, l'MSP430 della TI) si può programmare il timer per partire su un edge di un pin (programmabile) e fermarsi sull'altro scatenando una IRQ, e nella ISR ti trovi ovviamente il conteggio già bell'e fatto nel registro TAR. Se nei PIC così non è, questo non fa altro che rafforzare quanto dico da tempo: non usate i PIC :)

in ogni caso, il polling fra tutti è proprio il sistema più dispendioso, e soprattutto pianta l'elaborazione all'interno di un loop. Quale sia nel tuo caso la soluzione migliore, però, dipende da alcuni fattori:

- a che frequenza gira il PIC?
- il Tlow che valori min e max possono assumere?
- che precisione di misura ti serve?
_______________________________________________________
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

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

Messaggioda Foto UtenteGionatan » 13 ago 2015, 12:36

Mi sembra di capire che non è necessario misurare tutti i Tlow anche perché non ci sarebbe il tempo di fare gli altri task.
A mio parere una procedura 'parzialmente' precisa (solo per gli impulsi misurati) è la seguente:
1) predisporre una routine di interrupt che a secondo dello stato del timer (avviato o fermo) avvii o blocchi il cronometraggio. Se il cronometraggio è stato bloccato la routine deve disabilitare l'interrupt.
2)predisporre l'interrupt sul pin dov'è posto il segnale da cronometrare (il fronte può essere di salita o di discesa non cambia nulla!)
3) Quando si dovrà misurare il tlow è necessario solamente abilitare l'interrupt al pin preposto ed attendere in polling che l'interrupt sia stato disabilitato dalla stessa routine di interrupt. Il valore del timer detratto del valore corrispondente a 6 us (costanti del Thigh) restituirà il valore del Tlow.
4) procedere con tutti gli altri task e riprendere dal punto 3 per una nuova misurazione.

Pur tuttavia è possibile misurare tutti i Tlow semplicemente dedicando un paio di variabili per farne la media all'interno della stessa routine di interrupt e riportando così una media dei valori misurati anzichè il valore singolo. Poi tutto dipende dall'applicazione a cui è destinato l'apparecchiatura.
Avatar utente
Foto UtenteGionatan
5 1
 
Messaggi: 3
Iscritto il: 12 mag 2015, 16:26

Precedente

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 8 ospiti