KURS AVT: Kurs programowania procesorów AVR w C
Przeznaczeniem zestawu jest nauka programowania w języku C, w oparciu o kurs zamieszczony na dołączonym nośniku. Zestaw AVT3505 podzielony został na dwie części: płytkę główna i wykonawczą. O ile druga z nich zaprojektowana została głównie z myślą o realizacji projektów przerabianych w kursie, płytka główna stanowi uniwersalny sterownik o sporych możliwościach, które w przyszłości mogą być wykorzystane w innych projektach.
Sercem systemu jest procesor Atmega162. Na płytce znajdują się dwa złącza programujące; standardowe ISP oraz jednorzędowe ISP2. Dołączona przejściówka umożliwia programowanie zestawu dołączonym do kompletu programatorem AVTPROG5.
W zestawie:
- AVT3505 C - zmontowany dwupłytkowy zestaw uruchomieniowy do nauki programowania w C
- AVTPROG5 - zmontowany programator USB (współpracuje z programem AVR Studio który można pobrać ze strony Microchip (dawniej ATMEL)
- komplet okablowania
- nośnik (pendrive) z kompletem materiałów i sterowników
Ogólny zarys kursu i najważniejsze zagadnienia:
Część 1
Opis zagadnień:
♦ Gdzie znaleźć, jak zainstalować i skonfigurować WinAVR.
♦ Konfiguracja Programmers Notepad'a oraz dodawanie do niego narzędzi.
♦ Podstawowe informacje o makefile.
♦ Piszemy pierwszy program – miganie diodami.
♦ Symulowanie programu przy pomocy AVRStudio.
Podtytuły:
♦ Krok pierwszy – zbieranie narzędzi
♦ Krok drugi – instalacja i konfiguracja
♦ Krok trzeci – przygotowanie części sprzętowej
♦ Start! - pierwszy program
♦ Jak to działa
♦ Symulacja programu
♦ WinAVR + AVRStudio – konkluzja
Część 2
Opis zagadnień:
♦ Część standardowa pisanego programu
♦ Stałe symboliczne
♦ Jak C wykonuje obliczenia
♦ Podstawowe informacje o zmiennych
♦ Operacje na bitach
Podtytuły:
♦ Małe repetytorium – zaczynamy
♦ Kodowanie – część standardowa
♦ Kompilacja szablonowego pliku
♦ Definicje stałych – zapomnij o “aliasach”
♦ Wyświetlanie – coś prostego
♦ Wyświetlanie – wyższy stopień
♦ Podsumowanie
Część 3
Opis zagadnień:
♦ Pliki nagłówkowe
♦ Przerwania
♦ Format linii a właściwie jego brak
♦ Instrukcja warunkowa if
♦ Umieszczanie tablic w pamięci programu
♦ Funkcje
Podtytuły:
♦ Więcej o plikach nagłówkowych
♦ AVR-GCC – przerwania
♦ Warunki i instrukcja if
♦ “Zmienne” w pamięci programu
♦ Zaczynamy tworzyć funkcje
♦ Podsumowanie
Część 4
Opis zagadnień:
♦ Tworzenie i wykorzystanie pętli: for, while orazdo-while.
♦ Zmienne lokalne.
♦ Generowanie opóźnień przy pomocy przerwań.
♦ Znaczenie zmiennych typu static oraz volatile.
♦ Sposób odczytu portów.
♦ Tworzenie oraz wykorzystanie wskaźnika na funkcję.
Podtytuły:
♦ Ogólnie o programie
♦ WyświetlDEC
♦ Generowanie opóźnień
♦ Obsługa klawiatury
♦ Poprawa obsługi klawiatury
♦ Podsumowanie
Część 5
Opis zagadnień:
♦ Prosta obsługa wyświetlacza LCD.
♦ Przydatne makra do obsługi portów.
♦ Pisanie oraz używanie makr.
♦ Samodzielne pisanie funkcji opóźnień (trudniejsze ale dokładne).
♦ Wykorzystanie wstawek asemblerowych.
♦ Elementy zagadnienia optymalizacji kodu przez kompilator.
♦ Obsługa i wykorzystanie napisów.
♦ Wskaźniki.
Podtytuły:
♦ Mniej definicji portów
♦ Obsługa wyświetlacza – Przygotowania
♦ Nagłówki, wyprowadzenia, stałe (dotyczy konkretnego kodu)
♦ Funkcje opóźnień (korzystamy ze wstawek asemblerowych)
♦ Funkcje niskiego poziomu (sterowanie wyprowadzeniami wyświetlacza LCD)
♦ Wysyłanie komend oraz danych
♦ Inicjacja wyświetlacza
♦ Pierwsze uruchomienie
♦ Wprowadzamy łańcuchy
♦ Wskaźniki
♦ Wykorzystanie pamięci programu
♦ Koniec pierwszej tury
Część 6
Opis zagadnień:
♦ Rozbijanie kodu programu na wiele plików.
♦ Kompilacja warunkowa.
♦ Statyczne funkcje rozwijane w miejscu wywołania (static inline).
♦ Programowa obsługa interfejsu I²C.
Podtytuły:
♦ Dzielenie kodu programu
♦ Zanim zaczniesz (przygotowanie do pisania nowego programu – krótkie przypomnienie)
♦ Pierwszy moduł – delay
♦ Makra oraz definicja sprzętu
♦ Wyświetlacz LCD
♦ Interfejs I²C – sposób przesyłania danych
♦ Szybkość transmisji (interfejs I²C)
♦ I²C – funkcja opóźnienia połówkowego
♦ I²C – reszta funkcji
♦ Plik główny
♦ Konfiguracja makefile
♦ Porządkowanie projektu
♦ Podsumowanie
♦ Propozycje zmian
PRZEPROWADZKA
Ta, odrębna część powstała z okazji nowej płytki testowej. Omówione zostały bity konfiguracyjne procesora ATmega162 oraz sposób ich konfiguracji z poziomu programatora BASCOM. Na przykładach pokazane zostało w jaki sposób przenieść poprzednio napisane programy na nową płytkę.
Podtytuły:
♦ Fusy
♦ Przenoszenie programu LEDMulti
♦ Trochę o stałych ich typach i obcinaniu
♦ Przenoszenie programu PCF8591
♦ Podsumowanie
Część 7
Opis zagadnień:
♦ Biblioteka stdio – funkcja printf
♦ Komunikacja z terminalem
Podtytuły:
♦ “Hello world”
♦ Jaki to ma sens (stosowanie biblioteki stdio)
♦ Pamięć programu (funkcje, zaimplementowane w bibliotece stdio, posługujące się pamięcią programu)
♦ Podsumowanie
Część 8
Opis zagadnień:
♦ Biblioteka stdio – korzystamy z niestandardowego wejścia / wyjścia
♦ Struktury
♦ Nazywanie typów
♦ Niekompletna deklaracja struktury
♦ Zaglądamy do kodów źródłowych biblioteki standardowej
♦ Rzutowanie zakresu oraz rzutowanie wskaźników (rzutowanie typu)
♦ Wskaźnik na typ pusty
Podtytuły:
♦ Niestandardowe wejście / wyjście
♦ Głębiej w stdio
♦ Korzystamy z możliwości, jakie daje Open Source
♦ Podsumowanie rozwiązania
♦ Rzutowanie
Część 9
Opis zagadnień:
♦ Wbudowane w WinAVR funkcje opóźnień: _delay_usoraz _delay_ms
♦ Deklaracja typu extern
♦ Sterowanie przebiegiem pętli
♦ Bezpośrednie podawanie kodu znaku w zapisie szesnastkowym oraz ósemkowym w łańcuchu znaków
♦ Opis zagadnień pozostałych:
♦ Wydzielanie ustawień lokalnych
♦ WinAVR 20060125 oraz konsekwencje zastosowania avr-libc 1.4 zamiast 1.2
♦ Zaawansowana obsługa LCD – dynamiczne przydzielanie znaków specjalnych
Podtytuły:
♦ WinAVR 20060125
♦ Zaczynamy nowy projekt
♦ Definicja sprzętu
♦ Początek modułu lcd
♦ Funkcje niskiego poziomu
♦ Funkcja lcd_put
♦ Interfejs
♦ Zmienna przechowująca “ogonki”
♦ Przechowuj oddzielnie ustawienia lokalne
♦ Alokacja znaków specjalnych
♦ Wysyłanie bufora znaków do wyświetlacza
♦ Zakończenie modułu lcd
♦ Test
♦ Uwagi końcowe
Część 10
Opis zagadnień:
♦ Używanie tablic wielowymiarowych
♦ Kwalifikator const
♦ Typ wyliczeniowy
♦ Opis zagadnień pozostałych:
♦ Obsługa wielu języków
Podtytuły:
♦ Projekt multilang
♦ Zarządzanie językami
♦ Dostosowanie modułu lcd
♦ Test
♦ Ułatwienie tworzenia tablicy wskaźników
♦ Inne modyfikacje
♦ Podsumowanie
Część 11
Opis zagadnień:
♦ Instrukcja switch-case
♦ Bezpośrednie skoki do etykiet
♦ Unia
♦ Opis zagadnień pozostałych:
♦ Przewijane menu
♦ Obsługa zdarzeń w kolejce komunikatów
♦ Wydzielenie warstwy aplikacji i systemu operacyjnego
Podtytuły:
♦ System i aplikacja
♦ Kolejka komunikatów
♦ Obsługa klawiatury
♦ Timer systemowy
♦ Systemowa funkcja generująca opóźnienie
♦ Test kolejki i klawiatury
♦ Programowe timery oferowane przez system
♦ Korzystanie z menu
♦ Podsumowanie
Część 12
Opis zagadnień:
♦ Podstawowe informacje o sekcjach pamięci z jakich korzysta GCC
♦ Umieszczanie funkcji oraz zmiennych w wybranych sekcjach
♦ Tworzenie bootloadera
♦ Wsparcie bootloadera przez procesory AVR
♦ Wsparcie bootloadera przez avr-libc
♦ Deklarowanie stałych dla preprocesora z poziomu pliku makefile
♦ Pisanie funkcji w pełnym asemblerze
Podtytuły:
♦ Bootloader a procesory AVR
♦ Programowanie pamięci FLASH
♦ Pisanie bootloadera
♦ Sekcje pamięci
♦ Przygotowanie do pisania aplikacji
♦ Dwa podejścia do tworzenia bootloadera
♦ Zanim uruchomimy przerwania
♦ Części wspólne dla naszych bootloaderów
♦ Używanie w kodzie programu stałej BOOTSTART
♦ Wczytywanie oraz wysyłanie strony
♦ Bootloader z wykorzystaniem wsparcia avr-libc 1.4
♦ Pełny asembler
♦ Podsumowanie
Część 13
Opis zagadnień:
♦ Programowanie wyświetlacza graficznego ze sterownikiem PCD8544
♦ Sprzętowy oraz programowy interfejs SPI
Podtytuły:
♦ Sterownik PCD8544 – podstawy
♦ Sterownik PCD8544 – konfiguracja
♦ Przygotowanie sprzętu
♦ Uruchomienie wyświetlacza
♦ Rysowanie obrazka
♦ Pisanie tekstu
♦ Sprzętowy SPI
♦ Próby usunięcia ramki z wyświetlacza
♦ Podsumowanie
Część 14
Opis zagadnień:
♦ Liczby zmiennoprzecinkowe
♦ Biblioteka matematyczna
♦ Liczby stałoprzecinkowe
♦ Tablicowanie funkcji
♦ Tworzenie grafiki 3D
Podtytuły:
♦ Uruchomienie biblioteki obsługi LCD
♦ Rysowanie linii – spróbujmy sami
♦ Optymalizacja linii
♦ litle3D – nasz mały silnik 3D
♦ Wypisywanie aktualnego kąta obrotu
♦ Biblioteka 3D bez operacji zmiennoprzecinkowych
♦ Podsumowanie
Część 15
Opis zagadnień:
♦ Obsługa wyświetlacza kolorowego z telefonu NOKIA3510i
Podtytuły:
♦ Zróbmy to kolorowo: wyświetlacz z telefonu NOKIA3510i
♦ Zestaw komend
♦ Dostęp do pamięci obrazu
♦ Ustawienia domyślne wyświetlacza po zerowaniu
♦ Prosta animacja
♦ Podsumowanie
Część 16
Opis zagadnień:
♦ Obsługa pamięci zewnętrznej
♦ Obsługa pamięci EEPROM
♦ Generowanie ciągów pseudolosowych
♦ Dynamiczne przydzielanie pamięci
♦ Skrypty linkera – podstawy
Podtytuły:
♦ Pamięć zewnętrzna w sekcji .exram
♦ Podpalanie wyświetlacza [Animacja ognia]
♦ Pamięć EEPROM – dodajemy możliwość konfiguracji
♦ Pamięć przydzielana dynamicznie
♦ Program „przeglądarka” [Przesyłanie i oglądanie obrazków]
♦ Moduł imglist
♦ Uruchomienie
♦ Podsumowanie
Część 17
Podtytuły:
♦ Jak samemu dostosować program do nowej wersji narzędzia WinAVR
♦ Pozostały zakres materiału
♦ Funkcja z otwartą listą argumentów
♦ Oszczędzanie energii
♦ Timer watchdog – bezpieczeństwo aplikacji
♦ Jak sprawdzić, Czy program prawidłowo reaguje na reset WDT?
Część 18
Podtytuły:
♦ Wykonywanie dalekiego skoku
♦ Debugowanie
♦ Errata
♦ Podsumowanie