wtorek, 18 maja 2021

Interfejsy jako jedna z technik tworzenia kodu w embedded - zajęcia praktyczne

Sztuką jest biegle opanować tworzenie modułów oprogramowania nadających się do wielokrotnego wykorzystania, które stanowią  budulec dla dużych i niezawodnych aplikacji. W przeciwieństwie do nowoczesnych języków obiektowych, język C nie ma zbyt wielu mechanizmów pozwalających łatwo tworzyć interfejsy programisty (API), a tym bardziej mechanizmów zachęcających do opracowywania takich interfejsów. Większość programistów C korzysta na co dzień z różnego rodzaju gotowych API i bibliotek je implementujących, ale względnie niewielu tworzy i udostępnia nowe API ogólnego przeznaczenia. 

sobota, 8 maja 2021

Maszyna stanów przyjaciel embedownika :)


Maszyna stanów skończonych to pojęcie abstrakcyjne ,  definiuje zachowanie systemów dynamicznych jako maszyny o  skończonej liczbie stanów i  skończonej liczbie przejść pomiędzy tymi stanami. Definicja ta wydaje się dość abstrakcyjna , ale lepszej chwilowo nie znalazłem :).  Maszyny stanów skończonych odgrywają bardzo ważną rolę w  programowaniu w szczególności w świecie mikrokontrolerów. Umożliwiają m.in panowanie nad rozbudowaną sekwencją zdarzeń w programie i zwiększają znacząco niezawodność kodu.  W wielu przypadkach maszyna stanów w połączeniu z przerwaniami może okazać się lepszym wyborem niż np. RTOS ,choć z drugiej strony nie w każdym przypadku maszyna stanów znajdzie zastosowanie. Bardzo powszechnym obecnie nurtem jest stosowanie maszyny stanów do nieblokującej obsługi interfejsów np.I2C, SPI, UART. W szczególności ten nurt możemy zaobserwować w bibliotekach Microchipa gdzie np. taki framework jak HARMONY "wypluwa" standardowo kod oparty o maszynę stanów. Ale i w MCC widzę , że maszyna stanów zaczyna być częstym gościem . Skoro producenci MCU opierają swoje biblioteki o maszynę stanów to znaczy, że coś w tym musi być  I dlatego warto temu zagadnieniu przyjrzeć się bliżej.

poniedziałek, 3 maja 2021

STM32G0 - EXTI , konfiguracja przerwania zewnętrznego.


Konfiguracja przerwania zewnętrznego w STM32G0 dla wybranego źródła może być nie lada wyzwaniem dla osoby , która po raz pierwszy zetknie się z tym zagadnieniem. STM pogmatwał tutaj trochę i przynajmniej na początku odczujemy dyskomfort konfigurując ten moduł. W artykule postaram się pokazać jak poprawnie skonfigurować wybrany pin do współpracy z przerwaniem zewnętrznym.

czwartek, 29 kwietnia 2021

STM32G0 - randka z MDK ARM


MDK Microcontroller Development Kit
firmy Keil to najwyżej oceniane w branży zintegrowane środowisko do programowania i debugowania MCU z architekturą ARM. Jak pisze producent, MDK jest najbardziej wszechstronnym rozwiązaniem programistycznym dla mikrokontrolerów opartych na architekturze ARM i zawiera wszystkie komponenty potrzebne do tworzenia, budowania i debugowania aplikacji wbudowanych. Jeśli na rynku pojawi się jakiś nowy MCU zbudowany w oparciu o architekturę ARM wydany przez dowolnego producenta to pierwszym środowiskiem w którym on się pojawi będzie MDK Keila. W zasadzie MDK jest wzorem środowiska do którego reszta może tylko się próbować równać. W artykule zerknę na środowisko MDK przez pryzmat STM32G0.

wtorek, 13 kwietnia 2021

STM32G0 - Hello World w Segger Embedded Studio

Jestem już w posiadaniu mojej płytki dla STM32G0. Jest fajna, jest czarna i oczy cieszy. Uśmiech na gębie od ucha do ucha. Na płytce dałem niebieskiego LED-a do wykorzystania przez użytkownika, czerń z niebieskim w półmroku powala :). Lubię cieszyć się z rzeczy prostych. Czas sprawdzić czy wszystkie komponenty czyli IDE i programator będą współpracować z moją płytką. Ostatnio kolega śmiał się ze mnie, że programuję MCU nie posiadając go fizycznie na płytce :). No tak jest najzabawniej :). A śmiech służy zdrowiu :). W artykule, napiszemy pierwszy program w ultra szybkim i lekkim środowisku SEGGER-a i za pomocą miluśkiego programatorka J-Link Edu Mini, spróbujemy wgrać wsad do STM32G071KBT6 , który znajduje się na mojej płytce. Życzę sobie powodzenia :).

sobota, 3 kwietnia 2021

STM32G0 - I2C , uruchomienie sterownika dotyku CAP1296 firmy Microchip .

