PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit Sleep()



xchrisx
19.08.2007, 14:04
Hallo alle zusammen.
Ich habe seit gestern meinen Asuro fertig gebaut.
Der Selbsttest und einige Beispielprogramme funktionieren auch. Jedoch funktionieren einige Tests von mir nicht. Ich hoffe ihr könnt mir helfen:

#include "asuro.h"
int main(void)
{
Init();
StatusLED(GREEN);
while (1)
{
FrontLED(ON);
Sleep(32000);
FrontLED(OFF);
Sleep(32000);
}
return 0;
}

Bei diesem Programm leuchtet die StatusLED grün und die FrontLED dauerhaft. Blinkt also nicht.
Dann habe ich ein Code geschrieben um den Zeitbeerich einfach mal auszutesten, aber auch kein blinken zu erkennen.
Code für Zeittest:


#include "asuro.h"
int main(void)
{
Init();
StatusLED(GREEN);
int i;
for (i=1; i<32000; i++)
{
FrontLED(ON);
Sleep(i);
FrontLED(OFF);
Sleep(i);
}
return 0;
}

Hoffe ihr könnt mir helfen.
Chris

harry3
19.08.2007, 14:16
Hallo alle zusammen.
Ich habe seit gestern meinen Asuro fertig gebaut.
Der Selbsttest und einige Beispielprogramme funktionieren auch. Jedoch funktionieren einige Tests von mir nicht. Ich hoffe ihr könnt mir helfen:

#include "asuro.h"
int main(void)
{
Init();
StatusLED(GREEN);
while (1)
{
FrontLED(ON);
Sleep(32000);
FrontLED(OFF);
Sleep(32000);
}
return 0;
}

Bei diesem Programm leuchtet die StatusLED grün und die FrontLED dauerhaft. Blinkt also nicht.
Dann habe ich ein Code geschrieben um den Zeitbeerich einfach mal auszutesten, aber auch kein blinken zu erkennen.
Code für Zeittest:


#include "asuro.h"
int main(void)
{
Init();
StatusLED(GREEN);
int i;
for (i=1; i<32000; i++)
{
FrontLED(ON);
Sleep(i);
FrontLED(OFF);
Sleep(i);
}
return 0;
}

Hoffe ihr könnt mir helfen.
Chris

Sleep() erwartet einen unsigned char als Übergabeparameter, du darfst also maximal 255 der Funktion übergeben => Sleep(255).
Sleep(255) dauert 255/36 ms, also etwa 7ms. Um nun 1 Sekunde zu warten musst du die Funktion Sleep(255) 142mal wiederholen.

Um nun die FrontLED 10mal im Sekundentakt blinken zu lassen kannst du folgenden Code verwenden:


int main(void)
{

Init();

int n=0,m=0;


for(n=0;n<10;n++)
{
FrontLED(ON);
for(m=0;m<142;m++)
Sleep(255);
FrontLED(OFF);
for(m=0;m<142;m++)
Sleep(255);
}

while(1);
return 0;
}

xchrisx
19.08.2007, 14:30
Danke.
Ev. sollte ich die Doku der Funktionen genauer durchlesen! ;)

A.Hoffmann
19.08.2007, 15:09
Hallo

Ich Glaube mit der Orginal Sleep Funktion, kann man nur eine
Verzögerung von 3,5 mili Sekunden erreichen.
Die Variable count72khz wird von der Interrupt Routine
für den Timer / Counter 2 mehr als 72000 mal pro Sekunde
hochgezählt.

Mfg
A.Hoffmann

NATHAN
23.08.2007, 10:28
Ich wuerde dir auch noch raten die neueste Asuro-Library zu installieren (Version 2.70rc3). In ihr gibt es naemlich die Funktion Msleep() mit der du die Wartezeit in Millisekunden angeben kannst. Damit sparst du dir die ganzen for Schleifen und das Programm wird uebersichtlicher.

Gruss
NATHAN

xchrisx
23.08.2007, 13:22
hab mir schon selbst ne funktion dafür geschrieben.
hab mir den asuro hauptsächlich geholt um programmieren zu üben.