Forum: Mikrocontroller und Digitale Elektronik Timer1 löst aus wenn Timer1 Interrupt "ge"-enabled wird


von Sebastian K. (bastik)


Lesenswert?

Hallo,

schreibe gerade fleißig an meinem Programm.

Dabei ist mir aufgefallen, dass mein Timer1 Interrupt scheinbar auslöst 
wenn ich den Interrupt von Compare 1 A enable? Also ohne das Erreichen 
von dem Compare 1 A Wert gleich am Anfang wenn ich Enabel setze auslöst.

Hat dafür jemand eine erklärung oder ähnlich Erfahrungen?

Danke schon mal!

von Christian P. (christian_paier)


Lesenswert?

Also noch mal zusammenfassen?

Wenn du den Timer 1 COMPA Interrupt aktivierst springt die MCU nicht auf 
den TIMER1_COMPA_Vect sondern auf den TIMER1_OVFL_Vect ????

Ist der Comparewert zu dem zeitpunkt schon richtig geladen?

von STK500-Besitzer (Gast)


Lesenswert?

Ich würde sagen, dass an Zeile 42 in deinem Code liegt. Leider ist meine 
Kristallkugel gerade im Urlaub...

von Sebastian K. (bastik)


Lesenswert?

ja, tut mir leid.

ich versuch es nochmal...:

Also , ehm also folgendes:

1)Zunächst ist mein Timer1 ( ich spreche bei Timer1 immer von dem 
Compare 1A ) auf disable gesetz

2) Jetzt fülle ich das Compare 1A register mit 147456

3) Im nächsten Schritt, etwa 3 Code Zeilen später setze ich Timer1 auf 
enable

4) Und jetzt löst der Timer1 sofort aus, obwohl unmöglich 1ms vergangen 
sein kann?!

von Christian P. (christian_paier)


Lesenswert?

Jetzt gibst für dich 2 möglichkeiten:

1. Versuch mal deinen Code mit dem Simulator (Optimierungsstufe 0) 
schritt für schritt durchzugehen, und beobachte dabei akribisch die 
Timerregister, inbesondere die Interruptflags. Vielleicht fällt dir was 
auf.

2. Gibts diesen Thread auch in C? Sonst pack ich wirklich noch die 
Kristallkugel aus. (Code posten! Am besten kompilierbar)

von Karl H. (kbuchegg)


Lesenswert?

Sebastian Kreuzer schrieb:
> ja, tut mir leid.
>
> ich versuch es nochmal...:

Du sollst deinen Code nicht beschreiben, du sollst den Code posten!

Das ist für dich einfacher und wir können dasselbe sehen, was auch der 
Compiler bzw. der µP sieht.

von Sebastian K. (bastik)


Lesenswert?

Schäm, ich progge halt immer noch mit Bascom. Bin aber grad am 
Umsteigen, verwende immer mehr direkt die Register.

Ich schätz mal wenn ich jetzt Bascom poste , dann erwürgen mich gleich 
ein paar Leute hier...

Ich hab halt schon im Datenblatt gelesen, ob da irgenwas drinnen steht, 
von wegen start up time oder so... nix

ich dachte vielleicht gibt es da irgendeinen allgemeinen Trick den nur 
ich nicht mitbekommen hab.

wird mir wohl nichts übrig bleiben als wircklich mal die Register zu 
beobachten!

von André (Gast)


Lesenswert?

Naja. Vorm Enablen einfach sicherstellen, dass TOV1 nicht gesetzt ist 
(sonst rennt er nach dem Enablen direkt in die ISR):

TIFR1 |= 1<<TOV1

von Karl H. (kbuchegg)


Lesenswert?

Sebastian Kreuzer schrieb:
> Schäm, ich progge halt immer noch mit Bascom. Bin aber grad am
> Umsteigen, verwende immer mehr direkt die Register.
>
> Ich schätz mal wenn ich jetzt Bascom poste , dann erwürgen mich gleich
> ein paar Leute hier...
>
> Ich hab halt schon im Datenblatt gelesen, ob da irgenwas drinnen steht,
> von wegen start up time oder so... nix
>
> ich dachte vielleicht gibt es da irgendeinen allgemeinen Trick den nur
> ich nicht mitbekommen hab.
>
> wird mir wohl nichts übrig bleiben als wircklich mal die Register zu
> beobachten!

Achte vor allen Dingen darauf, wann der Timer loszuticken beginnt.

