Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Pulsmessung Kategorie: Programmierung C (von Josef - 8.08.2009 23:05)
Ich nutze:
C-Control Pro Mega128
Hallo,
bin ein neuling bei der ccontrol pro,

habe nach dem Puls und Periodenmessdemoprogramm einen UTI Baustein am den IC von Timer3  gehängt.
es hat nicht funktioniert.
Habe zum Testen wieder Timer1 Frequenzgenerator und Timer3 Pulsmssung zusammengehängt und einige
Teile vom UTI Programm belassen.

// Dieses Demo Programm ist nur für Mega128
#ifdef MEGA32
#pragma Error " Timer3 nur für Mega128 "
#endif

// Deklaration der Formatierungsvariablen
#define SPACE 0x20
#define CR 13
#define PORT_UTI 2                // Port C
#define PORTDIR_UTI 0x07          // UTI1=PortC.0, UTI2=PortC.1, UTI3=PortC.2

int n, m;
word PM_Wert, T_OFF1, T_OFF2, T_REF, T_X0, T_X1, T_X2;     // globale Variablen
char str[20];

//------------------------------------------------------------------------------
// Messung
//
void Timer3_ISR(void)
{
    PM_Wert=Timer_T3GetPM();                    // Messwert auslesen
    n++;
    Irq_GetCount(INT_TIM3CAPT);                 // Interrupt zurücksetzen
}

//------------------------------------------------------------------------------
// Hauptprogramm
//
void main(void)
{
    n=0; m=0; PM_Wert=0;
    Irq_SetVect(INT_TIM3CAPT,Timer3_ISR);// Interrupt Service Routine definieren

    Timer_T1PWM(256,72,PS_1024);            // Pulsgenerator
                                            // Puls=69,4 µs*72= 5 ms
                                            // Periode=69,4 µs*256= 17,7ms
    Port_DataDir(PORT_UTI,PORTDIR_UTI);
    Timer_T3PM(0,PS_64);              // Pulsmessung initialisieren und starten
    Port_Write(PORT_UTI,0x01);
    // die Messung beginnt hier
    // Timer Output verbinden mit ICP (input capture pin) Timer1
    while (1)
    {
    label1:
      switch(n)
      {
          case 1:
              T_OFF1=PM_Wert;
          break;
          case 2:
              T_OFF2=PM_Wert;
          break;
          case 3:
              T_REF=PM_Wert;
          break;
          case 4:
              T_X0=PM_Wert;
          break;
          case 5:
              T_X1=PM_Wert;
          break;
          case 6:
              T_X2=PM_Wert;
          break;
      }
      Msg_WriteText("TOFF1");
      Msg_WriteWord(T_OFF1);
      Msg_WriteChar(SPACE);
      Msg_WriteText("PM");
      Msg_WriteWord(PM_Wert);                 // Wert ausgeben
      Msg_WriteChar(SPACE);
      Msg_WriteInt(n);
      if (n!=6) goto label1;                                                  // fürs testen
      Msg_WriteWord(PM_Wert);                 // Wert ausgeben
      Msg_WriteChar(SPACE);
      Msg_WriteInt(m);
      Msg_WriteChar(SPACE);
      Msg_WriteInt(n);
      Msg_WriteChar(SPACE);
      Msg_WriteWord(T_OFF1);
      Msg_WriteChar(SPACE);
      Msg_WriteWord(T_OFF2);
      Msg_WriteChar(SPACE);
      Msg_WriteWord(T_REF);
      Msg_WriteChar(SPACE);
      Msg_WriteWord(T_X0);
      Msg_WriteChar(SPACE);
      Msg_WriteWord(T_X1);
      Msg_WriteChar(SPACE);
      Msg_WriteWord(T_X2);
      Msg_WriteChar(SPACE);
      Msg_WriteChar(CR);

      AbsDelay(500);                          // Delay 500ms
      n=0;
    }
}


hier nun die Ausgabe:
Interpreter gestartet - 4kb RAM                                                                                        
TOFF10 PM0 0PM0 0TOFF10 PM0 0TOFF10 PM0 0TOFF10 PM0 0TOFF10 PM0 1TOFF10 PM0 1TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152
 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152
 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152
 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152
 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152
 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152
 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152
 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152
 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152
 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152
 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152
 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152
 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152
 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152
 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10 PM1152 2TOFF10

Anscheinend kommt das Programm nur 2mal in die interruptoutine und die Werte werden an T_OFF1
auch nicht übergeben.
Habe die caseabfrage auch in der interruptroutine gehabt, hat auch nicht gfunkt.
wenn berechnungen eingebaut werden z. B.: PM_WERT=PM_Wert*4.64 kommt null raus.

Vielleicht kann mir jemand weiterhelfen?

Gruß
Josef


    Antwort schreiben


Antworten:

Re: Pulsmessung (von Josef - 9.08.2009 11:46)
    Re: Pulsmessung (von PeterS - 15.08.2009 21:51)
        Re: Pulsmessung (von Josef - 17.08.2009 19:09)
            Re: Pulsmessung (von ER - 20.08.2009 13:44)
                Re: Pulsmessung (von PeterS - 20.08.2009 14:52)
                    Re: Pulsmessung (von Josef - 21.08.2009 10:37)