PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme bei Taktung mit c++



Pathfinder
09.08.2004, 20:12
Hallo an alle,
ich habe folgendes Problem. Wollte eine IR-Fernbedienung
entwickeln, welche den SIRCS/CNTRL-S-Code verwendet.
Das ist aber erstmal egal.
Das eigentliche Problem ist, das ich versucht habe in c ein Programm zu schreiben, welches mir an einem Ausgang meines Controllers einen Takt mit definierte Impuls-, Pausenverhältnis bringen soll

Ich habe es folgendermaßen realisiert:

for(;;)
{
outp (0x00, PORTB);
for(a=0;a<8300;a++); // 8300 Takte warten, entspricht
// ungefähr 2,4ms
outp (0x01, PORTB);
for(a=0;a<8300;a++);

}

Hierbei ist das Problem, das die Anzahl der Takte die die Schleife zählt,
stark nichtlinear zu der Zeit ist die der Takt andauert.
Woran liegt das, was kann ich besser machen damit ich mir die Länge des Taktes vorher berechnen kann.

Danke im vorraus. . .

Mercator
10.08.2004, 12:37
Also er soll immer ungefähr 2ms warten...
Das kannst du mit
Sleep(2);
machen. Hier wartet er genau 2 ms.

Pathfinder
10.08.2004, 20:17
Muss ich da noch eine spezielle header-datei einbinden?
Mein Compiler kennt den Befahl sleep nicht.
Hab nur die "io.h" drin

Gottfreak
10.08.2004, 22:30
Den Befehl kenn' Ich auch nicht(und wenn der Compiler den Takt nicht kennt, kann auch keine Funktion eine davon unabhängige Zeit warten.).
Die Delay.h enthält zwei Warteschleifen. In der Datei steht auch als Kommentar drin, wie lange die jeweils dauern.

Mercator
11.08.2004, 11:35
Der Befehl Sleep(ms) ist in c++ vorhanden ("Probleme bei Taktung mit c++").
Wenn du ihn benutzen willst musst du die iostream.h einbinden.

D.Stolarek
11.08.2004, 11:42
beim c compiler müsste es den geben ich arbeite schließlich mit c und um mit cout und cin zu arbeiten brauche ich iostream.h
also der müsste gehen

Pathfinder
11.08.2004, 21:04
Danke für die Postings, aber hinbekommen habe ich das immer noch nicht.
Ich zeig mal den Programmtext.

#include<sleep.h>
#include<avr/io.h>

int main(void)
{
sleep(2);
return(0);
}


Und die Fehlermeldung dazu die der Compiler rausspuckt:

C:\Dokumente und Einstellungen\Franz\Desktop\Roboter\Programme\Test 01/
Intervalltest.c:8: undefined reference to `sleep'

Also es scheint ja das der Compiler das sleep an sich findet aber irgendein Problem mit dem Wert 2 hat, so verstehe ich das, aber ich weiss nicht was falsch sein soll.

Wäre euch sehr verbunden wenn ihr mir helfen könntet.

seitenmaster
26.08.2004, 15:39
Hi, das ist ja auch wieder nur C ohne iostream.h , da kennt er das sleep() nicht. Aber ich kann in meiner *.cpp Datei leider kein iostream.h einbinden, findet er nicht.

04.11.2004, 20:30
Bei mir kam das gleiche! Ich habe dann einfach Sleep groß geschrieben am Anfang und jetzt geht es!

klucky
04.11.2004, 21:51
Kannst auch nen Timer verwenden! Hab hier nen Quellcode mit nem Timer gepostet https://www.roboternetz.de/phpBB2/viewtopic.php?t=4337 !

22.12.2004, 10:03
Leute schreibt das S bei sleep einfach groß dann gehts:)