Schemat blokowy architektury AVR Rejestry procesora AVR dostępne programowo Rejestry procesora AVR związane z pobraniem i wykonaniem rozkazu
Schemat blokowy procesora ATMega 2560
ATMEL ATMEGA328P MEMORY MODEL
Rozmieszczenie rejestrów ogólnego przeznaczenia Budowa logiczna rejestrów indeksowych X, Y, Z
AVR Studio
Przykład programu zapalającego i wyłączającego diodę LED napisanego w assemblerze procesora ATMega.include "m32def.inc" // mruganie diody.cseg.org 0 cli ;blokada przerwań ldi R16, HIGH(RAMEND) out SPH, R16 ldi R16, LOW(RAMEND) out SPL, R16 ;ustawienie stosu sbi DDRA, 7 sbi DDRA, 6 ;kierunek transmisji cbi PORTA, 7 petla: sbi PORTA, 6 rcall czekaj250ms rcall czekaj250ms rcall czekaj250ms rcall czekaj250ms cbi PORTA,6 rcall czekaj250ms rcall czekaj250ms rcall czekaj250ms rcall czekaj250ms rjmp petla czekaj250ms: ldi R20, 0 czekaj250ms_0: ldi R21, 0 czekaj250ms_1: inc R21 cpi R21,250 brlo czekaj250ms_1 inc R20 cpi R20, 249 brlo czekaj250ms_0 ret
Przykład programu zapalającego i wyłączającego diodę LED napisanego dla procesora ATMega w języku C #include <avr/io.h> #define F_CPU 16000000 #include <util/delay.h> int main() DDRA = 0b11000000; for (;;) PORTA = 0b01000000; _delay_ms(1000); PORTA = 1; _delay_ms(1000); Przykład programu zapalającego i wyłączającego diodę LED napisanego dla środowiska Arduino w języku C void setup() pinmode(13, OUTPUT); void loop() digitalwrite(13, HIGH); delay(1000); digitalwrite(13, LOW); delay(1000);
Arduino toolchain napisanie kodu w IDE kompilacja kodu przyłączenie USB do płytki Arduino załadowanie kodu do pamięci wykonywanie kodu Programowanie Arduino
Na pasku narzędziowym znajduje się sześć ikon: Weryfikuj (symbol sprawdzania): pozwala sprawdzić poprawność kodu pod kątem obecności błędów składniowych Załaduj (strzałka w prawo): kompiluje i ładuje kod do pamięci program Arduino Nowy (czysta strona): tworzy nowy, czysty szkic Otwórz (strzałka w górę): otwiera listę szkiców znajdujących się w szkicowniku Zapisz (strzałka w dół): zapisuje nasz szkic w szkicowniku Monitor portu szeregowego (małe szkło powiększające z prawej strony paska): umożliwia monitorowanie portu szeregowego
Menu Narzędzia oferuje następujące możliwości: Automatyczne Formatowanie: umożliwia formatowanie tekstu program z wykorzystaniem właściwych wcięć standardowych Archiwizuj Szkic: kompresuje i archiwizuje szkic jako plik typu.zip Napraw kodowanie i załaduj ponownie: pozwala odrzucić wprowadzone zmiany i ponownie załadować szkic Monitor portu szeregowego: otwiera okno monitora portu szeregowego I pozwala na komunikację pomiędzy komputerem a modułem Arduino Płytka: wyświetla wyświetlić listę obsługiwanych płyt Arduino i wybrać model dla naszego szkicu Port Szeregowy : pozwala wyświetlić listę urządzeń podłączonych do portów szeregowych komputera (rzeczywistych i wirtualnych) Programator: pozwala wybrać sprzętowy programator podczas programowania Arduino lub procesora bez połączenia szeregowego (np. przy wypalaniu bootloadera w nowym procesorze) Wypal Bootloader
Menu Plik
typ zajętość pamięci[b] boolean 1 Typy zmiennych zakres wartości true lub false (1 lub 0) uwagi reprezentuje wartości logiczne char 1-128 do +127 reprezentuje kody znaków ASCII byte 1 0 do 255 wartości całkowite bez znaku int 2-32768 do +32767 unsigned int 2 0 do 65536 long 4 unsigned long 4 float 4-2 147 483 648 do +2 147 483 647 0 do 4 294 967 295-3,4028235E+38 +3,4028235E+38 double 4 jak float liczby całkowite ze znakiem 16-bitowe liczby całkowite bez znaku 16-bitowe liczby całkowite ze znakiem 32-bitowe liczby całkowite bez znaku 32-bitowe liczby zmiennoprzecinkowe pojedynczej precyzji zwykle 8B lub więcej, w Arduino jak float
Przykłady funkcji dostępnych z biblioteki standardowej Arduino
Budowa szkicu deklaracja zmiennych globalnych kod, który jest wykonywany tylko raz, np. definicja końcówek, inicjalizacja portu szeregowego kod, który jest wykonywany cyklicznie Przykładowe programy Hello World void setup() Serial.begin(9600); // uruchamia port szeregowy 9600 bps void loop() Serial.print("Hello World!\n\r"); delay(2000); // oczekiwanie 2 s Hello World with a LED int ledpin = 13; // dioda LED podłączona do pinu 13 void setup() pinmode(ledpin, OUTPUT); // ustawienie końcówki jako wyjścia Serial.begin(9600); // uruchamia port szeregowy 9600 bps void loop() Serial.print("Hello World!\n\r"); digitalwrite(ledpin, HIGH); // zapala diodę LED delay(1000); digitalwrite(ledpin, LOW); // gasi diodę LED delay(1000);
Sterowanie diody LED przez port szeregowy Naciśnięcie każdego klawisza związane jest z wygenerowaniem kodu ASCII, który może być przesłany przez port szeregowy do Arduino i wykorzystany do jego sterowania. Znak a będzie włączał i wyłączał diodę LED int ledpin = 13; // dioda LED podłączona do pinu 13 int inbyte = 0; void setup() pinmode(ledpin, OUTPUT); // ustawienie końcówki jako wyjścia Serial.begin(9600); // uruchamia port szeregowy 9600 bps void loop() while (Serial.available()>0) inbyte = Serial.read(); Serial.println(inByte); // wyświetla zawartość inbyte if (inbyte==97) // lub a digitalwrite(ledpin, HIGH); // zapala diodę LED else digitalwrite(ledpin, LOW); // gasi diodę LED delay(1000); // oczekiwanie 1 s Zadanie Utworzyć układ z trzema diodami LED podłączonymi do różnych wyjść Arduino i napisać program ich sterowania przez port szeregowy: jeśli naciśnięto 1 należy włączyć jedną diodę jeśli naciśnięto 2 należy włączyć dwie diody jeśli naciśnięto 3 należy włączyć trzy diody
Funkcja Random() Funkcja ta generuje liczby pseudo-losowe. Składnia: random(max) random(min, max) Przykładowy kod: void setup() Serial.begin(9600); // uruchamia port szeregowy 9600 bps randomseed(analogread(a0)); // inicjalizacja generatora void loop() int randnumber; // wyświetlanie liczb losowych z przedziału 0 do 299 randnumber = random(300); Serial.println(randNumber); // wyświetlanie liczb losowych z przedziału 10 do 19 randnumber = random(10, 20); Serial.println(randNumber); delay(1000); Zadanie Utworzyć układ z trzema diodami LED podłączonymi do różnych wyjść Arduino i napisać program ich sterowania przez port szeregowy: jeśli naciśnięto 1 należy włączyć jedną losowo wybraną diodę jeśli naciśnięto 2 należy włączyć dwie losowo wybrane diody jeśli naciśnięto 3 należy włączyć trzy diody