Problem mit Taktfrequenz

Gast #2137651
Lesenswert?
• ▲
▼
Hi,
ich habe einen ATmega128
mit diesem kleinen Programm:
1
while(1)
2
  {
3
    PORTG ^= (1<<3); // Toggle Strobe
4
  }
Habe ich an der Portleitung eine Frequenz von 166kHz. (-O0)
Habe ich an der Portleitung eine Frequenz von 285kHz. (-Os)

Kommt mir etwas langsam vor...
Welche Taktrate habe ich?
Sind meine Fuses richtig gesetzt?
Angehängte Dateien:
Gast #2140235
Lesenswert?
• ▲
▼
Oh,
kann keiner was dazu sagen?

Ich habe AVRstudio4 und als Programmiergerät einen AVRISP MKII
Der Quarz hat 4MHz.

Ich habe das bei zwei verschiedenen Compilereinstellungen probiert:
mit Optimierung (-O0) habe ich an der Portleitung 166kHz.
mit Optimierung (-Os) habe ich an der Portleitung 285kHz.

Liegt da irgendwo der Hund begraben, oder ist der ATmega128 so langsam?
#2140564
Lesenswert?
• ▲
▼
Mal rein rechnerisch...
Bastelmaus schrieb:
> Der Quarz hat 4MHz.
entspricht 0,25µs Periode.

> ...
> mit Optimierung (-O0) habe ich an der Portleitung 166kHz.
entspricht 6µs Periode = 24 Prozessortakte. Da für eine Periode 
Ausgangstakt der Pin zweimal getoggelt werden muss, wird Deine Schleife 
in 12 Takten abgearbeitet.

> mit Optimierung (-Os) habe ich an der Portleitung 285kHz.
entspricht 3,5µs Periode = 14 Prozessortakte. Da für eine Periode 
Ausgangstakt der Pin zweimal getoggelt werden muss, wird Deine Schleife 
in 7 Takten abgearbeitet.

Versuch in Assembler:
       ldi r16,0x0F    ;Vorbereitung Hilfsregister zum toggeln
loop:  out PORTG,r16   ; 1 Takt
       swap r16        ; 1 Takt, Bit toggeln
       rjmp loop       ; 2 Takte

Toggelt allerdings den gesamten Port G, also nicht perfekt, nicht 
getestet, braucht 4 Takte für einen Durchlauf und Du bekommst 500kHz an 
Deinem Pin raus. Schneller fällt mir nichts ein.

Reinhard
Gast #2142059
Lesenswert?
• ▲
▼
Reinhard R. schrieb:
>> mit Optimierung (-Os) habe ich an der Portleitung 285kHz.
> entspricht 3,5µs Periode = 14 Prozessortakte. Da für eine Periode
> Ausgangstakt der Pin zweimal getoggelt werden muss, wird Deine Schleife
> in 7 Takten abgearbeitet.

Vielen Dank!  :-)

Jetzt sehe ich es ein.
Die Schleife in 7 Takten abarbeiten ist OK.
Ich hatte einen fatalen Fehler vermutet, wie z.B. Quarz ist kaputt und 
die µC läuft mit Notstrom  ;-)

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.