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?