Forum: Mikrocontroller und Digitale Elektronik Delay.h


von Spider (Gast)


Lesenswert?

Hallo,

Es gibt ja die Datei delay.h. Wie aber kann ich diese Funktionen
benutzen.

#ifndef AVR_DELAY_H
#define AVR_DELAY_H 1

#include <inttypes.h>

/* 8-bit count, 3 cycles/loop */
static _inline_ void
_delay_loop_1(uint8_t __count)
{
  asm volatile (
    "1: dec %0" "\n\t"
    "brne 1b"
    : "=r" (__count)
    : "0" (__count)
  );
}

Ich habe 8MHz und möchte eine Funktion delay_µs() haben.
Woher weiß die funktion meinen Quarztakt, und wie bennen ich die
Funktion um? (mit Makros??, wenn ja wie geht soetwas)

Vielen Dank

Spider

von OldBug (Gast)


Lesenswert?

Diese Funktion kennt gar keinen Takt, sondern benötigt für einen
Druchlauf 3 Zyklen.
Bei 8 MHz sind das 0,375µs.
Für eine Mikrosekunde ergibt sich also:

 1/0,375 = 2,6666...

D.h.: Rufst Du _delay_loop_1(2) in Deinem Programm aus, so liegst du
immer weit unter dieser Mikrosekunde. Führst Du _delay_loop_1(3) aus,
so liegst Du etwas weniger weit über der Mikrosekunde.

Falls Du eine Funktion delay_ms verwenden kannst, dann update mal Dein
WinAVR. Da ist eine neue delay.h enthalten. Du musst nur vor dem
Include der delay.h die Taktfrequenz per #define angeben (genaueres in
der avr-libc-Doku).

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.