Quarz und Zeiten

Gast #1917350
Lesenswert?

Das hängt von der konkreten CPU ab.

Beim den 8-Bit AVRs von Atmel gibt es noch Teilerfaktoren die aber auch 
1 sein können (Siehe z.B. CKDIV8-Fuse).

Bei anderen uCs mag es andere /zusätzliche Einstellmöglichkeiten geben.
Genauen Aufschluss gibt das Datenblatt.
Gast #1917363
Lesenswert?

>Das heisst also bei einem Teilungsfaktor von 1 Habe ich dann 12000000
>Zyklen?
Wenn, dann 12 Millionen Zyklen pro Sekunde.

Die Antworten auf diese Frage hängt, wie gesagt von der konkreten CPU ab 
und da wiederum davon wie die evtl. vorhandenen Teiler gesetzt sind.

Es wäre villeicht hilfreich, wenn Du schreibst, warum Du das wissen 
willst. Dann könnte man gezielter antworten.

>Das es keine 12000000 Instruktionen gibt ist ja klar da ja nicht jede
>Befehl 1 Zyklus benötigt sondern mehr.
Das ist so nicht gesagt. Es hängt von der CPU ab. Es gibt durchaus 
welche, die nur 1-Zyklus-Befehle haben.
Gast #1917388
Lesenswert?

Gut.

Was Du wissen willst steht im Datenblatt unter der Überschrift 
Instruction
Execution Timing und im Instruction Set.

Der ATMega32 hat keinen weiteren Taktteiler. Also: bei 12MHz Takt 12 
Mio. Zyklen pro Sekunde.


Eine Bitte für weitere Fragen hier: Bitte gib alle Dir bekannten Details 
und Bedingungen an. Da Du Anfänger bist, wird das sicherlich nicht immer 
vollständig sein, aber es hilft dennoch einige Nachfragen zu ersparen. 
In diesem Fall hätte "ATMega32" und "Warteschleifen" schon klargemacht 
wie man die antworten sollte.
#1917401
Lesenswert?

Was ist denn deine Anwendung? Möchtest du eine Uhr bauen und brauchst 
eine Sekunden-Warteschleife? Oder das Timing eines Protokolls einhalten? 
Vielleicht ist der Ansatz einer Warte-SCHLEIFE auch komplett daneben und 
du solltest das Ganze grundlegend überdenken.

Die beste Methode um Wartezeiten zu generieren ist vielen Fällen immer 
noch ein Timer! So kannst du während der Wartezeit auch noch sinnvolle 
Aufgaben erledigen und verplemperst deine Zeit nicht in einer leeren 
Schleife.

Wenn es schnell gehen muss, dann sieh dir die Funktion _delay_ms() und 
_delay_us() aus "delay.h" an. Die sind "ausreichend" genau, je nach 
Anforderung.
Gast #1917444
Lesenswert?

Grundsätzlich hat Captain Subtext recht.

An sich benutzt man, ausser in Sonderfällen, keine Verzögerungen die auf 
der Abarbeitung von Befehlen nur um deren Verarbeitungszeit willen 
beruht ohne das das Ergebnis irgendeine Rolle spielt.

Das nennt man übrigens "Busy-Waiting".

Vielmehr benutzt man Timer. Das hat den Vorteil, das man, während die 
Wartezeit abläuft noch andere Dinge tun kann. Z.B. Zeichen empfangen, 
irgendwas berechnen, etcpp.

Du schreibst leider nicht welche Vorerfahrungen hast.

Schreib doch mal was dazu. Wie lange programmierst Du schon und in 
welchen Sprachen? Was hast Du schon geschrieben?
Gast #1917477
Lesenswert?

Hi

>Aber nicht in C und auch nicht im Inlineassembler

Wo steht denn hier etwas von C?

>außerdem bräuchte
>man dazu erstmal eine vernünftige Taktquelle.

>Und: Ein Quarzosziallator von Reichelt ist keine !

Rate mal, weshalb ich 'auf den Takt genau' geschrieben habe?

MfG Spess

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren