STM32 #1 – pierwsze kroki w środowisku mbed (STM32F429I-DISC1), czyli IoT na blogu

Jestem oczarowany możliwościami środowiska STM32. Oprócz IDE, które są udostępniane nieodpłatnie, istnieje również platforma ARMmbed, która udostępnia system operacyjny, środowisko programistyczne oraz narzędzia społecznościowe dla programistów. W zasadzie po kilku kliknięciach otrzymuje się gotowe i działające programy.

W poprzednim wpisie pisałem o prostym miganiu diodą na podobnym do niniejszego zestawie – również opartego o mikrokontroler STM32F429ZI – tym razem w innym ujęciu pobieram wartości z bufora żyroskopu i rzucam je na LCD. Do niniejszego projektu wykorzystałem gotowy przykład pokazujący możliwości ekranu dotykowego.

stm32f429i-disc1

Praca w środowisku ARMmbed

W zasadzie niewiele jest tutaj do napisania – narzędzie jest mega proste i intuicyjne, choć w pierwszym momencie można odnieść wrażenie, że wszędzie dużo. Co należy zrobić, żeby móc z tego korzystać?

  1. zarejestrować się na https://www.mbed.com/en/
  2. zweryfikować czy się posiada jedną z obsługiwanych płytek: https://developer.mbed.org/platforms/
  3. w przypadku STM32 po podłączeniu pojawia się wirtualny dysk z linkiem identyfikującym urządzenie (screen poniżej)
  4. otworzyć środowisko programistyczne (prawy róg ekranu: COMPILER)
  5. zaimportować/stworzyć nowy program
  6. po zakończeniu pracy kliknąć COMPILE – wygeneruje się plik .bin, który wystarczy przeciągnąć na wspomniany wcześniej wirtualny dysk
  7. oglądać efekty swojej pracy 🙂

TIP: kilka razy zdarzyło mi się, że x razach wgrywania nowych wersji programu płytka STM32 przywieszała się – np wyświetlacz wywalał błąd inicjalizacji. Reset nie pomagał (prawdopodobnie nie działa na wyświetlacz / rejestry wyświetlacza). Skuteczne było odłączenie płytki prototypowej od zasilania i ponowne podłączenie.

mbed-dysk

(wspomniany wyżej wirtualny dysk, plik dodający płytkę prototypową do clouda mbed oraz treść tego pliku)

oryginalne-mbed

(widok IDE w cloudzie na ARMmbed)

Pakiet ARMmbed w chmurze

Niezłym sposobem na spopularyzowanie platformy jest też dodanie mechanizmów społecznościowych oraz repozytoriów kodu. Kilkoma klikami można ‚wkomitować’ zmiany, podejrzeć changeloga czy też opublikować efekty swojej pracy. Przykład, który opisuję w niniejszym wpisie robi dwie rzeczy – po kliknięciu w ekran wyświetla współrzędne kliku oraz aktualne wartości w rejestrach żyroskopu. Można go pobrać (zaimportować) stąd:

https://developer.mbed.org/users/auditlog/code/DISCO-F429ZI_LCDTS_and_GYRO_test/

oryginalne-mbed2

Udanych testów i zabawy.

STM32 #0 – czyli pierwsze starcie z STM32F429 i blink LED

Właśnie zaczynam przygodę z programowaniem STM32 – od razu rzucam się na głęboką wodę, wybierając zestawy Nucleo-144 (oparte o STM32F429ZIT6 płytki NUCLEO-F429ZI oraz STM32F429I-DISC1). Postaram się (wraz z postępami w nauce) wrzucać kolejne działające przykłady. Póki pod wskazane płytki nie pojawi się wsparcie na mbed, to przykłady będą uruchamiane na System Workbench for STM32.

Pierwszy program jest led-migaczem, czyli nic niezwykłego. Mimo wszystko napisanie go zajęło mi blisko 3 godziny, a to głównie przez to, że potrzebowałem zrozumieć ideę działania, prześledzić kilka manuali oraz wyłapać różnice w nazewnictwie poszczególnych elementów w bibliotece dedykowanej dla w/w układu. Polecam na wstępie źródła z kursem: forbot.pl (oparte o płytkę z układem STM32F103), armprogramming.com (przykłady oparte o STM32F4) oraz kopalnię wiedzy stm32f4-discovery.com.

