PDA

View Full Version : Contare periodo segnale TTL in input


reyalex
19-04-2010, 07:50
Salve.

Sto facendo il progetto di un accordatore per chitarra.

In entrata al pic(e quindi in uscita dal circuito di condizionamento del segnale della chitarra) ho un segnale TTL 0-5V con una frequenza precisa.

Ho bisogno di contare il periodo di un determinato segnale(per poi risalire ala frequenza),abbastanza precisamente,tramite il PIC16F876.


Utilizzando MPLab con linguaggio C++,sapreste dirmi come posso fare??

grazie

das
19-04-2010, 09:54
Salve.

Sto facendo il progetto di un accordatore per chitarra.

In entrata al pic(e quindi in uscita dal circuito di condizionamento del segnale della chitarra) ho un segnale TTL 0-5V con una frequenza precisa.

Ho bisogno di contare il periodo di un determinato segnale(per poi risalire ala frequenza),abbastanza precisamente,tramite il PIC16F876.


Utilizzando MPLab con linguaggio C++,sapreste dirmi come posso fare??

grazie
Usa il modulo Capture, lo imposti sul Rising Edge di RC2, appena scattato l'interrupt azzeri tmr1 ed imposti il Capture module sul Falling Edge. Quando scatta nuovamente l'interrupt vai a leggere il valore di tmr1.
Conoscendo la frequenza del quarzo ed il valore del prescaler ti ricavi la frequenza.
Ovviamente il segnale TTL deve arrivare su RC2.

reyalex
22-04-2010, 10:22
Usa il modulo Capture, lo imposti sul Rising Edge di RC2, appena scattato l'interrupt azzeri tmr1 ed imposti il Capture module sul Falling Edge. Quando scatta nuovamente l'interrupt vai a leggere il valore di tmr1.
Conoscendo la frequenza del quarzo ed il valore del prescaler ti ricavi la frequenza.
Ovviamente il segnale TTL deve arrivare su RC2.

Ma in questo modo ricaverei la frequenza,a me serve il periodo...


Saresti cosi gentile da spiegarmi piu precisamente come devo fare??sono un assoluto principiante e mi sarebbe molto d'aiuto una spiegazione piu dettagliata,proprio sul COME fare

Scusate per il disturbo,vi ringrazio tantissimo

das
22-04-2010, 15:49
Ma in questo modo ricaverei la frequenza,a me serve il periodo...


Saresti cosi gentile da spiegarmi piu precisamente come devo fare??sono un assoluto principiante e mi sarebbe molto d'aiuto una spiegazione piu dettagliata,proprio sul COME fare

Scusate per il disturbo,vi ringrazio tantissimo

Hai anche il periodo. Sai che tmr1 incrementa ogni (1/fosc)*prescaler quindi il periodo sarà tmr1*(1/fosc)*(1/prescaler)
Se tmr1 = 100
fosc=4Mhz
prescxaler = 1/8

Il periodo è : 0,0002 secondi

Non ho tempo di scriverti il programma completo, ma se leggi i datasheet del processore ai capitoli del timer1 e del ccpm dovresti riuscire senza grande difficoltà.