Programowanie ATmega328p — wstęp

Arkadiusz Rychliński
3 min readMay 31, 2018

--

W tym artykule (i następnych) podzielę się swoimi doświadczeniami z programowania mikrokontrolera ATmega328p.

Po różnych eksperymentach z Raspberry Pi i Odroid C2 (o których można przeczytać w poprzednich artykułach), zniechęcony lekko faktem, że wszystko to jest paskudnie skomplikowane, specyfikacje niepełne, kod źródłowy czasami tylko w części dostępny, a w ogóle, to najlepiej używać gotowych bibliotek i kupować płytki z wstępnie zlutowanymi komponentami (tak zwane hat-y), postanowiłem zająć się czymś prostszym.

Wybór padł na AVR ATmega328p. Głównie dlatego, że taki mikrokontroler znajduje się w niektórych modelach Arduino, jest dość popularny, w Internecie jest sporo informacji, a przede wszystkim dawny ATMEL robi fajne, kompletne specyfikacje, gdzie wszystko jest sensownie opisane.

Do tego jeszcze istnieją darmowe narzędzia programistyczne, czyli kompilator GCC i narzędzie do wgrywania skompilowanego programu do pamięci flash procesora. Całość da się całkiem przyjemnie zintegrować z VS Code, w którym na ogół piszę i wszystko działa pod Linuksem.

Kupiłem więc procesor (https://botland.com.pl/avr-tht-dip/1264-mikrokontroler-avr-atmega328p-pu-dip.html), programator (https://botland.com.pl/programatory/10792-programator-avr-zgodny-usbasp-isp-tasma-idc-bialy.html) parę dodatków (kwarc, kondensatory, przewody) a zanim to jeszcze przyszło, przeczytałem całą specyfikację (https://www.microchip.com/wwwproducts/en/atmega328). Zainstalowałem avr-gcc (z biblioteką avr-glibc) oraz avrdude (do programowania mikrokontrolera) i zacząłem robić pierwszy układ i pisać pierwszy program: miganie diodą. Potem przestawiałem fusebity, wpiąłem kwarc (częstotliwość 16MHz) i wykonałem wszystkie te czynności, które robi każdy początkujący użytkownik atmegi przeczesując Internet, czytając wszystkie artykuły typu “Jak zacząć” i oglądając filmy.

W tym miejscu pozwolę sobie polecić kanał “Atnel — mirekk36” https://www.youtube.com/user/mirekk36 i na przykład serię filmów “Mikrokontrolery AVR jak zacząć” (https://youtu.be/LiQcVSPkT6M).

Może nie wszystko jest w nich idealne (bywają “przegadane”), ale nie sposób odmówić im walorów edukacyjnych.

Płytka prototypowa z moim aktualnym układem. W monitor wpięty jest programator USBasp. Układ odczytuje temperaturę z sensora DS18B20 i prezentuje ją na wyświetlaczu LCD zgodnym z HD44780 i poprzez interfejs szeregowy.

Ponieważ moim głównym zainteresowaniem w tym wypadku jest “niskopoziomowe” oprogramowanie różnych urządzeń peryferyjnych (oraz samego procesora) opiszę w kolejnych artykułach zagadnienia, które rozpoznałem do tej pory. Są to:

  1. Timer’y procesorów AVR
  2. Przerwania
  3. Implementacja protokołu 1-wire
  4. Komunikacja przez interfejs szeregowy (UART),
  5. Sterowanie wyświetlaczem (tym, który widać na zdjęciu, ale jak sobie kupie jakiś inny, to będą kolejne),
  6. PWM (sterowanie serwami i silnikami),
  7. Czujnik ruchu, sensor odległości,
  8. I²C (zwane też TWI),
  9. SPI (docelowo dostęp do kart SD)

To co na razie zrobiłem wygląda tak (między innymi, bo to nie jedyny układ, ale ten chcę opisać):

Widoczny układ obsługi termometru. Jak widać mamy lato.

Aktualne kody źródłowe tego co robię dostępne są na githubie: https://github.com/ark76r/atmega

Schemat układu:

I jego model poglądowy:

Na rysunku nie zaprezentowano podłączenia interfejsu szeregowego (konwerter USB-UART), ale na poprzednim schemacie jest to zobrazowane etykietami USB-UART TX i USB-UART RX na pinach 2 i 3.

To tyle wstępu. Jeśli tylko uda mi się zmobilizować, to powstaną kolejne artykuły. Na początek może coś banalnie prostego: jak ładnie obsłużyć przypadek, w którym chcemy, żeby procesor nie nie robił ;-)

--

--

Arkadiusz Rychliński
Arkadiusz Rychliński

Written by Arkadiusz Rychliński

IT System Architect. Technology enthusiast.

No responses yet