Popularny post Elvis Napisano Listopad 13, 2010 Popularny post Udostępnij Napisano Listopad 13, 2010 Tani ARM - LPC1114 Wstęp W artykule chciałbym przedstawić rodzinę tanich mikrokontrolerów firmy NXP. Większość osób słyszało już o rdzeniu Cortex-M3. Jest to nowsza, pod wieloma względami udoskonalona wersja rdzenia ARM7TDMI. Znacznie mniej znana jest rodzina tanich mikrokontrolerów o rdzeniu Cortex-M0. Cortex-M0 zostały opracowane jako konkurencja dla obecnie stosowanych mikrokontrolerów 8-bitowych. Wobec podwyżki cen układów AVR warto zainteresować się nowym rdzeniem. Firma NXP jako jedna z pierwszych zaprezentowała mikrokontrolery z rdzeniem Cortex-M0. Są to mikrokontrolery oznaczone jako LPC-111x. Parametry mikrokontrolerów LPC-111x: • prędkość do 50 MHz • do 32 kB pamięci Flash • do 8kB pamięci RAM • wbudowany generator RC • wbudowany watchdog • sprzętowa obsługa I2C, SPI, UART • 10-bitowy przetwornik ADC • nowy interfejs programowania - SWD • możliwość programowania przez UART (RS-232) • dostępne wersje z obsługą interfejsu CAN Warto zwrócić uwagę na dostępne obudowy. Aktualnie w sprzedaży dostępne są układy w obudowach SMD, jednak zapowiadany jest układ w obudowie PLCC44 - pozwala ona na umieszczenie w podstawce i montaż przewlekany. Ostatnią, chociaż nie najmniejszą zaletą nowych układów jest ich cena. W sklepie Kamami dostępne są już za 5,55 zł brutto (cena za LPC1113 przy 30szt., 13.11.2010). Nawet cena detaliczna jest całkiem przystępna: 8,48 za procesor z 24kB pamięci Flash i 8kB RAM. ZL32ARM Aby rozpocząć przygodę z nowymi układami musimy mieć płytkę z procesorem. Niestety dopóki wersja w obudowie PLCC44 nie będzie dostępna, wlutowanie układu w obudowie SMD może być trudne dla początkującego elektronika. Jeśli chcemy łatwo zapoznać się z LPC1114 możemy wykorzystać płytkę ewaluacyjną. Firma Kamami przygotowała ciekawy zestaw uruchomieniowy ZL32ARM: http://kamami.pl/index.php?ukey=product&productID=137779 Zestaw składa się tak naprawdę z dwóch płytek. Jedna to konwerter USB<->UART wraz ze stabilizatorem 3.3V, układami sterowania resetem i uruchamianiem bootloadera. Druga to właściwa płytka z procesorem LPC1114. Zestaw jest dostarczany jako jedna płytka, ale gdy już poznamy nowy mikrokontroler możemy rozłączyć płytki i konwerter USB<->UART wykorzystywać w innych projektach. Jest to bardzo praktyczne rozwiązanie. Zestaw jest kompletny, potrzebujemy tylko kabla USB, aby rozpocząć przygodę z nowym procesorem. Nawet zasilacz nie jest potrzebny - programator ma wbudowany stabilizator 3.3V, zasilanie może być pobierane z portu USB. Oprogramowanie Będziemy nam potrzebne następujące oprogramowanie: • sterowniki układów FTDI (konwerter USB<->UART) - http://www.ftdichip.com/ • FlashMagic do programowania procesora - http://www.flashmagictool.com/ • kompilator LPCXpresso - http://lpcxpresso.code-red-tech.com/LPCXpresso/ Aby pobrać kompilator konieczna jest rejestracja. Jest ona darmowa. Sterowniki FTDI należy zainstalować przed podłączeniem układu, jednak w wielu systemach takie sterowniki już są zainstalowane. Konfiguracja kompilatora Instalacja LPCXpresso nie powinna stanowić problemu. Przy pierwszym uruchomieniu program zapyta o położenie naszych projektów: Domyślna ścieżka jest nieco niewygodna, warto zmienić ją na lokalizację łatwiejszą do odnalezienia na dysku. Każdy projekt będzie zakładany w podkatalogu podanej lokalizacji. Po naciśnięciu OK widzimy okno naszego kompilatora. Osoby znające Eclipse powinny być zadowolne - LPCXpresso bazuje właśnie na tym środowisku. Zanim zaczniemy pisanie programów musimy zaimportować bibliotekę CMSIS. Wybieramy opcję „Import Example project(s)” z menu widocznego w lewym dolnym rogu. Pojawi się następujące okno: Naciskamy przycisk „Browse”, automatycznie pojawi się katalog z przykładami. Wybieramy foldery: NXP->LPC1000->LPC11xx, a następnie plik: CMSISv1p30_LPC11xx.zip Zatwierdzamy wybór i sprawdzamy, czy w projektach pojawił się nowy zawierający dodaną bibliotekę. Teraz kompilator jest gotowy do pracy. Pierwszy program Wybieramy opcję „New project...”->„NXP LPC1100 projects”->”NXP LPC1100 C Project”. Pojawia się okno kreatora projektu. W pierwszym kroku wpisujemy nazwę projektu, np. „program01”. Naciskamy „Next” i wybieramy nasz procesor - LPC1114/301. Następny krok jest bardzo ważny. Musimy zaznaczyć opcję „Use CMSIS”: Jest to już ostatni krok, więc przyciskamy „Finish”. Kreator tworzy dla nas projekt: Możemy skompilować przykładowy program wybierając opcję „Project”->”Build Project”, albo klikając na przycisk z symbolem młotka w pasku narzędziowym. W widoku konsoli pojawią się informacje o poprawnej kompilacji. Nasz program nic nie robi, więc czas zmienić kod, tak żebyśmy mogli widzieć rezultat działania. Zestaw ewaluacyjny wyposażony jest w diody LED, wykorzystamy je do sygnalizacji działania programu. Wpisujemy kod: int main(void) { volatile static int i = 0 ; LPC_GPIO0->DIR |= 0x040; while(1) { LPC_GPIO0->DATA |= 0x040; for (i=0;i<100000;i++) ; LPC_GPIO0->DATA &= ~0x040; for (i=0;i<100000;i++) ; } return 0 ; } Program powinien skompilować się poprawnie. Teraz możemy otworzyć katalog z naszym kodem wynikowym. Niestety czeka nas niemiła niespodzianka. Domyślnie tworzony jest plik wynikowy w formacie .axf, zamiast oczekiwanego .hex. Musimy zmienić konfigurację kompilatora. Wybieramy opcję „Project”->”Properties”. Odnajdujemy zakładkę „Build Steps”, a następnie w okienku „Post-build steps” wpisujemy w pole „Command” polecenie: arm-none-eabi-objcopy -O ihex ${BuildArtifactFileName} ${BuildArtifactFileBaseName}.hex Tym razem plik .hex zostaje utworzony: Nasz program wgrywamy za pomocą FlashMagic-a. Wgrywamy pierwszy program Podłączamy płytkę, do komputera i sprawdzamy, który port COM został wybrany do podłączenia zestawu. W moim komputerze jest to COM40: Następnie uruchamiamy FlashMagic i ustawiamy odpowiednio jego konfigurację: • Select Device: LPC1114/300 • COM Port: - port do którego został podłączony nasz zestaw • Baud Rate - jeśli pojawią się problemy z programowaniem, można wybrać inną prędkość • Interface: None (ISP) • Oscillator (MHz): 12 • Hex File - plik, który utworzyliśmy za pomocą LPCXpresso Następnie naciskamy „Start” i programujemy układ. program01.zip 4 Cytuj Link do komentarza Share on other sites More sharing options...
riddyk Listopad 13, 2010 Udostępnij Listopad 13, 2010 A odbiegając od kitu, jeśli chcę użyć programatora którego mam Usbasp, bo z dokumentacji wynika że mogą być programowane przez ISP. To jakiego wysyłacza użyć i pod które piny podpiąć, bo ma więcej zestawów SPI 0 i 1? Cytuj Link do komentarza Share on other sites More sharing options...
Elvis Listopad 13, 2010 Autor tematu Udostępnij Listopad 13, 2010 SPI to nie to samo co ISP. O ile wiem, nie można LPC111x programować za pomocą SPI. ISP to skrót od In-System Programming. Czyli programowanie za pomocą sofware-u. Polega to na tym, że bootloader (który jest programem) programuje pamięć flash. Natomiast do LPC111x wystarczy konwerter RS-232<->UART, nic więcej do programowania nie jest niezbędne. Cytuj Link do komentarza Share on other sites More sharing options...
riddyk Listopad 13, 2010 Udostępnij Listopad 13, 2010 Cytując zdanie z pierwszej strony dokumentacji http://www.kamami.pl/dl/lpc1111.lpc1112.lpc1113.lpc1114.pdf "In-System Programming (ISP) and In-Application Programming (IAP) via on-chip bootloader software." następnie patrząc na Fig1. (str.4) widzimy 2 zestawy SPI0 i SPI1, które mają piny nazwane identycznie jak programator ISP. Edit: z tego co ja wiem SPI to jest protokół, a ISP system wgrywania programu, który bazuje na protokole SPI. Można dojść do wniosku że powinno się wykorzystać SPI0 do tego celu, bo tylko w obudowie LQFP48 i PLCC44 występuje SPI1. A wcześniej analizowałem LPC17xx gdzie jest SPI0, SSPI0 i SSPI1. EDIT2: Cytując zestaw który promujesz: "Zestaw uruchomieniowy z mikrokontrolerem LPC1114 i programatorem ISP (USB) ZL32ARM z mikrokontrolerem LPC1114 (rdzeń Cotrex-M0) dzięki wbudowanemu programatorowi ISP jest kompletnym zestawem uruchomieniowym. Podstawowe właściwości zestawu: * mikrokontroler LPC1114FBD48/301 z rdzeniem Cortex-M0 (32 kB Flash, 8 kB RAM, obudowa LQFP48) * rezonator kwarcowy 12 MHz * wbudowany programator USB dla układów LPC1000 * możliwość odłamania programatora i wykorzystania go z innymi zestawami ewaluacyjnymi * dwie diody LED * 5-pozycyjny joystick * potencjometr dołączony do przetwornika A/C wbudowanego w mikrokontroler * przycisk reset * złącza I2C i SPI zgodne ze standardem Kamami do dołączenia dodatkowych modułów * linie I/O mikrokontrolera wyprowadzone na złącza szpilkowe * zasilanie z portu USB " Cytuj Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Produkcja i montaż PCB - wybierz sprawdzone PCBWay! • Darmowe płytki dla studentów i projektów non-profit • Tylko 5$ za 10 prototypów PCB w 24 godziny • Usługa projektowania PCB na zlecenie • Montaż PCB od 30$ + bezpłatna dostawa i szablony • Darmowe narzędzie do podglądu plików Gerber Zobacz również » Film z fabryki PCBWay
Elvis Listopad 13, 2010 Autor tematu Udostępnij Listopad 13, 2010 O ile wiem, nie ma możliwości wgrywania programu przez SPI. Tak jest w AVR. Natomiast można przez UART, czasem nawet przez CAN i oczywiście SWD. A co do dokumentacji, to więcej jest w User's Manual-u: http://ics.nxp.com/support/documents/microcontrollers/pdf/user.manual.lpc11xx.lpc11cxx.pdf W okolicach strony 275 jest dokładnie wszystko opisane. Cytuj Link do komentarza Share on other sites More sharing options...
OldSkull Listopad 13, 2010 Udostępnij Listopad 13, 2010 Ale ISP różnych uC się różnią. Np. w ATmedze 128 programuje się bodajże poprzez piny od UARTa + SCK, ale programator ISP od ARMA nie zadziała. Z prockami jest tak, że dostaje się to za co się zapłaciło. Jak porównywałem parametry tanich ARMów... są słabe. Najciekawszym tanim jest LPC2103, bo ma więcej pamięci od wszystkich tańszych lub zbliżonych, oraz ma dużo szybsze taktowanie (STM32F100 mają do 25MHz-45MIPS), lub są po prostu niedostępne. LPC111x maja moc obliczeniową podobną (nadrabiają MHz za pomocą instrukcji/takt), ale są an razie trudno dostępne, więc spodziewam się, że jak się pojawią w więskzej ilości to ceny LPC21xx spadną. edit: pomijając już to, że same komendy (i reszta protokołu) będą się różnić pomiędzy rodzinami. Tak samo przez ISP nie zaprogramujesz Xmegi. Cytuj Link do komentarza Share on other sites More sharing options...
Elvis Listopad 13, 2010 Autor tematu Udostępnij Listopad 13, 2010 LPC21xx to już nieco stara rodzina - rdzeń ARM7TDMI. Natomiast nowe to niewątpliwie Cortex. Odpowiednio Cortex-M3 - LPC17xx i Cortex-M0 - LPC11xx. Jest duża szansa, że ceny M0 będą spadać, więc mogą poważnie zagrozić 8-bitowcom. Oczywiście M0 mają być słabsze niż M3. Ale w porównaniu z małym AVR mają się czym pochwalić. [ Dodano: 13-11-2010, 22:05 ] Natomiast LPC2103 nie polecam z jednej przyczyny - stare LPC wymagały 2 napięć zasilających. Więc trzeba dać 3.3V i 1.8V. W nowszych już jest wbudowana przetwornica. Cytuj Link do komentarza Share on other sites More sharing options...
OldSkull Listopad 13, 2010 Udostępnij Listopad 13, 2010 Ciii, magisterkę robię na nim 😉 po załataniu problemów z SS oraz pinami od I2C działa jak żyleta 😉 Chociaż te 1.8V jest upierdliwe i podbija koszt o 1zł + konieczność szukania sklepu ze stabilizatorem. Mnie zastanawia jedna rzecz: 95% osób AVRy programuje zwykłym programatorem, a nie JTAGiem. Natomiast do ARMów prawie wszyscy wolą JTAGi, aż uwierzyłem, że inaczej się nie da (szczerze to zanim zaczął się kurs na diodzie byłem o tym święcie przekonany) . To jak to właściwie jest? Jak programować poszczególne szybkie mikrokontrolery, ale _tanio_, bez kupowania potwornie drogich JTAGów? Przecież dodanie JTAGa (szczególnie w ARMach) powoduje ogromne komplikacje na płytce. Szczególnie, że gniazdo jest bardzo duże z niewiadomych powodów, starczyłaby połowę mniejsza ilość pinów. W ARM7TDMI już wiem - P0.14 + RST + UART. W Cortexach cos chodzi o nóżki boot, ale nie mam zielonego pojęcia co i jak - i chętnie bym się dowiedział. Tak samo dzisiaj się dowiedziałem (chyba od TIMONka, albo od nesa), że w Xmegach też można programować bez JTAGa - i też chętnie bym się dowiedział jak. Rozumiem, że w droższych uC i skomplikowanych aplikacjach JTAG jest bardzo przydatny, ale kupowanie JTAGa za >200zł do uC za <10zł jest głupie (do tych nieco droższych też). Mam również jeszcze pytanie dotyczące LPC2103 - chciałem spróbować w keilu - w darmowej wersji akurat limit jest taki ile wynosi rozmiar pamięci uC. Jednakże nie rozumie w C komendy assemblera (funkcja void timer0_init(void) z kursu) oraz nie potrafi zaprogramować. Narzędzie jest ciekawe chociażby ze względu na fajny debugger-symulator. Cytuj Link do komentarza Share on other sites More sharing options...
mog123 Listopad 13, 2010 Udostępnij Listopad 13, 2010 czyli wystarczy że podłącze jakiegoś(dowolnego?) cortexa pod ft232rl i mogę przez bootloadera go programować? Mógłby ktoś z was dołączyć jakiś bazowy schemat? 🙂 Bardzo fajny art! Cytuj Link do komentarza Share on other sites More sharing options...
Elvis Listopad 13, 2010 Autor tematu Udostępnij Listopad 13, 2010 Najprościej jest wykorzystać programator jak w zestawie ZL32ARM: http://www.kamami.pl/dl/zl32arm.pdf W dokumentacji jest schemat, można samemu wykonać. Warto dodać sterowanie resetem i uruchamianiem bootloadera (P0.1) - inaczej trzeba ręcznie sterować pinami. Można jeszcze taniej zrobić przejściówkę RS-232 <->UART. Schematy są na stronach Kamami - trzeba zobaczyć inne zestawy, np. ZL1ARM. Jak chodzi o interfejsy, to nowe cortex-y odchodzą od JTAG-a, zamiast nich używany jest SWD. Nie wiem jak jest z programatorami, ale oryginalny Keil-a jest baaaardzo drogi. Główny powód używania JTAG-a, czy SWD to możliwość debugowania programów. Jeśli nie chcemy debugować, to najlepiej programować przez UART - czyli przejściówkę RS-232 lub USB. Jak chodzi o podłączenie - SWD wymaga tylko 2 linii. Cytuj Link do komentarza Share on other sites More sharing options...
mog123 Listopad 13, 2010 Udostępnij Listopad 13, 2010 właśnie, jak dodać włączanie bootloadera? Na schemacie widzę podciągnięcie pod zasilanie rezystorem. Jakbym dał np zworkę do masy/vcc to wtedy wybierając masę nie wchodziłby w tryb bootloadera? Cytuj Link do komentarza Share on other sites More sharing options...
Elvis Listopad 13, 2010 Autor tematu Udostępnij Listopad 13, 2010 Działanie bootloadera opisałem tutaj: https://www.forbot.pl/forum/topics20/kurs-programowania-arm-cz11-rs-232-cd-2-bootloader-vt4392.htm W przypadku LPC111x jest tak samo - zmienia się tylko pin P0.1 zamiast P0.14. Pull-up jest po to żeby bootloader się nie uruchamiał. Jeśli P0.1 zewrzemy do masy (np. zworką) to bootloader wejdzie w tryb programowania (po resecie). Jeśli wykonamy wszystko wg. schematu ZL32ARM - reset i sterowanie P0.1 będzie automatyczne. [ Dodano: 14-11-2010, 10:20 ] OldSkull w Keil-u trzeba zmienić deklarację funkcje przerwania: void timer0(void) __irq { } A jak chodzi o asemblera, to najłatwiej wydzielić kod do nowej funkcji: volatile __asm void enable_irq() { STMDB SP!, {R0} MRS R0, CPSR ... } Cytuj Link do komentarza Share on other sites More sharing options...
KD93 Luty 12, 2011 Udostępnij Luty 12, 2011 UWAGA! W dokumentacji do układu jest błąd. Na stronie 8 dokumentacji, gdzie pisze o podłączeniu ledów, napisali, że ledy są podłącznie do pinów PIO_5 i PIO_6, a w rzeczywistości są podłączone do pinów PIO_7 i PIO_8, co jest poprawnie napisane na schemacie. Znaleźliśmy ten błąd z Bobbim po moich długich męczarniach nad zmianą diody która miga. Cytuj Link do komentarza Share on other sites More sharing options...
Bobby Wrzesień 24, 2011 Udostępnij Wrzesień 24, 2011 Pojawił się problem ze stroną Flash Magic - nie można tego ściągnąć, patrzałem na innych serwerach, ale nie mogę znaleźć. Może ktoś polecić coś innego tudzież ma na dysku instalkę flashmagica? Cytuj Link do komentarza Share on other sites More sharing options...
OldSkull Wrzesień 26, 2011 Udostępnij Wrzesień 26, 2011 Zmień rozszerzenie na .exe. FlashMagic.exe.txt 1 Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Dołącz do dyskusji, napisz odpowiedź!
Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!