Hallo Liebe Mikrocontroller Freunde, ich möchte einen der Timer (TCA, TCB oder TCD) des tiny814 nutzen um SW Laufzeiten zu messen. Leider bin ich kein Timer Experte und habe ein paar sachen ausprobiert, leider ohne Erfolg. Hier habe ich ein Beispiel mit dem TCB: TCB0.CTRLB = TCB_CNTMODE_TIMEOUT_gc; TCB0.CNT=0xABCD; TCB0.CTRLA = TCB_CLKSEL_CLKDIV1_gc | 0x01; /* CLK_PER (No Prescaling) */ _delay_us(1); uint16_t Count = TCB0.CNT; printf("CNT: %x\n",Count); Mit TCB0.CTRLB habe ich folgende vier Modi ausprobiert: //TCB_CNTMODE_INT_gc = (0x00<<0), /* Periodic Interrupt */ //TCB_CNTMODE_TIMEOUT_gc = (0x01<<0), /* Periodic Timeout */ //TCB_CNTMODE_CAPT_gc = (0x02<<0), /* Input Capture Event */ //TCB_CNTMODE_SINGLE_gc = (0x06<<0), /* Single Shot */ Nach dem Start mit TCB0.CTRLA = TCB_CLKSEL_CLKDIV1_gc | 0x01; lese ich den Tmer Inhalt Count = TCB0.CNT; aus und erhalte immer abcd. Es tut sich also nichts. Eigenlich müsste der Timer doch hoch oder runter zählen nach dem Enable vom CTRLA Register?
:
Verschoben durch Moderator
Georg M. schrieb: > Max T. schrieb: >> TCB0.CNT=0xABCD; > > TCB0.CCMP = Danke für den Hinweis, das hatte ich nicht ausprobiert, da ich nichts vergleichen wollte, nur (SW)start--->(zählen)--->(HW)Stop sonst nichts, kein Interrupt kein compare, kein überlauf ...und dann die Steps anzeigen, habe ich den CCMP register nicht benutzt. Habe es aber gerade ausprobiert. Funktioniert leider nicht. Damit geht's aber: TCB0.CTRLB = TCB_CNTMODE_INT_gc; TCB0.CNT=0; TCB0.CTRLA = TCB_CLKSEL_CLKDIV1_gc | 0x01; // Enable CLK_PER (No Prescaling) _delay_us(8); _cnt = TCB0.CNT; printf("8us = %d counts \n",_cnt); TCB0.CTRLA = 0x00; /* Disable */
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.