-         

Ergebnis 1 bis 5 von 5

Thema: Zeitabstände messen

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.11.2006
    Ort
    Hamburg
    Alter
    32
    Beiträge
    199

    Zeitabstände messen

    Anzeige

    Moin!

    Ich habe vor mit meinem ATMega32 in bestimmten Zeitabständen Aktionen ausführen lassen, beispielsweise eine Variable höchzählen lassen und nebenbei noch auf einem Pin einen Takt rausgeben welcher sich von dem Variablen-Zähl-Takt unterscheidet.
    Bis jetzt hab ich sowas mit Delays gemacht. Man muss doch sowas wie einen Interrupt festlegen können, der alle 100 Takte der Prozessorfrequenz erfolgt oder so was. Leider hab ich bis jetzt nirgendwo gefunden wie man sowas realisiert. Nur wenn man einen Ausgang als PWM verwendet, aber es muss ja noch mehr möglichkeiten geben.

    MfG Jan
    Habe Mut, dich deines eigenen Verstandes zu bedienen.

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.02.2005
    Ort
    Hamburg
    Alter
    31
    Beiträge
    4.255

    Re: Zeitabstände messen

    Zitat Zitat von Spongebob85
    Man muss doch sowas wie einen Interrupt festlegen können, der alle 100 Takte der Prozessorfrequenz erfolgt oder so was.
    Dafür sind die Timer da. Neben der PWM-Funktion können sie auch einfach nur Interrupts auslösen, wenn sie einen gewissen Zählerstand erreichen oder überlaufen.

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.11.2006
    Ort
    Hamburg
    Alter
    32
    Beiträge
    199
    So schnell hatte ich ja noch nie ne Antwort.
    Aber ich hab im Datenblatt gesehen das der ATMega32 3 Timer hat. Kann man dann nur 3 Interrups festlegen? Das kann ich mir nicht vorstellen. Ich hab da im Datenblatt irgendwie nicht so wirklich was zu gefunden. Nur halt das mit dem Interrupt setzen und überlaufen. Was wenn ich jetzt für 10 verschiedene sachen Zeiten messen will?

    MfG Jan
    Habe Mut, dich deines eigenen Verstandes zu bedienen.

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.01.2004
    Beiträge
    2.441
    Aber ich hab im Datenblatt gesehen das der ATMega32 3 Timer hat. Kann man dann nur 3 Interrups festlegen?
    Wenn du nur 3 Timer hast, können wohl auch nur 3 Timer überlaufen und dabei einen Interrupt erzeugen.

    Was wenn ich jetzt für 10 verschiedene sachen Zeiten messen will?
    Zehn Zeiten kann man auch mit einer einzelnen Uhr stoppen, man muss halt nur entsprechend oft drauf gucken.

    Ein Timer zählt bei jedem Controllertakt eins hoch (oder runter, da bin ich mir nicht sicher).
    Den "Zählerstand" des Timers kannst du jederzeit abfragen und weisst dann wieviel Takte seit dem Start des Timers vergangen sind. Den Controllertakt kennst du und kannst daher ausrechnen wieviel Zeit vergangen ist.
    Das klappt allerdings nur, bis der Timer überläuft und wieder von vorne zu zählen anfängt. Beim Überlauf des Timers erzeugt er einen Interrupt. Über eine entsprechende Interruptroutine kannst du eine Zählervariable hochlaufen lassen. Die sagt dir dann wie oft der Timer "rum" ist.

    Über den Prescaler und einen Vorgabewert für den Timer kannst du dir die ganze Geschichte eventuell noch ein bischen handlicher machen, indem du dir den Timer z.B. so konfigurierst, dass er jede mS überläuft und du dann in der Interruptroutine die mS mitzählst.

    In Bascom gibt es auch den Befehl "Time". Damit kannst du glaube ich fast genauso arbeiten wie mit einer normalen Uhr, allerdings auch nur auf die Sekunde genau.

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.11.2006
    Ort
    Hamburg
    Alter
    32
    Beiträge
    199
    hab irgendwie nirgendwo gefunden, wie man den aktuellen Zählerstand jederzeit auslesen kann. Aber dann muss ich mir wohl das datenblatt nochmal in ruhe durchlesen. Sonst melde ich mich nochmal.
    Bis dann.

    MfG Jan
    Habe Mut, dich deines eigenen Verstandes zu bedienen.

Berechtigungen

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