So wie Besserwessi das schreibt, war das gedacht.

Ein kurzes "Pseudo Beispiel" in "C"


}
Code:
//Variablen definieren
volatile unsiged int ui_wertebuffer[5]  //Das wird mal der Ringpuffer
volatile unsigned char uc_readin=0    //Einlesezeiger
volatile unsigned char uc_readout=0  //Auslesezeiger wird hier als Marker genutzt

//Einlesen der Werte
void einlesen(unsiged int ui_wert)
{
ui_wertebuffer[uc_readin]=ui_wert;   //Aktuellen Wert einlesen
uc_readin++;                                  //Pointer erhöhen
uc_readout++;                               //Wird hier nur als Marker genutzt
if (uc_readin>4){uc_readin=0;}       //Pointer auf 0 zurücksetzen wenn Pufferende erreicht
}
/* Diese Subroutine kann man in die Input Capture Routine einbauen. oder von da aus aufrufen - Ich würd die paar Zeilen direkt in die ICP Interrupt Routine einbauen */

//Auslesen der Werte
unsigned int auslesen(void)
{
unsigned char uc_i=0;                   //Schleifenvariable
unsigned int ui_result=0;               //Ergebnisvariable
unsigned long int ui_math;            //Berechnungsvariable
if(uc_readout>0)
   {
   for(uc_i=0;uc_i<5;uc_i++)        //Eine Schleife, die die 5 Werte ausliest
      {
      ul_math+=ui_wertebuffer[uc_i];  //Die 5 Werte werden addiert
      }
   ul_math/=5;                                  //Das Ergebnis wird durch 5 geteilt
   ui_result=ul_math;                        //Das Endergebnis wird in die unsigned int Variable ui_result übergeben
   }
return(ui_result);              //Das Endergebnis wird an die aufrufende Routine zurück gegeben
uc_readout=0;
/* Man könnte es auch so machen, diese Routine nur dann aufzurufen, wenn uc_readout>0 ist */
}