Uwagi: delay to zwykła pętla; zamiast Pin_0 można użyć Pin_7 lub Pin_14 na plytce Nucleo.

#include "stm32f4xx.h"
#include "stm32f4xx_gpio.h"

GPIO_InitTypeDef GPIO_InitStructure;

void GPIO_Initialize(void);
void delay(int);

int main(void)
{
GPIO_Initialize();
while (1)
{
GPIO_SetBits(GPIOB,GPIO_Pin_0);
delay(1000000);
GPIO_ResetBits(GPIOB,GPIO_Pin_0);
delay(1000000);
}
}

void GPIO_Initialize(void){
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); // wlaczenie taktowania portu B
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; // zainicjowanie pinu 0 w porcie B
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; // ustawienie pinu na wyjście
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; // ustawienie typu push/pull
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; // ustawienie taktowania magistrali
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; // odlaczenie 'podciagania' pinu
GPIO_Init(GPIOB, &GPIO_InitStructure);
}

void delay(int time)
{
int i;
for (i = 0; i < time; i++) {}
}

(zestawy zakupiłem na Kamami.pl, gdzie są dostępne w dość przystępnych cenach – około 150zł każdy)

przedświąteczne porządki i mały konkurs (rozdaję LaunchPad’y)

Cześć,

przed Świętami zabrałem się za porządki i inwentaryzację swojego warsztatu. Okazało się, że sporo mam na magazynie zamienników Arduino, a jeszcze więcej oryginalnych Launchpad’ów od TI.com. Ponieważ wiem, że i tak z wszystkiego nie skorzystam, to chciałbym Wam 1-2 sztuki oddać. Oczywiście w dobre ręce. Konkurs jest bardzo prosty i oparty o kreatywność:

Napisz w komentarza do niniejszej notki dlaczego akurat Ty chcesz dostać wybraną płytkę lub opisz co ciekawego na takowej zbudujesz (najlepiej z wykorzystaniem platformy, którą opisujesz) lub udostępnij niniejszy wpis u siebie na facebooku, google plus, twitterze i w komentarzu poniżej zostaw linka do tego wpisu (koniecznie musi być publiczny, żebym miał okazję go zobaczyć).

Konkurs trwa do końca dnia 14 grudnia 2014 roku – żeby zwycięzca lub zwyciężczyni mieli szansę otrzymać przesyłkę jeszcze przed świętami.

ps: Jeśli konkurs załapie i będzie dużo fajnych zgłoszeń, to postaram się regularnie rozdawać kawałki swojego warsztatu, które zalegają mi w szufladach.

ps2: Większość zestawów jest nowa lub np. 1-2 razy uruchomiona / podłączona do zasilania. W zestawach 430g2 jeśli procek był przeze mnie używany, to wymienię przed wysyłką na nowy.

Zestawy, które m.in. posiadam (oparte o procki):

– msp430g2xxx,
– msp430fr5969,
– msp430f5529,
– lm4f120x,
– tm4c123g…

Pamiętajcie, że LaunchPad’y mają swoje środowisko programistyczne Energia identyczne z Arduino IDE. Dostępne jest pod tym adresem: http://energia.nu/

ps4: Ponieważ regularnie użytkownicy próbują spamować w komentarza reklamując jakieś badziewie, to komentarze są moderowane – wszystkie czytam i te, które nie zawierają reklamy własnych produktów akceptuję.

Powodzenia!

AKTUALIZACJA (w dniu publikacji wpisu)

Zapomniałem dodać: ceny większości w/w zestawów wahają się w przedziale $10-$25 + najważniejsze: jeśli osoba/osoby, które wygrają zbudują i opublikują u siebie lub wyślą do mnie do publikacji (obojętnie) notkę z wykorzystaniem wygranego zestawu, to doślę (wg mnie ciekawszemu projektowi) moduł LCD 430BOOST-SHARP96 – wart $20!

