wtorek, 15 marca 2011

Kurs XMega (02): Pierwszy program

Autor: Dominik Leon Bieczyński
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).
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.
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.
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.
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
Jeśli system zapyta się o sterowniki, wybierz automatyczne wyszukiwanie w katalogu C:/Program Files/Atmel. W Menedżerze urządzeń płytka powinna się przedstawiać jako ATxmega128A3U.



Atmel Flip - Menedżer urządzeń.
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 Open. Wszystkie opcje programu powinny się uaktywnić.


Atmel Flip.
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 :-)
Rezultat - Mrugająca dioda :-)



Dominik Leon Bieczyński
leon-instruments.pl


4 komentarze:

  1. Witam, mam problem bo za każdym razem jak próbuje skomplikować to wyskakują mi błędy (kod kopiuj-wklej)
    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

    OdpowiedzUsuń
  2. A dołączyłeś plik io.h? Zdefiniowałeś F_CPU? Poczytaj artykuł o Atmel Studio i artykuł "Gdzie definiować F_CPU".

    OdpowiedzUsuń
  3. 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ń
  4. Zdefiniowałem F_CPU i ten problem znikł, pozostałe błędy tez udało mi się ich pozbyć ale przybyły nowe:
    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

    OdpowiedzUsuń