Hallo Zusammen, ich weiß ich stelle immer sau dumme Fragen, aber ich denke es kann auch nur dumme Antworten geben ;o) Also ich weiß nicht, wenn ich hier immer die Threads lese, dann lese ich auch ab und zu von der Zeitmessung, wie lange Befehle benötigen oder eine Datenübertragung... mmmmhhhh... Da stehe ich immer auf dem Schlauch!! Ich habe schon das ganze AVRstudio abgesucht und nichts gefunden. Ich weiß bei Keil im Compiler gab es immer so eine Funktion, mit der die Ausführungszeit gescannt werden konnte, aber hier habe ich das noch nicht gefunden!! Kann mir jemand helfen? Gruß Benjamin
Programm im Simulator laufen lassen, d.h. den Debugger starten. Jetzt schaust du mal links in der I/O View unter 'Processor' nach. Da gibt es einen Eintrag: 'Stop Watch'. Mit der eingestellten Frequenz, rechnet dir AVR Studio aus, wieviel Zeit seit Programm- Start vergangen ist. In eine ähnliche Kategorie fällt der Eintrag 'Cycle Counter'.
Ok, das habe ich ja verstanden, aber wenn ich mein Programm simuliere und ich unter Einstellungen die Quarzfrequenz auf 8MHz eingestellt habe, dann wird im Debugmodus unter Prozessor 4MHz angezeigt. Merkwürdig ist auch das dann _delay_ms(200); mit nur 66,23ms ausgeführt wird!! Mache ich was falsch??? :o( Gruß Benjamin
Ja, das ist eine Falle. Wenn der Debugger an ist (und nur dann), gibt es im Debug Menü einen Menüpunkt mehr: 'AVR Simulator Options'. (gaanz unten im Menü)
> _delay_ms(200);
Schau mal in die delay.h rein.
Bei deinen Frequenzen kann ein delay ganz einfach keine
200 ms verzögern. Da gibt es Maximalwerte, die im delay.h
beschrieben sind.
ja ich habe schon geguckt!! die delay- zeit als max. wert ist bei 262.14ms, also sollte das überhaupt keine probleme machen!! oder??? Gruß
Dann hast du nicht vollständig gelesen. Die maximale Zeit ist 262 / F_CPU in Mhz bei 4 Mhz hast du also 262 / 4 -> ~65 ms bei 8 Mhz entsprechend 262 / 8 -> ~32 ms
... Im übrigen stimmen die delay Zeiten nur dann, wenn du den Compiler optimieren lässt. Bei einem Debug-Build stimmen die Zeiten sowieso nicht.
Stimmt... habe ich nicht richtig gelesen!! mmmmhhhh... misst!! dann muss ich noch nen bißchen optimieren!! Danke!!!
Hi, laengere Wartezeiten macht du dann in einer forschleife.
1 | for(i=0;i<1000;i++){ // wartet ca. 1Sek |
2 | _delay_ms(1); |
3 | }
|
Gruß, Dirk
> laengere Wartezeiten macht du dann in einer forschleife.
Besser noch mit einem Timer. Dafür sind'se da.
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.