spark core (lepsza wersja arduino z wifi)

spark_io

Spark Core wpadł mi w ręce już dość dawno. Zbudowałem nawet na nim półautomatykę do akwarium, ale trochę się tam marnował – płytka stworzona jest do dużo wyższych celów, niż decydowanie czy rybki powinny mieć już widno lub pokazywanie jaką mają temperaturę wody poprzez stronę www.

Czy jest Spark Core?

Spark Core to w pełni funkcjonalne środowisko projektowe dla początkujących, jak i zaawansowanych konstruktorów. Projekt rozwinięty został dzięki pomocy Kickstartera, gdzie osiągnął spektakularny sukces.

System jest kompatybilny z Arduino, posiada sieć wifi w standardzie 802.11 b/g, przyjazne API, kompatybilność z płytkami stykowymi i możliwość programowania przez wifi. Ostatnia funkcjonalność jest o tyle ciekawa, że w module można podmieniać program w dowolnej lokalizacji – ważne, żeby był podłączony do internetu.

Parametry techniczne to:
– 32-bitową jednostkę STM32 taktowaną zegarem 72MHz na architekturze ARM Cortex M3
– 128KB pamięci flash i 20KB pamięci RAM
– zintegrowany moduł Texas Instruments SimpleLink CC3000 Wi-Fi
– EEPROM (przeznaczony dla konfiguracji CC3000)
– 2MB zewnętrznej pamięci flash,
– zasilanie 3.3V (wbudowany regulator zasilania)
– typowy pobór prądu na poziomie 50mA
– maksymalny pobór prądu (w peaku) 300mA (np podczas zdarzeń transmisji danych)
– może być programowany i zasilany przez kabel micro USB
– posiada 8 pinów I/O
– posiada 4 kanały (piny) PWM
– posiada 8 pinów I/O analogowych
– obsługuje UART (Serial), SPI i I2C sprzętowo
– zasięg Wi-Fi to 30-100m

spark core

Jak zaprogramować Spark Core?

Pierwsze, co jest inne, to że IDE jest w wersji webowej. Trzeba wejść na stronę projektu, zalogować się, wejść w ustawienia i za pierwszym razem skonfigurować połączenie z urządzeniem. W tym momencie niezbędne jest podłączenie fizyczne. Wymaga tego konfiguracja poprzez terminal – trzeba uzyskać token, który następnie dodajemy w IDE oraz skonfigurować sieć (ręcznie podaje się nazwę sieci, kodowanie i hasło). Następnie system się resetuje i to wszystko. Od razu działa.

Jak to jest z kompatybilnością z Arduino?

Podobnie jak w samym Arduino. Niby standard, ale płytki typu Uno, Yun czy Mega średnio do siebie pasują (zgodnością pinów). Biblioteki pod różnymi platformami sprzętowymi nie zawsze w ten sam sposób się zachowują. Podobnie jest w projekcie Energia.no, gdzie głównie chodzi o zachowanie zgodności składni, a nie 100% przenoszalność bibliotek.

spark-pinout

Co jeszcze jest w tym ciekawego?

Poza możliwością zdalnego programowania przez sieć i kompaktowości rozwiązania (płytka jest chyba mniejsza niż Arduino mini) wyróżnia się ponadprzeciętna intuicyjność oraz bardzo dobra dokumentacja.
Zbudowana społeczność rośnie, autorzy nie zapomnieli o wzorowym wsparciu w postaci not dokumentacji i narzędzi do komunikacji pomiędzy uczestnikami projektu (forum, etc).
Dodatkowo można kupić shieldy dla Spark Core i w bardzo prosty sposób rozbudować go o kilka przekaźników czy zasilanie bateryjne. Jest też shield shield – płytka, która jest shieldem dla Sparka i Arduino jednocześnie – dzięki niej można wykorzystać już posiadane moduły od 8-bitowego starszego brata (ważne, żeby tylko sprawdzić kompatybilność i wykorzystanie wyprowadzeń).

