PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Delay ist schneller als erwartet??



Charly_cs
09.11.2006, 22:41
Hi!

Steige gerade oder besser gesagt, versuche von Bascom auf C umzusteigen und hänge am delay. Es wird eine Led an- und ausgeschaltet. Diese soll zwischen den Zuständen eine Sekunde versteichen lassen. Habe je eine For-Schleife mit 100 durchläufen programmiert, in der jeweils 10ms gewartet wird.
100 * 10ms = 1000ms = 1sec
Die Led blinkt nur leider viel zu schnell... So ca. 3-5 mal pro Sekunde.
Woran könnte es liegen?
Hier mein Code:

#include <avr/io.h>
#include <avr/delay.h>
#define F_CPU 16000000

int main(void)
{
DDRD = (1<<DDD5);

int i;
while(1)
{

PORTD |= (1<<PD5);
for (i=0;i<100;i++)
{
_delay_ms(10);
}

PORTD &= ~(1<<PD5);

for (i=0;i<100;i++)
{
_delay_ms(10);
}
}
return(0);
}

Gruß
Charly

askazo
10.11.2006, 07:09
Hi,

in der delay.h wird überprüft, ob F_CPU bereits definiert wurde. Falls nicht, wird das Makro mit einem Standartwert (1MHz) vorbelegt. Die spätere Definition von Dir hat dann keine Auswirkungen mehr auf die delay-Funktion.

Du musst also F_CPU definieren, bevor Du die delay.h. einbindest.
Übrigens liegt die delay.h nicht mehr im Pfd avr, sondern im Pfad util.

Richtig wäre also:


#define F_CPU 16000000
#include <avr/io.h>
#include <util/delay.h>


PS: Du solltest die warnings, die der Compiler ausspuckt, beachten.
Da hätte nämlich folgendes gestanden:


C:/WinAVR/avr/include/avr/delay.h:36:2: warning: #warning "This file has been moved to <util/delay.h>."
In file included from C:/WinAVR/avr/include/avr/delay.h:37,
from ../main.c:3:
C:/WinAVR/avr/include/util/delay.h:136:3: warning: #warning "F_CPU not defined for <util/delay.h>"
../main.c:5:1: warning: "F_CPU" redefined
C:/WinAVR/avr/include/util/delay.h:137:1: warning: this is the location of the previous definition

Gruß,
askazo

Charly_cs
10.11.2006, 09:19
Vielen Dank!

Bei mir kommt keine Warnmeldung vom Compiler.
Hab aber gleich noch eine Frage. Wenn ich jetzt die lcd.h einbinde, dann friert bei mir das AVR Studio 4 ein und das passiert jedes mal wenn ich ein Projekt wieder öffnen möchte... egal ob ichs mit
<avr/lcd.h> oder "avr/lcd.h" mache. Woran könnte das liegen?

Gruß
Charly

askazo
10.11.2006, 11:35
Bei mir kommt keine Warnmeldung vom Compiler.
Hm, sollte aber...was steht denn bei Dir nach dem kompilieren im Build-Fenster?


Wenn ich jetzt die lcd.h einbinde, dann friert bei mir das AVR Studio 4 ein und das passiert jedes mal wenn ich ein Projekt wieder öffnen möchte... egal ob ichs mit
<avr/lcd.h> oder "avr/lcd.h" mache. Woran könnte das liegen?
Die lcd.h ist kein Bestandteil von WinAVR, oder? Zumindest kann ich die bei mir nicht finden. Oder hast Du die selbstgeschrieben?

Ansonsten:
-Welche Version vom AVR Studio hast Du? Aktuell ist Version 4.12 Service Pack 3 Build 485
-Welche Version vom WinAVR hast Du? Aktuell ist Version 20060421

Gruß,
askazo

Charly_cs
11.11.2006, 18:12
Hi!

Nochmals riesen Dank!!!
Hat an der Version gelegen. Nachdem ich das Servicepack 4 geladen habe, läuft alles perfekt!

\:D/

Gruß
Charly