Tom Heinrich wrote:
> Erstmal danke für deine Hilfe.
>
> Mit Compare hatte ich schon herumexperimentiert. Leider mit mäßigem
> Erfolg. Welche Register müssen gesetzt werden, um zuverlässig im
> CTC-Modus zu arbeiten?
Steht alles im Datenblatt.
>
> Den Preload-Wert hatte ich auf 0XFFFE gesetzt, um herauszufinden mit
> welcher maximalen Frequenz ich den Pin am Ausgang toggeln kann.
> Jedenfalls kommen mir Frequenzen im kHz-Bereich sehr sehr spanisch vor.
> Von welchem Optimizer sprichst du?
Vom Optimizer des Compilers.
Ist der nicht aktiv ist es nicht ungewöhnlich, dass das Ergebnis
des Compilers doppelt so gross ist wie mit Optimizer.
>
> Kannst jemand die Taktfrequenz des ATMega169 auf dem Butterfly mit 1MHz
> bestätigen oder hab ich mich da vertan?
Mach dir ein Testprogramm und sieh nach (da ich den Butterfly
nicht kenne, gehe ich mal davon aus, dass am Port B ein paar
LED sein werden. Falls die woanders sind, musst du anpassen)
1 | #define F_CPU 1000000
|
2 |
|
3 | #include <avr/io.h>
|
4 | #include <util/delay.h>
|
5 |
|
6 | void Delay()
|
7 | {
|
8 | unsigned char i;
|
9 |
|
10 | for( i = 0; i < 100; ++i )
|
11 | _delay_ms( 10 );
|
12 | }
|
13 |
|
14 | int main()
|
15 | {
|
16 | DDRB = 0xFF;
|
17 |
|
18 | while( 1 ) {
|
19 |
|
20 | PORTB = 0xFF;
|
21 | Delay();
|
22 |
|
23 | PORTB = 0x00;
|
24 | Delay();
|
25 | }
|
26 | }
|
Wichtig: Hier muss der Optimizer des Compilers eingeschaltet
sein (Option -Os), ansonsten stimmen die Zeiten im _delay_ms
nicht.
Und dann die Frage: Wie lange ist die LED ein bzw. aus.
Wenn das in etwa eine Sekunde ist, dann läuft dein µC auch
tatsächlich mit der unter F_CPU angegebenen Frequenz von
1000000Hz = 1Mhz