Go Down

Topic: CTC - Timer 2 - TCCR2A - gezielter Reset notwendig - Warum? (Read 419 times) previous topic - next topic

combie

Ich sehe gerade, hier bist du mit deinem Problem voll abgeblitzt.

Habe ich auch Verständnis für.
Denn es ist ganz offensichtlich kein Problem der IDE.
Noch nicht mal der Tool Chain. (der erzeugte asm Code ist korrekt)

Wenn es das Problem überhaupt gibt, dann steckt es im µC selber.
In der Hardware.
Und da können wir alle nichts dran machen.

Merke:
> Wir können den Wind nicht ändern,
> aber die Segel anders setzen.
Schreie nach Besserem, bis du es auch erhältst.
Das noch Bessere verabschiedet sich rechtzeitig vor deinem Lärm.

Quelle: Martin Gerhard Reisenberg


Doc_Arduino

Hallo,

mit Schadenfreude kann bei mir niemand Punkte sammeln.

Den Link werde ich mir anschauen. Danke. Ich forsche weiter ... ob es nur das eine Register betrifft oder nur Timer 2 ...

Tschau
Doc Arduino '\0'

Messschieber auslesen: http://forum.arduino.cc/index.php?topic=273445
EA-DOGM Display - Demos: http://forum.arduino.cc/index.php?topic=378279

combie

Quote
mit Schadenfreude kann bei mir niemand Punkte sammeln.
Die Schadenfreude existiert nur in deinem Kopf!

Merksatz:
> Ich bin verantwortlich, für das, was ich sage.
> Nicht für das, was du empfindest.
Schreie nach Besserem, bis du es auch erhältst.
Das noch Bessere verabschiedet sich rechtzeitig vor deinem Lärm.

Quelle: Martin Gerhard Reisenberg

Doc_Arduino

Am Ende sind immer die anderen schuld die alles falsch verstehen. Ja ne is klar.

Tschau
Doc Arduino '\0'

Messschieber auslesen: http://forum.arduino.cc/index.php?topic=273445
EA-DOGM Display - Demos: http://forum.arduino.cc/index.php?topic=378279

combie

Wer Schuld sucht, wird welche finden.
Auch gerne bei anderen!
Schreie nach Besserem, bis du es auch erhältst.
Das noch Bessere verabschiedet sich rechtzeitig vor deinem Lärm.

Quelle: Martin Gerhard Reisenberg

combie

Quote
Jedoch gibt es offensichtlich einen nicht logisch erklärbaren Abhängigkeitseffekt.
Bin eben auf ein ähnliches Problem gestoßen ...
Und bei der Fehlersuche, bin ich auch näher an dieses, dein Timerproblem heran gekommen.



Leider ist meine jetzige Ansage auch nur eine Hypothese.
Denn die Innereien des AVR Timers sind geheim.
Wir haben nur das Datenblatt.


Grundsätzlich, kann man den Timer als endlichen Automaten betrachten.
Eben nicht in Software, sondern in Hardware gegossen.

Und genau diesen Automaten bringst du in einen ungültigen Zustand, aus dem er sich mehr befreien kann.


Also meine Erkenntnis:
Das Problem besteht aus einer Kombination von 2 Gegebenheiten!

Erstens:
Der Timer befindet sich in Mode 1

Zweitens:
Es wird OCR2A = 249 gesetzt und sofort darauf der Timer in Mode 2 versetzt.


Das crashed.


Warum kommt der Automat dabei aus dem Tritt?

Im Mode 1 wirkt  OCR2A = 249 nicht auf dem Register direkt ausgeführt, sondern der Wert wird erst in ein Schattenregister geschrieben und beim Timer Überlauf dann ins Vergleichsregister.

OCR2A = 249 ist also nur ein Auftrag, der zur späteren Ausführung im Timer hinterlegt wird.


Im Mode 2 gibt es dieses Schattenregister nicht.

Erfolgt die Umschaltung von Mode 1 zu Mode 2 zu schnell, kann der Auftrag nicht ausgeführt werden, und der Timer bleibt hängen, der ganze AVR bleibt stehen.

Abhilfe 1:
Erst den Mode einstellen, und dann OCR2A setzen.

Abhilfe 2: (zum testen)
Nach OCR2A = 249 ein delay() einfügen, so dass der endliche Automat im Timer, die Chance bekommt den Auftrag auszuführen.

Es ist also der klemmende Auftrag, welcher den Timer/AVR ermordet.
Ich behaupte, das betrifft alle AVR mit diesem Schattenregister.


-----
Reicht dir das als Erklärung?




Schreie nach Besserem, bis du es auch erhältst.
Das noch Bessere verabschiedet sich rechtzeitig vor deinem Lärm.

Quelle: Martin Gerhard Reisenberg

Doc_Arduino

Hallo,

deine Forschungsergebnisse decken sich mit denen von avrfreaks. Das reicht mir als Erklärung. Vielen Dank für deine Mühen. Wenn man das Problem verstanden hat kann man (ich) damit besser umgehen.
Tschau
Doc Arduino '\0'

Messschieber auslesen: http://forum.arduino.cc/index.php?topic=273445
EA-DOGM Display - Demos: http://forum.arduino.cc/index.php?topic=378279

Go Up