C Zykluszeit beim Atmega8

Rentner2036

Neues Mitglied
28. Dez. 2012
1
0
0
Sprachen
Hallo,

gibt es eine Möglichkeit die aktuelle Zykluszeit auszulesen bzw. in einer Variablen abzuspeichern?
Ich benutze einen Atmega 8 und programmiert wird in C.

Danke im Voraus
 
Wenn der AVR extern betaktet wird, definitiv nicht. Bei Verwendung des internen RC-Oszillators würde das auslesen der entsprechenden Fusebits einen Rückschluß zulassen (ob das zur Laufzeit durch den Controller möglich ist, weiß ich nicht). Bei einigen Controller gibts zusätzlich ein Kalibrationsregister, welches auch mit in den Zeit eingeht.

ABER: Wofür willst Du das haben? Willst Du die tatsächliche Zeit (zur Laufzeit) messen, oder reicht das bei der Programmerstellung? Da Du in C schreibst - da wird doch normalerweise die Angabe der Taktfrequenz erzwungen, oder? Es existiert da also bereits eine Compilervariable.

Der Controller selbst kennt keine Zeiten - er richtet sich nur nach dem Takt. Wenn man also irgendwas zeitkritisches programmieren will, muß man(*) das eben genau aus den benötigten Takten (je Instruktion) und der Taktfrequenz ausrechnen.

(*) bei Hochsprachen wird einem das ggf durch den Compiler abgenommen, der muß dann aber die Taktfrequenz kennen (was ja das multiplikativ-inverse der Zykluszeit ist)

P.S.: Willkommen im Forum;)
 
hey auch wenn etwas spät,


du kannst nicht direkt alla "das Programm braucht 2,8673µS .." anzeigen lassen,

Aber JEDER Programmier sollte die Zykluszeit seiner Main (am bessten auch der jeweiligen Funktionen) messen .. wenn du einen GPIO Frei hast -> jedes mal in deiner Main loop einmal einen Pin Togglen und mit dem Oszi die Zeit messen.


Im Programm selbst kannst du das ganze auch machen.
Lass den 16 Bit Timer beim Eintritt in die Main Loop springen , (davor Stopst du ihn und liest die Zeit aus und Nullst ihn) damit kriegst du auch deine reale Zykluszeit raus. (Wenn du nun die µS wissen willst kannst du dir das anhand des Prescalers und deines Quarzes / Tacktgenerators ... was auch immer zurück rechnen).

Du bist zwar immer den einen Tackt hintendrann beim Stoppen des Timers aber (darauf sollte es nicht ankommen)..



Das ganze kannst du dann auch noch in ein Array schreiben und du kannst die letzten 10 .. 100 Werte anschauen...



Gruß,

Manuel
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)