Jeśli ktoś byłby zainteresowany zakupem, to proszę dać znać (namiar w KONTAKT) – może razem zamówimy i podzielimy koszty transportu po równo.

Intel Galileo by Arduino – czyli edukacja wg Intela (pierwsze wrażenia)

Nowość? Super – lubię nowości! Jak tylko dostałem info od Nettigo, że będą mieć Arduino Galileo w sprzedaży, to od razu stanąłem w kolejce. Zestaw kupiłem, kilka dni poużywałem (dość powierzchowne działania testowe) i jestem mądrzejszy o nową platformę oraz bez 300zł w kieszeni:)

arduino-galileo

Pierwsze wrażenia, czyli ‚unboksing’ Intel Galileo

Wielkość pudełka wskazywała, że będzie to całkiem pokaźny zestaw. Niestety w środku oprócz samej płytki Galileo znajduje się tylko zasilacz z wymiennymi końcówkami – chyba na wszelkie światowe standardy. Zasilacz 2A na 5V – standard. Niestety chyba do mojego zestawu zapomniało się komuś włożyć kabla USB, albo po prostu go nie dają. Przydałoby się też zamiast tych super końcówek do zasilania dać przelotkę z microUSB na gniazdo USB-A – niby na płytce jest host USB, ale właśnie z gniazdem microUSB. Adaptery takie można za 5-10zł kupić w sieci, ale z przesyłką to dodatkowe 15-20zł. Za 300zł oczekiwałem bardziej rozmyślnego podejścia do użytkownika. Zestaw ponoć nazywany jest edukacyjnym.

A co ma w środku?

Dużo. I to dość mocno ratuje ten zestaw. Takie trochę słabsze Raspberry Pi, ale z wieloma gadżetami od Arduino. Pełną specyfikację znajdziecie na stronie Arduino Certified – Intel Galileo. Mnie zainteresowały następujące:
– procek hiper-super-wypas Quark SoC1000 – 32bit, Pentium Class, ~1,2DMIPS, rdzeń taktowany 400MHz,
– pełna kompatybilność wyprowadzeń i napięć z Arduino (oparta o Arduino UNO R3),
– wbudowany RTC (zegar czasu rzeczywistego) z wyprowadzeniem goldpinów na płytce dla baterii,
– złącza RJ45, microSD, dodatkowy port RS232 (w złączu mini-jack), 2 x USB (jeden host, drugi client), 256KB SRAM, 256MB DDRAM, 8MB flash, mini-PCIe.

Najciekawsze złącze Galileo, czyli mini-PCIe

W pierwszym odruchu powiedziałem – po cholerę! Ale chwilę po tym przypomniałem sobie jak tanie są karty sieciowe, modemy 3G czy dyski SSD na to złącze i zapiałem z zachwytu. To jest tak przewaga Galileo względem innych rozwiązań Arduino – nie dość, że prawie wszystko jest pod ręką, to do tego za kilka zł można mieć jeszcze więcej.

Rzeczy dziwne i niezrozumiałe, czyli wady zestawu

Złącze host USB w postaci gniazda mikroUSB oraz brak przelotki do tego. Rozumiem oszczędność miejsca, na płytce, ale zdecydowanie bardziej wolałbym zamiast tysiąca standardów wtyczek zasilania jedną, dodatkową, tanią przejściówkę.

(niepotwierdzone) Programowanie do pamięci SRAM. Programuję – działa, resetuję – nie działa. Po uruchomieniu zestawu z linuksem na karcie SD działa OK. Zdecydowanie muszę to zweryfikować.

Procesor SoC nachodzący na powierzchnię przestrzeni dla shieldów. Niestety w przypadku montowania jakiś dodatkowych płytek nie wchodzi w grę użycie większego radiatora, a ten zdecydowanie jest potrzebny. Procesor w trybie jałowym (uruchomiony linuks Poky z karty SD, bezczynny) nagrzewa się do około 70st.C. Niewiele pomaga założenie malutkiego radiatorka widocznego powyżej. Schłodzenie sprężonym powietrzem na chwilę obniżyło temperaturę o kilkadziesiąt stopni.

