Zitat:
Im CTC-Modus ...
Lediglich der Compare-Match-Interrupt den OCR0A auslöst, findet gleichzeitig mit dem Overflow-Interrupt statt.
Nein, die Interrupts finden nicht gleichzeitig statt. Der Overflow-Interrupt passiert weiterhin beim Erreichen von MAX (nicht TOP). Da MAX im CTC-Modus ja aber gar nicht erreicht wird, gibt es auch keinen Overflow-Interrupt.
Zitat:
Der zweite PWM-Modus ist der Phase Correct Modus, ...
(einen Overflow Interrupt kann es also nicht geben)
Doch gibt es, und zwar immer dann, wenn er wieder bei 0 angekommen ist.
Die Spalte "TOV Flag Set on" in Tabelle 40 sagt dir, wann jeweils ein Overflow-Interrupt ausgelöst wird.
Zitat:
Frage1: Wenn man den CTC-Modus benutzt, wird der TOP-Wert laut Datenblatt in OCR0A
erwartet. Heißt das, dass man nur noch OCR0B frei setzten kann?
Du kannst schon beide frei setzen und es wird auch bei beiden ein Compare-Match ausgelöst, nur dass halt OCR0A zusätzlich als TOP fungiert. Du kannst so den TOP-Wert bei laufenden Timer ändern.
Zitat:
Frage2: Im Datenblatt auf Seite 75 steht in der Tabelle zum Phase Correct PWM Mode, dass
einmal ORC0B ge-cleart wird, dann dass OCR0B gesetzt wird, überall wird von OCR0B geredet
dabei macht das doch gar keinen Sinn, weil es hier doch um den Port OC0B geht.
Haben die (perfekten:wink: Atmel-Leute hier etwa einen Fehler reingebaut und überall ein R
reingeschrieben, wo es nicht hin gehört?
In der Tabelle für OC0A steht das nämlich alles ohne R da.
Glückwunsch, du hast gerade festgestellt, dass auch die Atmel-Leute nur Menschen sind. ;-)
Dir werden im Laufe der Zeit noch mehr Fehler auffallen.
Zitat:
Frage3: In Tabelle 40 auf Seite 75 des Datenblattes gibt es eine Spalte "Update of OCRx at"
Warum wird OCRx ge-updatet und nicht der zugehörige Port OCx. Ich dachte die OCR0A/OCR0B
Werte verändert nur der User, wie er sie braucht. Und wenn da tatsächlich die Output-Pins
gemeint sind, warum steht dann nicht in jeder Zeile Immediate.
In den Erklärungen zum Timer im Datenblatt hast du entweder einen Abschnitt übersprungen, oder gründlich missverstanden.
Immer wenn du in irgendeines der OCRx-Register schreibst, landet der Wert nicht wirklich in dem Register, sondern wird in einem versteckten namenlosen Register "zwischengelagert". Erst wenn der Timer einen bestimmten Wert erreicht, wird der Inhalt aus dem Zwischenregister in das eigentliche Register geschrieben. Die Spalte in der Tabelle gibt an, wann das bei welchem Timer-Mode passiert.