Nowe mikrokontrolery Microchip rodziny dsPIC33CH

Rodzina mikrokontrolerów dsPIC33 jest głównie przeznaczona do stosowania w układach automatyki i sterowania, które wymagają wykonywania złożonych algorytmów. Wydajny 16-bitowy rdzeń RISC jest zintegrowany z jednostką Digital Signal Procesing (DSP) zoptymalizowaną do szybkiego wykonywania algorytmów przetwarzania cyfrowego. Takiemu połączeniu producent nadał nazwę Digital Signal Controllers – DSC.

Jednym z bardziej wymagających zastosowań mikrokontrolerów dsPIC33 jest sterowanie bezszczotkowymi silnikami elektrycznymi BLDC, ale też układami sterowania mocą, w tym zasilaczami impulsowymi. Bardzo ważnym rynkiem, który chłonie dużą ilość elementów elektronicznych, również mikrokontrolerów, jest rynek elektroniki motoryzacyjnej. To zastosowanie jest bardzo wymagające dla elementów elektronicznych. Jest to spowodowane pracą w bardzo trudnych warunkach środowiskowych: narażeniem na skrajne temperatury otoczenia, zmiany wilgotności, czy przepięcia elektryczne. Podobnie jest w przypadku urządzeń medycznych. Praca w trudnych warunkach i coraz to większe oczekiwania co do niezawodności i funkcjonalności wymagają od producentów stałej modernizacji rodzin mikrokontrolerów. Przykładem takiej modernizacji jest nowa rodzina dsPIC33CH.

Wiele zaawansowanych układów sterowania wymaga szybkiej reakcji na przychodzące zdarzenia. Może to być na przykład sygnał z czujników umieszczonych na wale silnika o tym, że jego obroty mają zbyt niską wartość, co może oznaczać przeciążenie. Układ sterowania powinien zareagować na ten sygnał tak szybko jak to możliwe, żeby zapobiec uszkodzeniom silnika, układu sterowania oraz zasilania i w końcu uszkodzeniu mechanicznego układu napędzanego przez silnik. W klasycznych rozwiązaniach najszybsza reakcja na zdarzenie jest możliwa przy wykorzystaniu przerwań. Rodzina dsPIC33CH zawiera ciekawe rozwiązania znacznie przyspieszające przyjęcie i obsługę przerwań. Ale główną modyfikacją jest umieszczenie w strukturze mikrokontrolera dwu niezależnych rdzeni działających w układzie Master-Slave tak jak to zostało pokazane na rysunku 1.

Wielordzeniowe mikroprocesory to jest już dość stara idea (jak na standardy rozwoju elektroniki). Nikogo nie dziwią mikroprocesory czterordzeniowe montowane do współczesnych smartfonów niekoniecznie nawet tych flagowych. Tu jednak mamy do czynienia z mikrokontrolerami przeznaczonymi dla układów sterowania, a takie rozwiązania do niedawna były dostępne. Jak widać na rysunku 1, każdy z rdzeni ma swoją magistralę dla układów peryferyjnych i swoją magistrale danych. Każdy z rdzeni posiada również swój niezależny zestaw układów peryferyjnych i swoja pamięć RAM użytkownika. Taka budowa pozwala każdemu z rdzeni na jednoczesne wykonywanie dwu zadań zupełnie niezależnie od siebie. Trzeba tylko pamiętać, że wyprowadzenia mikrokontrolera są współdzielone pomiędzy obie jednostki. Jeżeli układ peryferyjny rdzenia przejmie kontrolę nad wyprowadzeniem mikrokontrolera, to drugi rdzeń nie ma możliwości używania tego wyprowadzenia.

W praktyce oba rdzenie można programować i debugować oddzielnie, maja własne niezależne kontrolery przerwań, generatory zegara i moduł przypisywania wyprowadzeń do linii układów peryferyjnych PPS. Mikrokontrolery dsPI33CH to w praktyce dwie kompletne nowoczesne jednostki dsPIC33.

