Same procesorki PIC nie są najgorsze, mimo że nie wyróżniają się jakoś specjalnie od AVR. Dużo więcej problemów sprawia natomiast środowisko programistyczne. Zainstalowałem MPLAB X IDE v.1.85 wraz z kompilatorem C XC8 (v 1.20).
Ogólnie w porównaniu do AVR jest dużo gorzej. Kompilator w wersji darmowej nie pozwala wybrać optymalizacji, co oznacza że:
1) Nasz kod wynikowy będzie prawdopodobnie dużo za duży;
2) Nie wiemy, czy poprawnie zachowywać się będą funkcje typu “delay()”;
Kolejny problem: brak jednoznaczności. Wiele przykładowych kodów znalezionych w internecie nie zadziała. Brak “typowych” bibliotek jak inttypes.h, lub delay.h. Brzmi to może śmiesznie, ale uruchamiając pierwszy program typu “Hello World” migający diodą, brakuje takich funkcji.
Napotkałem dziwne problemy z ustawianiem bitów. Wydają się nie działać kody tego typu:
T2CON |= (1<<TMR2ON)|(1<<T2CKPS1);
, natomiast kod taki:
T2CON = 0x06;
już tak. O co chodzi?
Nie spodziewałem się, że będzie można wykonywać operacje na pojedynczych bitach. Tymczasem taki zapis jest poprawny:
TMR2ON =1;
Zauważyłem, że niektóre rejestry (dokładnie np. STRA) nie zerują się po resecie.
Nie mogę się też połapać, jak ustawiać w programie bity konfiguracyjne procesora. Można znaleźć trzy składnie.
Pierwsza:
#FUSES NOWDT
Druga:
#pragma config WDTEN = OFF
I trzecia:
__config _WDT_OFF
Której używać?
Jeśli macie sugestie, jak rozwiązać moje problemy, proszę piszcie w komentarzach.
0. Problemy z programami wynikają z tego, że wiele programów w sieci było napisanych w starym środowisku MP LAB, na stary kompilator C.
1. Operacje na bitach są zupełnie normalne dla chyba wszystkich rodzin PIC. Polecam zapoznać się z plikiem definicji dla choćby jednego uC i będziesz widział jak łatwo z tego korzystać.
2. Delay… na co to komu? W normalnym programie nie ma żadnych takich funkcji.
3. Configi w MPLAB X załatwia się dość łatwo.
– otwórz dowolny szablon projektu
– na samej górze pliku main.c powinna być informacja jak uruchomić narzędzie konfiguracyjne (Window -> Configuration Bits) czy jakoś tak 😉
– w oknie wybierasz sobie opcje, które są dość dokładnie opisane
– klikasz generuj kod
– wygenerowany kod możesz zapisać w pliku i dołączyć do programu jako include’a (.h) lub ten samo kod możesz wkleić do pliku main przez Ctrl C/Ctrl V
4. Owszem uC PIC wyróżniają się pod wieloma względami jeśli porównasz je z AVR. O ile rdzeń jest archaiczny i stos mikroskopijny, to niektóre peryferia są dużo lepsze niż w AVR. Nie mam doświadczenia z PIC 8-bit, ponieważ pracowałem tylko z 16-bitowymi, ale obwody analogowe (OpAmp), oszczędność energii, bramkowane liczniki (jak w ’51) czy bardzo elastyczne remapowanie funkcji na pinach to jest coś czego w AVR nie znajdziesz.