Forum: Mikrocontroller und Digitale Elektronik ATtiny1614 TCB: Überlauf bei input capture erkennen?


von Anton (antang)


Lesenswert?

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?

von S. L. (sldt)


Lesenswert?

Wenn ich mich recht erinnere, so wurde auch für den ATmega4809 keine 
Lösung bzw. kein 'Trick' gefunden:
Beitrag "TCB von ATmega4809 megaAVR0 Serie"

PS:
Konkret ab:
Beitrag "Re: TCB von ATmega4809 megaAVR0 Serie"

: Bearbeitet durch User
von Anton (antang)


Lesenswert?

Danke! Dann nehme ich einen ATmega4808 oder gleich einen AVR128DB32, 
letzterer erschlägt noch ein paar andere Probleme.

von Wilhelm M. (wimalopaan)


Lesenswert?

Anton schrieb:
> Danke! Dann nehme ich einen ATmega4808 oder gleich einen AVR128DB32,
> letzterer erschlägt noch ein paar andere Probleme.

... oder den 1624, wenn es pinkompatibel sein soll.

von Anton (antang)


Lesenswert?

Stimmt, TCB mit OVF-Event, danke! Habe ich aber (noch) nicht auf Lager.

von S. L. (sldt)


Lesenswert?

> Dann nehme ich einen ATmega4808

?
  Dieser hat doch denselben Mangel.

von Peter D. (peda)


Lesenswert?

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

Da bleibt wohl nur, den alten ATtiny84 zu nehmen, der kann das.

von S. L. (sldt)


Lesenswert?

> 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.

von Peter D. (peda)


Lesenswert?

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.

von S. L. (sldt)


Lesenswert?

Ich würde ja auch sagen, erst eine Weile nachdenken und dann gleich 
richtig machen wäre gescheiter gewesen, aber dann kommt vielleicht 
wieder ein Moderator und nennt mich "großkotzig".

von Anton (antang)


Lesenswert?

S. L. schrieb:
>> Dann nehme ich einen ATmega4808
>
> ?
>   Dieser hat doch denselben Mangel.

Stimmt, danke! Also vorerst AVR128DB32 bis ich ATtiny3224 auf Lager habe 
(ich nehme immer das Modell mit dem größten Speicher).

von Wilhelm M. (wimalopaan)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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.

von Wilhelm M. (wimalopaan)


Lesenswert?

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).

von Veit D. (devil-elec)


Lesenswert?

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
}

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
Noch kein Account? Hier anmelden.