xBlinker schrieb:
> Hallo
> Ich versuche gerade herauszufinden wie schnell meine Led blinkt... Also
> ich verwende aus dem Pollin Board den ATmega8 an dem ein Quarz
> angeschlossen ist(steht K16.000 drauf ich geh davon aus, damit ist 16
> MHz gemeint...).
Letzten endes ist das auch egal, wenn der Quarz gar nicht benutzt wird.
Probier mal
1 | #define F_CPU 16000000UL
|
2 |
|
3 | #include <avr/io.h>
|
4 | #include <utils/delay.h>
|
5 |
|
6 | #define LED_DDR DDR.... // du setzt ein, wo die LED hängt
|
7 | #define LED_PORT PORT... // du setzt ein, wo die LED hängt
|
8 | #define LED_PIN P... // du setzt ein, wo die LED hängt
|
9 |
|
10 | int main()
|
11 | {
|
12 | LED_DDR = ( 1 << LED_PIN );
|
13 |
|
14 | while( 1 ) {
|
15 | LED_PORT |= ( 1 << LED_PIN );
|
16 | _delay_ms( 1000 );
|
17 |
|
18 | LED_PORT &= ~( 1 << LED_PIN );
|
19 | _delay_ms( 1000 );
|
20 | }
|
21 | }
|
Die LED sollte 1 Sekunde an sein und 1 Sekunde aus sein. Es geht nicht
darum, ob das jetzt auf die Millisekunde genau 1 Sekunde sind. Aber wenn
dein Mega mit 8Mhz läuft, dann ist die LED 2 Sekunden an und 2 Sekunden
aus und das kannst du mit freiem Auge sehen. Läuft der Prozessor
hingegen mit nur 1Mhz, also dem Auslieferungszustand, dann ist die LED
16 Sekunden an und 16 Sekunden aus. Und den Unterschied kann ein Blinder
greifen.
Da muss man nichts auslöten. Einfach nur einen möglichst einfachen
Prozess benutzen (zb LED blinken) und den so aufbauen, dass er von der
tatsächlich vorliegenden Taktfrequenz abhängt (in dem Fall _delay_ms)
und das ganze so in den Werten zurechtbiegen, dass man auch ohne
Messinstrumente eine einigermassen vernünftige Aussage machen kann.