galileo-temp

Kolejnym problemem jest dedykowana wersja środowiska programistycznego IDE dla niniejszego zestawu. Obecnie dostępne jest w wersji 1.5.3 i można je pobrać ze strony Intela. Trochę dziwi fakt potrzeby uruchamiania z sudo tego IDE, ale cóż – z zaleceniami producenta się nie dyskutuje:)

Podsumowanie – czy warto kupić Arduino Intel Galileo?

Póki co mam mieszane uczucia. Niby wypas, dużo na pokładzie, ale jakoś tak wszystko niezorganizowane, słabo opisane oraz z wsparciem, ale chyba nie najlepszym na stronie producenta. Trochę żałuję wydanych pieniędzy (tak, dałem się zakupom impulsywnym), aczkolwiek skoro już jest, to w końcu trzeba nauczyć się prostych środowisk embedded linux i zacząć efektywnie używać VI oraz OPKG zamiast NANO i APT-GET:)

Z czasem też pojawi się więcej opracowań na platformę i będzie zdecydowanie łatwiejsze dotarcie do przykładów i rozwiązań. Trzymam kciuki.

Przydatne miejsca / linki

http://arduino.cc/en/ArduinoCertified/IntelGalileo – oficjalna strona projektu w domenie Arduino

http://www.intel.com/content/www/us/en/intelligent-systems/galileo/galileo-overview.html – oficjalna strona projektu w domenie Intel

https://communities.intel.com/community/makers/demosprojects/content?itemView=thumb – galeria projektów opartych na Galileo na stronie Intel

https://communities.intel.com/message/208564#208564 – włączenie telnetu (putty/console) za pomocą prostego programu z poziomu Arduino IDE (bez potrzeby uruchamiania większej wersji linuksa z karty SD)

https://learn.sparkfun.com/tutorials/galileo-getting-started-guide/bigger-linux-image – opis uruchomienia „dużego” linuksa z poziomu karty SD (dodam od siebie, że karta ma być sformatowana na system plików fat32)

https://communities.intel.com/docs/DOC-22272 – przykłady dla „dużego” linuksa

https://communities.intel.com/thread/48009 – tutorial do przykładów dla Arduino IDE

http://www.yoctoproject.org/docs/current/ref-manual/ref-manual.html#usingpoky – bardzo dużo o „dużej” wersji linuksa na Galileo (Yocto Project – Poky)

http://www.malinov.com/Home/sergey-s-blog/intelgalileo-programminggpiofromlinux – opis jak sterować GPIO z poziomu linuksa

kurs embedded: ARM (Cortex M4) od TI.com i edX

Bardzo lubię wszelkiego rodzaju rozwiązania płytek od TI.com – są rewelacyjnym środowiskiem do nauki programowania wielu różnych architektur na często zbliżonych lub wspólnych płytka rozwojowych. Tym razem TI i platforma edukacyjna edX zaproponowały kurs nauki programowania systemów typu embedded.

ek-tm4c123gxl

Czyli #CzasNaNauke:

Opis kursu dostępny jest pod poniższym linkiem (początek 22 stycznia 2014 roku, czas trwania 15 tygodni, przewidywany czas nauki to 10 godzin tygodniowo). Za jakiś czas pewnie niniejszy post straci na aktualności, ale warto poszukać na edX – dużo kursów jest tam cyklicznie powtarzanych.

https://www.edx.org/course/utaustinx/utaustinx-ut-6-01x-embedded-systems-1172

Kurs jest darmowy (odpłatny jest certyfikaty tylko – nie trzeba go wykupywać). System embedded oparty jest na:

http://www.ti.com/tool/ek-tm4c123gxl (~40zł – TI nie liczy kosztów transportu)

Na stronie edX znajduje się link z precyzyjniejszym opisem kursu:

http://users.ece.utexas.edu/~valvano/edX/

Mikrokontroler to:

http://www.ti.com/product/tm4c123gh6pm

