Mikrokontrolery - Jak zacząć?

... czyli zbiór praktycznej wiedzy dot. mikrokontrolerów.

sobota, 26 lutego 2011

XMEGA: Pierwszy program


Autor: tmf
Redakcja: Dondu

Wstęp do XMEGA: Spis treści


Pierwszy program na XMEGA

Jaki będzie nasz pierwszy program? Słusznie się domyślasz, nieśmiertelne miganie LEDem. W tym celu uruchamiamy nasze ulubione IDE (czyli Atmel Studio – przy okazji warto przejrzeć krótki kurs na jego temat AS) i tworzymy pierwszy projekt, wybierając jako MCU XMEGA256A3BU – tu ważne, abyś z różnych dostępnych MCU wybrał ten, który posiadasz, wbrew pozorom, ostatnie literki nazwy mają znaczenie.

Jak pamiętamy w AVR piny I/O moga być skonfigurowane jako wyjścia, lub jako wejścia. Nie inaczej jest w XMEGA. Pominiemy na razie całe zawiłości konfiguracji I/O i różne możliwości jakie XMEGA oferuje, póki co chcemy prostą konfigurację totem-pole. Jako, że jest ona domyślna jedyne co musimy zrobić to przestawić piny I/O na wyjście:

PORTC.DIR=255;

Po tej operacji PORTC będzie wyjściem, a stan pinów będziemy mogli sobie radośnie zmieniać, co niniejszym uczynimy:
while(1)
    {
     PORTC.OUT=0;
     _delay_ms(1000);
     PORTC.OUT=0xff;
     _delay_ms(1000);    
    }

Jak widać naprzemiennie, co 1 sekundę zmieniamy stan wyjść PORTC z 1 na 0 i vice versa. Aby dać pewien przedsmak możliwościom o których wkrótce powiem, to samo możemy uzyskać pisząc po prostu:
while(1)
    {
      PORTC.OUTTGL=0xff;
      _delay_ms(1000);
    }

Jak się zapewne domyśliłeś, rejestr OUT to rejestr wyjściowy, a rejestr DIR to rejestr określający kierunek pinów. Czyli w starej ATMega byłyby to rejestry PORTC i DDRC. Nasz kompletny migacz wygląda tak:

#include <avr/io.h>
#include <util/delay.h>

int main(void)
{
   PORTC.DIR=255;
   
   while(1)
   {
      PORTC.OUT=0;
      _delay_ms(1000);
      PORTC.OUT=0xff;
      _delay_ms(1000);
   }
}

TU możesz ściągnąć kompletny przykład w Atmel Studio 6: LEDBLINK.ZIP

Mamy więc napisaną pierwszą aplikację na XMEGA, proste, prawda?

To jeszcze sprawdźmy czy działa, nasz FLIP jest w gotowości, klikamy więc na ikonkę Load HEX File (przypominającą strzałkę do otwartej książki) i wskazujemy plik wynikowy – znajduje się on w katalogu LEDBLINK/LEDBLINK/Debug/LEDBLINK.hex i klikamy znajdujący się po lewej stronie przycisk Run. I tyle, mikrokontroler jest zaprogramowany.

Tyle, że nic się nie dzieje. Dlaczego? Ano dlatego, że MCU ciągle jest w sekcji bootloadera oczekując na kolejne polecenia. Aby odpalić naszą pierwszą aplikację musimy nacisnąć przycisk Start Application.

Po tej operacji diody podłączone do PORTC będą sobie radośnie migać (o ile oczywiście proste urządzenia półprzewodnikowe mogą wyrażać emocje).

Jeżeli będziesz próbował wgrać kolejny program zostaniesz zaskoczony, ale o tym w następnej części.


Wstęp do XMEGA: Spis treści

Oceń artykuł.
Wasze opinie są dla nas ważne, gdyż pozwalają dopracować poszczególne artykuły.
Pozdrawiamy, Autorzy
Ten artykuł oceniam na:

4 komentarze:

  1. Witam

    A działa "staromodne" definiowanie portów?

    Czyli np:

    DDRB |= (1<<PB0) //wyjscie
    PORTB |= (1<<PB0)//pull-up do Vcc

    Bo widzę że tutaj definiowanie wygląda jak klasy :)

    OdpowiedzUsuń
  2. To co pokazałem to dostęp do IO z wykorzystaniem predefiniowanych struktur, co ma pewną przewagę. Ale można też "staromodnie", czyli PORTC_DIR, PORTC_OUT, PORTC_IN itd. Można sobie też zrobić makra, żeby mieć zupełnie po staremu.
    Co do pull up (i pull down bo XMEGA też tak potrafi) to wygląda to nieco inaczej, konfiguruje się to przez PORTx.PINnCNTRL, co wynika z bogactwa opcji konfiguracyjnych pinu.

    OdpowiedzUsuń
  3. Gdy tworzę projekt sam, dioda wyraźnie wolniej miga... a gdy wgrywam ściągnięty projekt wygląda na to, że mruga w dobrym tempie.
    F_CPU mam takie samo jak w przykładowym projekcie.
    Dlaczego tak może być?

    OdpowiedzUsuń
    Odpowiedzi
    1. A jak kompilacja? Nie ma warningów? Jedyne co może być nie tak to coś z definicją F_CPU. Proponuję wrzucić problem na elkę i tam możemy podyskutować.

      Usuń

Działy
Działy dodatkowe
Inne
O blogu




Dzisiaj
--> za darmo!!! <--
1. USBasp
2. microBOARD M8


Napisz artykuł
--> i wygraj nagrodę. <--


Co nowego na blogu?
Śledź naszego Facebook-a



Co nowego na blogu?
Śledź nas na Google+

/* 20140911 Wyłączona prawa kolumna */
  • 00

    dni

  • 00

    godzin

  • :
  • 00

    minut

  • :
  • 00

    sekund

Nie czekaj do ostatniego dnia!
Jakość opisu projektu także jest istotna (pkt 9.2 regulaminu).

Sponsorzy:

Zapamiętaj ten artykuł w moim prywatnym spisie treści.