Outpout compare (AVR) neu laden

OP #1757584
Mahlzeit,

ich hab nen ATMega168.
Ich würde gerne wärend des CompareA oder B im normal mode, den 
Comparewert neu laden, also einen anderen.
Ich bin aber der Meinung das daß nicht funktioniert, zmindest hab ich 
das Datenblatt so verstanden.
Hab ich recht? Und wenn ja, hat jemand vielleicht ne Alternative?

Greetz

Herb
Gast #1757596
Hi

>Ich würde gerne wärend des CompareA oder B im normal mode,

Was meinst du mit: 'wärend des CompareA oder B'?

Die Compare-Register kannst du jederzeit neu beschreiben.

MfG Spess
Gast #1757676
Hi

>Also ich mein wärend der ISR von CompareA, einen neuen Wert ins Compare
>Register hineinschreiben. Mit B Genauso.

Was sollte dich daran hindern? Allerdings ist es u.U. günstiger das 
Update im Overflow-Interrupt zu machen.

MfG Spess
#1757677
Im normalen Mode geht das.

Worauf Du vermutlich anspielst, ist, dass das Output Compare Register in 
bestimmten Modes double buffered ist und dort Änderungen nur am Beginn- 
oder Endwert übernommen werden, was Dich auf einen einzigen 
Compare-Interrupt pro Zählerdurchlauf beschränkt.  Aber Du hast ja 
normal mode.
#1757718
Herb B. schrieb:

> Ich habs mir schon gedacht das es ziemlich u.U is aber ne bessere Lösung
> hab ich leider nicht für meine Problematik..

Dann schildere mal deine Problematik.

Denn bei diesem Verfahren gibt es eine Falle:

Wenn der neue Wert größer ist als der alte, dann werden dir ein einem 
Timerdurchlauf 2 Matches generiert.

Das kann egal sein, muss es aber nicht.
(Daher auch der Vorschlag von spess53 sich selbst eine Art double 
buffering mit dem Overflow Interrupt zu bauen)
Gast #1757722
Hi

>Wenn der neue Wert größer ist als der alte, dann werden dir ein einem
>Timerdurchlauf 2 Matches generiert.

Daher mein Tip mit dem Overflow-Interrupt.

MfG Spess
#1757724
Herb B. schrieb:
> Ok ich dachte das geht halt nur wenns double buffered ist. Dann hab ichs
> falsch verstanden :)

wenns nicht double buffered ist, hast du unter umständen das Problem, 
dass der conter schon am comparewert vorbei ist.
dann kommt er erst das nächste mal, wenn er einmal übergelaufen ist.
Das kann bei zeitkritischen Prozessen oder bei langsamlaufenden Timern 
(zb 16bit) Probleme bereiten.
OP #1757841
Die Problematik is halt, wie Peter schon bemerkte das ich 2 Frequenzen 
ausgeben möchte...
Da wollt ich die Compare Werte genau wärend des Compares neu laden.
(Natürlich nur größere Compare Werte) ;)
Da ich ja die Timer Overflow ISR nur für eine der beiden frequenzen 
nutzen kann.

Ich werd eure Tips mal beherzigen. mal sehen was rauskommt ;)

Tnx
Gast #1757864
Hi

>Da ich ja die Timer Overflow ISR nur für eine der beiden frequenzen
>nutzen kann.

Du hast weiter oben von 'normal mode' geschrieben. Das heisst 
eigentlich, das der Timer einfach durchläuft.

MfG Spess

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 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.