32-bit ARM® Cortex™-M4 80-MHz processor core with System Timer (SysTick), integrated Nested Vectored Interrupt Controller (NVIC), Wake-Up Interrupt Controller (WIC) with clock gating, Memory Protection Unit (MPU), IEEE754-compliant single-precision Floating-Point Unit (FPU), Embedded Trace Macro and Trace Port, System Control Block (SCB) and Thumb-2 instruction set

On-chip memory, featuring 256 KB single-cycle Flash up to 40 MHz (a prefetch buffer improves performance above 40 MHz), 32 KB single-cycle SRAM; internal ROM loaded with TivaWare™ for C Series software; 2KB EEPROM

Ja już zamówiłem zestaw. Mam nadzieję, że zdąży przyjść w okolicy rozpoczęcia kursu.

Do kursu rekomendowana jest książka:

Embedded-Systems-Introduction-CortexTM-M-Microcontrollers-ebook

aczkolwiek z doświadczenia (innych kursów na edX) wiem, że ilość materiałów do lekcji dostarczana jest na tak wysokim poziomie, że można pominąć (w chwili pisania tego postu książka w wersji papierowej i ebook kosztuje ~$40).

<edit: 15.01.2014r.>

Znalazłem ciekawą porównywarkę cenową dla amazonowych książek – w chwili pisania update można na amazon.co.uk kupić (w przeliczeniu) za 86zł w/w książkę:

https://pricenoia.com/embedded-systems-introduction-to-arm-cortextm-m-microcontrollers

BeagleBone – to takie proste, czyli Raspberry Pi z dużą ilością GPIO

Dość długo zastanawiałem się, czy na pewno chcę zaopatrzyć się w kolejne mikro-cudo dostępne na rynku. W końcu nie wytrzymałem i rozpocząłem procedurę zakupu BeagleBone. Przejrzałem kilka źródeł i uznałem, że chyba najrozsądniejszym będzie zakup bezpośredni w Farnell/element14. Razem z kabelkiem mikroHDMI i przesyłką wyszło w okolicy 260zł brutto (dodam, że Farnell ma rewelacyjną jakość obsługi i mimo oddziału w UK bez problemu można załatwić wszystko po polsku.

beagleboard

Unpacking, czyli co w pudełku siedzi – na BeagleBone pierwsze spojrzenie

Paczka przyjechała (ciężko nawet nazwać to paczką, gdyż była to koperta bąbelkowa), a w środku: małe pudełeczko kartonowe, zafoliowany kabel miniUSB, zafoliowany kabel mikroHDMI (zamówiony dodatkowo) oraz faktura. Pudełko odrobinę większe, niż to, w którym dostarcza RS Raspberry Pi.

Po otwarciu ukazała się malutka płytka (powierzchnia zbliżona do karty kredytowej i chyba odrobinę mniejsza od Raspberry Pi) zapakowana w folię antystatyczną oraz mały kartonik z bardzo skróconą instrukcją pierwszego uruchomienia.

raspberry pi & beaglebone

Co siedzi w środku BeagleBone?

Zamówiłem BeagleBone Black w wersji A5B. Jest to wersja mocniejsza od standardowego BeagleBone (procek 1GHz via 720MHz). Oto główne parametry:

– procesor RISC A8 od TI: AM3359AZCZ100 (wydajność 2000MIPS, taktowany zegarem 1GHz),
– układ graficzny o wydajności 20M Polygonów (czyli 3D),
– 512MB pamięci RAM DDR3 taktowanej 400Mhz oraz 2GB wbudowanej (z preinstalowanym systemem) pamięci flash,
– dwa złącza USB: mini USB – pasywne i host USB-A o wydajności 500mA,
– mikroHDMI ze wsparciem Audio (stereo),
– ethernet 10/100,
– złącze mikroSD,
– 65 portów GPIO mogących obsługiwać i2c, spi, lcd, 4 x RS, 4 timery, CAN – wszystko w standarcie TTL 3,3V (+ kilka mniej znanych standardów),

całość zasilana jest poprzez mikroUSB lub dedykowane złącze zasilania 5V i pobiera w przedziale 210-460mA.

beaglebone black

Pierwsze uruchomienie BeagleBone Black – nie spodziewałem się tak prostego startu

Instrukcja zawarta w pudełku nazywa się Quick Start i zdecydowanie odpowiada objętością swojej nazwie. Zawarte w niej punkty (dla uruchomienia bez klawiatury, myszy i monitora hdmi) to:

– podłącz USB mini do portu w BBB,
– podłącz drugi koniec kabla do komputera,
– otwórz nowozainstalowane urządzenie pamięci masowej,
– uruchom START.htm,
– podążaj za instrukcją na ekranie.

W zasadzie równie dobrze po uruchomieniu (podłączeniu USB) i podłączonym kablu sieciowym wystarczy wpisać w przeglądarce adres 192.168.7.2, żeby otrzymać ten sam efekt. Reszta to zabawa (i pewnie kolejny wpis).

lutowanie lpc2103 w obudowie qfp48 z rastrem 0,5mm (i specyfikacja ARMa)

Przy okazji jakiegoś zamówienia na części elektroniczne postanowiłem spróbować przygody z mikrokontrolerem opartym o rdzeń ARM7 – padło na jeden z podstawowych modeli, czyli LPC2103. W sumie zamawiając nie zwróciłem uwagi na obudowę i to był mój dość duży błąd – lekko się przeraziłem widząc scalak SMD z rastrem nóżek 0,5mm. Na pająka nie było szans. Poszukałem w sieci i znalazłem jedną firmę z dostępnymi płytkami do zrobienia przelotki na goldpiny.

Firmy chwalić nie będę, bo mają super nieintuicyjny sklep – jak ktoś bardzo chce, to proszę o kontakt PW.

Zamówiłem płytki, po kilku dniach przyjechały, a po kolejnych 2-3 tygodniach zabrałem się do lutowania. Użyłem grotu do lutownicy (Elwik) o wyjściowej średnicy końcówki 0,4mm (jednak lekko zużyty, co dawało około 0,6-0,7mm), spoiwa lutowniczego (cyny) o grubości 0,25mm. Próbowałem każdą nóżkę osobno przylutować, ale nawet szkło powiększające wysiadało. Przejechałem więc większą ilością cyny po wszystkich nóżkach, a następnie odessałem nadmiar narzędziem. Następnie sprawdziłem miernikiem czy nóżki obok siebie nie są zwarte (wymagało 3 poprawek) i czy wszystkie nóżki łączą się z polem lutowniczym goldpinu (wymagało dwóch poprawek).

Niedługo będę podpinać ARMa do większego układu – zobaczymy jak działa:)

