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!
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?
Ich würde sagen, dass an Zeile 42 in deinem Code liegt. Leider ist meine Kristallkugel gerade im Urlaub...
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?!
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)
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.
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!
Naja. Vorm Enablen einfach sicherstellen, dass TOV1 nicht gesetzt ist (sonst rennt er nach dem Enablen direkt in die ISR): TIFR1 |= 1<<TOV1
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)
>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...
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 "=".
Richtig ist offenbar auch das, oder kannst du einen direkten Unterschied in der Wirkungsweise ausmachen? "Writing a logical one" machen offenbar beide Varianten. Gruessle
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.