-die Library implementiert Funktionen um Impulszeiten und Periodendauern zu messen.
-es wird ein 16Bit-Timer und ein Interrupt-Eingang dafür benutzt.
Funktionen :
1 2 3 4 5 6 7 | void MK3_INIT_COUNTER(void); // zum initialisieren void MK3_COUNTER_SET(CNT_TYP c_typ, START_TRG c_on, STOP_TRG c_off); // zum setzen void MK3_COUNTER_START(void); // zum starten void MK3_COUNTER_STOP(void); // zum stoppen bool MK3_COUNTER_CHECK(void); // test auf Event CNT_EVENT MK3_COUNTER_READ_EVENT(void); // Event auslesen unsigned int MK3_COUNTER_READ_TIME(void); // Wert auslesen |
Beispiel :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | //----------------------------------------------------------------------------- // Title : bsp_ub050_mk3_counter3 //----------------------------------------------------------------------------- // Funktion : Counter Test3 // Schaltung : myAVR MK3 //----------------------------------------------------------------------------- // Prozessor : ATMega2560 // Takt : 16 MHz // Sprache : C // Date : 16.06.2012 // Version : 1.0 // Autor : UB //----------------------------------------------------------------------------- #define F_CPU 16000000 #include <avr/io.h> #include <ub_mk3_2560/MK3_2560_COUNTER.h> #include <ub_mk3_2560/MK3_2560_LCD.h> #include <UB_MK3_2560/MK3_2560_PWM.h> //----------------------------------------------------------------------------- // Hinweis : // - Quick-Jumper Port-C+A muss gesetzt sein // - Verbindung vom PWM-2 (Port-G, Bit-5) // zum ICP1-Pin (Port-D, Bit-4) muss gemacht werden // - benutzt Counter Funktion um eine // Periodendauer am ICP-1 Pin zu messen // - Frq wird per PWM Nr.2 erzeugt // //----------------------------------------------------------------------------- int main (void) { float a=0.0; float b=123.4; float c=5678.9; unsigned int n=0; MK3_INIT_COUNTER(); // init vom Counter MK3_INIT_LCD(); // Init vom Display MK3_INIT_PWM(PWM_2,PWM_LO); MK3_PWM_SET(PWM_2,128); MK3_LCD_CLEAR(); MK3_LCD_LIGHT(true); MK3_LCD_STRING_AT(0,0,"Counter-Test 3"); MK3_LCD_STRING_AT(0,16,"Messung : ICP-1"); // Counter starten im Mode : Millisekunden // und Periodenmessung an ICP1-Pin MK3_COUNTER_SET(TYP_US_10000,START_NOW,CYCLE_ICP); while (true) { // Daueranzeige vom Ergebnis // Ergebnis muesste ca 250 us sein if(MK3_COUNTER_CHECK()==true) { n=MK3_COUNTER_READ_TIME(); MK3_LCD_UINT_AT(0,40,n); MK3_LCD_STRING_AT(35,40,"us"); } } return 0; } |
Hier die Library zum download :