Redakcja: Dondu
Artykuł jest fragmentem cyklu: Kurs mikrokontrolerów XMega by Leon-Instruments
Starożytny zwyczaj nakazuje zacząć naukę programowania mikrokontrolerów od mrugającej diody! Tak więc i my, jako nasz pierwszy program na ATxmega zrobimy mrugającą diodę.
Pierwszy projekt
Uruchamiamy Atmel Studio 6 (jeśli jeszcze go nie masz, to zapraszam na stronę Atmel Studio 6 download). Po uruchomieniu programu, powinniśmy zobaczyć taki ekran:Atmel Studio - Środowisko programistyczne (IDE). |
Klikamy New Projekt. Otwiera się okno, w którym musimy nazwać nasz nowy projekt oraz podać, w jakim katalogu ma być zapisany. Wpisz tu, co uznasz za stosowne :) oprócz tego wybieramy GCC C Executable Project.
Atmel Studio - Nowy projekt |
W kolejnym kroku wybieramy procesor, jaki nasz interesuje. W module X3-DIL64 znajduje sięATxmega128A3U. W tym oknie możemy także ściągnąć aktualną dokumentację.
Atmel Studio - Wybór procesora |
Po kliknięciu OK zostanie utworzony projekt i pojawi się szablon, zawierający szkielet prostego programu. Skasuj go i skopiuj poniższy kod w jego miejsce.
#include <avr/io.h> #include <util/delay.h> int main(void) { PORTE.DIR = 0; // caly port E jako wejście PORTF.DIR = 0b11111111; // caly port F jako wyjście uint8_t licznik = 0; // zmienna sterująca mrugającymi diodami while(1) { licznik++; PORTF.OUT = licznik; if(PORTE.IN & (1<<5)) { // jeśli przycisk FLIP zwolniony _delay_ms(100); } else { // jeśli przycisk FLIP wciśnięty _delay_ms(50); } } }
Aby skompilować program, wystarczy wcisnąć klawisz F7. W konsoli w dolnej części okna, powinniśmy zobaczyć Build Succeeded. Aby sprawdzić ile pamięci zajmuje nasz program, trzeba przesunąć tekst trochę do góry lub rozciągnąć okno konsoli.
Atmel Studio - Kompilacja |
Programowanie przez FLIP
Procesor w module X3-DIL64 ma wbudowany bootloader, dzięki któremu możesz szybko wystartować z procesorami XMEGA bez potrzeby posiadania programatora PDI. Wystarczy zwykły kabel MiniUSB, taki jak do telefonu czy innych urządzeń. Ściągnij Atmel Flip ze strony producenta i zainstaluj.Po podłączeniu płytki do komputera, nic nie powinno się dziać, bo uruchomił się ostatnio wgrany program. Aby uruchomić bootloader, należy wykonać taką sekwencję:
- Wciśnij jednocześnie RESET i FLIP
- Puść RESET, cały czas trzymając FLIP
- Komputer powinien wykryć nowe urządzenie USB
- Puść FLIP
- Procesor jest gotowy do otrzymania nowego programu
Atmel Flip - Menedżer urządzeń |
Uruchamiamy program Atmel FLIP. Następnie klikamy ikonkę pierwszą z lewej i wybieramy procesor ATxmega128A3U. Dalej, wybieramy Select Communication Medium i oczywiście wybieramy USB i Open. Wszystkie opcje programu powinny się uaktywnić.
Atmel Flip |
Klikamy ikonkę Load Hex File z czerwoną strzałką skierowaną w stronę książki. Musimy teraz wskazać plik do wgrania do procesora. Znajduje się on w katalogu projektu w/Debug/xmega-demo.hex. Ważne! Ścieżka, nazwy katalogów i plików nie powinny być nadmiernie skomplikowane i nie powinny zawierać polskich znaków. Następnie klikamy RUN. Niniejszym program został przesłany do procesora, co powinno zająć mniej niż sekundę. Ostatnia rzecz to kliknięcie przycisku Start Application, by wyłączyć bootloader, odłączyć USB (nie trzeba odpinać kabla), a program wystartuje samoczynnie.
Testujemy
Program testowy generuje różne sygnały o niewielkiej częstotliwości na porcie F. Potrzebujemy zatem diodę z rezystorem, bo zobaczyć te sygnały na własne oczy :) Można ją podłączać na różne sposoby do dowolnego pinu portu F. Po wciśnięciu przycisku FLIP, dioda powinna migać dwukrotnie szybciej.Rezultat - Mrugająca dioda :-) |
Dominik Leon Bieczyński
leon-instruments.pl
Witam, mam problem bo za każdym razem jak próbuje skomplikować to wyskakują mi błędy (kod kopiuj-wklej)
OdpowiedzUsuńError 4 'PORTF' undeclared (first use in this function)
Error 2 'PORTE' undeclared (first use in this function)
Warning 1 #warning "F_CPU not defined for " [-Wcpp]
Warning 3 each undeclared identifier is reported only once for each function it appears in
Wiecie może gdzie jest problem, pozdrawiam
A dołączyłeś plik io.h? Zdefiniowałeś F_CPU? Poczytaj artykuł o Atmel Studio i artykuł "Gdzie definiować F_CPU".
OdpowiedzUsuńZ tym F_CPU to w prostych projektach łatwiej jest pisać tradycyjnie jako #define, a jeśli mamy więcej plików to jednak metoda tmf opisana we wspomnianym artykule jest zdecydowanie lepsza.
OdpowiedzUsuńZdefiniowałem F_CPU i ten problem znikł, pozostałe błędy tez udało mi się ich pozbyć ale przybyły nowe:
OdpowiedzUsuńError 1 request for member 'DIR' in something not a structure or union
Error 2 request for member 'DIR' in something not a structure or union
Error 4 request for member 'IN' in something not a structure or union
Error 3 request for member 'OUT' in something not a structure or union