Forum: Mikrocontroller und Digitale Elektronik suche "delay" für PIC(C18) alternative zu GCC


von Siegfried S. (dieleena)


Lesenswert?

hallo,

suche für mein C18 PIC Projekt eine alternative, wie man es aus dem GCC 
kennt.
die "Delay1KTCYx(42)" ist für mich sehr umständlich.

die Funktion delay_ms(500) oder __delay_us(1000) wäre sehr gut.

danke in voraus
gruß Siegfried

von Lehrmann M. (ubimbo)


Lesenswert?

#include "delays.h"                       // für die Warteschleife

Wir benutzen die Funktion Delay10KTCYx() aus der delay-Library. Da wir 
am Programmanfang die Header-Datei dieser Library eingebunden haben, 
kennt der Compiler diese Routine, und ihren Übergabeparameter. Die 
delay-Library ist eine fertig compilierte Lib-Datei im lib-Unterordner.

Die Funktion Delay10KTCYx() ist eine Warteschleife, ihre Laufzeit ist 
10000 Zyklen x übergebenem Wert. Da wir 100 als Wert übergeben, ergibt 
sich eine Laufzeit von 100x10000=1000000 Zyklen. 1 Million Zyklen sind 4 
Millionen Takte. Bei 20 MHz Takt ergibt sich 1/5 Sekunde Wartezeit.


    Delay10KTCYx(100);


Weiter Möglichkeieten:

Delay1TCY Delay one instruction cycle.
Delay10TCYx Delay in multiples of 10 instruction cycles.
Delay100TCYx Delay in multiples of 100 instruction cycles.
Delay1KTCYx Delay in multiples of 1,000 instruction cycles.
Delay10KTCYx Delay in multiples of 10,000 instruction cycles.

Alles andere ist eigentlich Compilerabhänging z.B. ob des Delay_ms() 
oder Ähnliches gibt. Ich kann dir leider nicht beantworten ob der C18 
das schon kann.

von Siegfried S. (dieleena)


Lesenswert?

hallo,
soweit verstanden. "delays.h" habe ich zur zeit eingebunden. wollte es 
nur einfacher haben.


     Delay100TCYx(1);

versuche mal ein Beispiel, hoffe das es in ordnung ist.

  1 x 100 = 100 Zyklen  entspricht 400 Takte

  bei 20MHz ist das 50.000 entspricht 0,00002s / 20ns

ups....   schreibfehler
              0,00002s  /  20µs
gruß
siegfried

von Reinhard Kern (Gast)


Lesenswert?

Siegfried Saueressig schrieb:
> hallo,
> soweit verstanden. "delays.h" habe ich zur zeit eingebunden. wollte es
> nur einfacher haben.

Hallo siegfried,

warum schreibst du dir nicht einfach ein mydelay ?

Gruss Reinhard

von Siegfried S. (dieleena)


Lesenswert?

hallo,

Delay100TCYx(  XXX  );

wie groß darf der Wert " XXX " in der Delay100TCYx(xxx) Funktion sein?

bis 255  oder 65536 ?

gruß Siegfried

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.