wtorek, 17 stycznia 2017

Zaginiony delay w PIC



W którymś momencie przygody z mikrokontrolerami PIC staniemy przed problemem braku funkcji opóźniających tzw delay. O ile w AVR-ach mamy zaimplementowane opóźnienia w bibliotece Util kompilatora AVR-GCC o tyle przeglądając standardowe biblioteki kompilatora XC16 nie znajdzemy ani biblioteki Util ani delay.
Możemy oczywiście w tym momencie zakasać rękawy i samemu napisać takie funkcje ale ludzie w 21 wieku są z natury bardziej leniwi niż ich protoplaści. Dlatego zainspirowany lenistwem zacząłem głębiej grzebać w helpie MPLAB-X. Efektem grzebania było znalezienie małej niepozornej biblioteczki zaginionej w czeluściach kompilatora XC16 - <libpic30>

Biblioteka daje nam dostęp do trzech funkcji :

__delay_ms(unsigned long)

__delay_us(unsigned long)

__delay32(unsigned long cycles)

Dwie pierwsze funkcje nie wymagają komenatrza.
Argumentem funkcji __delay32() jest ilość cykli zegara o jaką chcemy uzyskać opóźnienie.
Należy jednak mieć na uwadze ograniczenie od dołu, kóre ma wartosć 12 cykli, taką minimalną ilość możemy podać jako argument do funkcji __delay32().Jeśli podamy mniej to i tak funkcja odliczy nam 12 cykli.Ważne jeszcze jest to aby przed dołączeniem biblioteki <libpic30> podać wartość ustawionego zegara . Spójrzmy zatem jak to powinno poprawnie wyglądać :

#define FCY 40000000UL // dla zegara 40 MHz
#include <libpic30.h> // biblioteka dająca dostęp do delay-i.

Pamiętajmy jednak aby funkcji delay nie nadużywać w programach i traktować je jako zło konieczne.
W wielu przypadkach delay możemy zastąpić m.in timerami programowymi.


Brak komentarzy:

Prześlij komentarz