PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Kann mir bitte jemand den Umgang mit _delay_ms() erklären ?



popi
11.01.2006, 18:13
... ich raff diese Doku nicht!

Hallo zusammen,

ich sehe in der Doku nur Sonderzeichen ;o)

Zumindenst werde ich nicht wirklich schlau, wie man das nun einsetzt.

Ich würde gerne einfach einen Port einschalten und dann kurze Zeit später einen anderen.

PORTB1 = 1;
_delay_ms(??);
PORTB2 = 1;

Kann mir bitte jemand helfen, wie das geht ???

Versuche schon seit über eine Stunde Hilfe zu bekommen, aber ausser dummen Sprüchen kommt leider nix.

Danke und Grüße

popi

uwegw
11.01.2006, 18:52
eigentlich ist da nichts mystisches dran..
Mit
#include <avr/delay.h>
die delay-Funktion einbinden, und dann halt zb mit
_delay_ms(1);
für ein Milisekunde Wartezeit aufrufen...

Zu beachten: die Funktion ist nur für kurze Zeiten (irgendwas bei 65 Milisekunden oder so, schau in der Hilfe nach!) ausgelegt. Ich hab mir daher einfach ne kleine Funktion geschrieben, die delay_ms einige Male aufruft:


void warte(int loop) //loop: wartezeit in ms
{
int i;
for(i=0;i<loop;i++) _delay_ms(1);
}


Nur deine Port-Befehle gehen so nicht... (oder hast du kein AVR-GCC???)

xanadu
12.01.2006, 10:49
Vorausgesetzt es ist doch AVR-GCC: vor dem #include muss noch die Taktfrequenz gesetzt werden:

#define F_CPU 1000000UL // 1 MHz
#include <avr/delay.h>

Im Installationsverzeichnis vom AVR-GCC liegt eine PDF Datei "avr-libc-user-manual". Darin ist das erklärt.