Forum: Mikrocontroller und Digitale Elektronik ATmega328p max GPIO performance


von wgslayer (Gast)


Lesenswert?

Ich habe einen ATmega328P mit 20 MHz getaktet. Nun lasse ich in einer 
einfachen Schleife ein IO pin togglen, etwa so:
1
for (;;) {
2
    PORTB ^= 1;
3
}

in asm verbraucht das ziemlich genau 5 Zyklen:
1
Zeile Befehl          Takt
2
0     label           /
3
1     in ...          1
4
2     eor ...         1
5
3     out ...         1
6
4     rjmp ...        2

Auf dem Oszilloskop messe ich nun als Periode 500 ns. Teile ich es durch 
die 5 Zyklen, ergibt 100 ns -> 10 MHz.

Ich hätte aber eine Periodendauer von 1.0/20MHz * 5 = 50 ns * 5 = 250 ns 
erwartet.

Frage: warum erhalte ich am pin nur 10 MHz, obwohl der chip mit einem 20 
MHz Oszillator getastet wird (dieser arbeitet einwandfrei, habe das 
Signal geprüft) ?

Danke und Gruss
/wgslayer

von Walter T. (nicolas)


Lesenswert?

Und die Periodendauer ist die Zeit für zwei Schleifendurchläufe.

Mit
1
PINB = 1;
kannst Du beim ATmega328 übrigens in einem einzigen Takt toggeln.

von wgslayer (Gast)


Lesenswert?

Ah, verstanden... jetzt verstehe ich es. D.h. der pin wird mit 20 MHz 
getaktet (10 MHz hi, 10 MHz lo). Logisch... im nachhinein.

Danke für den Hinweis mit PINB!

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.