-         

Ergebnis 1 bis 4 von 4

Thema: Genaues Abstoppen mit Asuro Timern

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    28.06.2008
    Beiträge
    7

    Genaues Abstoppen mit Asuro Timern

    Anzeige

    Hi,

    ich habe wichtige Frage zu den Timern auf dem Asuro. Bin
    fortgeschrittener Anfänger.

    Ich will eine Zeit mit möglichst genauer Auflösung stoppen (Prescaler 1)
    und die maximal zu messende Zeit liegt bei 318 ys (mikrosekunden), also
    wenn er länge läuft und noch nicht gestoppt wurde, dann kann er auch mit
    dem zählen aufhören oder so.

    1. Frage:
    Welchen Timer kann/darf ich hernehmen? ich würde gerne den 16-bit timer
    (t1) hernehmen, weil der länger laufen kann und man so keine Variable
    hochzählen muss (was wieder die zeit ungenauer macht).

    (Weiß soviel, dass T1 zur Motoransteuerung benutzt wird und T2 für die Infrarot Schnittstelle, möglich wär aber auch ein zweites mal zurück auf PWM zu initialisieren)

    2. Frage:
    Warum kommen scheinbar zufällige Werte (zwischen 8 und 45) hier als
    Ergebnis raus?

    Code:
    TCCR0 &= ~(1<<CS02 | 1<<CS01 | 1<<CS00); //Timer0 stoppen (vorsichtshalber)
    TCNT0=0; //Timer0 zurücksetzen
    TCCR0 |= (1<<CS00); //Starte Timer0
    Sleep(123); //Irgendeine Zeit warten
    TCCR0 &= ~(1<<CS00); //Stoppe Timer
    jetzt müsste man am besten noch einstellen, dass das Programm einen
    Interrupt macht, wo eine Variable bei jedem Timerüberlauf hochgezählt
    wird. Weiß leider nicht wie Interrupt Service Routinen bei AVR
    funktionieren.

    Code:
    zeit = TCNT0; (Zeit auslesen)
    Naja falls jemand einen Fehler findet oder mir irgendwie weiterhelfen
    kann. Würd mich über Antworten freuen.

    Gruß Thomas

    PS: Datenblatt ist hier:
    http://www.atmel.com/dyn/resources/p...ts/doc2486.pdf falls es
    sich jemand anschauen mag.

  2. #2
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Für eine wirklich genaue Zeitmessung gibts die ICP funktion, allerdings nur beim 16 Bit Timer (Timer1 beim Mega. Da kann auch längere Zeiten zyklengenau messen. Im wissenbereich unter timer-avr ist da eine Beispiel code drin. Da ist auch gleich ein beispiel für den Interrupt der eine Variable hochzählt mit drin.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    28.06.2008
    Beiträge
    7
    danke für deine Antwort.

    Schaut ja sehr umfangreich aus diese Funktion.

    hab aber noch einige Bedenken:

    // Code für Mega48 / Mega88 / Mega 168 / ...
    // mit leichten Anpassungen auch für Tiny2313, Mega16, Mega32,...
    geht der auch mit atmega8L ?

    dauert des nicht irgendwie wenn der die CPU in den "IDLE" Mode setzt?

    Ich wüsste jetzt auch garnicht wie ich mit dem Programm die Zeit starte/stoppe wenn ich den Code probieren würde.

  4. #4
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Auf den IDLE Mode könnte man auch verzichten. Beim Mega8L könnte die UART ein kleine wenig anders sein (anderer Name für High Byte). Auch bei irgendwelchen Falgs ist da glaube ich eine 1 zu viel dran am namen. Die Funktionen sind aber sonst gleich.

    Der Code stopt die Zeit für eine Periode am ISP Pin.

Berechtigungen

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