Müsste jetzt das Datenblatt studieren, aber der Comparematch wird meines 
Wissens ständig gemacht, also auch wenn der Timer steht!
Und ein Timerwert von 0 matcht nun mal mit einem Comparewert von 0 (d.h. 
noch ehe irgendetwas am Timer eingestellt wurde)

von STK500-Besitzer (Gast)


Lesenswert?

>Schäm, ich progge halt immer noch mit Bascom. Bin aber grad am
>Umsteigen, verwende immer mehr direkt die Register.

Traust du einem C-Compiler nicht zu, genauso "gut" zu arbeiten, wie dem 
BASCOM-Compiler?

>Ich schätz mal wenn ich jetzt Bascom poste , dann erwürgen mich gleich
>ein paar Leute hier...
Dass hier jemand wegen BASCOM-Programmierung erwürgt wurde, ist noch 
nicht vorgekommen. Es ist eher der Programmierstil, den diese 
BASCOM-"Programmierer" an den Tag legen.

>Ich hab halt schon im Datenblatt gelesen, ob da irgenwas drinnen steht,
>von wegen start up time oder so... nix
Start-up-Time hängt mit dem Oszillator zusammen; nicht mit dem Timer.

>ich dachte vielleicht gibt es da irgendeinen allgemeinen Trick den nur
>ich nicht mitbekommen hab.
Leute, die sich mit Mikrocontrollern auskennen, gehören dem Magischen 
Zirkel an...

von Stefan E. (sternst)


Lesenswert?

André schrieb:
> Naja. Vorm Enablen einfach sicherstellen, dass TOV1 nicht gesetzt ist
> (sonst rennt er nach dem Enablen direkt in die ISR):
>
> TIFR1 |= 1<<TOV1

Nein, richtig wäre hier ein "=".

von André (Gast)


Lesenswert?

Richtig ist offenbar auch das, oder kannst du einen direkten Unterschied 
in der Wirkungsweise ausmachen? "Writing a logical one" machen offenbar 
beide Varianten.

Gruessle

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Karl heinz Buchegger schrieb:
> Sebastian Kreuzer schrieb:
>> ja, tut mir leid.
>>
>> ich versuch es nochmal...:
>
> Du sollst deinen Code nicht beschreiben, du sollst den Code posten!

Vielleicht stellt einer der Admins endlich mal ein, daß, wenn man eine 
Datei zum Upload ausgewählt hat, diese auch dann erhalten bleibt, wenn 
man auf "Vorschau" gedrückt hat!

Nur so als kleiner Tipp.

Ist schon 1000x passiert daß Leute Code posten wollten und genau aus dem 
Grund war dann doch nix da, obwohl eine Datei angewählt wurde.

Und dann weden sie angemotzt...

Johann

von Stefan E. (sternst)


Lesenswert?

André schrieb:
> Richtig ist offenbar auch das, oder kannst du einen direkten Unterschied
> in der Wirkungsweise ausmachen? "Writing a logical one" machen offenbar
> beide Varianten.

Aber meine Variante schreibt nur die eine 1, deine schreibt zusätzlich 
überall da eine 1 rein, wo im Register eine 1 steht. Deine Variante 
löscht also alle gesetzten Flags in dem Register.

von Karl H. (kbuchegg)


Lesenswert?

Johann L. schrieb:
> Karl heinz Buchegger schrieb:
>> Sebastian Kreuzer schrieb:
>>> ja, tut mir leid.
>>>
>>> ich versuch es nochmal...:
>>
>> Du sollst deinen Code nicht beschreiben, du sollst den Code posten!
>
> Vielleicht stellt einer der Admins endlich mal ein, daß, wenn man eine
> Datei zum Upload ausgewählt hat, diese auch dann erhalten bleibt, wenn
> man auf "Vorschau" gedrückt hat!

Tja. Andi kennt das Problem. Nur leider gibt es keine Möglichkeit das 
abzustellen. Den Dateinamen kann man nicht von einem Formular ins 
nächste retten (wurde zumindest mir gesagt)

> Ist schon 1000x passiert daß Leute Code posten wollten und genau aus dem
> Grund war dann doch nix da, obwohl eine Datei angewählt wurde.
>
> Und dann weden sie angemotzt...

Angemotzt werden sie, wenn sie offensichtlich nicht den Code, sondern 
stattdessen 20 Zeilen posten, in denen sie beschreiben, wie ihrer 
Meinung nach ihr Code funktioniert.

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.