-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: Timergrundlagen

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    02.02.2006
    Ort
    8160 Weiz
    Alter
    38
    Beiträge
    39

    Timergrundlagen

    Anzeige

    Hallo,

    ein Timer springt ja in gleichmäßigen Abständen in den Timerinterrupt.
    Wenn sich das Programm im Timerinterrupt befindet, zählt der Timer dann weiter?
    Oder ist er in dieser Zeit gestoppt?

    Habe den Timer mit einer Frequenz von 20Hz ablaufen lassen und gleichzeitig im Timerinterrupt einen "Wait 2 - Befehl" eingebracht.

    Das ganze mittels LED zur Ansicht gebracht.

    Die LED blinkte alle 2 sec.

    Nun denke ich, wenn ich die Zeit für meine Timerinterrupts ausrechnen möchte, muss ich die Zeit die ich benötige um den Timerinterrupt abzuarbeiten mitrechnen.

    Habe ich einen Denkfehler, oder stimmt das so.

    Schöne Grüße,
    Riley

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    19.07.2007
    Alter
    53
    Beiträge
    1.080
    Ich glaube, das ist ein Denkfehler.

    Der Timer zählt immer unbeirrbar weiter. Wenn du einen 8-Bit Timer mit 20Hz ticken läßt, dann mußte er alle 12,8 Sekunden beim Überlauf den Interrupt auslösen, wobei er dann weiterzählt.
    Deine LED sollte also eigentlich 10,8 Sekunden aus sein, dann 2 Sekunden an u.s.w.

    Wobei man sich leicht mal vertut ist die Berechnung des Interruptintervalls aus Taktfrequenz, Prescaler und der Bittiefe des Timers.
    Kannst ja mal deinen Quellcode einstellen, vielleicht finden wir dann des Rätsels lösung

    Gruß MeckPommER

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    30.07.2005
    Beiträge
    569

    Re: Timergrundlagen

    Zitat Zitat von Riley
    Habe den Timer mit einer Frequenz von 20Hz ablaufen lassen und gleichzeitig im Timerinterrupt einen "Wait 2 - Befehl" eingebracht.
    Naja, wait in einer Interupt Routine ist ne ganz blöde Idee.
    Vor allem deshalb weil sich interupts für gewöhnlich nicht selbst unterbrechen.

    Grüße,
    Hanni
    Grundregeln des Forenpostings:
    1. Nutze niemals die Suchfunktion!
    2. Überprüfe niemals die Topics nach Ähnlichkeiten!
    3. Schreibe alles in hellgelb!

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    19.07.2007
    Alter
    53
    Beiträge
    1.080
    Japp. Interrupt-Routinen sollten immer so kurz wie möglich sein. In diesem Fall ists aber nicht so wichtig.
    Ich glaube, Riley meinte, das der Timer mit 20Hz getaktet wird und nicht, das er 20* pro Sekunde einen Interrupt auslöst.

    Gruß MeckPommER
    Mein Hexapod im Detail auf www.vreal.de

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    02.02.2006
    Ort
    8160 Weiz
    Alter
    38
    Beiträge
    39
    Den Wait 2 Befehl wollte ich nur zur Veranschaulichung in den Interrupt einbringen.

    Ich verwende einen Quarz mit 16 MHz.

    Ich möchte den Timer für das US-Modul SRF05 verwenden.
    Es sollte alle 50ms eine Enfernungsmessung vorgenommen werden.
    Der Timerinterrupt hat eine Durchlauf von 40ms.

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    02.02.2006
    Ort
    8160 Weiz
    Alter
    38
    Beiträge
    39
    Anbei der Quellcode!

    Prescaler und Timerwert sind noch nicht richtig eingestellt.

    Es wird eine Entfernung gemessen und dann entsprechend der Entfernung eine Zahl auf einer 7-Segmentanzeige ausgegeben.

    Schöne Grüße,
    Riley
    Angehängte Dateien Angehängte Dateien

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    28.10.2005
    Ort
    Berlin
    Beiträge
    116
    Also der Timer läuft unabhängig vom restlichen Programm weiter. Da du im Interrupt 2 Sekunden wartest, kann das Programm 40 mal (2s*20Hz) nicht in die Routine springen, da es sich schon darin befindet. Sobald er wieder ins Hauptprogramm springt kommt nach spätesten 1/20 Sekunde der nächste Interrupt. Da das mit Augenmaß wohl nicht zu erfassen sein wird kommst du auf deine 2 Sekunden.
    Hoffe ich rede keinen Müll, dann verbessert mich.

    mfg milkbubi

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    02.02.2006
    Ort
    8160 Weiz
    Alter
    38
    Beiträge
    39
    Der Timer zählt unabhängig weiter, egal ob er sich im Interrupt befindet oder nicht. Mit diesem Satz ist mir der Knopf aufgegangen!

    Wenn der Interrupt in meinem Fall 40ms lang dauert, müsste ich den Timer so zählen lassen, dass der Interrupt in Zeitabständen größer 40ms gestartet wird.
    So stört der Interrupt den Programmablauf nicht mehr.

    Hab ich es jetzt nun verstanden?

    Dankesehr,
    Riley

  9. #9
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    19.07.2007
    Alter
    53
    Beiträge
    1.080
    Japp

    Der Timer zählt in Abhängigkeit vom Systemtakt, der Rest kümmert ihn nicht.
    Eine gebräuchliche Vorgehensweise ist mitunter, im Interrupt nur eine Variable zu setzen, die dann im Hauptprogramm ausgewertet wird.
    Der Interrupt setzt die Variable - im Hauptprogramm schubbst die Variable die Entfernungsmessung an.
    So bleibt der Interrupt schön kurz und verzögert keine anderen Programmteile, aus denen beim Timerüberlauf rausgesprungen wird.

    Gruß MeckPommER
    Mein Hexapod im Detail auf www.vreal.de

  10. #10
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    28.10.2005
    Ort
    Berlin
    Beiträge
    116
    schön dass wir helfen konnten.
    Wenn die Entfernungsmessung das einzige ist, was der mc machen soll kannste die Messung auch im Interrupt machen, ansonsten ist die Variante mit Variable hochzählen und im Hauptprogramm auswerten auf jeden Fall vorzuziehen.
    Was man noch wissen sollte ist aber, dass auch das rein und raus springen aus der Routine Zeit kostet, was bei der Timervorgabe brücksichtigt werden sollte um keine Interrupts zu "verlieren".

    Schönen Abend noch

    mfg milkbubi

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •