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

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