Forum: Mikrocontroller und Digitale Elektronik Einfacher Zähler mit dem Timer tiny814 oder tin817


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Max T. (nike_t)


Bewertung
0 lesenswert
nicht lesenswert
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
von Georg M. (g_m)


Bewertung
0 lesenswert
nicht lesenswert
Max T. schrieb:
> TCB0.CNT=0xABCD;

TCB0.CCMP =

von Max T. (nike_t)


Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.