Forum: Mikrocontroller und Digitale Elektronik Quarz und Zeiten


von Heron24 (Gast)


Lesenswert?

Hi!

Bin neu und hab mal ne ganz blöde Frage. Und zwar wenn ich an meinem µC 
einen Quarz von 12 NHZ dran habe,heisst das dann das mein Controller in 
einer Sekunde dann 12000000 Zyklen hat.

Heron24

von Dennis (Gast)


Lesenswert?

Heron24 schrieb:
> Quarz von 12 NHZ

Sofern NHZ keine neue Einheit darstellt, macht arbeitet dein uC mit 
12.000.000Takten pro Sekunde - das heisst aber nicht, dass er 12.000.000 
Instruktionen/s verarbeitet.

von Dennis (Gast)


Lesenswert?

>> man streiche bitte gedanklich das "macht"

von Huch (Gast)


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.

von Heron24 (Gast)


Lesenswert?

Das heisst also bei einem Teilungsfaktor von 1 Habe ich dann 12000000 
Zyklen?
Das es keine 12000000 Instruktionen gibt ist ja klar da ja nicht jede 
Befehl 1 Zyklus benötigt sondern mehr.


Heron24

von Huch (Gast)


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.

von Huch (Gast)


Lesenswert?

Man kann halt auf die Frage nicht generell Ja oder Nein antworten.

von Heron24 (Gast)


Lesenswert?

Es geht darum Warteschleifen zu programmieren mit dem ATMEGA32 die sehr 
genau sind.

von Huch (Gast)


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.

von Huch (Gast)


Lesenswert?

Sorry. Es muss natürlich heissen:

"In diesem Fall hätte "ATMega32" und "Warteschleifen" schon klargemacht
wie man Dir hätte antworten sollen".

von Captain S. (captainsubtext)


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.

von Heron24 (Gast)


Lesenswert?

Ich möchte ein DMX Signal nachbilden für ein Lichtmischpult.Ich hätte 
vielleicht noch erwähnen sollen das ich in Assembler programmiere

Heron24

von Lehrmann M. (ubimbo)


Lesenswert?

Heron24 schrieb:
> Es geht darum Warteschleifen zu programmieren mit dem ATMEGA32 die sehr
> genau sind.

Haha ein Spaßvogel...

man könnte auch sagen: 'und wovon träumst du Nachts ?'

von spess53 (Gast)


Lesenswert?

Hi

>Haha ein Spaßvogel...

Eher du. Wenn ich will, mache ich die auf den Takt genau.

MfG Spess

von Huch (Gast)


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?

von Lehrmann M. (ubimbo)


Lesenswert?

spess53 schrieb:
> Hi
>
>>Haha ein Spaßvogel...
>
> Eher du. Wenn ich will, mache ich die auf den Takt genau.
>
> MfG Spess

Aber nicht in C und auch nicht im Inlineassembler - außerdem bräuchte 
man dazu erstmal eine vernünftige Taktquelle.

Und: Ein Quarzosziallator von Reichelt ist keine !

von spess53 (Gast)


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

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
Noch kein Account? Hier anmelden.