Zadanie jakie sobie wytyczyłem tym wpisem to zapoznanie się z interfejsem I2C w STM32G0 . Ale aby zapoznanie nie było nudne, spróbuję uruchomić przy okazji sterownik dotyku Microchipa, CAP1296. W STM32G0 w wersji 32 pin, której używam mamy do dyspozycji dwa interfejsy I2C. Przy czym ten drugi czyli I2C2 jest trochę wykastrowany z funkcjonalności w stosunku do pierwszego czyli I2C1. Ale nie będzie to przedmiotem moich dociekań. Oba interfejsy oprócz standardowych prędkości 100 i 400 kHz mają możliwość pracy z prędkością 1 Mbit/s.

niedziela, 28 marca 2021

STM32G0 - ustawienie zegara.

W STM32G0 mamy do dyspozycji cztery podstawowe źródła taktowania. 

LSI RC - wewnętrzny zegar 32kHz

LSE OSC - zewnętrzny zegar 32.768 kHz

HSI16 RC - wewnętrzny zegar 16 MHz

HSE OSC - zewnętrzny zegar 4-48 MHz

Dla wersji z USB mamy dodatkowo dedykowany wewnętrzny zegar HSI48 RC .

czwartek, 25 marca 2021

STM32G0 - zapis do rejestrów, wybrane zagadnienia.


W MCU 8-bitowych wszystko było proste, rejestry były proste, zapisy do nich były proste , życie było proste. W rejestrach nie było praktycznie pól bitowych o rozmiarze większym niż jeden bit, zapis sprowadzał się do operowania na jednym bicie .Człowiekowi było mało , więc  stworzył 32-bitowe monstra. Rozmowa z nimi drastycznie się skomplikowała, wydłużyły się rejestry pojawiły się pola bitowe . Skoro rozmowa z MCU się skomplikowała to zaczęto wprowadzać dodatkową abstrakcje w postaci opasłych bibliotek typu HAL. Biblioteki tego typu uprościły komunikację użytkownika z rejestrami i migrację ale wprowadziły jednocześnie niepożądane zjawiska takie jak błędy związane z rozwojem biblioteki , dodatkowy narzut zasobów MCU jakie trzeba poświecić do obsługi biblioteki oraz wyraźne spowolnienie wykonywania zadań przez MCU w tym spowalnianie działania interfejsów komunikacyjnych . Dlatego w krytycznych czasowo aplikacjach tam gdzie nie można sobie pozwolić na luksus związany z wygodą stosowania biblioteki HAL, tam  pożądana jest umiejętność rozmowy z MCU w technice określanej jako "Bare Metal" czyli to co w MCU 8-btowych było chlebem powszednim.

czwartek, 18 marca 2021

Projekt płytki dla STM32G0 i instalacja lekkiego środowiska firmy SEGGER.


Tak to nie pomyłka :), na moim blogu poświęconym głównie wyrobom firmy Microchip postanowiłem zajrzeć do ogródka "konkurencji" czyli do wyrobu firmy STM32. A cóż mnie skłoniło do takiego szalonego pomysłu ?, ano zwykła ludzka ciekawość :) i chęć poszerzenia swoich horyzontów wiedzy. Na widelec biorę przedstawiciela relatywnie nowej serii STM32G0. Budżetowy MCU oparty o rdzeń Cortex M0+. Ciekawostką jest tutaj to, że w tej serii STM próbował poprawić odporność na zakłócenia EM. Generalnie z tego co wiem to  STM-y słabo wyglądały na tym polu. Drugą cechą STM-ów jest relatywnie słaba stabilność zegarów RC, przez co np. użycie USB bez zewnętrznego kwarca nie jest tutaj zalecane. W serii STM32G0 producent  deklaruje, że stabilność zegara RC została poprawiona.

poniedziałek, 15 marca 2021

USB w PIC32MM - uruchomienie przykładu z biblioteki Microchipa.


Tym razem krótki wpis w którym pokażę jak w ultraszybki sposób możemy uruchomić komunikację po USB pomiędzy komputerem a mikrokontrolerem PIC32MM. Dla przypomnienia seria PIC32MM firmy Microchip to segment tanich i sprytnych mikrokontrolerów. Jest to bardzo udana seria Microchipa, którą w sposób łatwy zaprogramujemy bez użycia "ciężkich" bibliotek HAL-o podobnych. Jest to jedyna seria 32-bitowa konfigurowalna w MPLABX-IDE za pomocą wtyczki MCC ,co powoduje, że kontakt z tym mikrokontrolerem to czysta przyjemność. Ponieważ PIC32MM w standardzie ma na pokładzie USB, postanowiłem zobaczyć czy to działa :). Poszedłem w tym przypadku maksymalnie na skróty i użyłem przykładu Microchipa do uruchomienia komunikacji. Przykład ten zawarty jest w standardowej bibliotece/stosie USB , który dołączamy we wtyczce MCC. Pokażę zatem jak to ugryźć.

czwartek, 11 marca 2021

PIC18F04Q41 z rozbudowanymi peryferiami analogowymi

 
Microchip konsekwentnie rozbudowuje portfolio MCU 8-bitowych. Tym razem mamy modele w małych obudowach 14 i 20 pin (w tym mini-obudowa typu SOIC). Nowymi przedstawicielami MCU są np. PIC18F06Q41 z rozbudowanymi peryferiami analogowymi i PIC18F06Q40 bez takiej rozbudowy ale dostępny w obudowie 3x3 mm !!!. Standardem już u Microchipa staje się wyposażenie MCU  8-bitowych w kontroler DMA co dotychczas było domeną tylko MCU 16-bit i 32-bit. Wyjątkowo dam przekierowanie do ciekawego artykułu na portalu mikrokontroler.pl . Świetny artykuł Pana Tomasza Jabłońskiego. Zachęcam do zapoznania się z nim i poszerzenia swoich horyzontów wiedzy :).

sobota, 30 stycznia 2021

CAP1296 - sterownik dotyku od Microchipa i pierwsze uruchomienie na najnowszym PIC18F47Q84.


Sterownik CAP1296 umożliwia w prosty sposób zrealizowanie dotykowego interfejsu sterującego w naszych projektach. Do dyspozycji mamy 6 kanałów. Sterownik umożliwia dostep do takich funkcjonalności jak Press and Hold , Power Button, Proximity, Multiple Button Pattern Detection .Rozmowa ze sterownikiem odbywa się za pomocą interfejsu I2C , dostępna jest prędkość 400 kHz. Sterownik pracuje w ekosystemie napięciowym 3.3V oraz 5V. Obudowa jaką ja wybrałem do testów tego sterownika to SOIC14.

czwartek, 24 grudnia 2020

PIC32CM MC00 Family - nowa rodzina PIC z Cortex M0+ na pokładzie.

Microchip idzie w kierunku integracji ekosystemu PIC z rdzeniami ARM Cortex. Być może będzie to też oznaczać w przyszłości zamknięcie linii ATSAM przejętej firmy ATMEL ale to moje spekulacje tylko. Nowy przedstawiciel PIC32CM MC00 jest prawdopodobnie mocno poprawionym w siliconie ATSAMC20 z wyjętym CAN. Trzeba przyznać , że Microchip ustanowił jakiś kosmiczny rekord w minimalizacji błędów w siliconie. W nowej serii PIC32CM widzę tylko 5 błędów !!! jeśli porównamy to do protoplasty czyli ATSAM C20 gdzie błędów jest ponad 100 to widzimy jak olbrzymi progres Microchip wykonał w nowej konstrukcji. Zajrzyjmy co tam pod maską ma nowy PIC z rdzeniem ARM.

sobota, 12 grudnia 2020

Wyświetlacz IPS 1.3" 240x240 ST7789 - uruchomienie.

 Filigranowy wyświetlacz w rozmiarze 1.3" z ultra wysoką rozdzielczością 240x240  jak na tak mały ekranik. Wyświetlacz oparty jest na układzie ST7789. Wykorzystałem go w projekcie testera kabli dla sieci LAN, który zrobiłem na zamówienie mojego Syna. Wyświetlacz jak wyświetlacz robi co do niego należy czyli wyświetla treści i obrazki. I robi to całkiem sprawnie i ładnie. Trochę udaje OLED-a ale matryca jest typu IPS, co polepsza nam kąty widzenia w stosunku do tradycyjnych matryc TFT i lepiej odwzorowuje kolory. Na rynku istnieje wersja wyświetlacza w rozmiarze 1.54" z dodatkowym pinem CS (wybór). Gdybym wcześniej o tym wiedział to bym nabył ten właśnie model wyświetlacza. Wyświetlacz napędzamy napięciem 3.3 V ale za pomocą kilku rezystorów możemy zrobić konwersję z 5V, gdyby taka potrzeba zaistniała. Interfejs komunikacyjny : SPI. W necie bez problemu znajdziemy biblioteki do obsługi wyświetlacza. Ja zrobiłem sobie miks z kilku bibliotek i uruchomiłem je w ramach testów na PIC18F47Q43. Mikrokontroler w obudowie DIP40 obsadziłem na płytce HPC 8-bit mojej produkcji. Praca z nowymi konstrukcjami MCU 8-bit Microchipa to sama przyjemność a rejestry 8-bitowe to miód na oczy :). Brak efektu oczopląsu tak jak na 32-bitach :).

niedziela, 18 października 2020

Tester kabli sieciowych LAN - czyli moja czarna perła.

 

Ostatnio mam krótko z czasem na swoje hobby , praca zarobkowa pochłania mi zbyt dużo czasu. Mamy czas pandemii, która wyzwala w ludziach złe emocje i złe instynkty na różnych polach. To czas kiedy człowiek człowiekowi jest wilkiem - upadek człowieczeństwa. Pandemia pokazała , że w chwili kryzysu na nic są warte Unie Państw, unie międzyludzkie, unie sąsiedzkie. Możemy w jednej chwili stać się wrogiem sąsiada bo np. nie nałożyliśmy maseczki . Bo nie wierzymy bezgranicznie w przekazy mediów. Bo myślimy inaczej niż tłum. Podanie ręki nie jest już symbolem przyjaźni ale zagrożeniem . Aż strach pomyśleć jak nisko upadnie człowieczeństwo i szacunek do drugiego człowieka w obliczu wojny. Oby nigdy to nie nastąpiło.