Rysunek 1. Schemat blokowy mikrokontrolera z rodziny dsPIC33CH

Wykorzystanie potencjału dwurdzeniowej jednostki wymaga odpowiedniego oprogramowania. Po wygenerowaniu kodu programu dla obu jednostek pamięć Flash rdzenia MASTER jest zapisywana w trakcie programowania mikrokontrolera kodem dla jednostki MASTER i kodem dla jednostki SLAVE. Kiedy sekwencja zerowania mikrokontrolera (POR) się wykona, to kod przeznaczony dla rdzenia SLAVE jest automatycznie przepisywany do pamięci PRAM (Program RAM) rdzenia SLAVE. Potem już rozkazy rdzenia SLEVE są pobierane z pamięci PRAM i obie jednostki pracują od siebie niezależnie. Pokazano to na rysunku 2.

Rysunek 2. Transfer kodu do pamięci PRAM rdzenia SLAVE

Oba rdzenie korzystają z tych samych źródeł sygnałów zegarowych, ale maja własne niezależne, programowane moduły taktowania z układami powielania częstotliwości PLL i dzielnikami częstotliwości DIV – rysunek 3.

Rysunek 3. Układy taktowania rdzeni ze współdzielonymi źródłami sygnałów zegarowych

Dwa rdzenie pracujące niezależnie od siebie w jednym mikrokontrolerze będą najczęściej wykonywały podzielone zadania jednego układu sterowania. Konieczna jest wymiana danych pomiędzy nimi. Do tego celu został zaprojektowany specjalny interfejs MSI – Master Slave Interface.

Rysunek 4. Rdzenie połączone interfejsem MSI

MSI jest czymś w rodzaju bramy do przesyłania danych pomiędzy oboma rdzeniami i z założenia główna rolę odgrywa w nim procesor Master. Jak już wiemy oba rdzenie pracują taktowane niezależnymi zegarami i musimy przyjąć, że mogą one pracować przy znacznie różnych prędkościach taktowania. MSI powinien zapewnić synchronizację przesyłania danych. Rejestry sterujące interfejsu są umieszczane w obszarze SFR każdego z rdzeni.

MSI jest zbudowany z

  • 16 jednokierunkowych rejestrów danych Data Mailbox Registers. Kierunek przesyłania danych każdego z rejestrów jest określony przez bity konfiguracyjne fuse bit w trakcie programowania pamięci mikrokontrolera
  • 8 bloków kontroli przepływu danych Mailbox Data Flow Control Protocol Blocks indywidualnie włączanych przez fuse bits.

Port używany do zapisywania danych jest portem aktywnym, a port odczytywania danych jest portem pasywnym. Przepływ danych może być kontrolowany za pomocą automatycznie zgłaszanych przerwań, lub testowany metoda pollingu. Do transferu danych można zamiennie używać mechanizmu DMA.

Przesyłanie danych może się odbywać w dwu trybach: Mailbox-based transfer i FIFO-based transfer

Szczegółowa budowa interfejsu MSI i dokładnie opisana zasada działania jest zamieszczona w dokumencie Master Slave Interface MSI Module DS70005278B dostępnym na stronie internetowej firmy Microchip.

Podział zadania sterowania na dwa niezależne rdzenie i poprawnie napisane oprogramowanie na pewno pozwolą na wykonanie wydajnej aplikacji. Dla wielu programistów będzie to na początku trudne zadanie. Tworzenie projektu dla dwóch równolegle działających aplikacji na niezależnych rdzeniach nie jest też standardowym zadaniem programistów systemów wbudowanych, nawet dla tych, którzy programują w systemach RTOS. Pierwszym poważnym problemem będzie skonfigurowanie niezależnie dla każdego z rdzeni: taktowania, układu watchdoga, układu ICD (debugowanie kodu), współdzielenia wyprowadzeń mikrokontrolera i oczywiście układu MSI. Trzeba również mieć możliwość tworzenia kodu dla dwu rdzeni, debugowania tego kodu, a potem umieszczania go w pamięci Flash w takiej lokacji, żeby był automatycznie przepisywany do pamięci PRAM rdzenia Slave. Tu wielką pomocą będzie wtyczka MCC współpracująca ze środowiskiem MPLAB X IDE, a także dostępny on-line po adresem http://microchipdeveloper.com/mcc:mplab-code-configurator-support-for-dual-core-devices#toc19, przewodnik programisty Microchip Developer z zamieszczonym dokumentem MPLAB Code Configurator Support for Dual-Core Devices. Proces konfigurowania obu rdzeni jest dość rozbudowany i przebiega wieloetapowo. Wiele konfiguracji jest zapisywanych w nieulotnej pamięci konfiguracyjnej (fuse bit). W trakcie pracy nad projektem trzeba importować te ustawienia z rdzenia Master do rdzenia Slave. Wspomniany wyżej przewodnik powinien rozwiać wszelkie wątpliwości dotyczące konfiguracji rdzeni, tworzenia dwóch niezależnych aplikacji i współpracy pomiędzy nimi. Opisany jest też tam „prosty” program przykładowy wymieniający informację pomiędzy rdzeniami i sygnalizujący to dwiema diodami LED sterowanymi przez rdzenie Master i Slave.

Rysunek 5. Typ mikrokontrolera z wyborem projektu MASTER/SLAVE

Kod aplikacji wykorzystującej dwurdzeniowość jest z oczywistych względów dzielony na dwie prawie niezależne części powiązane wspólnymi ustawieniami bitów konfiguracyjnych.

Najpierw tworzymy projekt dla rdzenia MASTER wybierając nazwę mikrokontrolera bez sufiksu SL tak jak to zostało pokazane na rysunku 5. Do tego celu wykorzystane jest środowisko programowe IDE MPLAB X (od wersji 5.10) z zainstalowana wtyczką MCC (od wersji 3.66). W tym projekcie,, używając wtyczki MCC, trzeba z listy Device Resources dodać element SLAVE CORE – rysunek 6. Pozwoli to na zdefiniowanie wspólnych ustawień dla rdzenia Master i Slave, które potem będą importowane przez projekt tworzony dla rdzenia Slave.

Rysunek 6. MCC – dodanie definicji SLAVE CORE

Jak się łatwo domyślić, jedną z ważniejszych definicji z punktu widzenia pracy z dwoma rdzeniami będzie konfigurowanie interfejsu MSI. Ustawienia MSI są zapamiętywane w pamięci konfiguracyjnej. Każdy rdzeń ma swoją pamięć konfiguracyjną i po skonfigurowaniu MSI i innych ustawień dotyczących rdzenia Slave (w projekcie dla rdzenia Master), trzeba je potem zaimportować do pamięci konfiguracyjnej projektu dla rdzenia Slave. Na rysunku 7 została pokazana przykładowa konfiguracja MSI wykonywana za pomocą MCC. Zdefiniowano tu 2 protokoły A i B. Protokół A przesyła 4 bajty danych w kierunku Slave->Master, a protokół B 4 bajty danych w kierunku Master->Slave. Każda z tych transmisji może zgłaszać przerwanie. Priorytet i kontekst tych przerwań jest definiowany w oknie Interrupt Manager.

Rysunek 7. Definiowanie Master Slave Interface za pomocą wtyczki MCC

W projekcie dla rdzenia Master jest generowany kod umieszczany w pamięci Flash przeznaczony dla tego rdzenia. Ale jak już wiemy projekt musi również umieścić w pamięci Flash kod dla rdzenia Slave, który po zakończeniu zerowania jest przepisywany do pamięci PRAM (rysunek 2). Żeby ten projekt „wiedział” jaki kod ma pobrać, musi mieć zdefiniowaną nazwę projektu dla rdzenia Slave. Nadanie nazwy projektu programu rdzenia Slave jest wykonywane w oknie Slave Project Name – rysunek 8.

Potem musimy utworzyć projekt dla rdzenia Slave z mikrokontrolerem o nazwie właściwiej dla projektu Slave (rysunek 5). Ten projekt musi mieć nazwę dokładnie taką samą jaką wpisujemy w oknie Slave Project Name.

Rysunek 8. Nadanie nazwy projektu Slave

Po wykonaniu konfiguracji trzeba układzie peryferyjnym Slave Core kliknąć na Save Master Settings, żeby zapisać ustawienia w pliku MyConfig.mc3. Następnie otwieramy projekt dla rdzenia slave o nazwie dsPIC33CHSlave i uruchamiamy wtyczkę konfiguratora MCC. Tam w zakładce System pojawi się element Master Core. W tym elemencie klikamy na przycisk Load Slave Settings from Master Configuration. – rysunek 9. Odszukujemy w katalogu projektu dsPIC33CHMaster plik MyConfig.mc3 i importujemy ustawienia dla rdzenia slave wykonane w projekcie dla rdzenia Master. W pierwszym momencie może się to wydawać trochę zagmatwane, ale w rzeczywistości jest to logiczne działanie.

Rysunek 9. Element Master Core i importowanie ustawień rdzenia Master w projekcie o nazwie dsPIC33CHSlave

Wbudowanie dwu pełnoprawnych rdzeni (z punktu widzenia wydajności i zasobów) daje programistom duże możliwości projektowania wydajnych układów sterowania i nadzoru. Jednak to nie wszystko co oferują nowe jednostki Microchipa w tej dziedzinie. Kolejnym, może nie tak spektakularnym jak dwa rdzenie, ale również istotnym ulepszeniem jest modyfikacja pracy układu przerwań.

Układ przerwań może być bardziej lub mniej rozbudowany, ale podstawowa zasada działania jest podobna. Źródło przerwania musi być odblokowane i mieć zaprogramowany priorytet (jeżeli jest taka możliwość). Przyjęcie przerwania powoduje „zawieszenie” wykonywania programu głównego i rozpoczęcie wykonywania procedur obsługi przerwania. W wielu układach sterowania kluczowy jest czas upływający od momentu zaistnienia zdarzenia wywołującego przerwanie do momentu rozpoczęcia wykonywania kodu obsługi przerwania. Niestety, nigdy nie następuje to natychmiast, bo mikrokontroler ma do wykonania po drodze kilka czynności. Załóżmy, ze zdarzenie jest asynchroniczne, czyli może się pojawić w momencie nie zsynchronizowanym z zegarem taktującym mikrokontroler. Zanim stanie się cokolwiek innego mikrokontroler musi dokończyć wykonywanie bieżącego rozkazu. Następnie inicjowana jest sekwencja kolejnych czynności:

  • Na stos lub do dedykowanych buforów w pamięci RAM jest zapisywany licznik rozkazów (PC) po to, by po zakończeniu obsługi przerwania program mógł wrócić w to samo miejsce,
  • Układy logiczne sterownika przerwań ładują do licznika rozkazów wektor przerwania, czyli adres, pod którym jest najczęściej zapisany adres skoku do procedury obsługi przerwania,
  • Wykonywany jest skok do obsługi przerwania,
  • Procedura obsługi przerwania musi w pierwszej kolejności zachować wartość rejestrów, które są współdzielone z programem głównym – na przykład rejestrów roboczych, akumulatora jednostki DSP i statusu.

Dopiero od tego momentu można wykonać sekwencję rozkazów reagujących na zaistniałe zdarzenie. Schematycznie dla przerwania przychodzącego dla instrukcji wykonywanej w jednym cyklu zostało to pokazane na rysunku 10.

Rysunek 10. Sekwencja czynności wykonywanych w czasie przyjmowania i wykonywania przerwania

Pierwszym, intuicyjnym sposobem na skrócenie czasu reakcji jest zastosowanie szybszego mikrokontrolera. Może to być jednostka taktowana szybszym zegarem i/lub jednostka z bardziej optymalnym rdzeniem (rozkazy wykonywane w mniejszej ilości cykli, architektura RISC). W przypadku rodziny mikrokontrolerów dsPIC33CH według danych producenta zwiększono wydajność dwukrotnie w porównaniu do mikrokontrolerów dsPIC33 starszej generacji. Na przykład starsza rodzina dsPICFJ64GS ma katalogową wydajność na poziomie 50 MIPS, natomiast dsPIC33CH dla rdzenia Master na poziome 90 MIPS, a dla rdzenia Slave na poziomie 100 MIPS. Różnica wynika najprawdopodobniej z tego, że rdzeń Slave używa szybszej pamięci PRAM. Niestety nie znalazłem metodologii pomiaru wydajności rdzenia i nie wiem jak ten wzrost się ma do czasu wykonania jednej instrukcji. Jednak należy się spodziewać, że w nowych mikrokontrolerach rozkazy będą wykonywane szybciej, a co za tym idzie czas reakcji na zdarzenie będzie krótszy.

Kolejnym wąskim gardłem jest konieczność zachowania zawartości rejestrów współużytkowanych przez program główny i procedurę przerwania. Procedura przerwania musi na samym początku zapamiętać, czyli w praktyce przesłać na stos, zawartość rejestrów roboczych W, akumulatora DSP (jeżeli będzie używany) i rejestru statusowego. Ostatnimi czynnościami kończącymi obsługę przerwania jest odtworzenie zawartości tych rejestrów (zdjęcie ze stosu). Każdy z rdzeni dsPIC33CH ma 16 rejestrów ogólnego przeznaczenia W0….W15. Zależnie od tego co ma robić procedura przerwania, trzeba część tych rejestrów zachowywać na stosie, a po zakończeniu odtworzyć ich zawartość pobierając ze stosu. Żeby tego nie robić programowo, bo zabiera to czas procesora w CPU, wbudowano cztery zestawy rejestrów alternatywnych W0…..W14. Jednostka DSP ma również wbudowane 4 zestawy alternatywnych rejestrów akumulatora DSP. Producent nazywa zestaw rejestrów alternatywnych Interrupt Context Saving Registers.

Zestaw rejestrów alternatywnych jest powiązany z poziomem priorytetu przerwania. To powiązanie jest zapisywane w rejestrze konfiguracyjnym FALTREG w momencie programowania pamięci mikrokontrolera. Jeżeli programista chce to przyporządkowanie zmienić w trakcie pracy programu, to może użyć dedykowanego rozkazu CTXTSWP.

Po zgłoszeniu przerwania o zadanym priorytecie, układy logiczne automatycznie przełączają CPU na używanie przez procedurę obsługi zaprogramowanego zestawu rejestrów alternatywnych, przypisanych do tego priorytetu. Program obsługi przerwania nie niszczy zawartości zestawu rejestrów podstawowych i nie trzeba ich zachowywać na stosie. Klika zestawów rejestrów alternatywnych umożliwia obsługę przerwań zagnieżdżonych.

Rysunek 11. Alternatywne rejestry W, akumulatora DSP i rejestr statusu

Na rysunku 12 pokazano okno konfiguracji układu przerwań z wykorzystaniem wtyczki MCC.

Rysunek 12. Konfigurowanie priorytetów przerwań i przełączania kontekstu w konfiguratorze MCC

Dla każdego ze źródeł przerwań można indywidulanie przypisać priorytet (kolumna Priority) i zestaw rejestrów alternatywnych (Context). W naszym przykładzie konfigurowane jest przerwanie zewnętrzne EX_INT INT0 z priorytetem 6 i zestawem rejestrów CTXT4.

Szybka reakcja na przerwanie to bardzo duża zaleta w układach sterowania z krytycznym czasowo wymaganiem reakcji na zdarzenia, ale rodzina mikrokontrolerów dsPIC33CH oferuje również tradycyjnie dla Microchipa wysokiej jakości układy peryferyjne.

W czasach, kiedy wiele urządzeń pracuje w sieci LAN i jest podłączonych do Internetu, dużego znaczenia nabiera problem szeroko rozumianego bezpieczeństwa funkcjonalnego. W mikrokontroler wbudowano funkcje mające na celu zbudowanie bezpiecznie działających aplikacji. Jest to test pamięci RAM (BIST) do testowania poprawności pamięci RAM, zabezpieczenie przed dostępem do zawartości pamięci Flash CodeGuard, Deadman Timer DMT, moduł korekcji błędów ECC wbudowany w kontroler pamięci Flash, a także moduł generujący wielomian kontrolny CRC.

Auto-test pamięci RAM może być uruchamiany po zerowaniu mikrokontrolera lub na żądanie, w trakcie normalnej pracy. Test sprawdza poprawność działania komórek we wszystkich lokacjach pamięci RAM i w przypadku wykrycia uszkodzenia komórki RAM, sygnalizuje to odpowiednimi bitami statusowymi.

System ochrony zawartości pamięci nieulotnej Flash nazwany CodeGuard jest dzielony na 3 segmenty: Boot Segment, General Segment i Configuration Segment. Najwyższy stopień ochrony ma segment Boot, a segment General, w którym jest umieszczony kod użytkownika najniższy.

Główną funkcją Deadman Timer DMT jest monitorowanie prawidłowości wykonywania programu użytkownika. DMT jest licznikiem synchronicznym zliczającym ilość cykli pobrania rozkazów (fetch). Jeżeli program użytkownika nie wyzeruje licznika DMT po ustalonej liczbie pobrań, to zgłaszane jest wewnętrzne przerwanie i program może zareagować na takie zdarzenie. Użytkownik programuje limit czasu zliczania lub okno określające zakres zliczanych pobrań.

Moduł korekcji błędów pamięci Flash ECC wykrywa błędy na jednej pozycji w słowie (błędy 1-bitowe) i automatycznie je koryguje. W czasie zapisywania danych do pamięci (programowanie mikrokontrolera) ECC generuje 7-bitowy wielomian kontrolny dla każdych dwóch słów instrukcji. Te wielomiany są zapisywane w specjalnym obszarze pamięci nie dostępnym dla programu użytkownika (do odczytu i zapisu). W czasie odczytywania zawartości pamięci Flash (pobieranie rozkazów przez CPU) wielomian jest ponownie obliczany i porównywany z tym wygenerowanym w czasie zapisu. Brak zgodności obu wielomianów wywołuje jedną z dwu reakcji modułu ECC:

  • Dla błędu 1-bitowego następuje korekcja błędu i ponowne zapisanie komórki pamięci.
  • Dla błędu na więcej niż jednej pozycji dane w pamięci nie są korygowane ani zapisywane. Mikrokontroler wykonuje wtedy restart i odczytując odpowiedni rejestr można zidentyfikować jego przyczynę.

Zadaniem modułu CRC jest sprzętowe wyliczanie sumy kontrolnej głównie w celu zabezpieczenia przed skutkami przekłamania bloku danych transmitowanych lub odbieranych. Wyliczanie CRC jest zawsze oczekiwane przy przesyłaniu danych przez łącza radiowe. Bardziej skomplikowane algorytmy kontroli transmisji potrafią z pomocą wyliczanych sum CRC korygować błędy w przesyłanym bloku danych.

Oprócz bardziej zaawansowanych układów chroniących wykonywany kod przed błędami znajdziemy tu klasyczne rozwiązania: licznik Watchdog WDT, układ nadzoru układu taktowania Clock Monitor with Backup Ocillator i FCSN (Fail Safe Clock Monitoring).

