-
        

Ergebnis 1 bis 5 von 5

Thema: Delay ist schneller als erwartet??

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    13.04.2005
    Beiträge
    56

    Delay ist schneller als erwartet??

    Anzeige

    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:
    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

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.11.2005
    Alter
    42
    Beiträge
    1.140
    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:
    Code:
    #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:

    Code:
    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

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    13.04.2005
    Beiträge
    56
    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

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.11.2005
    Alter
    42
    Beiträge
    1.140
    Zitat Zitat von Charly_cs
    Bei mir kommt keine Warnmeldung vom Compiler.
    Hm, sollte aber...was steht denn bei Dir nach dem kompilieren im Build-Fenster?

    Zitat Zitat von Charly_cs
    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

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    13.04.2005
    Beiträge
    56
    Hi!

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

    \/

    Gruß
    Charly

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •