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