PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wait in C



servusssss
02.03.2006, 21:19
hallo leute!

ich steh irgendwie auf dem schlauch, ich versuche meinen controller zu bremsen, doch das haut nicht ganz hin. ich möchte einfach nur das ein led blickt.
es kommt mir so vor als ob der controller aus meinem wait nicht herraus kommt?

ich benutze die rn-control und hier ist mein quellcode:

#include <avr/io.h>
#define F_CPU 16000000 // 16MHz Taktfrequenz
#define SBIT(ADRESSE,BIT)(ADRESSE |=(1<<BIT)) //Makro zum setzen von einem Bit
#define CBIT(ADRESSE,BIT)((ADRESSE) &= ~(1<<BIT)) //Makro zum löschen von einem Bit

void wait(unsigned int ms);

void wait(unsigned int ms)
{
unsigned int zaehler;

while (ms)
{
zaehler = F_CPU / 5000;
while (zaehler)
{
asm volatile ("nop");
zaehler--;
}
ms--;
}
}


int main (void)
{

DDRC = 0Xff;

for(;;){

SBIT(PORTC,PC0);
wait(750);
CBIT(PORTC,PC0);
}

return 0;
}

besten dank im vorraus

servusssss

SprinterSB
03.03.2006, 08:01
SBI erfolgt unmittelbar nach CBI, das Tastverhältnis ist also praktisch gleich 1

askazo
03.03.2006, 08:08
Dein wait funktioniert, daran liegt's nicht.
Dein Fehler ist, dass Du nach dem CBIT kein wait mehr eingefügt hast. So wird CBIT aufgerufen und als nächster Befehl gleich wieder SBIT...

Da war Sprinter schneller. Man sollte nicht soviel mit Kollegen quasseln, bevor man 'Absenden' klickt....

Gruß,
askazo

super_castle
03.03.2006, 12:39
ganz einfach, so muss der kreislauf sein: warten-einschalten-warten- ausschalten und jetzt gehst du wieder gaaaaanz langsam nach vorne.

oder aber: einschalten-warten-ausschalten-warten und jetzt gehst du wieder gaaaaanz langsam nach vorne..he..he..

servusssss
03.03.2006, 21:48
Danke Leute,

für euere hilfe, funktioniert tadellos und ist ja auch logisch ](*,)

gruß servusssss

locked
05.03.2006, 21:40
Hallo,

welchen Compiler verwendest du?
Also bei mit (GCC, WinAVR) läuft der Befehl:

SBIT(PORTC,PC0);

nicht. Oder muss man da eine Spezielle include Datei einbinden?

mfg

SprinterSB
05.03.2006, 21:50
Ist wohl deprecated (veraltet) das.

Kannst du aber selber schnitzen, wenn's haben willst:



#define SBIT(sfr,bit) sfr |= 1<<(bit)
#define CBIT(sfr,bit) sfr &= ~(1<<(bit))

michaelb
06.03.2006, 14:42
Hi,



zaehler = F_CPU / 5000;


wie kommst du aus dieses? Ausprobiert oder berechnet? Wenn berechnet dann wie? Wie bist du insgesamt auf diese Wait Funktion gekommen bzw. wie lange du warten musst?

Gruß Michi

locked
06.03.2006, 21:02
Hallo,

dass finde ich echt super! Wuste garnicht, dass man Definierte Funktionen auch Werte übergeben kann. Beziehungsweise Platzhalter verwenden kann.

Danke.

mfg