Przeciwnik : PIC24HJ128GP502 obudowa 28 nóżkowa DIP wąska .
Czemu ten model ?? ano ma na pokładzie dosyć bogate peryferia m.in CAN , DMA, zegar RTC i to mnie zachęciło
Dokładna specyfikacja :
http://www.microchip.com/wwwproducts/en/PIC24HJ128GP502
Żródło zakupu : ebay.com ok 6.8 USD za szt.
Wybrane uzbrojenie przeciwnika :
- architektura 16 bitowa (1 cykl na jedną instrukcję)
- CPU Speed (MIPS) 40
- pamięć programu 128 kB
- RAM 8 kB
- Peryferia : 2xUART, 2xSPI, 1xI2C, CAN, RTC (zegar czasu rzeczywistego), IrDA (encoding and decoding hardware),LIN
- DMA 8 kanałów
- 5 x Timer 16 bitowy
- 2 x Timer 32 bitowy
- 1 x Timer dla RTC
inne nie wymienione opcje.
Zasoby wojsk własnych :
- MPLAB-X IDE + MPLAB Code Configurator + kompilator XC16 pobrane ze strony producenta i zainstalowane na Linux Mint ver 17.3 Wszytko w wersji bezpłatnej, Trzeba jednak zauważyć, że kompilator w wersji bezpłatnej nie optymalizuje w pełni kodu wynikowego czego efektem jest mniej optymalny kod zajmujący więcej pamięci. Jest to jakaś wada ale mając na uwadze , że pamięci mamy sporo nie dostrzeżemy tego mankamentu w boju.
- programator PICKIT3
Pierwsze starcie :
- zdobycie i rozpoznanie planów przeciwnika w tym zapoznanie się z datasheet, dodatkowymi materiałami udostępnionymi na stronie producenta microchip.com .
Wnioski z rozpoznania : o ile datasheet w wykonaniu Atmela jest lekko strawny i przyjemny w odbiorze z wyczerpującą ilością informacji o tyle w przypadku PIC-a na pierwszy rzut oka delikatna niestrawność. PIC jednak dostarcza wyczerpujące informacje w dodatkowych materiałach i to już sprawia , że czujemy się lepiej.
- ustawienie zegara : peryferia i zegar konfigurujemy podobnie jak w ARM-ach ale w przypadku PIC zdecydowanie sympatyczniej i prościej to się dzieje , aczkolwiek w gąszczu dostępnych trybów można się na początku pogubić i jak widzę ludzie w sieci mają problem z tym zagadnieniem . Producent udostępnia wtyczkę do MPLAB-X IDE w postaci MPLAB Code Configurator, ustawiamy tutaj dowolne peryferia za pomocą klikania i pisma obrazkowego. Zdecydowanie ułatwia to początki nauki specyfiki PIC-ów ,ponieważ wtyczka wypluwa gotowe kody konfiguracyjne i stąd możemy szybko zapoznać się np. z ustawieniem dowolnego Timera w dowolnej konfiguracji i specyfiką dyrektyw.
Wszystko fajnie i nawet pięknie ale niestety wtyczka MPLAB Code Configurator była trochę wredna i nie obsugiwała mojego wypasionego mikrokontrolera. Spis obsługiwanych mikrokontrolerów przez wtyczkę jest na stronie producenta microchip.com/mcc.
W tym momencie trochę się obraziłem na microchipa ale co począć przecież nie wyrzucę z tego powodu procka do śmieci ,będzie trudniej ale pójście na łatwiznę podobno czasami nie popłaca.
Zegar skonfigurowałem na ok.40 MHz przy użyciu oscylatora wewnętrznego 7.37 MHz i PLL. Co ciekawe rdzeń procesora jest taktowany dwa razy szybciej czyli ok.80 MHz.
Najobszerniejsze i wyczerpujące informacje dotyczące ustawienia i trybów zegara uzyskałem z materiałów dodatkowych dostępnych na stronie microchipa : http://ww1.microchip.com/downloads/en/d ... 70308b.pdf
Na początku użyłem przykładowych kodów zawartych w w/w materiałach ale kompilator był uprzejmy mnie poinformować , że niektóre fragmenty kodu są już w przestarzałej konwencji i należy to zmienić więc zmieniłem .
(Uwaga w kodach od Microchipa jest błąd w zamianie N1 z N2)
Poniżej kod konfiguracyjny dla ustawienia zegara .
1 #include "xc.h" // wykrywa rodzaj procka i includuje odpowiedni plik nagłówkowy 2 //plik nagłówkowy "p24HJ128GP502.h" znajduje się w katalogu kompilatora XC16 3 #include <stdio.h> 4 #include <stdlib.h> 5 /* 6 * to co możemy ustawić za pomocą '#pragma' jest dostępne w pliku 7 * xc16/docs/config_index.html 8 */ 9 #pragma config JTAGEN = OFF 10 // Watchdog timer enable/disable by user software 11 #pragma config FWDTEN = OFF 12 13 //********************Start Ustawień Zegara************************ 14 /* 15 * Fcy - zegar instrukcji , Fosc - zegar rdzenia (jest zawsze dwa razy wiekszy 16 * od zegara instrukcji)) Ustawiamy zegar instrukcji na 40 MHz z wewnętrznego 17 * oscylatora Fin=7.37 MHz w/g wzoru Fcy=Fosc/2 gdzie Fosc=Fin x (M/(N1+N2)) 18 * gdzie M=43, N2=2, N1=2 ustawiane w rejestrach PLLFBD/PLLPOST/PLLPRE 19 */ 20 //Select Internal FRC (Fast RC Oscillator) 21 #pragma config FNOSC = FRC // FOSCSEL-->FNOSC=0b000 (Fast RC Oscillator (FRC)) 22 //Enable Clock Switching and Configure 23 #pragma config FCKSM = CSECMD //FOSC-->FCKSM=0b01 - włącz zegar 24 #pragma config OSCIOFNC = OFF //FOSC-->OSCIOFNC=1 - Fcy będzie na pinie OSCO 25 26 int main(void) { 27 28 //Config PLL prescaler, PLL postscaler, PLL divisor 29 PLLFBD = 41 ; //M=43 (0 bit to 2 stąd 41 = 43 patrz w rejestrze), tutaj 3.685 x 43 = 158.455MHz
30 CLKDIVbits.PLLPRE=0 ; //N1=2 , tutaj 7.37 MHz / 2 = 3.685 MHz
31 CLKDIVbits.PLLPOST=0 ; //N2=2 , tutaj 158.455 MHz / 2 = 79.2275 MHz (Fosc)
32 /* 33 * UWAGA przerwania muszą być wyłączone podczas wywoływania poniższych 34 * dwóch funkcji __builtin_write_...brak definicji w pliku nagłówkowym 35 * to wewnętrzne funkcje kompilatora patrz help M-LAB IDE 36 * i datasheet str 140(11.6.3.1 Control Register Lock) 37 */ 38 //Initiate Clock Switch to Internal FRC with PLL (OSCCON-->NOSC = 0b001) 39 __builtin_write_OSCCONH(0x01); //tutaj argumentem jest wartość z NOSC 40 //Start clock switching 41 __builtin_write_OSCCONL(0x01); 42 43 //Wait for Clock switch to occur 44 while(OSCCONbits.COSC !=0b001); 45 46 //Wait for PLL to lock 47 while(OSCCONbits.LOCK !=1) {}; 48 //**************************Koniec ustawień zegara*********************** 49 /* 50 * wyłączamy ADC , wszystkie piny chcemy mieć cyfrowe 51 * pojedyńczo piny analogowe wyłączamy w rejestrze AD1PCFGL 52 * Po resecie procka piny oznaczone ANx są w trybie analogowych wejść. 53 */ 54 PMD1bits.AD1MD=1 ; //wyłączamy ADC 55 /* 56 * ustawiamy wszystkie piny analogowe (oznacznone ANx) jako cyfrowe 57 * do zmiany mamy piny AN0-AN5 i AN9-AN12 co daje hex na 16 bitach = 0x1E3F 58 */ 59 AD1PCFGL = 0x1E3F ; 60 while(1) 61 { 62 //Główna Pętla Programu 63 } 64 65 return 0; 66 }
Reasumując
wejście w świat PIC-a było zaskakująco łatwe i przyjemne, zarówno od
strony softu jak i sprzętu oraz dostępnych informacji, kuszą tutaj
bogate peryferia w szczególności w wersjach 16 i 32 bitowych a dla
hobbystów miłe , że to wszystko w przyjaznych obudowach DIP. Dotychczas
nie wychylałem się z podwórka AVR-ów ale po pierwszym ataku na PIC24
widzę, że warto .
http://ww1.microchip.com/downloads/en/devicedoc/70308b.pdf
Pozdrawiam
picmajster.blog@gmail.com
Zakupiłem czy ktoś miał z tą firmą problemy
OdpowiedzUsuń