Los bericht bekijken
Oud 22-06-2008, 16:31   #52 (permalink)
Azariel
 
Azariel's schermafbeelding
 
Geregistreerd: 12 februari 2006
Locatie: Eindhoven
Berichten: 1.659
Standaard

Ik ben zo langzamerhand wat meer intro-tjes aan het volgen via google etc, simpele dingetjes zoals simpel weg 1 led constant laten branden (ja, ik weet het hoe simpel kan je het maken) daarna in plaats van alle PortB als output netjes de juiste poort aanwijzen als output etc. Gewoon dus bezig vanaf de basis in een poging er wat van te snappen

Nu was het laatste stapje waar ik mee bezig was een delay functietje, dus dat zodra ik de print van stroom voorzie, er eerst een delay is, gevolgd door het aangaan van de LEDjes. Nu kwam ik daar al in de problemen waar ik niet helemaal goed uit kom.

Ik gebruik winavr/programmers notepad met een atmega8 op de print. In de makefile staat netjes de atmega8 ingesteld met een F_CPU van 8Mhz

de code tot nu toe:
Code:
#include <avr/io.h>
#include <util/delay.h>

int main(void)
{
      //set PORTB6 and PORTB1 as output
      DDRB=0b01000010; 

      //set delay of 2 sec
      _delay_ms(2000);       

      //set PORTB6 and PORTB1 as HIGH
      PORTB=0b01000010;

      return 1;
}
Op het moment dat ik dit op de avr zet, krijgt tie ongeveer een delay van 15 sec. dat is dus dat lijkt mij niet heel erg logisch.

Nu ben ik eens in het delay.h aan het kijken geweest en vond daarin dat de Fcpu moest zijn gedefineerd of dat het in de makefile moest staan. Nu staat het al in de makefile, maar ik heb het ook nog geprobeerd met #define F_CPU .... in de code zelf. Dit had echter ook geen resultaat.

Verder stond er nog in dat er een max aan de delay zat:
Code:
The maximal possible delay is 262.14 ms / F_CPU in MHz.

   When the user request delay which exceed the maximum possible one,
   _delay_ms() provides a decreased resolution functionality. In this
   mode _delay_ms() will work with a resolution of 1/10 ms, providing
   delays up to 6.5535 seconds (independent from CPU frequency).  The
   user will not be informed about decreased resolution.
Nu neem ik aan dat dat er staat als 262.14 ms PER MHz, en niet 262.14 gedeeld door de Freq?

Anyway, dit resulteerd dus in een delay van 15 seconde terwijl er hier dus een max wordt vermeld van 6.5 sec. Nu stond er ook nog het volgende in:

Code:
    \note In order for these functions to work as intended, compiler
    optimizations <em>must</em> be enabled, and the delay time
    <em>must</em> be an expression that is a known constant at
    compile-time.  If these requirements are not met, the resulting
    delay will be much longer (and basically unpredictable), and
    applications that otherwise do not use floating-point calculations
    will experience severe code bloat by the floating-point library
    routines linked into the application.
Nu gok ik dus dat er daar ergens iets verkeerd zit, maar hoe ik dit zou moeten oplossen? suggesties?
__________________
[CiP] IceCat
Modulaire Test PSU
Azariel is offline   Met citaat antwoorden