Home
Accesso / Registrazione
 di 

Modulo CCP PicMicro

Nessuna risposta
ritratto di Manuel.Rolfo
Offline
Ultima visita:
13 settimane 3 giorni fa
Utente dal: 08/04/2014
Messaggi: 1

Buongiorno!

Volevo sviluppare un applicazione con un picMicro che legge un segnale in ingresso e tramite il timer1 calcola la durata del periodo del suddetto segnale.

Premetto che sono nuovo nell'ambito della programmazione dei Pic ma anche solo affidandomi ad internet per imparare ho già ottenuto buoni risultati.

Personalmente programmo in C perchè ho ricevuto un'infarinatura al riguardo alle superiori e quindi mi risulta molto più facile ragiorare e scrivere le varie istruzioni. 

Come software di sviluppo utilizzo MPLAB nella versione Lite utilizzando il plug-in (se così si può chiamare) Hitec C Compiler per poter scrivere in linguaggio C.

Veniamo al dunque. Ho letto su un tutorial (sempre su internet) che utilizzando il modulo CCP in modalità Capture e settando opportunamente il registro CCPxCON, (nel mio caso CCP1CON) il registro del timer1 TMR1CON, e il registro per gli interrupt INTCON e ovviamente i registri TRIS, sarei in grado di memorizzare il valore di Timer1 (impostato come contatore asincrono) ogni volta che avviene un fronte di salita (scelto in CCPCON) su un determinato pin. 

{Io uso il Pic 16f877}

Ho inoltre imparato che avendo il valore di timer1 relativo a 2 fronti di salita, posso fare una semplice sottrazione per ottenere la lunghezza del periodo. a livello teorico tutto fila!

Ma il mio problema è questo: il valore del timer1 al momento del fronte di salita, viene memorizzato nei registri CCPR1H e CCPR1L per ottenere un numero ben definito, ditemi se sbaglio: definisco una variabile, magari float per esempio, e "dico" al pic di sommare i 2 registri per ottenere un numero. variabile=CCPR1H+CCPR1L;

Così potrebbe funzionare, ma come posso fare per dividere i vari valori di timer1, le varie catture? Mi spiego meglio: se devo poi fare la differenza tra 2 valori di timer1, come faccio a distinguerli? Nel momento in cui scrivo di fare la sottrazione, definendo il valore di timer1 come ho scritto sopra, cioè contenendolo in una variabile quando arriva un secondo valore di timer1 mi sovrascrive quello precedente e non posso operare la sottrazione.

Giunto a questo ostacolo non so come risolvere il problema, quindi mi affido a Voi che a differenza mia avete la giusta quantità di esperienza. 

ringrazio anticipatamente e mi scuso per la spiegazione che in alcuni punti potrebbe aver perso un po di gergo tecnico! :)

 

 

 

Login   
 Twitter Facebook LinkedIn Youtube Google RSS

Ultimi Commenti