www.eprace.edu.pl » automatyka-basenowa » Geneza projektu

Geneza projektu

Na początku była ciemność... Tak można określić wstęp do powstania systemu SPA. Pierwsze prace nad projektem ruszyły w styczniu 2009r. Początkowo sterownik miał jedynie zastąpić wspomniany wcześniej „Timer Pneumatic” w kwestii włącznika pneumatycznego. Jednak pomyślne testy prototypu i pojawiające się ciekawe pomysły spowodowały ewolucję projektu do dzisiejszej formy.

Pierwszym problemem był wybór platformy sprzętowej i języka programowania. Wcześniej poczyniłem kilka ciekawych urządzeń opartych o mikrokontroler AT89C2051 firmy Atmel. Jednak do zastosowania w „SPA – 1” procesor ten się nie nadawał. Brakowało mu przetwornika analogowo cyfrowego, układu Watch Dog, możliwości wymiany oprogramowania za pomocą bootloadera. Ograniczona liczba wyprowadzeń, mała przestrzeń na kod programu i fakt, że oprogramowanie było pisane w Assemblerze również stanowiły kłopot. Musiałem poszukać innego typu procesora. Brałem pod uwagę dwóch producentów: Microchip i Atmel. Procesory każdego z nich są ogólnodostępne na rynku i stosunkowo tanie. Posiadają także wbudowane układy IO spełniające moje wymagania.

Najpierw jednak postanowiłem wybrać język programowania. Mój wybór padł na język wysokiego poziomu jakim jest C. Producenci interesujących mnie procesorów oferowali darmowe środowiska programistyczne z bogatym zasobem bibliotek i gotowych procedur w tym języku, co ostatecznie zadecydowało o jego wyborze.

Ponieważ posiadałem spory zapas mikrokontrolerów PIC firmy Microchip (sample), postanowiłem wstępnie użyć ich do swojego projektu. Tu jednak napotkałem na kolejny problem. Sposób programowania i obsługi peryferiów w PIC jest zupełnie inny niż w procesorach Atmel. Również mnogość typów procesorów PIC powodowała na początku spore zamieszanie. Każdy model PICa posiada wewnątrz inne moduły peryferyjne, co w przypadku Atmela poszło w drugą stronę – każda AtMega posiada na pokładzie to samo, różnią się tylko wielkością pamięci i liczbą wbudowanych modułów. Dla początkującego programisty zderzenie z niuansami wstępnej inicjalizacji mikroprocesora PIC stanowiło ogromne zniechęcenie. Po kilku nieudanych próbach porzuciłem PICe na rzecz Atmela.

Pierwszy kontakt z rodziną Atmel Mega okazał się strzałem w dziesiątkę. AVR Studio jest znacznie prostsze do przyswojenia od pakietu MPLab. Również szereg tanich i prostych do samodzielnego uruchomienia programatorów pod USB, takich jak np. słynny „USBAsp” autorstwa Niemca Thomasa Fischl’a przemawiały na korzyść rodziny Mega. Poza tym inicjalizacja mikrokontrolera do pracy jest znacznie prostsza niż w przypadku PIC. AtMega wymaga, aby na początku programu uruchomić wykorzystywane moduły, w PIC na początku programu należy prawie wszystko powyłączać. Również obsługa przerwań mikrokontrolera AtMega diametralnie różni się od ich obsługi w PIC. AtMega posiada niezależne wektory przerwań dla każdego możliwego przerwania. PIC posiada jeden wspólny wektor przerwań, w którego obsłudze należy samodzielnie wykryć o jakie przerwanie chodzi (np. za pomocą instrukcji if(TMR1IF) – przerwanie od timera 1 ). Ostateczny wybór procesora padł na AtMega 16. Jego parametry przedstawione są poniżej:

Procesor ten pasował idealnie do tworzonego urządzenia. Zawiera praktycznie to samo co zastosowana w pierwszym prototypie AtMega 8, lecz większa liczba wyprowadzeń i podwojona pamięć programu pozwoliły na zmieszczenie programu do trzech różnych urządzeń w jednym układzie. W ten sposób moduł „SPA – 1” na chwilę obecną realizuje funkcje:

Pakiet AVR Studio i programator szeregowy USBAsp oraz równoległy AVR Dragon nie stwarzają problemów nawet początkującemu programiście. Posiadanie programatora równoległego pozwala na bezpieczne zabawy z procesorami Atmela, które łatwo zablokować przez złe ustawienie FuseBitów. Dzięki dobremu poznaniu działania wnętrza procesorów serii Mega, po pewnym czasie mogłem powrócić do procesorów Microchip’a. Obecnie obydwie rodziny procesorów traktowane są przeze mnie na równi.



komentarze

Copyright © 2008-2010 EPrace oraz autorzy prac.