Archiv verlassen und diese Seite im Standarddesign anzeigen : Delay ist schneller als erwartet??
Charly_cs
09.11.2006, 23: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
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, 10: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
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, 19:12
Hi!
Nochmals riesen Dank!!!
Hat an der Version gelegen. Nachdem ich das Servicepack 4 geladen habe, läuft alles perfekt!
\:D/
Gruß
Charly
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.