Rodzina mikrokontrolerów dsPIC33 jest często kojarzona z układami sterowania silnikami elektrycznymi oraz ze sterownikami układów mocy. Do tego celu jest przeznaczony układ peryferyjny HSPWM. HSPWM ma osiem niezależnych szybkich układów PWM mogących generować przebiegi PWM z rozdzielczością 250 ps. Wszystkie kanały są wyposażone w programowane układy generowania czasu martwego (dead time). Według producenta HSPWM można wykorzystać w aplikacjach sterownia:

  • Inwerterów DC/DC i AC/DC
  • układami oświetleniowymi
  • Silnikami DLDC, PMSM, ACIM i SRM

Poważnie potraktowano też część analogową. Wbudowane dwa przetworniki ADC o rozdzielczości 12-bitów pracują z częstotliwością 3,5 Msps. Każdy z 24 kanałów analogowych ma swój bufor do zapisywania wyniku konwersji. Przetworniki są niezależnie wyzwalane, przy czym to wyzwalanie można dość elastycznie konfigurować.

Układy elektroniczne stosowane w motoryzacji wymagają przesyłania danych przez łącza szeregowe. Stosuje się tu tanią magistralę LIN i droższą, ale dysponującą dużymi możliwościami, magistralę CAN.

Magistrala LIN jest wykorzystywana do komunikacji z prostymi czujnikami i umożliwia tworzenie małych sieci (podsystemów). Te podsystemy mogą się potem komunikować z innymi systemami za pomocą magistrali CAN. Moduł magistrali szeregowej UART wspiera protokoły LIN2.2 ale też DMX (sterowanie oświetleniem) oraz IrDA. Podstawowym interfejsem przeznaczonym dla aplikacji automotive jest interfejs CAN Flexible Data (FD) pracujący w trybach FD i CAN2.0B.

Tradycyjnie, Microchip wspiera konstruktorów oferując im możliwość zakupu modułów ewaluacyjnych. Takim modułem jest na przykład dsPIC33CH Curiosity Development Board. Pochodzi ze znanej serii modułów Curiosity charakteryzujących się stosunkowo niską ceną i przeznaczonych do testowania mikrokontrolerów bez ponoszenia dodatkowych kosztów. Moduły mają wbudowany układ programatora/debugera, kilka prostych elementów typu przyciski, diody LED, konwerter USB/UART i złącza dla modułów rozszerzających oferowanych przez serbską firmę Mikroelektronika.

Rysunek 13. dsPIC33CH Curiosity Development Board

Oprócz modułu Curiosity można kupić moduły procesora dsPIC33CH128MP508 Motor Control i dsPIC33CH128MP508 General Purpose przeznaczone do płyt bazowych z bogatym wyposażeniem. Ale to już jest droższa alternatywa.

Podsumowanie

Rodzina mikrokontrolerów dsPIC33CH została mocno zorientowana na aplikacje wymagające krótkiego czasu odpowiedzi na zdarzenia. Zastosowane tu niestandardowe rozwiązania pozwalają na tak krótki czas reakcji, który przy standardowym podejściu do problemu jest możliwy do uzyskania jedynie dla o wiele szybszych mikrokontrolerów. Wyposażenie w dwa rdzenie z jednostką DSP, bardzo dobre układy peryferyjne, zmodyfikowany układ przerwań, układy kontroli pamięci i układy bezpieczeństwa predestynują rodzinę dsPI33CH do wielu zaawansowanych zastosowań w różnych wymagających gałęziach techniki. Tradycyjnie dobre wsparcie programowe: środowisko MPLAB IDE, wtyczka MCC i bezpłatny kompilator języka C uzupełnione przez wspomniany w tekście przewodnik po programowaniu i dostępny na stronie producenta program testowy pozwalają wszystkim chętnym na łagodne wejście w świat programowania aplikacji wielordzeniowych.

Nieco bardziej praktyczne podejście do programowania układów z rodziny dsPIC znajdziesz w artykule na naszym portalu: Dwurdzeniowe dsPIC33CH w praktyce

O autorze