Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Analizzare 2 segnali ad onda quadra

Tipologie, strumenti di sviluppo, hardware e progetti

Moderatore: Foto UtentePaolino

0
voti

[1] Analizzare 2 segnali ad onda quadra

Messaggioda Foto Utentebobina » 16 apr 2010, 22:44

Vorrei analizzare 2 segnali TTL (0 - 5V) ad onda quadra che hanno una frequenza variabile tra 20 e 400 Hz. Secondo voi qual è il miglior modo di acquisire i segnali? Io vorrei cronometrare un intero periodo di salita e discesa dei 2 segnali e poi fare dei confronti.
E' meglio usare gli interrupt PortB On Change oppure fare un polling sui 2 pin che ricevono il segnale?
Ho letto che durante l'esecuzione di un interrupt è meglio disabilitare tutti gli interrupt. se mentre sto facendo quel poco che devo fare durante un interrupt arriva l'altro c'è il rischio che lo perdo? Oppure nel momento che lo riabilito arriva ugualmente?
In pratica quello che farei nell'interrupt è un semplice start e azzeramento di uno dei 2 timer oppure lo stop e imposto un flag per fare il confronto.

Grazie per i consigli
Avatar utente
Foto Utentebobina
212 6
Frequentatore
Frequentatore
 
Messaggi: 177
Iscritto il: 27 dic 2009, 14:22

0
voti

[2] Re: Analizzare 2 segnali ad onda quadra

Messaggioda Foto UtentePaolino » 17 apr 2010, 7:20

Con frequenze così basse (ma anche molto più alte, se scegli bene la frequenza dell'oscillatore) puoi utilizzare il modulo CCP dei PIC configurato in modalità CAPTURE. Sai come funziona? Hai un'idea di come impostare i timer?
Ti consiglio di leggere questa guida, almeno per le parti che riguardano il modulo CCP, i timer e gli interrupt.
Hai già deciso che PIC utilizzare?

Ciao.

Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

-------------------------------------------------------------

PIC Experience - http://www.picexperience.it
Avatar utente
Foto UtentePaolino
32,5k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 4220
Iscritto il: 20 gen 2006, 11:42
Località: Vigevano (PV)

0
voti

[3] Re: Analizzare 2 segnali ad onda quadra

Messaggioda Foto Utentebobina » 17 apr 2010, 10:18

Grazie Paolo per la tua risposta, ho sempre visto questo modulo nei PIC che ho usato ma non ho mai capito bene a cosa serve o meglio come usarlo e come può tornare utile. Sul PIC da usare ero in dubbio tra un 16F628 ed un 18F2550 quest'ultimo solo per l'eventualità di metterci un interfaccia USB. Il 18F anche perché mi piace sviluppare in C ed il C18 è gratuito senza ottimizzazioni e non mi ha mai dato problemi.
Mi sono letto il pdf che mi hai indicato, in pratica usando un 18F ho 2 moduli capture collego ogni segnale ad un modulo ed avvio i 2 moduli ed ogni evento di "rising edge" posso leggere il valore del timer.
Comincio a fare un po' di esperimenti.....
Avatar utente
Foto Utentebobina
212 6
Frequentatore
Frequentatore
 
Messaggi: 177
Iscritto il: 27 dic 2009, 14:22

0
voti

[4] Re: Analizzare 2 segnali ad onda quadra

Messaggioda Foto Utentebobina » 17 apr 2010, 10:57

In pratica il valore del timer1 viene copiato all'interno dei registri del capture sia per CCP1 che per CCP2 quindi il timer1 non posso azzerarlo, e quindi fare delle operazioni diventa più difficile perché devo anche guardare il valore iniziale per confrontare i 2 tempi. E' corretto?
Avatar utente
Foto Utentebobina
212 6
Frequentatore
Frequentatore
 
Messaggi: 177
Iscritto il: 27 dic 2009, 14:22

0
voti

[5] Re: Analizzare 2 segnali ad onda quadra

Messaggioda Foto Utentebobina » 17 apr 2010, 13:11

In realtà posso usare il Timer3 per il CCP2 ed il timer1 per il CCP1.
Avatar utente
Foto Utentebobina
212 6
Frequentatore
Frequentatore
 
Messaggi: 177
Iscritto il: 27 dic 2009, 14:22

0
voti

[6] Re: Analizzare 2 segnali ad onda quadra

Messaggioda Foto UtentePaolino » 17 apr 2010, 15:14

Il PIC18F2550 ha due moduli CCP e per ciascuno di essi devi usare un timer differente. Direi che l'approccio alla soluzione lo hai capito.
Credo che il lavoro che hai in mente tu lo si possa fare solo con un PIC18. Non mi sembra che i PIC16 (anche quelli con 2 canali CCP) permettano di utilizzare due timer differenti per CCP1 e CCP2.
Se hai bisogno ulteriori info, chiedi.

CIao.

Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

-------------------------------------------------------------

PIC Experience - http://www.picexperience.it
Avatar utente
Foto UtentePaolino
32,5k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 4220
Iscritto il: 20 gen 2006, 11:42
Località: Vigevano (PV)

0
voti

[7] Re: Analizzare 2 segnali ad onda quadra

Messaggioda Foto Utentebobina » 17 apr 2010, 16:49

Un dubbio è: qual è il vantaggio di usare questo modulo hardware invece che implementare la soluzione software con interrupt o polling, oltre il fatto di risparmiare quei pochi byte o meglio bit che verrebero usati per i flag e byte nella flash?
Avatar utente
Foto Utentebobina
212 6
Frequentatore
Frequentatore
 
Messaggi: 177
Iscritto il: 27 dic 2009, 14:22

0
voti

[8] Re: Analizzare 2 segnali ad onda quadra

Messaggioda Foto UtentePaolino » 17 apr 2010, 18:18

Con il modulo CCP hai il vantaggio che puoi scatenare interrupt ogni fronte (di salita o di discesa, a scelta e sempre programmabile) oppure ogni 4 o 16 fronti di salita. Inoltre, ti risparmi una serie di trasferimenti, via firmware, del contenuto dei registri dei timer. Direi che il modulo è studiato appositamente anche per questo genere di applicazioni.
Ciao.

Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

-------------------------------------------------------------

PIC Experience - http://www.picexperience.it
Avatar utente
Foto UtentePaolino
32,5k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 4220
Iscritto il: 20 gen 2006, 11:42
Località: Vigevano (PV)

0
voti

[9] Re: Analizzare 2 segnali ad onda quadra

Messaggioda Foto UtenteAtreyu » 13 mag 2010, 16:52

Ciao a tutti! Sono nuovo delle programmazione PIC e sto cercando di imparare ad usarli. Quello che sto cercando di fare è di calcolare il periodo di un onda quadra generata da un sensore che lavora da pochi Hz fino a 200 Hz circa. Io uso un PIC 18f452 a 20Mhz con un RTC esterno e il timer 1 lo uso già per fare altro, quindi sono costretto ad usare il timer 3 e CCP2 in modalità Capture. Da quello che ho capito dalla vostra discussione ho realizzato il seguente codice con scarsi risultati però.
Codice: Seleziona tutto
void interrupt(void)
{
   
  if(PIR2.TMR3IF)
  {
    T3CON.TMR3ON = 0;
     TMR3H = TMR3L = 0;
     frequenza0 = ccp = 0;
     ctimer = 0;
     T3CON.TMR3ON = 1;
     PIR2.TMR3IF = 0;
  }
  if(PIR2.CCP2IF == 1)
  {
    PIR2.CCP2IF = 0;
    ctimer++;
    if(ctimer == 2)
    {
      ccp = (CCPR2H<<8)+CCPR2L;
      ccp = ccp - frequenza0;
      //ccp = 1/ccp;
      CCPR2H = CCPR2L = 0;
      ctimer = 0;
    }
    else{
      frequenza0 = (CCPR2H<<8)+CCPR2L;
      CCPR2H = CCPR2L = 0;
    }
  }
 
  if(INTCON.INT0IF)
  {
          Seconds += 1;
     lcdoff += 1; //Contatore secondi per lo spegnimento display
     frequenza1 = (TMR1H<<8)+TMR1L;    //leggo il valore a 16bit del timer1
     T1CON.TMR1ON = 0;
     TMR1H = TMR1L = 0;
     T1CON.TMR1ON = 1;
          INTCON.INT0IF = 0; // Clear interrupt flag.
  }
}

void Timer3_Enable(void)
{
  T3CON.RD16 = 1; // 16 bit
  T3CON.T3CCP2 = 0; // Collegato alla porta CCP2
  //T3CON.T3CCP1 = 1;
  T3CON.T3CKPS1 = 1; // Prescaler a 1:8
  T3CON.T3CKPS0 = 1;
  //T3CON.T3SYNC = 1;
  T3CON.TMR3CS = 0;
  T3CON.TMR3ON = 1;
  PIR2.TMR3IF = 0;
  PIE2.TMR3IE = 1;
}

void Capture_Mode(void)
{
  CCP2CON.DC2B1 = 0;
  CCP2CON.DC2B0 = 0;
  CCP2CON.CCP2M3 = 0;
  CCP2CON.CCP2M2 = 1;
  CCP2CON.CCP2M1 = 0;
  CCP2CON.CCP2M0 = 1;
  PIR2.CCP2IF = 0;
  PIE2.CCP2IE = 1;
}
void Interrupt_Enable(void)
{
   Seconds = 0;
   INTCON.PEIE = 1;
   INTCON.GIE = 1;
   INTCON.INT0IF = 0;
   INTCON.INT0IE = 1;
}

void main()
{
   ADCON1 = 0;
   TRISA = 0xff;
   TRISB = 0xff;
   //PORTA = 0x00;
  //PORTC = 0x00;
  TRISC = 0x03;
  Interrupt_Enable();
  Timer1_Enable();
  Timer3_Enable();
  Capture_Mode();
  while(1){
   Display_Inputs();
   Delay_ms(100);
  }
}


In questo modo non riesco a conteggiare niente eppure mi sembra di aver configurato la modalità Capture correttamente. Vi ringrazio in anticipo per le risposte.
Avatar utente
Foto UtenteAtreyu
0 1
 
Messaggi: 2
Iscritto il: 13 mag 2010, 16:07

0
voti

[10] Re: Analizzare 2 segnali ad onda quadra

Messaggioda Foto Utentebobina » 14 mag 2010, 22:58

Un problema che ho visto è nella funzione Timer3_Enable per i bit 6 e 3 T3CCP2:T3CCP1 devono essere impostati a 0 e 1 mentre T3CCP1 è commentato, immagino che tu abbia già fatto un simile test.
Un altro dubbio a quale CCP2 hai collegato il tuo segnale? Come è impostato il flag di configurazione CCP2MX?
Avatar utente
Foto Utentebobina
212 6
Frequentatore
Frequentatore
 
Messaggi: 177
Iscritto il: 27 dic 2009, 14:22

Prossimo

Torna a Realizzazioni, interfacciamento e nozioni generali.

Chi c’è in linea

Visitano il forum: Nessuno e 6 ospiti