Compare auf einen kaskadierten 32bit Counter bei AtXmega

Gast #3519693
Lesenswert?
• ▲
▼
Samuel schrieb:
> Hallo zusammen
>
> Ich habe beim AtXmega zwei einzelne 16bit Counter zu einem 32Bit
> kaskadiert.
>
> Nun möchte ich einen Compare auf einen bestimmten 32Bit wert machen.
>
>
> Hat jemand eine Idee, wie dies am elegantesten geht?
>
> Danke!

uint32_t a;
uint32_t b;

if ( a == b) {
  }
Gast #3519855
Lesenswert?
• ▲
▼
Peter II schrieb:
> Samuel schrieb:
>> Hallo zusammen
>>
>> Ich habe beim AtXmega zwei einzelne 16bit Counter zu einem 32Bit
>> kaskadiert.
>>
>> Nun möchte ich einen Compare auf einen bestimmten 32Bit wert machen.
>>
>>
>> Hat jemand eine Idee, wie dies am elegantesten geht?
>>
>> Danke!
>
> uint32_t a;
> uint32_t b;
>
> if ( a == b) {
>   }

Ich meinte einen Compare Interrupt!

Also es soll einen Interrupt bei einem bestimmten Wert der beiden 
Register auslösen
Gast #3520977
Lesenswert?
• ▲
▼
Na, wie breit sind den die compare Register ?

Das wird nur über Umwege gehen.
Z.B. in jeder IRQ des 'unteren' compares prüfen ob der 'obere' schon 
gekommen ist.

Oder beide Compare Out extern per 'und' Gatter verknüpfen.

Oder der 'obere' Compare IRQ schaltet den 'unteren' Compare IRQ frei.

Oder, oder, oder ...
Gast #3522435
Lesenswert?
• ▲
▼
Effektiv scheint mir nur den langsameren Zähler, ein Compare Interrupts 
zu verpassen, der bloß den schnelleren Timer-Compare-Interrupt 
aktiviert. Dieser Compare deaktiviert sich anschließend wieder selbst.

Funktioniert aber nur, wenn der ISR Aufruf genug Zeit hat, sonst läuft 
der schnellere Zähler drüber und das einschalten kommt zu spät.

Leider gibt es keine Funktion die einen wirklichen Vergleich auswertet. 
Es ist immer nur ein Compare Match. Als CNT == CCX kann nur Aktionen 
auslösen :(

Grüße

Zedd
Gast #3522695
Lesenswert?
• ▲
▼
Zedd schrieb:
> Effektiv scheint mir nur den langsameren Zähler, ein Compare Interrupts
> zu verpassen, der bloß den schnelleren Timer-Compare-Interrupt
> aktiviert. Dieser Compare deaktiviert sich anschließend wieder selbst.
>
> Funktioniert aber nur, wenn der ISR Aufruf genug Zeit hat, sonst läuft
> der schnellere Zähler drüber und das einschalten kommt zu spät.
>
> Leider gibt es keine Funktion die einen wirklichen Vergleich auswertet.
> Es ist immer nur ein Compare Match. Als CNT == CCX kann nur Aktionen
> auslösen :(

Ich habs neet verstanden, aber scheinbar geht ehhh nett.

Warum nutzt du keinen zur Problemstellung passenden Controller?
Gast #3523113
Lesenswert?
• ▲
▼
Also 500.000 soll der compare sein

Langsamer Zähler Compare bei 0x0007, aktiviert CC Interrupt des 
schnelleren Zählers bei 0xA120. Ist dieser gekommen, schaltet sich der 
Interrupt des schnelleren Zählers wieder ab...

Würde man es nicht so machen, dann würde man 2^16 - 1 mal zu oft einen 
Interrupt bei einem 32 Bit Durchlauf aufrufen... wenn das net weiter 
wichtig ist, ist es ja auch okay...

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.