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 */ }







Zitieren

Lesezeichen