niedziela, 3 kwietnia 2016

Atmel SAM L21 Xplained Pro - Wstęp - Ośla łączka


Od czterech lat tworzę cuda niewidy na mikrokontrolerach, w większości 8-bitowych AVR'ach. Jednak przychodzi taka chwila w której myślisz sobie: a może by pójść o krok dalej, poznać więcej, doświadczyć czegoś nowego? Dzięki uprzejmości firmy JM Elektronik rozpocząłem nowy rozdział w mojej książce przygód z mikrokontrolerami. Ośla łączka z zestawem Atmel SAM L21 Xplained Pro, bo od czegoś trzeba zacząć.

Zestaw ten w zamyśle ma pozwolić na poznanie wszystkich możliwości badanego procesora przed wdrożeniem go do jakiegoś potężnego projektu, czy urządzenia które będą produkowane na większą skalę. Wypuszczono jeszcze pełno modułów (jak w Arduino) pozwalających poszerzyć możliwości o BLE, WIFI, klawiaturę, dodatkowe guziki itd. itd... Jako że platforma jest mega niszowa, moja ośla łączka będzie bardziej opowieścią o tym, jak odkrywam jeszcze głębiej świat mikrokontrolerów, niźli jakimś poradnikiem dla świeżaków od deski do deski.


Na wstępie chciałbym powiedzieć: czym do diaska się różni taki mikrokontroler od poczciwej Atmegi8? Prawie dwoma dekadami postępu technologicznego. Jest więcej pamięci na program, jest więcej ramu, więcej peryferii, więcej, więcej! Daje to zdecydowanie większe pole do popisu (czy jak kto woli mniejszą konieczność na optymalizacje projektów).

 

Z najciekawszych dodatków w porównaniu do staruszka AVR'a znalazłem:
- 16 niezależnych przerwań zewnętrznych z (prawie) dowolnego pinu mikrokontrolera (w atmedze "ósemce" było ich aż 2)
- debugger pozwalający na żywo analizować program na działającym układzie - w przypadku avrów i ISP nie było takiej opcji
- 12 bitowy przetwornik cyfrowo-analogowy - prosta droga do stworzenia generatora przebiegów, czy odtwarzacza empetrójek bez PWMa
- wbudowany zegar RTC, na płytce testowej widać sam kwarc z bateryjką od pamięci - nie potrzeba zewnętrznego scalaka, jak w przypadku Atmegi8
- rozbudowane timery, liczniki
- obsługa USB
- nie ma o dziwo pamięci EEPROM


Co ma wspólnego "nowy" mikrokontroler ze starą Atmegą?
Nadal piszemy program, który ładujemy do pamięci flash. Nie ma żadnego systemu operacyjnego (wyjątkiem jest RTOS), nie ma żadnego dysku. Jest to mikrokontroler na wypasie, ale wciąż nie można nazwać tego komputerem płytkowym, jakim jest np. Raspberry Pi.


Tak więc jak mówi staropolskie przysłowie: "Początek z każdą platformą sprzętową od zamigania diodą rozpocznij". Producent przygotował własne IDE Atmel Studio, bazujące na Visual Studio od Microsoftu. Jako że już trochę w nim pracowałem szykując projekty w dotnecie, poczułem się trochę jak w domu. Po wpięciu płytki do komputera środowisko automatycznie mi ją wykryło, po czym dało automatycznie do wyboru opcje co by tu z nią zrobić.


Po wyborze przykładowego programu z listy, odpala nam się projekt tak jak w Visualu. Możemy działać.


Warto tu wspomnieć kilka słów o ASF, czyli frameworku od Atmela. Jest to zestaw gotowych bibliotek, szmerów bajerów umożliwiających odpalenie znacznie znacznie więcej przy użyciu jednej linijki.

Przykładowa inicjalizacja pinu. Generujemy strukturę do której wpisujemy standardowe dane, po czym zmieniając jej kolejne elementy tworzymy wzór dla funkcji uruchamiającej pin w mikrokontorlerze.

struct port_config pin;
port_get_config_defaults(&pin);
pin.direction = PORT_PIN_DIR_OUTPUT;
port_pin_set_config(PIN_PA10, &pin);

Program od migania diodą przedstawia się następująco, jest parę różnic w stosunku do avrgcc, jednak nie ma zbyt dużej filozofii.

int main(void)
{
system_init();
delay_init();
struct port_config pin;
port_get_config_defaults(&pin);
pin.direction = PORT_PIN_DIR_OUTPUT;
port_pin_set_config(LED0_PIN, &pin);
port_pin_set_output_level(LED0_PIN, LED0_INACTIVE);
while (true) {
port_pin_toggle_output_level(LED0_PIN);
delay_s(1);
}
}

Trochę bardziej zaawansowany program z przerwaniem zewnętrznym. Możemy przypisać takowych 16 do prawie każdego pinu i są one wywoływane spoza pętli main, podobnie jak w przypadku avrów. Program jest deko dłuższy i wrzucam go w postaci screenów (klik aby powiększyć). Program robi tyle, że po wciśnięciu przycisku PB05 wywoływane jest przerwanie w którym badany jest stan tego przycisku. Dodatkowo miga sobie w pętli głównej druga dioda. Wiem, program nie należy do najmądrzejszych, ale wystarczyło mi to do nauczenia się działania całego mechanizmu.




Cóż mogę powiedzieć po pierwszych godzinach z Atmel SAM L21 Xplained Pro? Całkiem zaawansowana płytka, nada się na jakiś odważny złożony projekt (ciągle mi chodzi po głowie generator przebiegów elektrycznych). Temat ogólnie jest godny dalszego rozwinięcia i będę nad nim w dalszym ciągu pracował.