Specyfikacja LPC2103:

– 32-bitowy rdzeń ARM7
– 32kB pamięci Flash programowanej ISP (do 100k zapisów)
– 8kB pamięci RAM
– 8 wejść przetwornika AC (10 bitów)
– wbudowany zegar RTC
– 2 timery/liczniki 16 bitowe i 32 bitowe (z PWM na każdym z czterech timerów)
– 2 UARTy (pełne!)
– 2 osobne interfejsy I2C (fast I2C)
– SPI i SPP
– 32 piny I/O z tolerancją 5V (3,3V)
– wbudowany zegar RTC
– programowanie ISP/IAP przez oprogramowanie bootloadera
– maksymalne taktowanie rdzenia 70MHz poprzez wewnętrzną pętlę PLL (zewnętrzne taktowanie 10-25MHz) / wbudowany wewnętrzny oscylator z programowanym zegarem 1-25MHz

Rdzeń układu to ARM7-TDMI (ARM7-Thumb+Debug+Multiplier+ICE) – 32-bitowy porocesor oparty na architekturze RISC (ARM). Obsługuje jednocześnie 3 potoki, co daje (piszę z głowy) w okolicy 160-170MIPSów przy pełnym wysterowaniu. Zobaczymy za jakiś czas jak się sprawuje, choć nie sądzę, żebym wymyślił sposób na pełne obciążenie (nie będę uruchamiał na nim dedykowanego systemu operacyjnego, raczej sam będę pisać kod). Na takim procku liczenie FFT to czysta przyjemność.