Wakacyjny upał ma czasem swoje zalety. Mając dosyć urlopu można poświęcić chwilę lub dwie na hobby, a nawet napisać mały artykuł.
Niby wszyscy znają Arduino, ale czym ono jest? Jak zostało zaprojektowane i skonfigurowane? Jaki jest jego związek z C oraz C++? Mając wolną chwilę postanowiłem zagłębić się trochę w kodach i dokumentacji. Do czego dotarłem?
Ten wpis zawiera ciekawe informacje dla osób, które znają Arduino lub chcą się dowiedzieć jak ono działa. Jeśli szukasz materiałów dla początkujących do sprawdź nasz kurs Arduino.
Część sprzętowa - hardware
Obecnie platforma ta ma wiele odmian oraz płytek kompatybilnych. Zacznijmy od czegoś prostego Arduino UNO, to chyba dobry wybór, żeby poznać niejako wzorcową implementację. Jakiś czas temu wśród twórców Arduino nastąpił rozłam i obecnie Arduino Uno dostępne jest w dwóch oryginalnych wersjach oraz niezliczonej liczbie klonów.
Najpierw warto spojrzeć na schemat płytki:
Schemat płytki Arduino UNO.
Układ jest prosty, ale warto prześledzić go krok-po-kroku.
Zasilanie Arduino-UNO
Najważniejsze jest zasilanie (zasilane układy elektroniczne działają lepiej). Arduino wyposażone jest w dość standardowy układ zasilania oraz stabilizator NCP1117:
Zasilanie Arduino UNO.
Więcej o stabilizatorze przeczytamy w jego nocie katalogowej. Gdy już uzyskamy napięcie na linii +5V, to zobaczymy, że świeci się zielona dioda:
Dioda sygnalizująca dopływ zasilania.
Zamiast zewnętrznego zasilacza oraz wbudowanego stabilizatora Arduino może być zasilane z USB. Ten układ jest nieco bardziej skomplikowany. Wynika to prawdopodobnie z chęci przygotowania układu, który może być bez konfliktów podłączony jednocześnie do zasilacza oraz złącza USB – w takiej sytuacji USB powinno dawać możliwość komunikacji z płytką, ale nie zasilać układu. Najprościej taki układ byłoby uzyskać zasilając płytkę przez diody, jednak spadek napięcie powodowałby pracę z niższym napięciem niż oczekiwane 5V.
Projektanci postanowili więc przygotować nieco bardziej wymyślny układ.
Pierwsza jego część, to rozpoznanie, skąd powinno być pobierane zasilanie modułu. Wzmacniacz LMV358 jest użyty jako komparator (co chyba jest błędem projektowym, ale jak widać działa). Napięcie wejściowe z zasilacza (linia VIN), jest podawane na dzielnik oraz porównywane z wzorcowym 3.3V (z dodatkowego stabilizatora).
Fragment schematu z komparatorem.
Dzielnik działa w proporcji 1:2 więc jeśli napięcie zasilania jest wyższe od 6.6V, tranzystor T1 nie przewodzi i do zasilania wykorzystywane jest zewnętrzne źródło. Natomiast w przeciwnym przypadku, T1 podaje 5 V z USB bezpośrednio do Arduino.
Dzięki temu układ pracuje poprawnie przy obu zasilaniach oraz nie występuje spadek 0,7 V typowy dla rozwiązań z diodami na wejściu (tylko szkoda, że wzmacniacz udaje komparator). Ponieważ LMV385 zawiera dwa wzmacniacze operacyjne, wolny moduł został wykorzystany jako „wtórnik napięciowy”. Dzięki niemu linia SCK, czyli zegara SPI może sterować żółtą diodą na płytce:
Fragment schematu odpowiedzialny za sterowanie żółtą LED.
Bez wzmacniacza, pobór prądu przez diodę zakłócałby komunikację – wzmacniacz sprawia, że dioda działa normalnie, a linia SCK nie jest obciążana.
Komunikacja Arduino przez USB
Układ zasilania mamy już omówiony, jak widzimy nie jest bardzo skomplikowany. Teraz czas popatrzeć na mikrokontrolery. Liczba mnoga jest użyta nie bez powodu. Jak wszyscy wiemy Arduino jest wyposażone w układ ATMega328. Jednak na schemacie widzimy jeszcze jeden mikrokontroler – ATMega16.
Drugi mikrokontroler na płytce Arduino.
Domyślnie ten układ pełni funkcję konwertera USB-UART. Uart jest bardzo prostym protokołem komunikacji szeregowej. Dwie linie: RX do odbierania danych oraz TX do wysyłania pozwalają na przesyłanie danych między układami. Na schemacie widzimy je w prawym dolnym rogu.
Dodatkowo do programowania wykorzystywana jest linia reset – resetująca główny procesor. Te trzy linie wystarczają do programowania naszego procesora. Można w tym miejscu zapytać, jak zaprogramować ATMegę16? Odpowiedź jest widoczna na schemacie jako złącze ICSP1, które służy do programowania układu.
Potrzebny jest do tego programator AVR ISP, np. zgodny z STK500. Odpowiednie narzędzie jest łatwo dostępne właściwie w każdym sklepie elektronicznym lub na „popularnym portalu aukcyjnym”. Taki interfejs ma ciekawą cechę – można byłoby zaprogramować ten układ i na jednym Arduino mieć w pełni sprawny układ dwuprocesorowy!
Najczęściej jednak Atmega16 pracuje z domyślnym programem i działa
tylko jako programator dla głównego mikrokontrolera.
Główny mikrokontroler na pokładzie Arduino
Na koniec możemy spojrzeć na schemat podłączenia głównego mikrokontrolera:
Fragment schematu Arduino z ATMega328.
Ten moduł jest zaskakująco prosty – poza filtracją zasilania, znajdziemy tylko rezonator kwarcowy 16 MHz, złącze programatora ICSP oraz wyprowadzone piny. To chyba dobry przykład na to, że prostota jest najlepsza. Układ, który właściwie nic nie ma zawojował świat.
Jak widzieliśmy analizując układ Atmegą16, linie reset, RX, TX są połączone z konwerterem. Dzięki temu USB można wykorzystać do programowania głównego mikrokontrolera. Za pomocą UART-a można też komunikować się z komputerem PC.
Wszystkie komunikaty Serial.print() wędrują właśnie tą drogą.
Warto zwrócić uwagę na złącze ICSP – dzięki niemu Arduino można programować tym samym programatorem, co Atmegę16. Złącze to służy również do wgrywania bootloader-a.
W kolejnej części zobaczymy jak działa bootloader oraz jak Arduino sprytnie wykorzystuje w pełni standardowe narzędzia, jak np. avrdude, czy kompilator gcc.
Jak najłatwiej rozpocząć przygodę z elektroniką, robotyką i budową programowalnych urządzeń?Oczywiście od Arduino! Tania, prosta platforma,... Czytaj dalej »
Autor: Piotr (Elvis) Bugalski Redakcja: Damian (Treker) Szymański
Dołącz do 20 tysięcy osób, które otrzymują powiadomienia o nowych artykułach! Zapisz się, a otrzymasz PDF-y ze ściągami (m.in. na temat mocy, tranzystorów, diod i schematów) oraz listę inspirujących DIY na bazie Arduino i Raspberry Pi.
To nie koniec, sprawdź również
Przeczytaj powiązane artykuły oraz aktualnie popularne wpisy lub losuj inny artykuł »
Dołącz do 20 tysięcy osób, które otrzymują powiadomienia o nowych artykułach! Zapisz się, a otrzymasz PDF-y ze ściągami (m.in. na temat mocy, tranzystorów, diod i schematów) oraz listę inspirujących DIY z Arduino i RPi.
Trwa ładowanie komentarzy...