ATtiny1614 TCB: Überlauf bei input capture erkennen?

OP #7494231

Mir scheint, es ist unmöglich, beim ATtiny1614 (und Verwandten) einen Überlauf von TCB0 bzw. TCB1 in den input capture Modi (bei mir: CNTMODE=FRQ) zu erkennen oder gar zuverlässig zu zählen. Offenbar geht das nur mit den ATmega-TCB. Kennt jemand einen Trick, wie man das mit einem ATtiny schafft?

#7494341

Die neuen ATtiny sind ja völlig verrückt ... TCB hat Captureinterrupt, aber kein Overflow.

Wie von Wilhelm M. geschrieben, hat Microchip offenbar den Mangel erkannt und mit der 'tinyAVR® 2 Family' behoben.

#7494347

S. L. schrieb:

hat Microchip offenbar den Mangel erkannt und mit der 'tinyAVR® 2 Family' behoben.

Irgendwie lernen die es nie. Statt mal gründlicher nachzudenken und alt bewährtes zu übernehmen, werden wieder mal neue Typen am laufenden Band rausgeschleudert. Ich hatte ja kürzlich erst gefragt, was dieser Typenwildwuchs soll und mal die vielen 8kB 14-Pinner betrachtet.

#7494442

S. L. schrieb:

Die neuen ATtiny sind ja völlig verrückt ... TCB hat Captureinterrupt, aber kein Overflow.

Wie von Wilhelm M. geschrieben, hat Microchip offenbar den Mangel erkannt und mit der 'tinyAVR® 2 Family' behoben.

Nicht nur das, sondern man hat damit einen 32bit Timer. Und das ist gut, denn bei einem 8bitter kommt es wesentlich auf die Flexibilität der internen Peripherie an.

#7494656

Peter D. schrieb:

Wilhelm M. schrieb:

Nicht nur das, sondern man hat damit einen 32bit Timer.

Ist dann aber auch ein atomarer Zugriff möglich, d.h. 3 Temp-Register. Ansonsten ist das witzlos und ein Kaskadieren in Software gleichwertig.

Da es ja nur um den Capture-Modus geht, lese ich das DB so, dass tatsächlich hier Kopien der CNT in die CCMP-Register atomar geschieht (zumindest interpretiere ich die Beschreibung des CASCADE-Flags so).

#7494766

Hallo,

genau, die Übernahme des Zählerstandes erfolgt sicher in Hardware und man liest sie nur noch aus. Wenn man bspw. TCB0 und TCB1 kaskadiert hat

1
ISR(TCB0_INT_vect)
2
{
3
  counter.lsb  = TCB0.CCMP;
4
  counter.msb  = TCB1.CCMP;
5
  // counter.finish = true;
6
  TCB0.INTFLAGS = TCB_CAPT_bm;      // clear the interrupt flag
7
}

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 3 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.