Technika mikroprocesorowa materiały do laboratorium. Autor: Dorota Rabczuk

Wielkość: px
Rozpocząć pokaz od strony:

Download "Technika mikroprocesorowa materiały do laboratorium. Autor: Dorota Rabczuk"

Transkrypt

1 Technika mikroprocesorowa materiały do laboratorium Autor: Dorota Rabczuk

2 Architektura mikrokontrolera AT90S Jednostka arytmetyczno-logiczna ALU posiada dostęp do 32-ch rejestrów 8-bitowych, na których wykonuje obliczenia. 2. Pamięć programu Flash 8 kbajtów, licznik instrukcji, dekoder instrukcji. 3. Pamięć ulotna danych RAM 512 bajtów. 4. Pamięć nieulotna danych EEPROM 512 bajtów. 5. Urządzenia peryferyjne: liczniki/timery 8-bitowe i 16-bitowe, Timer z trybem PWM, Timer watchdog, moduł przerwań zewnętrznych, interfejsy: SPI i UART, komparator analogowy

3 Architektura mikrokontrolera AT90S8515

4 Wyprowadzenia mikrokontrolera AT90S8515

5 Pamięci wewnętrzne mikrokontrolera 1. Pamięć programu Flash programowalna elektrycznie równolegle lub szeregowo. Programowanie szeregowe może się odbywać w układzie przez interfejsy: SPI lub JTAG lub UART (RS-232) ten ostatni sposób wymaga wcześniejszego wgrania programu ładującego tzn. bootloader a 2. Pamięć danych RAM (SRAM) o dostępie nanosekundowym, ulotna, tryby adresowania: bezpośredni i wskaźnikowy. 3. Pamięć danych EEPROM o dostępie milisekundowym, nieulotna.

6 Zapis liczb Zapis liczb: 0b zapis binarny 0xdc lub $dc zapis szesnastkowy 220 zapis dziesiętny 0b = 0xdc = $dc = 220 Makro _BV(x) jest liczbą, która ma jedną binarną 1 na pozycji x _BV(6) = 0b = 0x40 = 64

7 Suma i iloczyn binarny Suma binarna Suma binarna jest wykonywana bit z bitem. Operacja ta służy do ustawienia w wyjściowym rejestrze wybranych bitów pozostawiając pozostałe bez zmian. 0b???????? 0b = 0b1?1?1?1? Bity nieparzyste tj. 1,3,5 i 7 zostają ustawione, natomiast bity parzyste tj. 6,4,2,0 nie ulegną zmianie. Iloczyn binarny & Iloczyn binarny jest wykonywany bit z bitem. Operacja ta służy do wyzerowania w wyjściowym rejestrze wybranych bitów pozostawiając pozostałe bez zmian. 0b???????? & 0b = 0b?0?0?0?0 Bity nieparzyste tj. 1,3,5 i 7pozostaja bez zmian, natomiast bity parzyste tj. 6,4,2,0ulegają wyzerowaniu.

8 Przesunięcie binarne Przesunięcie binarne w lewo << Operacja (1<<0) powoduje utworzenie liczby 0b (1<<0) = 0x01 Operacja (1<<4) powoduje przesunięcie binarnej 1 o 4 pozycje w lewo i utworzenie liczby (1<<4) = 0b Liczba (1<<4) (1<<0) = 0b ma 2-ie jedynki binarne Przesunięcie binarne w prawo >> Operacja (a>>8) powoduje przesunięcie wszystkich bitów liczby o 8 pozycji w prawo i jest przydatna do wykonywania operacji na młodszym i starszym bajcie liczby 16-sto bitowej w 8-mio bitowych mikrokontrolerach char b, c; //liczby 8-mio bitowe int a=0x3456; //liczba 16-sto bitowa b = a; //młodszy bajt liczby a tj. b=0x56; c = (a>>8); //starszy bajt liczby a tj. b=0x34;

9 Przesunięcie binarne Przesunięcie binarne w lewo << jest równoznaczne z pomnożeniem przez 2 B =A << 1; //B=A*2 C =A << 2; //C=A*4 Przesunięcie binarne w prawo >> jest równoznaczne z podzieleniem przez 2 B =A >> 1; //B = A/2 C= A >> 3; //C = A/8

10 Negacja binarna Operacja ~(1<<0) powoduje zanegowanie wszystkich bitów w liczbie 0b i tym samym utworzenie liczby 0b ~(1<<0) = 0xFE Operacja ~(1<<4) powoduje zanegowanie wszystkich bitów liczby (1<<4) ~(1<<4) = 0b Liczba (1<<4) (1<<0) = 0b ma 2-ie jedynki binarne Liczba ~((1<<4) (1<<0) ) = 0b ma 2 binarne zera ~(_BV(6)) = ~(0b ) = 0b = 0xBF = 191

11 Operacje binarne - przykłady Po zdefiniowaniu # define bit5 5 Operacja A = (1<<bit5) spowoduje ustawienie bitu 5 w zmiennej A Operacja A & = ~(1<<bit5) spowoduje wyzerowanie bitu 5 zmiennej A Operacja A &= (1<<bit5) spowoduje wyzerowanie wszystkich bitów za wyjątkiem bitu 5 i ma sens selekcji bitu 5 zmiennej A. Aby się dowiedzieć, czy bit 5 jest wyzerowany dokonuję selekcji i porównania. if (A & (1<<bit5) ) = = 0) ; //jest wyzerowany else ; //nie jest wyzerowany

12 Operacje logiczne Suma logiczna Jeśli którakolwiek z liczb jest różna od zera, to wynik jest prawdą Iloczyn logiczny && Jeśli obie liczby są niezerowe, to wynik iloczynu jest prawdą Negacja logiczna! Zaprzeczeniem 1 jest 0

13 Pętle for for ( i=1; i<11; i++) { Rozkaz; } switch (zmienna) { case 1: //gdy zmienna = 1 rozkaz; break; case 2: //gdy zmienna = 2 rozkaz; break; } Wykorzystywana np. do rozróżniania naciśniętych klawiszy

14 Pętla while while Pętla while jest często wykorzystywana w programie głównym, jeśli potrzebne jest ciągłe wykonywanie procedur wątku głównego do { ;rozkazy } while (1); //wykonuj zawsze Pętla while jest też wykorzystywana do oczekiwania na ustawienie lub wyzerowanie bitu. Np. dopóki nie ustawi się bit 5 w rejestrze A czekaj while(! (A & (1<<bit5))); W pętli tej nie umieszczono żadnych rozkazów, co oznacza, że program stoi oczekując na spełnienie warunku

15 Projekt w środowisku AVR Studio Każdy projekt należy założyć w oddzielnym katalogu. Projekt zawiera następujące pliki:.c pliki z kodem źródłowym napisanym w języku C.h opcjonalnie pliki nagłówkowe z deklaracjami, definicjami i wybranymi procedurami kodu źródłowego.aps zawiera informacje o tym, które pliki należą do projektu i będą podlegały kompilacji.aws przechowuje informacje bieżące o ostatnio używanej przestrzeni roboczej (nieistotny dla projektu) Makefile Plik Makefile w katalogu default zawiera reguły kompilacji czyli przekształcania wyrażeń z języka wysokiego poziomu (tu: C) na wyrażenia niskopoziomowe.eep,.elf.,.hex,.o pliki wyjściowe w katalogu default powstałe podczas kompilacji. Plik.hex w formacie Intel Hex należy wgrać do pamięci Flash mikrokontrolera AVR

16 Podstawowe opcje kompilacji Podstawowe opcje kompilacji należy ustawić na zakładce Project Configuration Options: Typ procesora, dla którego jest wykonywana kompilacja Częstotliwość zegara procesora (tu: kwarcu) Poziom optymalizacji Należy zaznaczyć pole Create Hex File Uwaga!! Jeśli pętla programu nie obiega prawidłowo (może się to zdarzyć zarówno w czasie symulacji środowiskowych, jak i po uruchomieniu programu w mikrokontrolerze), wówczas należy zmniejszyć poziom optymalizacji do O0.

17 Struktura programu Na początku programu należy wczytać potrzebne pliki nagłówkowe z funkcjami bibiotecznymi. #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> //biblioteka procesora //biblioteka przerwań //procedury z opóźnieniem czasowym Następnie umieszcza się definicje potrzebnych procedur/funkcji dodatkowych (w tym procedur przerwań), a na samym dole procedurę główna (main) Nazwy procedur dodatkowych mogą być dowolne, natomiast nazwy procedur przerwań są zarejestrowane i można je znaleźć w pliku procesora. Przykładowy program main wywołuje procedurę funkcja i odbiera wynik na zmienną t. Procedur przerwań nie wywołuje się programowo, procedury te są wykonywane samoczynnie, jeśli zajdą określone warunki sprzętowe lub programowe pod warunkiem wcześniejszego zdjęcia maski danego przerwania. Biblioteka delay.h zawiera funkcje: _delay_us (x);_delay_ms (x);

18 Kolejność procedur Jeśli w programie umieścimy (oprócz definicji) również deklaracje procedur, to kolejność procedur jest nieistotna i wszystkie procedury widzą się wzajemnie. Deklaracja przykładowej procedury (funkcji): char funkcja (int); W prostym programie można pominąć deklaracje procedur, jednak należy wówczas zadbać o takie uporządkowanie procedur, aby procedura (funkcja) umieszczona niżej odwoływała się wyłącznie do procedur umieszczonych nad nią. W takim układzie procedura main musi być ostatnia.

19 Struktura prostego programu bez deklaracji funkcji char funkcja (int m) { char k; k=m+1; return k; } ISR (INT0_vect ) { _delay_us (50); _delay_ms (10); } //definicja funkcji //definicja procedury przerwania int main (void) { char t; t= funkcja (20); //wywołanie funkcji return 0: }

20 Struktura programu z deklaracjami funkcji char funkcja (int); ISR (INT0_vect ) { _delay_us (50); _delay_ms (10); } //deklaracja funkcji //definicja procedury przerwania int main (void) { char t; t= funkcja (20); //wywołanie funkcji return 0: } char funkcja (int m) { char k; k=m+1; return k; } //definicja funkcji

21 Plik nagłówkowy Deklaracje procedur, deklaracje zmiennych oraz definicje wybranych procedur można przenieść do samodzielnie utworzonego pliku nagłówkowego z rozszerzeniem.h. Pliki nagłówkowe przeważnie tworzy się tematycznie np. dla umieszczenia wszystkich procedur związanych z wyświetlaczem LCD. Przykład wczytania pliku nagłówkowego #include <pliklcd.h>

22 Porty input/output Mikrokontroler AT90S8515 posiada 4 uniwersalne porty dwukierunkowe (Input/Output): A, B, C, D, z których każdy ma 8 linii z możliwością podwieszenia każdej linii przez rezystor do zasilania. Każdy z portów jest obsługiwany przez 3 rejestry: Rejestr kierunkowy DDR (A, B, C lub D) Rejestr wyjściowy PORT (A, B, C lub D) Rejestr wejściowy PIN (A, B, C lub D) Mikrokontroler ATMega128 posiada 6 uniwersalnych portów (Input/Output): A, B, C, D, E i F.

23 Linie portów (na przykładzie portu D) Rejestr kierunkowy portu D - DDRD Bit Nazwa DDD7 DDD6 DDD5 DDD4 DDD3 DDD2 DDD1 DDD0 Odczyt/zapis R/W R/W R/W R/W R/W R/W R/W R/W Wartość początkowa Rejestr danych portu D - PORTD Bit Nazwa PORTD7 PORTD6 PORTD5 PORTD4 PORTD3 PORTD2 PORTD1 PORTD0 Odczyt/zapis R/W R/W R/W R/W R/W R/W R/W R/W Wartość początkowa Rejestr wejściowy portu D - PIND Bit Nazwa PIND7 PIND6 PIND5 PIND4 PIND3 PIND2 PIND1 PIND0 Odczyt/zapis R R R R R R R R Wartość początkowa N/A N/A N/A N/A N/A N/A N/A N/A N/A wartość nieustalona

24 Konfiguracja linii portów Konfiguracja rejestru kierunkowego DDR (A, B, C lub D): 1 linia staje się wyjściem 0 linia staje się wejściem Gdy linia jest wyjściem, to rejestr PORT (A, B, C lub D) ustawia: 1 wyjście w stanie wysokim 0 wyjście w stanie niskim Gdy linia jest wejściem, to rejestr PORT (A, B, C lub D) ustawia: 1 podwieszenie wejścia pod zasilanie 0 wejście w stanie wysokiej impedancji Gdy linia jest wejściem, to rejestr PIN (A, B, C lub D) służy do odczytu stanu linii (czy zwarta od zewnątrz).

25 Konfiguracja linii portów -wyjście Linia 2 portu B jako wyjście (przykładowe sposoby zapisu): DDRB = DDRB 0b ; lub DDRB = DDRB 0x04; lub DDRB = DDRB _BV(2); lub DDRB = _BV(2); gdzie makro _BV(x) jest liczbą, która ma jedną 1 binarną jedynkę na pozycji x np. _BV(2) = 0b

26 Konfiguracja linii portów -wejście Linia 2 portu B jako wejście (przykładowe sposoby zapisu): DDRB = DDRB & 0b ; lub DDRB = DDRB & 0xFB; lub DDRB = DDRB & ~_BV(2); lub DDRB & = ~_BV(2); gdzie makro ~_BV(x) jest liczbą, która ma jedną 1 binarne zero na pozycji x np. ~_BV(2) = 0b

27 Konfiguracja linii portów przykład 1 (założenia) Na linii 0 portu D umieszczono przycisk. Na linii 0 portu B umieszczono diodę. Należy sprawdzać w sposób ciągły stan przycisku i odzwierciedlać zapalaniem/gaszeniem diody. Elementy programu: - pętla wykonywana zawsze do {;} while(1); - selekcja linii 0 za pomocą iloczynu binarnego: PIND & 0x01 jest warunkiem wykonania rozkazu

28 Konfiguracja linii portów przykład 1 int main(void) { DDRD &= ~_BV(0); PORTD = _BV(0); DDRB = _BV(0); PORTB =_BV(0); //linia 0 portu D jako wejście //podwieszenie wejścia // linia 0 portu B jako wyjście //wyjście w stanie high do { } while(1); return 0; } if (PIND & 0x01) PORTB &= ~_BV(0); else PORTB =_BV(0); //sprawdź stan na linii 0 portu D //wyjście w stanie low //wyjście w stanie high

29 Konfiguracja linii portów przykład 2 Na linii 0 portu D umieszczono przycisk. Na linii 0 portu B umieszczono diodę. Należy sprawdzać w sposób ciągły stan przycisku i jego zwarcie zasygnalizować trwałym świeceniem diody. Elementy programu: - selekcja linii 0 za pomocą iloczynu binarnego: PIND & 0x01 - wyliczenie iloczynu logicznego (PIND & 0x01), który jest warunkiem wykonania rozkazu - wykorzystanie pętli while o logice: dopóki nie zwarto przycisku czekaj while (! (PIND & 0x01) );

30 Konfiguracja linii portów przykład 2 (założenia) int main(void) { DDRD &= ~_BV(0); PORTD = _BV(0); DDRB = _BV(0); PORTB =_BV(0); //linia 0 portu D jako wejście //podwieszenie wejścia // linia 0 portu B jako wyjście //wyjście w stanie high while (PIND & 0x01); PORTB &= ~_BV(0); return 0; } //dopóki nie zwarto przycisku stój //wyjście w stanie low

31 Porty przykład 3 Założenia: Wykorzystując pętlę do{;} while(1); mrugaj diodą 4 na porcie B Szkic programu: int main(void) { //konfiguracja linii diody do { //zapal diodę //czekaj 500ms //zgaś diodę //czekaj 500ms } while(1); }

32 Porty przykład 4 Założenia: Wykorzystując pętlę for (i=0;.) o 8 obejściach i operację obrotu zmiennej (char a) w lewo zrób linijkę, w której (po każdym obejściu pętli for) przybywa 1 światełko. Po 8-mym obejściu pętli palą się wszystkie diody, ponieważ zmienna obracana w lewo jest z prawej uzupełniana zerami. Szkic programu: Int main(void) { char i, A=0xff;; //konfiguracja linii 8-miu diod PORTB = A; for (i=0; ) { } return 0; } //zgaszenie wszystkich diod //czekaj 500ms //obróć zmienną A o 1 pozycję w lewo //wystaw liczbę A na PORTB

33 Porty przykład 5 Założenia: Wykorzystując pętlę for (i=0;.) o 8 obejściach zrób linijkę z jednym zapalonym, przemieszczającym sięświatełkiem. W tym celu wykorzystaj zmienną i oraz makro _BV(x). Szkic programu: Int main(void) { char i; //konfiguracja linii 8-miu diod for (i=0; ) { //czekaj 500ms PORTB =.. } return 0; } Zmodyfikuj działający program tak, aby zapalone światełko chodziło bez końca.

34 Wektory przerwań W najniższej części pamięci Flash są lokowane wektory przerwań (wątków bocznych). Są to adresy procedur wykonywanych pod warunkiem zaistnienia określonego zdarzenia (wewnętrznego lub zewnętrznego). Zaistnienie zdarzenia jest sygnalizowane ustawieniem binarnej flagi przerwania. Warunkiem wykonania procedury przerwania jest zdjęcie (w wątku głównym) maski przerwania. Wektory są ustawione w hierarchii pierwszeństwa im niższy adres, tym wyższa hierarchia. Najwyżej w hierarchii stoi wektor Reset, który ma adres 0.

35 Wektory przerwań procesora AT90S8515 Adres przerwania symbol przerwania Źródło przerwania $000 RESET Spadek napięcia zasilania, impuls ujemny na linii RESET, układ watchdog $001 INT0 Przerwanie zewnętrzne 0 $002 INT1 Przerwanie zewnętrzne 1 $003 Timer1 CAPT Timer 1 w trybie przechwytu $004 Timer1 COMPA Timer 1 w trybie porównawczym z rejestrem A $005 Timer1 COMPB Timer 1 w trybie porównawczym z rejestrem B $006 Timer1 OVF Timer 1 w trybie przepełnienia $007 Timer0 OVF Timer 0 w trybie przepełnienia $008 SPI, STC ukończenie transmisji szeregowej SPI $009 UART, RX zakończenie odbioru UART $00A UART, UDRE pusty rejestr danych UART $00B UART, TX zakończenie nadawania UART $00C ANA_KOMP komparator analogowy

36 Przerwania zewnętrzne INT0, INT1 AT90S8515 Przerwania zewnętrzne INT0 i INT1 są wywoływane przez stan niski, zbocze narastające lub zbocze opadające na określonych liniach zewnętrznych mikrokontrolera. W mikrokontrolerze AT90S8515 przerwanie INT0 reaguje na stany na linii 2 portu D, a przerwanie INT1 na linii 3 portu D. Przerwania zewnętrzne INT0 i INT1 wywoływane poziomem niskim nie posiadają flag. W związku z tym, przerwania te są wywoływane tylko w czasie rzeczywistym. Bity konfigurujące źródło przerwania INT0 oraz INT1 znajdują się w rejestrze kontrolnym MCUCR.

37 Przerwania zewnętrzne wybór źródła przerwania Rejestr kontrolny - MCUCR Bit Nazwa SRE SRW SE SM ISC11 ISC10 ISC01 ISC00 Odczyt/zapis R/W R/W R/W R/W R/W R/W R/W R/W Wartość początkowa ISC01 ISC00 Źródło przerwania 0 0 Poziom niski na linii INT0 0 1 Zarezerwowane 1 0 Zbocze opadające na linii INT0 1 1 Zbocze narastające na linii INT0 ISC11 ISC10 Źródło przerwania 0 0 Poziom niski na linii INT1 0 1 Zarezerwowane 1 0 Zbocze opadające na linii INT1 1 1 Zbocze narastające na linii INT1

38 Maska i flaga przerwania zewnętrznego Rejestr masek przerwań - GIMSK Bit Nazwa INT1 INT Odczyt/zapis R/W R/W R R R R R R Wartość początkowa Rejestr flag przerwań - GIFR Bit Nazwa INTF1 INTF Odczyt/zapis R/W R/W R R R R R R Wartość początkowa

39 Przerwania zewnętrzne założenia przykładu W programie głównym skonfigurowano linię 2 portu D, na której umieszczono przycisk oraz linię 2 portu B, an której umieszczono diodę. W rejestrze MCUCR wybrano źródło przerwania: poziom niski na linii przycisku. Zdjęto maskę przerwania i włączono przerwania, tym samym moduł przerwań podjął ciągłą obserwację linii INT0 (2-ga linia portu D). Gdy linia jest rozwarta wykonywana jest pętla główna programu, w której dioda jest gaszona. Gdy linia zostanie zwarta program wykonuje procedurę przerwania ISR (INT0_vect), w której umieszczono rozkaz zapalenia diody. Nazwa procedury przerwania jest zarejestrowania i można ją znaleźć w pliku z danymi procesora.

40 Przerwania zewnętrzne przykład ISR (INT0_vect) //procedura przerwania INT0 { PORTB &= ~_BV(2); //zapalenie diody 2 } int main(void) //procedura główna { DDRD &= ~_BV(2); //linia 2 portu D jako wejście PORTD = _BV(2); //podwieszenie wejścia DDRB = _BV(2); // linia 2 portu B jako wyjście PORTB =_BV(2); //wyjście high MCUCR = 0x00; //przerwanie poziomem niskim GIMSK = 0x40; //zdjęcie maski INT0 sei(); // Odblokowanie przerwań do {PORTB = _BV(2); } //zgaszenie diody 2 while (1); }

41 Przerwania zewnętrzne polecenia 1. Wzorując się na przykładzie przygotuj projekt, w którym aktywne będą 2 przerwania zewnętrzne INT0 oraz INT1 (sprawdzające 2-gą i 3-cią linię portu D). W odpowiedzi na naciśnięcie przycisków należy zapalać odpowiednio 2-gą i 3-cią diodę na porcie B. 2. Zwróć uwagę, że w przykładzie na poprzedniej stronie na wszystkie 8 bitów rejestru MCUCR wpisywane są stany 0 rozkazem MCUCR = 0x00. Zmień rozkaz tak, zerowane były tylko 4 młodsze bity odpowiedzialne za konfigurację przerwań zewnętrznych, natomiast 4 starsze odpowiedzialne za aktywację zewnętrznej przestrzeni adresowej (w tym za prace LCD) pozostały bez zmian. 3. Podobnie w rejestrze masek ustaw tylko 2 najstarsze bity pozostawiając pozostałe bez zmian.

42 Liczniki/Timery Moduły liczników/timerów są przeznaczone do zliczania impulsów zegarowych mikrokontrolera lub impulsów na liniach zewnętrznych mikrokontrolera. Przy zliczaniu impulsów zegarowych można wykorzystać dzielnik wstępny impulsów przez N (prescaler) tym samym wydłużając N-krotnie zliczony czas. W najprostszym trybie zliczanie następuje od 0 do 2 8 w przypadku Timera 8-bitowego, oraz od 0 do 2 16 w przypadku Timera 16-bitowego. Po przepełnieniu rejestr liczący zapełnia się zerami, a Timer zlicza nadal.

43 Timer 8-bitowy prescaler Rejestr kontrolny TIMER a 0 TCCR0 Bit Nazwa CS02 CS01 CS00 Odczyt/zapis R R R R R R/W R/W R/W Wartość początkowa Prescaler TIMER a 0 [1] CS02 CS01 CS00 Impulsy zliczane Zatrzymanie TIMER a CK CK/ CK/ CK/ CK/ Zbocza opadające na linii 0 portu B Zbocza narastające na linii 0 portu B

44 Timer 8-bitowy wybór prescalera Rejestr kontrolny TIMER a 0 TCCR0 Bit Nazwa CS02 CS01 CS00 Odczyt/zapis R R R R R R/W R/W R/W Wartość początkowa Przykład: wybór prescalera 1024 TCCR0 = 0b ; TCCR0 = 0x05; TCCR0 = (1<<CS02) (1<<CS00); TCCR0 = _BV(CS02) _BV(CS00); Wyrażenia (1<<x) oraz _BV(x) są identycznymi liczbami, które mają jedną binarną jedynkę na pozycji x.

45 Timer 8-bitowy rejestry Rejestr zliczania TIMER a 0 TCNT0 Bit Nazwa MSB LSB Odczyt/zapis R/W R/W R/W R/W R/W R/W R/W R/W Wartość początkowa Rejestr flagowy timerów TIFR Bit Nazwa TOV1 OCF1A OCF1B - ICF1 - TOV0 - Odczyt/zapis R/W R/W R/W R R/W R R/W R Wartość początkowa W rejestrze TCNT0 następuje zliczanie kroków od 0 do 256. Ustawienie flagi TOV0 (bit 2) sygnalizuje przepełnienie. Po przepełnieniu rejestr TCNT0 zapełnia się zerami, a Timer kontynuuje zliczanie.

46 Timer 8-bitowy maska przerwania Zdjęcie maski TOIE0 (ustawienie bitu 2) włącza przerwanie wywołane przepełnieniem Timera 0. Po każdym przepełnieniu program główny pobiera adres procedury przerwania z wektora przerwań i wykonuje procedurę przerwania (watek boczny), po czym wraca do wątku głównego i kontynuuje jego wykonywanie. Rejestr masek timerów TIMSK Bit Nazwa TOIE1 OCIE1A OCIE1 - TICIE1 - TOIE0 - Odczyt/zapis R/W R/W R/W R R/W R R/W R Wartość początkowa

47 Timer 8-bitowy obsługa programowa Obsługa programowa polega na sprawdzaniu w pętli, czy ustawiła się flaga sygnalizująca przepełnienie. int main(void) { TCCR0 = (1<<CS00); //włącz Timer, prescaler = 1 while (! (TIFR & (1<<TOV0))); //dopóki nie ustawi się //flaga TOV0 stój TIFR =(1<<TOV0); //wyzeruj flagę TCCR0 = 0x00; //wyłącz Timer return 0; }

48 Timer 8-bitowy obsługa sprzętowa Obsługa sprzętowa polega na zdjęciu maski i zleceniu modułowi Timerów sprawdzanie, czy doszło do przepełnienia oraz wykonanie procedury przerwania. ISR (Timer0_OVF_vect) { asm( nop ); } //procedura przerwania //asemblerowy rozkaz pusty int main(void) { TCCR0 = (1<<CS00); //włącz Timer, prescaler = 1 TIMSK = (1<<TOIE0); //zdejmij maskę TOIE0 sei(); //włączenie przerwań do { asm( nop ); //asemblerowy rozkaz pusty while(1); //nic nie rób czekaj na przerwania return 0; }

49 Timer 8-bitowy polecenia 1. Napisz program, który zlicza przerwania Timera 0 (czyli zlicza, ile razy licznik się przekręcił ) i wartość tą pokazuje na 8-miu diodach. 2. Napisz program, który po kolejnych przerwaniach Timera na przemian zapala i gasi wybraną diodę.

50 Magistrala równoległa Mikrokontroler może zaadresować 64 kbajty komórek w zewnętrznej przestrzeni adresowej. Adresowanie odbywa się równolegle na 16-stu liniach portów A (8 linii) oraz C (8 linii). Dane są przesyłane na 8 liniach portu A. Podwójne wykorzystanie linii portu A (do adresowania i przesyłu danych) jest możliwe dzięki zastosowaniu zatrzasku adresowego. W układzie EVB-503 na magistrali równoległej podłączono pamięć zewnętrzną RAM o pojemności 32kbajty. Dwa z pozostałych wolnych adresów zostały wykorzystane do podłączenia wyświetlacza LCD.

51 Tryb PWM timera1 (Procesor AT90S8515) Założenia: PWM 10-bitowy timer1 zlicza w górę od 0 do 1023 (0x03ff) i w dół do 0 Zatem okres przebiegu wynosi 2046 cykli okresu timera 1 (prescler =8), wartość porównawcza ustawiana jest w rejestrze OCR1A i powinna zmieniać się w zakresie od 0 do 1023, aby uzyskać płynną zmianę współczynnika wypełnienia Przebiegu PWM. Przebieg PWM podawany jest na diodę, która jest sterowana wartościąśrednia przebiegu.

52 Tryb PWM timera1 (Procesor AT90S8515) Założenie x=a (wyjście A OC1A przebiegu PWM)

53 Tryb PWM timera1 (Procesor AT90S8515) Założenie x=a (wyjście A OC1A przebiegu PWM) lub

54 Tryb PWM timera1 Założenie: współczynnik wypełnienia zmienia się płynnie po każdym przepełnieniu timera1 ISR (TIMER1_OVF_vect) { OCR1A = if (OCR1A == 0x03ff) } //tryb timera 1 przepełnienie (overflow) int main (void) { TCCR1A = // tryb PWM 10-bitowy TCCR1B = // preskaler = 8 OCR1A = 0; // wartość początkowa DDRD = // wyjście A układu PWM TIMSK = //maska timera 1 tryb timera 1 przepełnienie (overflow) sei (); // odblokowanie przerwań while(1); return (0); }

55 Tryb PWM timera1 Założenie: współczynnik przepełnienia zmienia każdorazowo po naciśnięciu przycisku na wejściach INT0 (rośnie) lub INT1 (maleje) ISR (INT0_vect) { OCR1A = if (OCR1A == 0x03ff) } ISR (INT1_vect) { OCR1A = if (OCR1A == 0) } int main (void) { TCCR1A = // tryb PWM 10-bitowy TCCR1B = // preskaler = 8 OCR1A = 0; // wartość początkowa DDRD = // wyjście A układu PWM MCUCR = // przerwanie INT0 i INT1 aktywne zboczem sei (); // odblokowanie przerwań while(1); return (0); }

56 Podłączenie wyświetlacza LCD W układzie EVB-503 wyświetlacz LCD został umieszczony w zewnętrznej przestrzeni adresowej pod adresem ustalonym przez konfigurację wyprowadzeń dekodera adresowego. Dostęp do danych w tym układzie znajduje się pod adresem $1F91, a dostęp do instrukcji sterujących wyświetlaczem pod adresem $1F90. W programie adresy te należy zdefiniować jako stałe typu wskaźnikowego: #define LCD_rozkaz (*(unsigned char *) (0x1F90)) #define LCD_dane (*(unsigned char *) (0x1F91))

57 Procedury wyświetlacza LCD Do sterowania wyświetlaczem należy zdefiniować 3 procedury (funkcje): void LCD_sterowanie (int rozkaz) przesyła rozkaz pod adres 0x1F90, gdzie jest on interpretowany przez sterownik LCD jako rozkaz sterujący (przestaw kursor, przesuń napis itd..) void wyswietl_znak (int zn) przesyła rozkaz pod adres 0x1F91, gdzie jest on interpretowany przez sterownik LCD jako dana dla DDRAM-u (DATA RAM) i zostanie wyświetlony na LCD od pozycji bieżącej kursora. Sterownik LCD zapewnia automatyczną post-inkrementację pozycji na LCD, dlatego przy wyświetlaniu ciągu znaków ustala się pozycję tylko 1- szego znaku w ciągu void LCD_ini (void) zestaw komend aktywujących wyświetlacz wg wymagań sterownika HD44780

58 Zestaw procedur wyświetlacza LCD void LCD_steruj (int rozkaz) { LCD_rozkaz = rozkaz; _delay_ms(5); } void wyswietl_znak (char zn) { LCD_dane = zn; _delay_ms(1); } //rozkaz sterujący //wyświetlenie danej void LCD_ini (void) { // wpisz rozkazy ze slajdu Konfiguracja wyświetlacza LCD } int main(void) { return 0; }

59 Konfiguracja wyświetlacza LCD Procedura konfiguracji/aktywacji wyświetlacza LCD składa się z następujących rozkazów: Włączenie interfejsu przestrzeni adresowej zewnętrznej bit SRE Opóźnienie strobu (impulsu) zapisu np. o 1 cykl bit SRW Komenda trybu sterowania (8-mio bitowy - 0x38) wydana 3x Komenda przesuwania napisu i kursora (bez zmiany zawartości DDRAM) Komenda włączenia wyświetlacza Komenda przesuwania napisu i kursora (ze zmianą zawartości DDRAM) Komenda czyszczenia wyświetlacza Komenda początkowego ustawienia kursora (adres DDRAM)

60 Aktywacja wyświetlacza LCD Przykładowa procedura aktywacji wyświetlacza LCD: void LCD_ini (void) { MCUCR = (1<<SRE) (1<<SRW); LCD_steruj(0b ); LCD_steruj(0b ); LCD_steruj(0b ); LCD_steruj(0b ); LCD_steruj(0b ); LCD_steruj(0b ); LCD_steruj(0b ); LCD_steruj(0b ); }

61 Dostęp do zewnętrznej przestrzeni adresowej Rejestr kontrolny MCUCR (mikrokontroler AT90S8515) Bit Nazwa SRE SRW SE SM ISC11 ISC10 ISC01 ISC00 Odczyt/zapis R/W R/W R/W R/W R/W R/W R/W R/W Wartość początkowa Aktywacja zewnętrznej przestrzeni adresowej odbywa się przez ustawienie bitu 7 (SRE) rejestru MCUCR. Wymagane opóźnienie impulsu zapisu/odczytu o 1 cykl maszynowy uzyskuje się przez ustawienie bitu 7 (SRW) rejestru MCUCR.

62 Komenda trybu sterowania Bit Nazwa/Wartość D/L N F * * D/L liczba bitów danych interfejsu sterującego: D/L=1 interfejs 8- bitowy, D/L=0 interfejs 4-bitowy, N F liczba wyświetlanych linii: N=1 dwie linie, N=0 jedna linia format znaku: F=1 znak 5 10 punktów, F=0 znak 5 7 punktów * Wartość nieistotna (czas wykonania komendy 5ms)

63 Komenda przesuwania napisu/kursora bez zmiany zawartości DDRAM-u Bit Nazwa/Wartość S/C R/L * * S/C R/L S/C=1 przesuwanie napisu bez zmiany zawartości pamięci danych DDRAM sterownika LCD, S/C=0 przesuwanie kursora bez zmiany zawartości pamięci danych DDRAM sterownika LCD (pamięć DDRAM przechowuje znaki wyświetlone na matrycy LCD), R/L=1 przesuwanie w prawo, R/L=0 przesuwanie w lewo * Wartość nieistotna (czas wykonania komendy 120 us)

64 Komenda włączania wyświetlacza Bit Nazwa/Wartość D C B D włącza/wyłącza wyświetlacz) C włącza/wyłącza kursor B włącza/wyłącza funkcję mrugania kursora (czas wykonania komendy 120 us)

65 Komenda przesuwania napisu/kursora ze zmianą zawartości DDRAM-u Bit Nazwa/Wartość I/D S I/D S ustala kierunek przesuwu kursora: I/D = 1 w prawo, I/D = 0 w lewo włącza (S = 1) i wyłącza (S = 0) funkcję przesuwu napisu z równoczesnym przesuwaniem znaków w pamięci danych DDRAM sterownika (czas wykonania komendy 120 us)

66 Komenda powrotu kursora Bit Nazwa/Wartość * Ustawia kursor na pozycji początkowej (adres=0). Jeśli napis był przesunięty, ustawia go w pozycji oryginalnej. Pamięć danych DRRAM nie ulega zmianie. (czas wykonania komendy 5ms)

67 Komenda czyszczenia wyświetlacza Bit Nazwa/Wartość Czyści wyświetlacz i ustawia kursor na adresie 0 pamięci danych DRAM. Komenda ta jest używana tylko podczas konfiguracji wyświetlacza. W trakcie pracy wyświetlacza znaki na LCD należy nadpisywać bez czyszczenia. (czas wykonania komendy 5ms)

68 Komenda ustawiania adresu DDRAM-u Bit Nazwa/Wartość 1 DD DD DD DD DD DD DD Ustawia adres pamięci danych DDRAM odpowiadający pozycji znaku na wyświetlaczu. Adres należy ustawić na 7-miu bitach oznaczonych DD pozostawiając 1 na najstarszym bicie. Adresy 1-szej linii leżą w zakresie od 0 do 63, a 2-giej linii od 64 do 127. Na matrycach LCD o liczbie znaków mniejszej niż 64 dalsze znaki każdej linii pozostaną niewidoczne. (czas wykonania komendy 120 us)

69 Przykłady wyświetlania znaków LCD_ini( ); //inicjuj wyświetlacz LCD_steruj (128); //ustawia kursor w górnej linii na lewym skraju wyswietl_znak (66); //wyświetla literę B LCD_steruj (???); // kursor w górnej linii na prawym skraju wyswietl_znak (???); //wyświetla cyfrę 2 LCD_steruj (???); //ustawia kursor w dolnej linii na lewym skraju wyswietl_znak ( A ); // wyświetla literę A LCD_steruj (???); // kursor w dolnej linii na prawym skraju wyswietl_znak (0x33); // wyświetla cyfrę 3

70 Wyświetlanie znaków - polecenia 1. Wyświetl litery A, B, C w dolnej linii rozpoczynając od 3-ciej pozycji. 2. Wyświetl w jednej linii tekst składający się z 30-ciu znaków (większość z nich będzie niewidoczna). Następnie obracaj powoli napis w lewo, aby można było zobaczyć ukryte znaki. Uwaga! Nie zmieniaj rozkazów w funkcji LCD_ini. Obrót rozpocznij po wyświetleniu napisu. 1. Napisz program, który zlicza przerwania Timera 0 i wyświetla na LCD liczbę przepełnień Timera (liczba przepełnień jest zapisana w rejestrze Timera w postaci binarnej i przed wyświetleniem wymaga zamiany na ASCII).

71 Tablica kodów ASCII Znak Kod Znak Kod Znak Kod Znak Kod Znak Kod 32! 33 " 34 # 35 $ 36 % 37 & 38 ' 39 ( 40 ) 41 * , / : 58 ; 59 < 60 = 61 > 62? 64 A 65 B 66 C 67 D 68 E 69 F 70 G 71 H 72 I 73 J 74 K 75 L 76 M 77 N 78 O 79 P 80 Q 81 R 82 S 83 T 84 U 85 V 86 W 87 X 88 Y 89 Z 90 [ 91 \ 92 ] 93 ^ 94 _ 95 ` 96 a 97 b 98 c 99 d 100 e 101 f 102 g 103 h 104 i 105 j 106 k 107 l 108 m 109 n 110 o 111 p 112 q 113 r 114 s 115 t 116 u 117 v 118 w 119 x 120 y 121 z 122 { } 125 ~ 126

72 Wskaźniki do pamięci RAM i FLASH Do zapisu i odczytu pamięci RAM wykorzystujemy typowe zmienne wskaźnikowe języka C char* str; char zn; zn = * (str); //deklaracja wskaźnika typu char w pamięci RAM //deklaracja zmiennej typu char w pamięci RAM //pobranie znaku spod wskaźnika str i przepisanie //na zmienną zn Do zapisu i odczytu pamięci FLASH środowisko ma zdefiniowany własny zestaw wskaźników i procedur zdefiniowanych w pliku nagłówkowym #include <avr/pgmspace.h> PGM_P str_p; char zn; zn = pgm_read_byte(str_p); //deklaracja wskaźnika typu char w pamięci FLASH //deklaracja zmiennej typu char w pamięci RAM // pobranie znaku z pamięci FLASH spod wskaźnika str_p // i przepisanie go na zmienną zn w pamięci RAM

73 Procedury wyświetlania tekstów z pamięci RAM i FLASH Procedura pisz_string pobiera kolejne znaki spod wskaźnika str do tablicy i wyświetla je na LCD dopóki nie napotka na NULL void pisz_string (char* str) { char zn; while(0!= (zn = * (str++))) wyswietl_znak(zn); } Procedura pisz_string_p pobiera kolejne znaki spod wskaźnika str_p do pamięci FLASH i wyświetla je na LCD dopóki nie napotka na NULL void pisz_string_p (PGM_P str_p) { char zn; while(0!= (zn = pgm_read_byte(str_p ++))) wyswietl_znak(zn); }

74 Deklaracje tablic w pamięciach RAM i FLASH //dane w pamięci RAM char napis[ ] = "witaj!"; char tablica[ ] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9}; char *str; Dane przechowywane w pamięci FLASH muszą mieć charakter globalny //dane w pamięci FLASH const char napis_p[ ] PROGMEM= hello!"; char tablica_p[ ] PROGMEM= {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3}; PGM_P str_p;

75 Przykłady wyświetlania tekstów z pamięci RAM i FLASH RAM wyswietl_znak(tablica[5]); pisz_string(napis); pisz_string("haha! "); FLASH str_p= & tablica_p[5]; char zn; zn = pgm_read_byte (str_p); wyswietl_znak(zn); pisz_string_p(napis_p); pisz_string_p(pstr( Hurra! ));

76 Pamięć EEPROM rejestr adresowy Elektrycznie programowalna, nieulotna pamięć EEPROM mikrokontrolera AT90S8515 ma 512 bajtów adresowanych od 0 do 511. Adres zapisu/odczytu danej należy umieścić w 16-sto bitowym rejestrze EEAR (EEARH+EEARL). Rejestr adresowy pamięci EEPROM - EEAR (część starsza EEARH, część młodsza EEARL) Bit Nazwa MSB Nazwa LSB Odczyt/zapis 7 R 6 R 5 R 4 R 3 R 2 R 1 R 0 R/W Wartość początkowa R/W 0 R/W 0 R/W 0 R/W 0 R/W 0 R/W 0 R/W 0 R/W

77 Pamięć EEPROM rejestr danych Daną przeznaczoną dla pamięci EEPROM należy wstawić do rejestru EEDR. Zapisanie jednego bajtu w pamięci EEPROM trwa od 2.5 4ms. W procesie odczytu dana spod adresu umieszczonego w rejestrze EEAR jest przepisywana do rejestru EEDR. Odczyt jednego bajtu trwa 4 cykle zegarowe. Rejestr danych pamięci EEPROM EEDR Bit Nazwa MSB LSB Odczyt/zapis R/W R/W R/W R/W R/W R/W R/W R/W Wartość początkowa

78 Pamięć EEPROM - procedury Dla zapisania i odczytania pamięci EEPROM najlepiej posłużyć się gotowymi procedurami zawartymi w pliku nagłówkowym eeprom.h. W pliku eeprom.h można zapoznać się z deklaracjami procedur dla EEPROM-u: void eeprom_write_word (unsigned int *adres, unsigned int *dana); unsigned int eeprom_read_word (unsigned int *adres); Przykład wykorzystania w programie: #include <avr/eeprom.h> unsignad int *l; eeprom_write_word (l+8, 'b'); eeprom_busy_wait(); char c; c= eeprom_read_word (l+8); wyswietl_znak(c); Samodzielne tworzenie procedur dla EEPROM-u jest nieskuteczne ze względu na wymagania czasowe (kolejność impulsów musi następować z dokładnością do 4 cykli zegarowych) język C nie daje możliwości takiego panowania nad czasem.

79 Przetwornik analogowo-cyfrowy Ćwiczenie jest wykonywane na mikrokontrolerze ATMega8, który jest wyposażony w 8-mio kanałowy przetwornik analogowo-cyfrowy o rozdzielczości 10-cio bitowej wyprowadzony na 8 linii portu C. Kanały można skonfigurować jako niesymetryczne lub symetryczne (różnicowe). Kanałom różnicowym można przyporządkować określone wartości wzmocnienia. Typowa częstotliwość przetwarzania mieści się między 50 a 200kHz.

80 Rejestr konfiguracji przetwornika Rejestr konfiguracji przetwornika ADC ADMUX Bit Nazwa REFS1 REFS0 ADLAR MUX4 MUX3 MUX2 MUX1 MUX0 Odczyt/zapis R/W R/W R/W R/W R/W R/W R/W R/W Wartość początkowa REFS1, REFS0 wybór zakresu przetwarzania ADLAR bit decydujący o sposobie wyrównania wyniku konwersji w rejestrze ADC (ADCH+ADCL), gdy ADLAR = 0 wyrównanie do prawej, gdy ADLAR = 1 wyrównanie do lewej MUX4 MUX0 wybór kombinacji wejść analogowych podłączonych do przetwornika oraz wzmocnień dla tych wejść. Dla MUX4 MUX0 = 0 wybrane jest wejście niesymetryczne 0 na porcie F ze wzmocnieniem równym 1

81 Zakres przetwarzania Napięcie odniesienia dla przetwornika REFS1 REFS0 Napięcie odniesienia 0 0 Zewnętrzne źródło podłączone do pinu AREF 0 1 Wewnętrzne 5V z kondensatorem podłączonym na pinie AREF 1 0 zarezerwowane 1 1 Wewnętrzne 2.56V z kondensatorem podłączonym do pinu AREF Zakres napięcia przetwarzanego może być podawany wewnętrznie lub zewnętrznie na pin AREF. Przy wyborze źródła wewnętrznego minimalne napięcie przetwarzania wynosi 0V, a maksymalne 5V-1LSB lub 2.56V-1LSB. Rozdzielczość przetwarzania jest 10-bitowa.

82 Wyrównanie wyniku konwersji w rejestrze danych Rejestr danych ADCH i ADCL (dla bitu ADLAR = 0) Bit ADCH ADC9 ADC8 ADCL ADC7 ADC6 ADC5 ADC4 ADC3 ADC2 ADC1 ADC0 Bit Odczyt/zapis R R R R R R R R Wartość początkowa Rejestr danych ADCH i ADCL (dla bitu ADLAR = 1) Bit ADCH ADC9 ADC8 ADC7 ADC6 ADC5 ADC4 ADC3 ADC2 ADCL ADC1 ADC Bit Odczyt/zapis R R R R R R R R Wartość początkowa

83 Rejestr statusowy przetwornika Rejestr statusowy przetwornika ADC ADCSR Bit Nazwa ADEN ADSC ADFR ADIF ADIE ADPS2 ADPS1 ADPS0 Odczyt/zapis R/W R/W R/W R/W R/W R/W R/W R/W Wartość początkowa ADEN włączenie przetwornika ADSC rozpoczęcie przetwarzania ADC. Konwersja trwa 14 cykli zegara przetwornika, przy czym 1-sza konwersja po włączeniu przetwornika trwa 25 cykli zegara przetwornika. ADFR - włączenie ciągłego przetwarzania, rejestr wyniku przetwarzania jest aktualizowany w sposób ciągły ADIF flaga sygnalizująca zakończenie pojedynczego przetwarzania ADIE maska przerwania przetwornika ADPS2, ADPS1, ADPS0 preskaler zegara przetwornika, im większy współczynnik preskalera tym powolniejszy zegar przetwornika i dokładniejszy wynik konwersji

84 Czas konwersji Czas konwersji jest wyrażony w cyklach zegara przetwornika Warunki Czas uśredniania (w cyklach zegara przetwornika) Czas konwersji (w cyklach zegara przetwornika) 1-sza konwersja Konwersja na wejściu niesymetrycznym Konwersja na wejściu różnicowym /2.5 13/14

85 Prescaler zegara przetwornika ADPS2 ADPS1 ADPS0 Współczynnik podziału

86 Założenia programu przetwarzania A/C wejście niesymetryczne 0-we przetwornika (linia 0 portu C) - wybór wejścia 0 wymaga wyzerowania bitów MUX4-MUX0 w rejestrze ADMUX, zakres przetwarzania 5V-owy ze źródłem wewnętrznym, przetwarzanie ciągłe - ustawiony bit ADFR w rejestrze ADCSR, ograniczenie rozdzielczości do 8-mio bitowej (wyrównanie do lewej na bicie ADLAR i odczyt wyłącznie starszej części rejestru ADC), uśrednianie wyniku przetwarzania co 5 pomiarów, Wyrażenie wyniku pomiaru w mv (wynik pomiaru wyrażony w mv leży w zakresie mV i musi być przechowany na zmiennej int Wyrażenie wyniku pomiaru w kodzie ASCII Wysłanie w UART poszczególnych cyfr wyniku pomiaru w ASCII

87 Szkic programu przetwarzania A/C int main (void) { int wynik; Skonfiguruj rejestry ADMUX i ADCSR wg założeń Skonfiguruj interfejs UART (9600, 8n1) do { for (wykonaj 5 razy) { Poczekaj na zakończenie przetwarzania (sygnalizacja flagą ADIF), Odczytaj wynik przetwarzania } Uśrednij wynik przetwarzania z 5-ciu pomiarów, Uśredniony wynik przetwarzania wyraź w mv (pomnoż przez krok przetwornika), Uśredniony wynik przetwarzania w mv przekształć na kod ASCII Wyślij w UART kolejne cyfry ASCII wyniku pomiaru } while (1); return 0; }

88 Zamiana zapisu binarnego na ASCII Założenie: liczba jest typu int MAX 2 16 = (wynik pomiaru wyrażony w mv leży w zakresie mV). Przekształcenie liczby binarnej na kod ASCII należy wykonać w następującego wzoru: Oblicz kolumnę dziesiątek tysięcy: dz_tys = liczba/10000; Oblicz kolumnę tysięcy (procent oznacza resztę z dzielenia): tys = (liczba%10000)/1000; Oblicz resztę z dzielenia przez tysiąc: reszta = (liczba%10000)%1000;..kontunuuj

89 ATMega328 Memories: Flash memory 32kB SRAM 2kB EEPROM 1kB

90

91 ISP programming

92 Bootloader programming The bootloader is basically a.hex file that runs when you turn on the board. It is very similar to the BIOS that runs on your PC. It does two things. First, it looks around to see if the computer is trying to program it. If it is, it grabs the program from the computer and uploads it into the ICs memory (in a specific location so as not to overwrite the bootloader). That is why when you try to upload code, the Arduino IDE resets the chip. This basically turns the IC off and back on again so the bootloader can start running again. If the computer isn t trying to upload code, it tells the chip to run the code that s already stored in memory. Once it locates and runs your program, the Arduino continuously loops through the program and does so as long as the board has power.

93 Arduino Uno board

94 USART Interface and USART connection to PC COM MAX 232 converts signals from an RS-232 serial port to signals suitable for use in TTL Asynchronous transmission

95 USART to USB adapter

96 The Uno differs from all preceding boards in that it does not use the FTDI USB-to-serial driver chip. Instead, it features the Atmega16U2 (Atmega8U2 up to version R2) programmed as a USB-to-serial converter.

97

98 Default Clock Source The device is shipped with internal RC oscillator at 8.0MHz and with the fuse CKDIV8 programmed, resulting in 1.0MHz system clock. The startup time is set to maximum and time-out period enabled. (CKSEL = "0010", SUT = "10", CKDIV8 = "0"). The default setting ensures that all users can make their desired clock source setting using any available programming interface. Other clock sources Low power crystal oscillator crystal External oscillator Low frequency crystal oscillator Used for real time clock

99 Clock systems

100 Linia DTR umożliwia resetowanie mikrokontrolera z komputera PC konieczne przed ładowaniem programu przez bootloader

101 General purpose input/output schematic

102 Tryby uśpienia i sposób wybudzania

103 Controlling sleep modes register description

104 Interrupt vectors

105 Przerwania zewnętrzne Przerwania zewnętrzne dostępne są na pinach INT0, INT1 oraz PCINT23 - PCINT0. Maski przerwań INT0 oraz INT1 leżą w rejestrze EIMSK. W rejestrze PCICR leżą bity aktywacji przerwań PCINT0-7 (bit PCIE0), PCINT8-14 (bit PCIE1), PCINT15-23 (bit PCIE2). W rejestrach PCMSK0, 1, 2 leżą maski indywidualne przerwań PCINT23-0. W rejestrze EICRA leżą bity konfiguracji przerwań INT0 oraz INT1 (zboczem opadającym, narastającym, poziomem niskim). Przerwania PCINT23-0 sa aktywowane każda zmianą na odpowiadających pinach wejściowych.

106 Bitwise operators: & AND OR ~ NOT << SHIFT LEFT >> SHIFT RIGHT Example: Bitwise AND PORTD = 0b???????? Number= 0b ???????? unknown bits & =?????0?? result: one bit cleared Binary and hex numbers are best suited to address ports Examples: 0b = 0x01 0b = 0x02 0b = 0x04 0b = 0x08 0b = 0x0C 0b = 0xF1 0b = 0x88

107 Example: Bitwise OR PORTD = 0b???????? Number= 0b ???????? unknown bits =?????1?? result: one bit set Example: Bitwise NOT PORTD = 0b ~PORTD = 0b Example: Bitwise SHIFT PORTD = 0b PORTD<<1 = 0b

108 Types of variables

109

110 Using Arduino library Using PORT names Pin 2 as input internally pulled up pin 2 = PORTD, 2 DDRD = DDRD & 0xFB; (input) pinmode(2, INPUT_PULLUP); PORTD = PORTD 0x04; (pullup) Pin 2 as input floating (high Z) pin 2 = PORTD, 2 DDRD = DDRD & 0xFB; (input) pinmode(2, INPUT); PORTD = PORTD & 0xFB;(floating) Pin 13 as output pin 13 = PORTB, 5 DDRB = DDRB 0x20; PORTB = PORTB 0x20; PORTB = PORTB & 0xDF; pinmode(13, OUTPUT); digitalwrite(13, HIGH); digitalwrite(13, LOW);

111 Cod in AtmelStudio: int main(void) { setup(); while (1) loop(); return 0; } Cod in Arduino setup(); loop(); ///////////////////////////////////////////////////////////////////////////////////////////////////////////////// void setup (void) { // the setup function runs once when you press reset or power the board //funkcja setup jest wykonywana 1x po resecie lub podaniu zasilania } void loop(void) { // the loop function runs over and over again forever //funkcja loop() jest wykonywana w kółko w nieskończonej pętli }

112 Example: blinking LED Using Arduino library void setup() { pinmode(13, OUTPUT); } void loop() { digitalwrite(13, HIGH); delay(1000); // wait for a second digitalwrite(13, LOW); delay(1000); } Using PORT names void setup() { DDRB = DDRB 0x20; } void loop() { PORTB = PORTB 0x20; delay(1000); // wait for a second PORTB = PORTB & 0xDF; delay(1000); }

113 Example: button const int buttonpin = 2; // the number of the pushbutton pin const int ledpin = 13; // the number of the LED pin int buttonstate = 0; // variable for reading the pushbutton status void setup() { pinmode(ledpin, OUTPUT); pinmode(buttonpin, INPUT); } // initialize the LED pin as an output: // initialize the pushbutton pin as an input: void loop() { buttonstate = digitalread(buttonpin); // read the state of the pushbutton value: if (buttonstate == HIGH) // check if the pushbutton is pressed. { // turn LED on: digitalwrite(ledpin, HIGH); } else { // turn LED off: digitalwrite(ledpin, LOW); } }

114 Example: serial monitor Serial monitor is an application on PC connected to USART via USB int incomingbyte = 0; // for incoming serial data void setup() { Serial.begin(9600); } // opens serial port, sets data rate to 9600 bps void loop() { // send data only when you receive data: if (Serial.available() > 0) { // read the incoming byte: incomingbyte = Serial.read(); } } // say what you got: Serial.print("I received: "); Serial.println(incomingByte, DEC);

115 Serial.write(33); Serial.write(33) gives 33" Writes binary data to the serial port Serial.print(45); Prints data to the serial port as human-readable ASCII text Serial.print(33) gives 33" Serial.print( ) gives "1.23" Serial.print('N') gives "N" Serial.print("Hello world.") gives "Hello world." Serial.print(78, BIN) gives " " Serial.print(78, OCT) gives "116" Serial.print(78, DEC) gives "78" Serial.print(78, HEX) gives "4E" Serial.println( , 0) gives "1" Serial.println( , 2) gives "1.23" Serial.println( , 4) gives "1.2346"

116 void setup() { //Initialize serial and wait for port to open: Serial.begin(9600); Serial.println("ASCII Table Character Map"); } int thisbyte = 33; // first visible ASCIIcharacter '!' is number 33: void loop() { Serial.write(thisByte); Serial.print(", dec: "); Serial.print(thisByte); // Serial.print(thisByte, DEC); Serial.print(", hex: "); Serial.print(thisByte, HEX); Serial.print(", oct: "); Serial.print(thisByte, OCT); Serial.print(", bin: "); Serial.println(thisByte, BIN); if (thisbyte == 126) { { while (true) { continue; } } // go on to the next character thisbyte++; }

117 #include <util/delay.h> includes _delay_us(80); _delay_ms(80); delaymicroseconds(480); Example: delay functions

118 Example: analog input void setup() { Serial.begin(9600); } void loop() { int sensorvalue = analogread(a0); Serial.println(sensorValue); delay(1);}

119 Example: Timer1 overflow vector #define ledpin 13 void setup() { pinmode(ledpin, OUTPUT); nointerrupts(); // disable all interrupts TCCR1A = 0; TCCR1B = 0; TCCR1B = (1 << CS12); // 256 prescaler TIMSK1 = (1 << TOIE1); // enable timer compare interrupt interrupts(); // enable all interrupts } ISR(TIMER1_OVF_vect) // timer compare interrupt service routine { digitalwrite(ledpin, digitalread(ledpin) ^ 1); // toggle LED pin } void loop() { }

120 #define ledpin 13 void setup() { pinmode(ledpin, OUTPUT); nointerrupts(); // disable all interrupts TCCR1A = 0; TCCR1B = 0; OCR1A = 31250; // compare match register 16MHz/256/2Hz TCCR1B = (1 << WGM12); // CTC mode TCCR1B = (1 << CS12); // 256 prescaler TIMSK1 = (1 << OCIE1A); // enable timer compare interrupt interrupts(); // enable all interrupts } ISR(TIMER1_COMPA_vect) // timer compare interrupt service routine { digitalwrite(ledpin, digitalread(ledpin) ^ 1); } void loop() { } Example: Timer1 compare vector CTC mode

121 Funkcja biblioteczna attachinterrupt attachinterrupt(digitalpintointerrupt(pin), procedura przerwania, atrybut); Funkcja attachinterrupt dotyczy wektorów przerwań zewnętrznych INT0 oraz INT1 powiązanych z liniami 2 i 3 na porcie D (pin 2 i 3 w numeracji Arduino). Stan wysoki na linii zewnętrznej jest wyjściowym stanem bezczynnym IDLE. Atrybutem funkcji jest zdarzenie na linii zewnętrznej wywołujące przerwanie: LOW (poziom niski), FALLING (zbocze opadające, RISING (zbocze narastające), CHANGE (każda zmiana). Procedura przerwania jest funkcją powiązaną z wektorem przerwania, wykonywaną pod warunkiem zajścia zdarzenia na linii zewnętrznej. #define ledpin 13 void setup() { pinmode(ledpin, OUTPUT); attachinterrupt(digitalpintointerrupt(0), blink, FALLING); void loop() {} void blink () { digitalwrite (ledpin, digitalread(ledpin)^1); } Example: INT0, INT1 vectors

122 Example: PCINT vectors void setup() { DDRB = 0x20; //output digitalwrite(13, LOW); //Pin Change Interrupt enable on PCINTx (Port x) PCICR = _BV(PCIEx); PCMSKx = _BV(PCINTx); sei(); } ISR(PCINTx_vect) { if (..) digitalwrite(13, HIGH); } void loop() {}

123

124

125

126

127

128

129

130

131

132

133 byte mac[] = { 0x90, 0xA2, 0xDA, 0x0F, 0x13, 0x3A }; //physical mac address byte ip[] = { 192, 168, 0, 230 }; // ip in lan byte gateway[] = { 192, 168, 0, 1 }; // the IP of the router byte subnet[] = { 255, 255, 255, 0 }; //subnet mask EthernetServer server(80); // server port (change int ledpin = 4; // LED pin void setup() { Serial.begin(9600); ////enable serial data print Ethernet.begin(mac, ip, gateway, subnet); //start Ethernet pinmode(ledpin, OUTPUT); //Set pin 4 to output }

134 void loop() { EthernetClient client = server.available(); // Create a client connection if (client) { buttonpress = digitalread(3); while (client.connected()) { if (client.available()) { char c = client.read(); if (dstring.length() < 30) { dstring += c; if (c == '\n') { client.println("http/ OK"); //send new page client.println("content-type: text/html"); client.println(); client.println("refresh: 1"); // refresh every sec client.println("</html></body>"); client.println("<font color='red'><h1>arduino Remote control</font></h1>");//send first heading client.println("<br />"); client.println("<hr />"); client.println("</body></html>"); dstring = ""; //clearing string for next read delay(10); client.stop(); //stopping client }}}}}}

135 if (dstring.indexof("l=1") > 0) { digitalwrite(ledpin, HIGH); // set the LED on LEDON = true; } if (dstring.indexof("l=0") > 0) { digitalwrite(ledpin, LOW); // set the LED on LEDON = false; }.. Komponenty w html u Tworzone są: dwa radiobuttony o działaniu alternatywnym komponent submit przekazujący rozkaz dla diod przez dopisanie łańcucha do żądania HTTP client.println("<form method=get name=med><br>"); if (LEDON == false) { client.println("<input type='radio' name='l' value='1'>led ON<br>"); client.println("<input type='radio' name='l' value='0' checked>led OFF<br>"); } else if (LEDON == true) { client.println("<input type='radio' name='l' value='1' checked>led ON<br>"); client.println("<input type='radio' name='l' value='0'>led OFF<br>"); } client.println("<input type=submit value=submit></form>");

136 client.println("<hr />"); client.println("<br />"); client.println("<font color='blue'>analog input: "); sensorvalue = analogread(sensorpin); client.print(sensorvalue);//analog input. client.println("<hr />"); client.println("<br />");

137 if (buttonpress == 1) { //client.println("<cke:html><cke:body bgcolor=#ffffff>light!</cke:body></cke:html>"); client.print("rozwarcie"); } if (buttonpress == 0) { //client.println("<cke:html><cke:body bgcolor=# text=#ffffff>dark!</cke:body></cke:html>"); client.print("zwarcie"); }

138 Atrybut href w html u Atrybut href zawiera adres internetowy powiązanej strony The href attribute specifies the URL of the page the link goes to. a /a ograniczają fragment interpretowany jako adres URL w html u nie wszystkie znaki są znakami ascii i niektóre wymagają zamiany na ascii przez poprzedzenie ich backslashem - przykładem jest kombinacja \ client.println("<a href=\"/?lighton\"\">turn On Light</a>"); client.println("<a href=\"/?lightoff\"\">turn Off Light</a><br />");. if(readstring.indexof("?lighton") >0) digitalwrite(2, HIGH); // set pin 6 high else if(readstring.indexof("?lightoff") >0) digitalwrite(2, LOW); // set pin 6 low readstring=""; //clearing string for next read

139 Transmisja szeregowa UART Moduł UART (Universal Asynchronous Receiver and Transmiter) obsługuje dupleksową, asynchroniczna transmisję danych między procesorem a urządzeniem zewnętrznym. Dane są nadawane (i odbierane) w formacie start-stopowym tzn., każdy znak składa się z: 1 bitu startu: logiczne 0 8 lub 9 bitów danych 1 bitu stopu: logiczna 1. 9-ty bit danych może zostać wykorzystany jako bit parzystości lub jako dodatkowy bit stopu.

140 Transmisja szeregowa UART rejestr danych Rejestr danych transmisji UART UDR Bit Nazwa MSB LSB Odczyt/zapis R/W R/W R/W R/W R/W R/W R/W R/W Wartość początkowa Rejestr danych jest wykorzystywany do nadawania i odbioru danych. Fizycznie istnieją 2 rejestry danych (transmisja jest dupleksowa), ale występują pod ta samą nazwą.

141 Transmisja szeregowa UART rejestr statusowy Rejestr statusowy UART USR Bit Nazwa RXC TXC UDRE FE OR Odczyt/zapis R R/W R R R R R R Wartość początkowa RXC flaga zakończenia odbioru znaku TXC flaga zakończenia nadawania znaku UDRE flaga pustego bufora nadawczego (bufor mieści 2 znaki) FE flaga błędu synchronizacji ramki OR flaga nadpisania znaku

142 Transmisja szeregowa UART rejestr kontrolny Rejestr kontrolny UART UCR Bit Nazwa RXCIE TXCIE UDRIE RXEN TXEN CHR9 RXB8 TXB8 Odczyt/zapis R/W R/W R/W R/W R/W R/W R W Wartość początkowa RXCIE maska przerwania odbiorczego TXCIE maska przerwania nadawczego UDRIE maska przerwania pustego bufora nadawczego RXEN włączenie odbiornika TXEN włączenie nadajnika CHR9 włączenie transmisji 9-tego bitu RXB8 9-ty bit odebrany TXB8 9-ty bit gotowy do nadania

143 Transmisja szeregowa UART prędkość transmisji Rejestr prędkości transmisji UART UBRR Bit Nazwa MSB LSB Odczyt/zapis R/W R/W R/W R/W R/W R/W R/W R/W Wartość początkowa BAUD = f CK 16 ( UBRR + 1) BAUD prędkość w bitach/sek typowe wartości: 1200, 2400, 4800, 9600, fck częstotliwość zegara mikrokontrolera UBRR wartość obliczona, którą po zaokrągleniu należy wstawić do rejestru UBRR

144 Transmisja szeregowa UART połączenia Asynchroniczny interfejs UART mikrokontrolera ma dwie linie: nadawczą TXD i odbiorczą RXD. W mikrokontrolerze AT90S8515 linie te znajdują się na porcie D: RXD = PORTD0, TXD = PORTD1. Na liniach mikrokontrolera występują poziomy TTL (5V/0V). Podłączenie interfejsu UART do portu COM komputera PC, gdzie występują poziomy standardu RS-232 (-15V/0V) wymaga zastosowania konwertera zmiany poziomów. Z tego względu na płytce EVB-503 konwerter poziomów napięć został włączony przed wyjściami DB9, na których występują już napięcia standardu RS-232. Połącz wyprowadzenie RXD1 złącza AUX2 z linia PORTD0, a wyprowadzenie TXD1 złącza AUX2 z linia PORTD1.

145 Transmisja szeregowa UART nadawanie z obserwacją flagi Program główny: //konfiguracja interfejsu UART UBRR =38; UCR = (1<<TXEN); //wysłanie liczby ASCII a UDR = a ; while(! (USR & (1<<TXC))); USR = (1<<TXC); //wysłanie b UDR = b ; while(! (USR & (1<<TXC))); USR = (1<<TXC); //ustalenie prędkości transmisji //włączenie nadajnika //oczekiwanie na ustawienie bitu TXC //wyzerowanie flagi TXC //oczekiwanie na ustawienie bitu TXC //wyzerowanie flagi TXC

146 Transmisja szeregowa UART nadawanie z przerwaniem W programie głównym dokonuje się konfiguracji parametrów transmisji, odblokowania przerwań i wysłania 1-szego znaku. Kolejne znaki są wysyłane, gdy moduł przerwań zgłosi zakończenie wysyłania poprzedniego znaku. //zmienna globalna char a; procedura przerwania: ISR (UART_TX_vect) {UDR = a++; } program główny: UBRR =38; UCR = (1<<TXCIE) (1<<TXEN); a = a ; UDR = a; sei(); while (1) ; //wysłanie kolejnej liczby //ustalenie prędkości transmisji //włączenie nadajnika, zdjęcie maski nadawczej //wysłanie liczby ASCII a //włączenie przerwań //nic więcej nie rób

147 Transmisja szeregowa UART odbiór z obserwacją flagi Program główny: //konfiguracja interfejsu UART UBRR =.; UCR = (..); do { while(! (USR & (..)));.. } while(1); //ustalenie prędkości transmisji //włączenie odbiornika //oczekiwanie na ustawienie flagi //odbiór z rejestru UDR //wyświetlenie znaku na LCD

148 Transmisja szeregowa UART odbiór z przerwaniem W programie głównym dokonuje się konfiguracji parametrów transmisji i odblokowania przerwań Kolejne znaki są odbierane i wyświetlane na LCD, gdy moduł przerwań zgłosi zakończenie odbioru znaku. procedura przerwania: ISR (..) {//odbiór znaku //wyświetlenie znaku} program główny: //inicjacja LCD UBRR =38; UCR = (..) (..); sei(); while (1) ; //ustalenie prędkości transmisji //włączenie odbiornika, zdjęcie maski odbiorczej //włączenie przerwań //nic więcej nie rób

149 Magistrala 1-wire Magistrala 1-wire składa się z pojedynczej linii. Na magistrali 1-wire jedno urządzenie MASTER nadzoruje pracę jednego lub wielu urządzeń SLAVE. Urządzenie MASTER oraz wszystkie SLAVE są podłączone do magistrali wyjściem tranzystora otwarty dren lub bramką trójstanową. Takie podłączenie umożliwia zwolnienie linii przez każde z urządzeń po zakończeniu transmisji. Magistrala 1-wire wymaga zewnętrznego rezystora podciągającego do zasilania o wartości około 5kΩ. Stanem bezczynnym magistrali jest stan wysoki.

150 Impuls Resetu i obecności Każdy transfer po magistrali rozpoczyna się od impulsu Resetu nadawanego przez urządzenie MASTER i impulsu obecności, który jest odpowiedzią urządzenia SLAVE. W czasie impulsu Resetu MASTER zwiera magistralę do masy na czas co najmniej 480 µs. Po tym czasie MASTER zwalnia magistralę, która wskutek podciągnięcia rezystorem 5k przechodzi w stan wysoki. SLAVE dokonuje detekcji zbocza narastającego, czeka µs, po czym nadaje impuls obecności zwierając magistralę do masy na czas µs.

151 Impuls Resetu i obecności procedura uproszczona Mikrokontrolery nie posiadają interfejsu do magistrali 1-wire. W związku z tym magistralę 1-wire można umieścić na dowolnej linii mikrokontrolera np. 5 linia portu B. Wówczas na liniach portu D można umieścić 8 diod pomocniczych w uruchamianiu programu. Definicja impulsu resetu zawiera opis kształtu impulsu przedstawiony na rysunku (w przykładzie pomijamy odczyt impulsu obecności) void reset (void) { //magistrala 1-wire jako output //magistrala 1-wire w stan wysoki //odczekaj 5us //magistrala w stan niski //odczekaj 500us //magistrala w stan wysoki //odczekaj 500us pomijamy odczyt impulsu obecności }

152 Impuls Resetu i obecności W tym rozwiniętym przykładzie MASTER nadaje impuls reset i odczytuje impuls obecności void reset (void) { //magistrala 1-wire jako output //magistrala 1-wire w stan wysoki //odczekaj 5us czas nie restrykcyjny //magistrala w stan niski //odczekaj 500us //magistrala w stan wysoki //odczekaj 60us //magistrala jako wejście //podwieszenie wejścia (magistrali) pod zasilanie (wewnetrzne) //odczyt stanu magistrali //if( stan magistrali == HIGH) //SLAVE nieobecny (wyświetl tekst) //else // SLAVE obecny (wyświetl tekst) //odczekaj 500us //magistrala 1-wire jako output //magistrala 1-wire w stan wysoki }

153 Ramka nadawcza Stany logiczne: 0 i 1 są nadawane w ramkach czasowych. Każda ramka czasowa trwa co najmniej 60 µs, z odstępem między ramkami co najmniej 1µs. Rysunek przedstawia ramki obu stanów logicznych obie ramki rozpoczynają się od zbocza opadającego.

154 Impulsy stanów logicznych Definicja impulsu stanu logicznego 0 (lewa połowa rysunku z poprzedniego slajdu) void impuls0 (void) { //magistrala 1-wire jako output //magistrala 1-wire w stan wysoki //odczekaj 5us //magistrala w stan niski //odczekaj 80us //magistrala w stan wysoki //odczekaj 10us } Definicja impulsu stanu logicznego 1 (prawa połowa rysunku z poprzedniego slajdu) void impuls1 (void) {//do samodzielnego wypełnienia wg. rysunku }

155 Procedura nadania bajtu (8 bitów) Bajt nadajemy bit po bicie rozpoczynając od najmłodszego bitu, czyli przez obrót bajtu w prawo void nadaj (char A) { //magistrala 1-wire jako output //magistrala 1-wire w stan wysoki for (..) //8 obrotów pętli dla 8-miu bitów { if (selekcja najmłodszego bitu zmiennej A) ) impuls1(); //impuls logicznej else impuls0(); //impuls logicznego 0. //obrót bajtu w prawo } //sprawdzenie wartości najmłodszego bitu }

156 Ramka odbiorcza MASTER generuje zbocze opadające i podtrzymuje stan niski co najmniej przez 1 µs, po czym zwalnia magistralę, która wskutek powieszenia przechodzi w stan wysoki. Teraz SLAVE może zewrzeć magistralę do masy (gdy nadaje logiczne 0 ) lub pozostawić ją w stanie wysokim (gdy nadaje logiczną 1). MASTER odczytuje stan magistrali przed upływem 15 µs od rozpoczęcia ramki.

157 Procedura odbioru bajtu (8 bitów) Bajt odbieramy bit po bicie wsuwając bity przychodzące po magistrali na najstarszą (7-mą) pozycję zmiennej B i obracając zmienną B w prawo char odbierz (void) { for (.) //8 obrotów pętli dla 8-miu bitów { B=B>>1; //obrót bajtu w prawo //magistrala 1-wire jako output //magistrala 1-wire w stan wysoki //5us //magistrala 1-wire w stan niski //5us //magistrala 1-wire jako input //magistrala 1-wire podwieszona do zasilania (wewnętrznie) //10us if (.) //odczyt stanu magistrali B = 0b ; //odebrano stan 1 else. //odebrano stan 0 //delay. us } //magistrala 1-wire jako output //magistrala 1-wire w stan wysoki return..; }

158 Termometr cyfrowy DS18B20 Układ DS18B20 zawiera czujnik temperatury i przetwornik A/C o rozdzielczości 12-sto bitowej, co odpowiada pomiarowi temperatury z krokiem C. Pamięć układu DS18B20 składa się z 8-miu rejestrów, temperatura jest zapisywana na dwóch pierwszych rejestrach: 0-wy rejestr zawiera młodszy bajt pomiaru temperatury, 1-szy rejestr zawiera starszy bajt pomiaru temperatury. Podczas transmisji na magistrali dane są nadawane począwszy od najmłodszego bitu. Rejestr 0-wy jest wysyłany przez DS18B20 jako pierwszy.

159 Sesja komunikacyjna po magistrali 1-wire z termometrem DS18B20 TRYB URZĄDZENIA MASTER DANE (NAMŁODSZY BIT JAKO 1-SZY) KOMENTARZ TX Impuls resetu Master generuje impuls resetu RX Impuls obecności DS18B20 odpowiada impulsem obecności TX $CC Master wydaje rozkaz pominięcia odczytu pamięci ROM TX $44 Master wydaje rozkaz pomiaru temperatury TX Podciągnięcie linii Master utrzymuje magistralę w stanie wysokim czas pomiaru = 1000ms TX Impuls resetu Master generuje impuls resetu RX Impuls obecności DS18B20 odpowiada impulsem obecności TX $CC Master wydaje rozkaz pominięcia odczytu pamięci ROM TX $BE Master wydaje rozkaz odczytu pamięci RAM urządzenia RX Odczyt 2-ch słów Master odczytuje wynik pomiaru temperatury

160 Uzupełnienie programu main W programie głównym należy: skonfigurować linię magistrali 1-wire (kierunek linii: output, stan linii: high), skonfigurować 8 diod na porcie D (kierunek linii: output stan linii: high), w nieskończonej pętli wywoływać procedury 1-wire wg. kolejności pokazanej w tabeli na poprzednim slajdzie int main (void) {..//konfiguracje do {.//procedury z tabeli //odbierz bajt LS //odbierz bajt MS //wyświetl bajt LS na diodach } while (1); return 0; }

161 Rejestr temperatury Rejestr temperatury (LS byte) Bit Nazwa Rejestr temperatury (MS byte) Bit Nazwa S S S S S S bity znaku

162 Odczyt temperatury w rozdzielczości 8-bitowej Wynik pomiaru temperatury jest przekazywany przez termometr w rozdzielczości 12- bitowej na bajtach LS i MS. Ograniczenie rozdzielczości do 8-bitowej ( =1 ) polega na usunięciu bitów: 2-1, 2-2, 2-3, 2-4. W tym celu bajty LS i MS należy odpowiednio obrócić, po czym zsumować je binarnie i uzyskać na bajcie wynikowym następujący układ bitów: Bajt wynikowy zawiera temperaturę w zapisie binarnym o rozdzielczości 8-bitowej. Przed wyświetleniem na LCD liczbę binarną należy rozłożyć na kolumny (setki, dziesiątki, jedności) i zapisać każdą kolumnę w kodzie ASCII.

163 Odczyt temperatury w rozdzielczości 12-bitowej Usunięte poprzednio bity części ułamkowych temperatury 2-1, 2-2, 2-3, 2-4 należy zapisać na oddzielnej zmiennej. Rozdzielczość 12-bitowa jest równa 1/16 = 0,0625. Z porównania kolumn liczb w zapisie dwójkowym i dziesiętnym a 16 a b4 b3 b2 1 = a2 a1 b ( a 4 + 2a3 + 4a2 + 8a1) = (1000b b2 + 10b3 + b wynika, że kolumnę części dziesiętnych b 1 można obliczyć mnożąc liczbę przez 625, a następnie wyznaczając część całkowitą z podziału przez Wyznacz kolumny części dziesiętnych, setnych, tysiącznych i dziesięciotysięcznych, każdą z nich przedstaw w kodzie ASCII i wyświetl na LCD. 4 )

164 Zadania do wykonania 1. Stwórz procedury 1. Resetu i obecności 2. Impulsu logicznej 1 3. Impulsu logicznego 0 4. Zapisu bajtu (8-miu bitów) 5. Odczytu bajtu (8-miu bitów) 2. Przy wykorzystaniu procedur napisz program główny do pomiaru temperatury w nieskończonej pętli Dla uproszczenia można pominąć: Impuls obecności, Bit znaku, zakładając że temperatura jest dodatnia Bity wyniku o rozdzielczości większej niż 8 (wynik można wówczas zapisać na 1 bajcie)

165 1-wire IButton

166 Termometr cyfrowy DS18B20 - cechy

167 DS18B20 obudowy i wyprowadzenia

168 DS18B20 zasilanie pasożytnicze

169 DS18B20 zasilanie pasożytnicze

170 DS18B20 zasilanie zewnętrzne

171 DS18B20 port 3-stanowy

172 DS18B20 zasilanie In digital circuits, a high impedance (also known as hi-z, tri-stated, or floating) output is not being driven to any defined logic level by the output circuit. The signal is neither driven to a logical high nor low level; this third condition leads to the description "tri-stated". Such a signal can be seen as an open circuit (or "floating" wire) because connecting it to a low impedance circuit will not affect that circuit; it will instead itself be pulled to the same voltage as the actively driven output.

173 DS18B20 - schemat

174 DS18B20 pamięć ROM Transmisja następuje od LSB do MSB ( od prawej do lewej)

175 DS18B20 pamięci RAM i EEPROM

176 DS18B20 rejestr konfiguracyjny

177 DS bit 1wire EEPROM Główne sekcje pamięci: - 64-bitowa pamięć ROM (laserowo wypalona) bitowa pamięć danych EEPROM bitowy pamięć tymczasowa (pośredniczy przy zapisie i odczycie z EEPROM) - 64-bitowy rejestr aplikacji jednokrotnie programowalny - 64-bitowa pamięć tymczasowa (pośredniczy przy zapisie rejestru aplikacji) - 8-bitowy rejestr statusowy (status rejestru aplikacji: zapisany/nie zapisany) Main memory sections: - 64-bit lasered ROM bit data memory bit scratchpad - 64-bit OTP application register (OTP- One Time Programmable) - 64-bit scratchpad - 8-bit status memory

178 Schemat blokowy

179 Mapa pamięci

180 Master musi najpierw wysłać jedną z komend adresowanych do pamięci ROM (Read ROM, Match ROM, Search ROM lub Skip ROM). Po wykonaniu komendy ROM Master może wydawać komendy adresowane do innych pamięci

181 Pamięć ROM

182 Komendy adresowane do pamięci ROM

183 Search ROM Command (F0H) Odczyt numerów identyfikacyjnych urządzeń na magistrali (przy założeniu, że na magistrali jest więcej niż jedno urządzenie) Wszystkie urządzenia ma magistrali mają wyjścia typu otwarty kolektor. Po podłączeniu tych urządzeń do jednej linii (1-wire) stan magistrali jest wynikiem hardwarowej operacji logicznej AND (koniunkcja hardwarowa). Proces rozpoczyna się następująco: - master odczytuje wynik koniunkcji bitów LSB wszystkich urządzeń - master odczytuje negację wyniku koniunkcji bitów LSB wszystkich urządzeń - master zapisuje na magistrali pożądaną wartość bitu LSB tym samym wydaje rozkaz przejścia w stan high-z urządzeniom o niezgodnym bicie LSB itd. do bitu 63 (MSB). W takim procesie master odczytuje numer jednego urządzenia. Następnie urządzenie już odczytane przechodzi w stan high-z, a proces zaczyna się ponownie dla urządzeń o numerach jeszcze nie odczytanych. All devices are open drain and connected to one wire produce a wired AND result. Master issues a 0FH command. Then master: read a bit, reads the complement to the bit, writes the desired value of the bit. All devices that do not match turn to state high-z.

184 Algorytm zapisu i odczytu pamięci EEPROM

185 Zapis i odczyt pamięci

186 CRC Cyclic Redundancy Code - reszta z dzielenia wielomianów Dzielnik i dzielna są traktowane jako ciągi (liczby) binarne, dzielenia następuje wg. zasad arytmetyki binarnej modulo 2, wynik dzielenia jest nieistotny (pomijany), reszta z dzielenia (CRC) jest dopisywana do ciągu przesyłanych danych Odbiornik dzieli otrzymany ciąg z dołączonym CRC przez ten sam wielomian, jeśli wynik dzielenia jest różny od zera, to w transmisji wystąpił błąd. Obliczenia CRC mogą być: stablicowane lub wykonywane na bazie procedur.

187 Dodawanie i odejmowanie w arytmetyce binarnej modulo dwa (bez przeniesienia) suma różnica = = = = 0 W arytmetyce binarnej modulo 2 suma i różnica są dają identyczny rezultat. Z tego powodu nie można tradycyjnie porównywać liczb pod względem relacji większa/mniejsza. Liczba X jest większa lub równa liczbie Y jeżeli pozycja najstarszego bitu liczby X jest taka sama lub większa niż pozycja najstarszego bitu Y. np. 101 jest mniejsze niż 1010

188 Dzielenie w arytmetyce binarnej modulo dwa (bez przeniesienia)

189 DS18B20 wielomian CRC Ciąg danych: Dzielimy przez wielomian W tym celu ciąg danych uzupełniamy o 8 zer liczymy sumę modulo liczymy sumę modulo liczymy sumę modulo 2 itd. aż do uzyskania 8-bitowej reszty z dzielenia

190 Nadajnik transmituje bity danych uzupełnione o bity reszty z dzielenia wielomianów CRC8 lub CRC16 CRC 8 =x 8 +x 5 +x = 0x31 CRC 16 =x 16 +x 15 +x =0x8005 Wybiera się takie wielomiany, dla których rozkład 0 i 1 wielomianu oraz wielokrotności wielomianu nie przypomina rozkładu szumu (równomiernego) Odbiornik dzieli otrzymany ciąg łącznie z bitami reszty CRC przez ten sam wielomian CRC 8 (lub CRC 16 ). Jeżeli reszta z dzielenia =0, ciąg nie został przekłamany.

191 Generator hardwarowy CRC16 i CRC8

192 unsigned int crc16(unsigned char c) { unsigned int crc, j; for (j=0; j<8; j++) { if ((crc^(unsigned int) c) & 0x0001) { crc = (crc ^ 0x8005); } else; crc = crc >>1; c = c >> 1; } return crc; } //////////////////////////////////////////////////////////////////////////////////////////////// int main(void) { unsigned char ciag[15]; unsigned int i, oblcrc; ciag[0] = 'H'; ciag[1] = '1';. crc=0; for (i=0; i<12; i++) { oblcrc = crc16(ciag[i]); } return 0; }

193 Podział pamięci półprzewodnikowych Pamięci półprzewodnikowe sekwencyjne rejestry przesuwające CCD - ze sprzężeniem ładunkowym ulotne zwykłe statyczne dynamiczne (SRAM) (DRAM) równoległe klasyczne (bipol.,unipol.) (unipol.) szeregowe pseudostatyczne (unipol.) (unipol.) nieulotne ROM PROM EPROM (szereg. i równol.) EEPROM (E 2 PROM) (szereg. i równol.) NVRAM (SRAM+EEPROM) FLASH (3 rodzaje) FRAM bipolarne unipolarne u n i p o l a r n e

194 Charakterystyka pamięci nieulotnych - ROM i EPROM

195 Charakterystyka pamięci nieulotnych EEPROM i FLASH

196 Pamięć NV-RAM

197 Charakterystyka pamięci nieulotnych FRAM

198 Charakterystyka pamięci ulotnych SRAM

199 Charakterystyka pamięci ulotnych DRAM

200 rodzaj rozmiar nieulot- zapis odczyt pobór komórki ność czas [ns] ilość czas [ns] ilość mocy SRAM duży nieogr nieogr. niski DRAM średni nieogr nieogr. wysoki EEPROM średni + 10ms nieogr. średni NVRAM duży nieogr nieogr. średni Flash mały µs nieogr. średni FRAM średni niski

201 Zalety pamięci FRAM w stosunku do EEPROM (E 2 PROM) - dostęp 30 razy szybszy - liczba zapisów (przeprogramowań) 1milion razy większa - zużycie energii 200 razy mniejsze - wysoka odporność na pola elektromagnetyczne i promieniowanie gamma - przechowywanie danych 10 lat bez baterii - prostsza konstrukcja jedynie mały kondensator podtrzymujący w razie spadku napięcia zasilającego podczas procesu zapisu

202 Porównanie pamięci SRAM, FRAM

203 Zastosowanie pamięci FRAM w systemach wbudowanych: - Authentication chip z szyfrowaniem np.. AES do identyfikacji uprawnionego użytkownika - Custom LSI układ LSI wg. zamówienia - RFID identyfikator drogą radiową

204 RFID Radio Frequency Identification Układ składa się z czytnika i etykiety (transpondera) Czytnik: nadajnik, odbiornik, dekoder, antena nadawcza i odbiorcza Etykieta: układ scalony bez obudowy z anteną, bez zasilania. Czytnik nadając wytwarza falę elektromagnetyczną. Etykieta po znalezieniu się w polu czytnika gromadzi energię w kondensatorze, po czym wysyła odpowiedź do czytnika. Po wysłaniu odpowiedzi etykieta pozostaje nieczynna przez pewien czas, co umożliwia odczyt wielu transponderów znajdujących się jednocześnie w polu odczytu. częstotliwości pracy: 13,5MHz zasięg około metra MHz zasięg kilka metrów

205 FRAM embedded RFID LSI

206 Dziękuję za uwagę

207 Magistrala SPI Magistrala SPI składa się z linii: MOSI Master output Slave input MISO Master input Slave Output SCK Clock SS Slave select (CS Chip Select lub CE Chip Enable) Sygnał taktujący transmisję SCK oraz sygnał wyboru urządzenia Slave jest zawsze wystawiany przez urządzenie Master. Linie MOSI i MISO są wspólne dla wszystkich urządzeń na magistrali, linia SS jest prowadzona do każdego Slave oddzielnie.

208 Magistrala SPI Transmisja po magistrali jest dookólna każdemu nadawaniu po linii MOSI towarzyszy odbiór po linii MISO. Nie wszystkie transfery niosą informacje, niekiedy mogą być nadawanie dane puste np. same zera.

209 Fazowanie magistrali SPI Faza sygnału taktującego definiuje zależność pomiędzy zboczami sygnału taktującego, a momentami odbioru (próbkowania) danych wejściowych i nadawania (przesuwania w rejestrze) danych wyjściowych. CPHA=0 pierwsze zbocze sygnału taktującego próbkuje dane wejściowe, drugie zbocze przesuwa dane w rejestrze (dane są próbkowane, a następnie przesuwane i wysyłane) CPHA=1 pierwsze zbocze sygnału taktującego przesuwa dane w rejestrze wyprowadza je z rejestru, drugie zbocze próbkuje dane wejściowe (dane są przesuwane i wysyłane, a następnie próbkowane i wpisywane do rejestru) Polaryzacja i fazowanie przebiegów na magistrali dla bitu CPHA =0 i różnych wartości bitu CPOL.

210 Fazowanie magistrali SPI Polaryzacja i fazowanie przebiegów na magistrali dla bitu CPHA =1 i różnych wartości bitu CPOL.

211 Tryby pracy interfejsu SPI Wartości bitów CPOL i CPHA decydują o wyborze jednego z 4-ch trybów pracy interfejsu SPI, oznaczonych jako 0, 1, 2 lub 3. W zakresie polaryzacji i fazowania urządzenie Master musi się dostosować do wymagań Slave podanych w nocie katalogowej tego urządzenia. Zegar czasu rzeczywistego DS1305 pracuje w trybie 1. Tryby pracy interfejsu SPI [1] Zbocze narastające Zbocze opadające Tryb pracy SPI CPOL = 0, CPHA = 0 Próbkowanie Zmiana danych 0 CPOL = 0, CPHA = 1 Zmiana danych Próbkowanie 1 CPOL = 1, CPHA = 0 Zmiana danych Próbkowanie 2 CPOL = 1, CPHA = 1 Próbkowanie Zmiana danych 3

212 Rejestry interfejsu SPI Rejestr kontrolny interfejsu SPI - SPCR Bit Nazwa SPIE SPE DODR MSTR CPOL CPHA SPR1 SPR0 Odczyt/zapis R/W R/W R/W R/W R/W R/W R/W R/W Wartość początkowa Bit 7 SPIE: maska przerwania interfejsu SPI Bit 6 SPE: włączenie interfejsu Bit 5 DODR: kolejność przesyłu danych: 0 MSB pierwszy, 1 LSB pierwszy Bit 4 MSTR: wybór trybu master/slave Bit 3 CPOL: wybór polaryzacji sygnału taktującego Bit 2 CPHA: wybór fazy próbkowania Bit 1 SPR1, bit 0 SPR0: wybór częstotliwości taktującej (patrz tabela)

213 Wybór częstotliwości taktującej Należy wybrać dzielnik między częstotliwością interfejsu SPI, a zegarem systemowym.

Bootloader programming

Bootloader programming Arduino Esplora ATMega32u4 ISP programming Bootloader programming The bootloader is basically a.hex file that runs when you turn on the board. It is very similar to the BIOS that runs on your PC. It does

Bardziej szczegółowo

ATMega328. Memories: Flash memory 32kB SRAM 2kB EEPROM 1kB

ATMega328. Memories: Flash memory 32kB SRAM 2kB EEPROM 1kB ATMega328 Memories: Flash memory 32kB SRAM 2kB EEPROM 1kB ISP programming Bootloader programming The bootloader is basically a.hex file that runs when you turn on the board. It is very similar to the

Bardziej szczegółowo

Poradnik programowania procesorów AVR na przykładzie ATMEGA8

Poradnik programowania procesorów AVR na przykładzie ATMEGA8 Poradnik programowania procesorów AVR na przykładzie ATMEGA8 Wersja 1.0 Tomasz Pachołek 2017-13-03 Opracowanie zawiera opis podstawowych procedur, funkcji, operatorów w języku C dla mikrokontrolerów AVR

Bardziej szczegółowo

Bootloader programming

Bootloader programming Arduino Esplora ATMega32u4 ISP programming Bootloader programming The bootloader is basically a.hex file that runs when you turn on the board. It is very similar to the BIOS that runs on your PC. It does

Bardziej szczegółowo

SYSTEM PRZERWAŃ ATmega 32

SYSTEM PRZERWAŃ ATmega 32 Zachodniopomorski Uniwersytet Technologiczny WYDZIAŁ ELEKTRYCZNY Katedra Inżynierii Systemów, Sygnałów i Elektroniki LABORATORIUM TECHNIKA MIKROPROCESOROWA SYSTEM PRZERWAŃ ATmega 32 Opracował: mgr inż.

Bardziej szczegółowo

Server setup. #include <SPI.h> #include <Ethernet.h> boolean incoming = 0;

Server setup. #include <SPI.h> #include <Ethernet.h> boolean incoming = 0; Server setup #include #include boolean incoming = 0; byte mac[] = 0x00, 0xAA, 0xBB, 0xCC, 0xDA, 0x02 ; IPAddress ip(192,168, 0, 230); EthernetServer server(80); void setup() pinmode(2,

Bardziej szczegółowo

Technika mikroprocesorowa materiały do laboratorium. Autor: Dorota Rabczuk

Technika mikroprocesorowa materiały do laboratorium. Autor: Dorota Rabczuk Technika mikroprocesorowa materiały do laboratorium Autor: Dorota Rabczuk Architektura mikrokontrolera AT90S8515 1. Jednostka arytmetyczno-logiczna ALU posiada dostęp do 32-ch rejestrów 8-bitowych, na

Bardziej szczegółowo

Podstawowe urządzenia peryferyjne mikrokontrolera ATmega8 Spis treści

Podstawowe urządzenia peryferyjne mikrokontrolera ATmega8 Spis treści Podstawowe urządzenia peryferyjne mikrokontrolera ATmega8 Spis treści 1. Konfiguracja pinów2 2. ISP..2 3. I/O Ports..3 4. External Interrupts..4 5. Analog Comparator5 6. Analog-to-Digital Converter.6 7.

Bardziej szczegółowo

Podstawowe urządzenia peryferyjne mikrokontrolera ATmega8 Spis treści

Podstawowe urządzenia peryferyjne mikrokontrolera ATmega8 Spis treści Podstawowe urządzenia peryferyjne mikrokontrolera ATmega8 Spis treści 1. Konfiguracja pinów...2 2. ISP...2 3. I/O Ports...3 4. External Interrupts...4 5. Analog Comparator...5 6. Analog-to-Digital Converter...6

Bardziej szczegółowo

Mikroprocesory i Mikrosterowniki Liczniki Timer Counter T/C0, T/C1, T/C2

Mikroprocesory i Mikrosterowniki Liczniki Timer Counter T/C0, T/C1, T/C2 Mikroprocesory i Mikrosterowniki Liczniki Timer Counter T/C0, T/C1, T/C2 Wydział Elektroniki Mikrosystemów i Fotoniki Piotr Markowski Na prawach rękopisu. Na podstawie dokumentacji ATmega8535, www.atmel.com.

Bardziej szczegółowo

Programowanie mikrokontrolerów. 8 listopada 2007

Programowanie mikrokontrolerów. 8 listopada 2007 Programowanie mikrokontrolerów Marcin Engel Marcin Peczarski 8 listopada 2007 Alfanumeryczny wyświetlacz LCD umożliwia wyświetlanie znaków ze zbioru będącego rozszerzeniem ASCII posiada zintegrowany sterownik

Bardziej szczegółowo

Uwaga: dioda na wyjściu 13 świeci gdy na wyjście podamy 0.

Uwaga: dioda na wyjściu 13 świeci gdy na wyjście podamy 0. Podstawowe funkcje sterowania pinami cyfrowymi pinmode(8, OUTPUT); //ustawienie końcówki jako wyjście pinmode(8, INPUT); // ustawienie końcówki jako wejście pinmode(8, INPUT_PULLUP); // ustawienie końcówki

Bardziej szczegółowo

Schemat blokowy architektury AVR

Schemat blokowy architektury AVR 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

Bardziej szczegółowo

Wyświetlacz alfanumeryczny LCD zbudowany na sterowniku HD44780

Wyświetlacz alfanumeryczny LCD zbudowany na sterowniku HD44780 Dane techniczne : Wyświetlacz alfanumeryczny LCD zbudowany na sterowniku HD44780 a) wielkość bufora znaków (DD RAM): 80 znaków (80 bajtów) b) możliwość sterowania (czyli podawania kodów znaków) za pomocą

Bardziej szczegółowo

Wbudowane układy peryferyjne cz. 3 Wykład 9

Wbudowane układy peryferyjne cz. 3 Wykład 9 Wbudowane układy peryferyjne cz. 3 Wykład 9 Komparator analogowy Komparator analogowy 2 Komparator analogowy Pozwala porównać napięcia na wejściu dodatnim i ujemnym Przerwanie może być wywołane obniżeniem

Bardziej szczegółowo

Mikrokontrolery AVR Wprowadzenie

Mikrokontrolery AVR Wprowadzenie Mikrokontrolery AVR Wprowadzenie Komunikacja z otoczeniem mikrokontrolera Każdy z mikrokontrolerów posiada pewna liczbę wyprowadzeń cyfrowych które służą do wprowadzania i odbierania informacji z mikrokontrolera.

Bardziej szczegółowo

Podstawowe urządzenia peryferyjne mikrokontrolera ATmega8 Spis treści

Podstawowe urządzenia peryferyjne mikrokontrolera ATmega8 Spis treści Podstawowe urządzenia peryferyjne mikrokontrolera ATmega8 Spis treści 1. Konfiguracja pinów...2 2. ISP...2 3. I/O Ports...3 4. External Interrupts...4 5. Analog Comparator...6 6. Analog-to-Digital Converter...6

Bardziej szczegółowo

Uproszczony schemat blokowy zespołu 8-bitowego timera przedstawiono na rys.1

Uproszczony schemat blokowy zespołu 8-bitowego timera przedstawiono na rys.1 Dodatek C 1. Timer 8-bitowy (Timer0) 1.1. Opis układu Uproszczony schemat blokowy zespołu 8-bitowego timera przedstawiono na rys.1 Rys. 1. Schemat blokowy timera Źródłem sygnału taktującego może być zegar

Bardziej szczegółowo

Programowanie Mikrokontrolerów

Programowanie Mikrokontrolerów Programowanie Mikrokontrolerów Wyświetlacz alfanumeryczny oparty na sterowniku Hitachi HD44780. mgr inż. Paweł Poryzała Zakład Elektroniki Medycznej Alfanumeryczny wyświetlacz LCD Wyświetlacz LCD zagadnienia:

Bardziej szczegółowo

start Program mikroprocesorowego miernika mocy generowanej $crystal = deklaracja

start Program mikroprocesorowego miernika mocy generowanej $crystal = deklaracja ----------------------------start---------------------------- Program mikroprocesorowego miernika mocy generowanej $crystal = 8000000 deklaracja częstotliwości kwarcu taktującego uc $regfile "m8def.dat"

Bardziej szczegółowo

PRZETWORNIK ADC w mikrokontrolerach Atmega16-32

PRZETWORNIK ADC w mikrokontrolerach Atmega16-32 Zachodniopomorski Uniwersytet Technologiczny WYDZIAŁ ELEKTRYCZNY Katedra Inżynierii Systemów, Sygnałów i Elektroniki LABORATORIUM TECHNIKA MIKROPROCESOROWA PRZETWORNIK ADC w mikrokontrolerach Atmega16-32

Bardziej szczegółowo

Wbudowane układy peryferyjne cz. 2 Wykład 8

Wbudowane układy peryferyjne cz. 2 Wykład 8 Wbudowane układy peryferyjne cz. 2 Wykład 8 Timery Timery (liczniki) 2 Timery informacje ogólne Mikrokontroler ATmega32 posiada 3 liczniki: Timer0 8-bitowy Timer1 16-bitowy Timer2 8-bitowy, mogący pracować

Bardziej szczegółowo

Instytut Teleinformatyki

Instytut Teleinformatyki Instytut Teleinformatyki Wydział Fizyki, Matematyki i Informatyki Politechnika Krakowska Mikroprocesory i Mikrokontrolery Zastosowanie przetwornika analogowo-cyfrowego do odczytywania napięcia z potencjometru

Bardziej szczegółowo

Komunikacja w mikrokontrolerach Laboratorium

Komunikacja w mikrokontrolerach Laboratorium Laboratorium Ćwiczenie 1 Podstawy programowania, stany uśpienia Program ćwiczenia: zapoznanie z regulaminem laboratorium i zasadami zaliczenia, zapoznanie ze sprzętem laboratoryjnym i oprogramowaniem,

Bardziej szczegółowo

Uproszczony schemat blokowy konwertera analogowo-cyfrowego przedstawiony został na rys.1.

Uproszczony schemat blokowy konwertera analogowo-cyfrowego przedstawiony został na rys.1. Dodatek D 1. Przetwornik analogowo-cyfrowy 1.1. Schemat blokowy Uproszczony schemat blokowy konwertera analogowo-cyfrowego przedstawiony został na rys.1. Rys. 1. Schemat blokowy przetwornika A/C Przetwornik

Bardziej szczegółowo

Przetworniki analogowo-cyfrowe (A/C)

Przetworniki analogowo-cyfrowe (A/C) Przetworniki analogowo-cyfrowe (A/C) Przetworniki analogowo-cyfrowe to urządzenia, przetwarzające ciągły analogowy sygnał wejściowy jedno wejście na odpowiadający mu dyskretny cyfrowy sygnał wyjściowy

Bardziej szczegółowo

Programowanie mikrokontrolerów AVR z rodziny ATmega.

Programowanie mikrokontrolerów AVR z rodziny ATmega. Programowanie mikrokontrolerów AVR z rodziny ATmega. Materiały pomocnicze Jakub Malewicz jakub.malewicz@pwr.wroc.pl Wszelkie prawa zastrzeżone. Kopiowanie w całości lub w częściach bez zgody i wiedzy autora

Bardziej szczegółowo

2. Architektura mikrokontrolerów PIC16F8x... 13

2. Architektura mikrokontrolerów PIC16F8x... 13 Spis treści 3 Spis treœci 1. Informacje wstępne... 9 2. Architektura mikrokontrolerów PIC16F8x... 13 2.1. Budowa wewnętrzna mikrokontrolerów PIC16F8x... 14 2.2. Napięcie zasilania... 17 2.3. Generator

Bardziej szczegółowo

LABORATORIUM. TIMERY w mikrokontrolerach Atmega16-32

LABORATORIUM. TIMERY w mikrokontrolerach Atmega16-32 Zachodniopomorski Uniwersytet Technologiczny WYDZIAŁ ELEKTRYCZNY Katedra Inżynierii Systemów, Sygnałów i Elektroniki LABORATORIUM TECHNIKA MIKROPROCESOROWA TIMERY w mikrokontrolerach Atmega16-32 Opracował:

Bardziej szczegółowo

Magistrala SPI. Linie MOSI i MISO sąwspólne dla wszystkich urządzeńna magistrali, linia SS jest prowadzona do każdego Slave oddzielnie.

Magistrala SPI. Linie MOSI i MISO sąwspólne dla wszystkich urządzeńna magistrali, linia SS jest prowadzona do każdego Slave oddzielnie. Magistrala SPI Magistrala SPI składa się z linii: MOSI Master output Slave input MISO Master input Slave Output SCK Clock SS Slave select (CS Chip Select lub CE Chip Enable) Sygnał taktujący transmisję

Bardziej szczegółowo

Szkolenia specjalistyczne

Szkolenia specjalistyczne Szkolenia specjalistyczne AGENDA Programowanie mikrokontrolerów w języku C na przykładzie STM32F103ZE z rdzeniem Cortex-M3 GRYFTEC Embedded Systems ul. Niedziałkowskiego 24 71-410 Szczecin info@gryftec.com

Bardziej szczegółowo

Listing_ $crystal = deklaracja

Listing_ $crystal = deklaracja ------------------------------------------------- Listing_4 ---------------------------------------------------- $crystal = 8000000 deklaracja częstotliwości kwarcu $regfile "m8def.dat" biblioteka mikrokontrolera

Bardziej szczegółowo

Programowanie mikrokontrolerów AVR

Programowanie mikrokontrolerów AVR Programowanie mikrokontrolerów AVR Czym jest mikrokontroler? Mikrokontroler jest małym komputerem podłączanym do układów elektronicznych. Pamięć RAM/ROM CPU wykonuje program Układy I/O Komunikacje ze światem

Bardziej szczegółowo

LABORATORIUM. TIMERY w mikrokontrolerach Atmega16-32

LABORATORIUM. TIMERY w mikrokontrolerach Atmega16-32 Zachodniopomorski Uniwersytet Technologiczny WYDZIAŁ ELEKTRYCZNY Katedra Inżynierii Systemów, Sygnałów i Elektroniki LABORATORIUM TECHNIKA MIKROPROCESOROWA TIMERY w mikrokontrolerach Atmega16-32 Opracował:

Bardziej szczegółowo

Instytut Teleinformatyki

Instytut Teleinformatyki Instytut Teleinformatyki Wydział Fizyki, Matematyki i Informatyki Politechnika Krakowska Mikroprocesory i Mikrokontrolery Dostęp do portów mikrokontrolera ATmega32 język C laboratorium: 10 autorzy: dr

Bardziej szczegółowo

Programowanie mikrokontrolerów. 5 grudnia 2007

Programowanie mikrokontrolerów. 5 grudnia 2007 Programowanie mikrokontrolerów Marcin Engel Marcin Peczarski 5 grudnia 2007 Przerwania Umożliwiają asynchroniczną obsługę różnych zdarzeń, np.: zmiana stanu wejścia, zakończenie przetwarzania analogowo-cyfrowego,

Bardziej szczegółowo

Programowanie mikrokontrolerów AVR z rodziny ATmega.

Programowanie mikrokontrolerów AVR z rodziny ATmega. Programowanie mikrokontrolerów AVR z rodziny ATmega. Materiały pomocnicze Jakub Malewicz jakub.malewicz@pwr.wroc.pl Wszelkie prawa zastrzeżone. Kopiowanie w całości lub w częściach bez zgody i wiedzy autora

Bardziej szczegółowo

Systemy wbudowane. Uniwersytet Łódzki Wydział Fizyki i Informatyki Stosowanej. Witold Kozłowski

Systemy wbudowane. Uniwersytet Łódzki Wydział Fizyki i Informatyki Stosowanej. Witold Kozłowski Uniwersytet Łódzki Wydział Fizyki i Informatyki Stosowanej Systemy wbudowane Witold Kozłowski Zakład Fizyki i Technologii Struktur Nanometrowych 90-236 Łódź, Pomorska 149/153 https://std2.phys.uni.lodz.pl/mikroprocesory/

Bardziej szczegółowo

GND(VSS) i VCC - masa i zasilanie. V0 - regulacja kontrastu

GND(VSS) i VCC - masa i zasilanie. V0 - regulacja kontrastu Programowanie wyświetlacza LCD według: http://radziu.dxp.pl Wyświetlacz graficzny 2 x 16 ma 2 wiersze, 16 znaków w wierszu, każdy znak jest wyświetlany w matrycy 5 x 8 pikseli. (2*8 wierszy * 5*16 kolumn

Bardziej szczegółowo

Politechnika Poznańska Wydział Budowy Maszyn i Zarządzania. Sterowniki Urządzeń Mechatronicznych laboratorium. Ćw. 3: Timer v1.0

Politechnika Poznańska Wydział Budowy Maszyn i Zarządzania. Sterowniki Urządzeń Mechatronicznych laboratorium. Ćw. 3: Timer v1.0 1 CEL ĆWICZENIA Celem ćwiczenia jest zapoznanie się z możliwościami odmierzania czasu za pomocą wewnętrznego TIMER a mikrokontrolerów serii AVR 2 ZAKRES NIEZBĘDNYCH WIADOMOŚCI - wiadomości z poprzednich

Bardziej szczegółowo

Instytut Teleinformatyki

Instytut Teleinformatyki Instytut Teleinformatyki Wydział Fizyki, Matematyki i Informatyki Politechnika Krakowska Systemy Czasu Rzeczywistego Programowanie wyświetlacza graficznego LCD laboratorium: 01 autor: mgr inż. Paweł Pławiak

Bardziej szczegółowo

Opis procedur asemblera AVR

Opis procedur asemblera AVR Piotr Kalus PWSZ Racibórz 10.05.2008 r. Opis procedur asemblera AVR init_lcd Plik: lcd4pro.hvr Procedura inicjuje pracę alfanumerycznego wyświetlacza LCD za sterownikiem HD44780. Wyświetlacz działa w trybie

Bardziej szczegółowo

KOMUNIKACJA Z OTOCZENIEM MIKROKONTROLERA

KOMUNIKACJA Z OTOCZENIEM MIKROKONTROLERA Mikrokontrolery AVR KOMUNIKACJA Z OTOCZENIEM MIKROKONTROLERA Wyprowadzenia Każdy z mikrokontrolerów posiada pewną liczbę wyprowadzeń cyfrowych które służą do wprowadzania i odbierania informacji z mikrokontrolera.

Bardziej szczegółowo

Instytut Teleinformatyki

Instytut Teleinformatyki Instytut Teleinformatyki Wydział Fizyki, Matematyki i Informatyki Politechnika Krakowska Mikroprocesory i Mikrokontrolery System przerwań laboratorium: 11 autorzy: dr hab. Zbisław Tabor, prof. PK mgr inż.

Bardziej szczegółowo

Układy czasowo-licznikowe w systemach mikroprocesorowych

Układy czasowo-licznikowe w systemach mikroprocesorowych Układy czasowo-licznikowe w systemach mikroprocesorowych 1 W każdym systemie mikroprocesorowym znajduje zastosowanie układ czasowy lub układ licznikowy Liczba liczników stosowanych w systemie i ich długość

Bardziej szczegółowo

Komunikacja w mikrokontrolerach Laboratorium

Komunikacja w mikrokontrolerach Laboratorium Laboratorium Ćwiczenie 4 Magistrala SPI Program ćwiczenia: konfiguracja transmisji danych między mikrokontrolerem a cyfrowym czujnikiem oraz sterownikiem wyświetlaczy 7-segmentowych przy użyciu magistrali

Bardziej szczegółowo

4 Transmisja szeregowa na przykładzie komunikacji dwukierunkowej z komputerem PC, obsługa wyświetlacza LCD.

4 Transmisja szeregowa na przykładzie komunikacji dwukierunkowej z komputerem PC, obsługa wyświetlacza LCD. 13 4 Transmisja szeregowa na przykładzie komunikacji dwukierunkowej z komputerem PC, obsługa wyświetlacza LCD. Zagadnienia do przygotowania: - budowa i działanie interfejsu szeregowego UART, - tryby pracy,

Bardziej szczegółowo

o Instalacja środowiska programistycznego (18) o Blink (18) o Zasilanie (21) o Złącza zasilania (22) o Wejścia analogowe (22) o Złącza cyfrowe (22)

o Instalacja środowiska programistycznego (18) o Blink (18) o Zasilanie (21) o Złącza zasilania (22) o Wejścia analogowe (22) o Złącza cyfrowe (22) O autorze (9) Podziękowania (10) Wstęp (11) Pobieranie przykładów (12) Czego będę potrzebował? (12) Korzystanie z tej książki (12) Rozdział 1. Programowanie Arduino (15) Czym jest Arduino (15) Instalacja

Bardziej szczegółowo

Arduino dla początkujących. Kolejny krok Autor: Simon Monk. Spis treści

Arduino dla początkujących. Kolejny krok Autor: Simon Monk. Spis treści Arduino dla początkujących. Kolejny krok Autor: Simon Monk Spis treści O autorze Podziękowania Wstęp o Pobieranie przykładów o Czego będę potrzebował? o Korzystanie z tej książki Rozdział 1. Programowanie

Bardziej szczegółowo

Przetwornik analogowo-cyfrowy

Przetwornik analogowo-cyfrowy Przetwornik analogowo-cyfrowy Przetwornik analogowo-cyfrowy A/C (ang. A/D analog to digital; lub angielski akronim ADC - od słów: Analog to Digital Converter), to układ służący do zamiany sygnału analogowego

Bardziej szczegółowo

LOW ENERGY TIMER, BURTC

LOW ENERGY TIMER, BURTC PROJEKTOWANIE ENERGOOSZCZĘDNYCH SYSTEMÓW WBUDOWANYCH ĆWICZENIE 4 LOW ENERGY TIMER, BURTC Katedra Elektroniki AGH 1. Low Energy Timer tryb PWM Modulacja szerokości impulsu (PWM) jest często stosowana przy

Bardziej szczegółowo

Mikrokontroler ATmega32. System przerwań Porty wejścia-wyjścia Układy czasowo-licznikowe

Mikrokontroler ATmega32. System przerwań Porty wejścia-wyjścia Układy czasowo-licznikowe Mikrokontroler ATmega32 System przerwań Porty wejścia-wyjścia Układy czasowo-licznikowe 1 Przerwanie Przerwanie jest inicjowane przez urządzenie zewnętrzne względem mikroprocesora, zgłaszające potrzebę

Bardziej szczegółowo

Systemy Wbudowane. Arduino C. Arduino C - stałe. Arduino C - Stałe. Arduino C - Stałe. Funkcje matematyczne. Arduino C - Stałe

Systemy Wbudowane. Arduino C. Arduino C - stałe. Arduino C - Stałe. Arduino C - Stałe. Funkcje matematyczne. Arduino C - Stałe Arduino C - stałe Systemy Wbudowane Arduino C Wersja 2018 Unikać redefiniowania istniejących stałych. Stosowane dla polepszenia zrozumiałości kodu. Lepiej HIGH niż 0x01 Lepiej INPUT_PULLUP niż 0x2 Uwzględniają

Bardziej szczegółowo

Technika Mikroprocesorowa

Technika Mikroprocesorowa Technika Mikroprocesorowa Dariusz Makowski Katedra Mikroelektroniki i Technik Informatycznych tel. 631 2648 dmakow@dmcs.pl http://neo.dmcs.p.lodz.pl/tm 1 System mikroprocesorowy? (1) Magistrala adresowa

Bardziej szczegółowo

Wprowadzenie do podstaw programowania AVR (na przykładzie mikrokontrolera ATmega 16 / 32)

Wprowadzenie do podstaw programowania AVR (na przykładzie mikrokontrolera ATmega 16 / 32) Wprowadzenie do podstaw programowania AVR (na przykładzie mikrokontrolera ATmega 16 / 32) wersja 0.4 (20 kwietnia 2015) Filip A. Sala W niniejszym, bardzo krótkim opracowaniu, postaram się przedstawić

Bardziej szczegółowo

3.2. Zegar/kalendarz z pamięcią statyczną RAM 256 x 8

3.2. Zegar/kalendarz z pamięcią statyczną RAM 256 x 8 3.2. Zegar/kalendarz z pamięcią statyczną RAM 256 x 8 Układ PCF 8583 jest pobierającą małą moc, 2048 bitową statyczną pamięcią CMOS RAM o organizacji 256 x 8 bitów. Adresy i dane są przesyłane szeregowo

Bardziej szczegółowo

Komunikacja w mikrokontrolerach. Wydział Elektroniki Mikrosystemów i Fotoniki Piotr Markowski

Komunikacja w mikrokontrolerach. Wydział Elektroniki Mikrosystemów i Fotoniki Piotr Markowski Komunikacja w mikrokontrolerach Wydział Elektroniki Mikrosystemów i Fotoniki Piotr Markowski Treść kursu Programowanie mikrokontrolerów AVR (ATMEL) Orientacja na komunikację międzyukładową w C Literatura

Bardziej szczegółowo

Język C. Wykład 9: Mikrokontrolery cz.2. Łukasz Gaweł Chemia C pokój 307

Język C. Wykład 9: Mikrokontrolery cz.2. Łukasz Gaweł Chemia C pokój 307 Język C Wykład 9: Mikrokontrolery cz.2 Łukasz Gaweł Chemia C pokój 307 lukasz.gawel@pg.edu.pl Pierwszy program- powtórka Częstotliwość zegara procesora μc (należy sprawdzić z kartą techniczną μc) Dodaje

Bardziej szczegółowo

1.2 Schemat blokowy oraz opis sygnałów wejściowych i wyjściowych

1.2 Schemat blokowy oraz opis sygnałów wejściowych i wyjściowych Dodatek A Wyświetlacz LCD. Przeznaczenie i ogólna charakterystyka Wyświetlacz ciekłokrystaliczny HY-62F4 zastosowany w ćwiczeniu jest wyświetlaczem matrycowym zawierającym moduł kontrolera i układ wykonawczy

Bardziej szczegółowo

Cwiczenie nr 1 Pierwszy program w języku C na mikrokontroler AVR

Cwiczenie nr 1 Pierwszy program w języku C na mikrokontroler AVR Cwiczenie nr 1 Pierwszy program w języku C na mikrokontroler AVR Zadanie polega na napisaniu pierwszego programu w języku C, jego poprawnej kompilacji i wgraniu na mikrokontroler. W tym celu należy zapoznać

Bardziej szczegółowo

4 Transmisja szeregowa, obsługa wyświetlacza LCD.

4 Transmisja szeregowa, obsługa wyświetlacza LCD. 1 4 Transmisja szeregowa, obsługa wyświetlacza LCD. Zagadnienia do przygotowania: - budowa i działanie interfejsu szeregowego UART, - tryby pracy, - ramka transmisyjna, - przeznaczenie buforów obsługi

Bardziej szczegółowo

Expandery wejść MCP23S17 oraz MCP23017

Expandery wejść MCP23S17 oraz MCP23017 Expandery wejść MCP23S17 oraz MCP23017 Expander I/O MCP20S17 I2C Piny wyjściowe expanderów MCP23S17 oraz MCP23017 Expander I/O MCP23S17 SPI Podłączenie urządzenia na magistrali SPI z płytą Arduino. Linie

Bardziej szczegółowo

Technika mikroprocesorowa laboratorium. dr inż. Dorota Rabczuk

Technika mikroprocesorowa laboratorium. dr inż. Dorota Rabczuk Technika mikroprocesorowa laboratorium dr inż. Dorota Rabczuk Features High Performance, Low Power AVR 8-Bit Microcontroller Advanced RISC Architecture 131 Powerful Instructions Most Single Clock Cycle

Bardziej szczegółowo

Struktura i działanie jednostki centralnej

Struktura i działanie jednostki centralnej Struktura i działanie jednostki centralnej ALU Jednostka sterująca Rejestry Zadania procesora: Pobieranie rozkazów; Interpretowanie rozkazów; Pobieranie danych Przetwarzanie danych Zapisywanie danych magistrala

Bardziej szczegółowo

Przerwanie. Źródła przerwań

Przerwanie. Źródła przerwań Podstawy systemów mikroprocesorowych Wykład nr 3 Przerwania i liczniki dr Piotr Fronczak http://www.if.pw.edu.pl/~agatka/psm.html fronczak@if.pw.edu.pl Przerwanie Warunek lub zdarzenie, które przerywa

Bardziej szczegółowo

Zespół Szkół Technicznych. Badanie wyświetlaczy LCD

Zespół Szkół Technicznych. Badanie wyświetlaczy LCD Zespół Szkół Technicznych Badanie wyświetlaczy LCD WYŚWIETLACZE LCD CZĘSC TEORETYCZNA ZALETY: ) mały pobór mocy, 2) ekonomiczność pod względem zużycia energii (pobór prądu przy 5V mniejszy niż 2mA), 3)

Bardziej szczegółowo

Inż. Kamil Kujawski Inż. Krzysztof Krefta. Wykład w ramach zajęć Akademia ETI

Inż. Kamil Kujawski Inż. Krzysztof Krefta. Wykład w ramach zajęć Akademia ETI Inż. Kamil Kujawski Inż. Krzysztof Krefta Wykład w ramach zajęć Akademia ETI Metody programowania Assembler Język C BASCOM Assembler kod maszynowy Zalety: Najbardziej efektywny Intencje programisty są

Bardziej szczegółowo

PROGRAMOWALNE SYSTEMY MECHATRONIKI

PROGRAMOWALNE SYSTEMY MECHATRONIKI PROGRAMOWALNE SYSTEMY MECHATRONIKI Laboratorium nr 5 Podstawy programowania mikrokontrolerów. Przerwania. 1. System przerwań informacje ogólne Programy sterujące mikrokontrolerów rzadko mają postać listy

Bardziej szczegółowo

1. Tworzenie nowego projektu.

1. Tworzenie nowego projektu. Załącznik do Instrukcji 1. Tworzenie nowego projektu. Wybieramy opcję z menu głównego New->QNX C Project. Wprowadzamy nazwę przechodzimy do następnego kroku NEXT. Wybieramy platformę docelową oraz warianty

Bardziej szczegółowo

Programowanie w językach asemblera i C

Programowanie w językach asemblera i C Programowanie w językach asemblera i C Mariusz NOWAK Programowanie w językach asemblera i C (1) 1 Dodawanie dwóch liczb - program Napisać program, który zsumuje dwie liczby. Wynik dodawania należy wysłać

Bardziej szczegółowo

Systemy wbudowane. Uniwersytet Łódzki Wydział Fizyki i Informatyki Stosowanej. Witold Kozłowski

Systemy wbudowane. Uniwersytet Łódzki Wydział Fizyki i Informatyki Stosowanej. Witold Kozłowski Uniwersytet Łódzki Wydział Fizyki i Informatyki Stosowanej Systemy wbudowane Witold Kozłowski Zakład Fizyki i Technologii Struktur Nanometrowych 9-236 Łódź, Pomorska 49/53 https://std2.phys.uni.lodz.pl/mikroprocesory/

Bardziej szczegółowo

Instrukcja do ćwiczeń

Instrukcja do ćwiczeń Instrukcja do ćwiczeń SYSTEMY WBUDOWANE Lab. 3 Przetwornik ADC + potencjometr 1. Należy wejść na stronę Olimexu w celu znalezienia zestawu uruchomieniowego SAM7-EX256 (https://www.olimex.com/products/arm/atmel/sam7-ex256/).

Bardziej szczegółowo

Mikrokontroler AVR ATmega32 - wykład 9

Mikrokontroler AVR ATmega32 - wykład 9 SWB - Mikrokontroler AVR ATmega32 - wykład 9 asz 1 Mikrokontroler AVR ATmega32 - wykład 9 Adam Szmigielski aszmigie@pjwstk.edu.pl SWB - Mikrokontroler AVR ATmega32 - wykład 9 asz 2 CechyµC ATmega32 1.

Bardziej szczegółowo

Laboratorium Systemów wbudowanych Wyższa Szkoła Zarządzania i Bankowości, Informatyka studia inżynierskie

Laboratorium Systemów wbudowanych Wyższa Szkoła Zarządzania i Bankowości, Informatyka studia inżynierskie Laboratorium Systemów wbudowanych Wyższa Szkoła Zarządzania i Bankowości, Informatyka studia inżynierskie Ćwiczenie nr l Podstawy programowania mikrokontrolerów rodziny AVR8 opracował dr inż. Wojciech

Bardziej szczegółowo

Systemy Wbudowane. Arduino, AVR. Arduino. Arduino. Arduino. Oprogramowanie. Mikrokontroler. Mikrokontroler Platforma Arduino. Arduino IDE: Arduino C:

Systemy Wbudowane. Arduino, AVR. Arduino. Arduino. Arduino. Oprogramowanie. Mikrokontroler. Mikrokontroler Platforma Arduino. Arduino IDE: Arduino C: Mikrokontroler Platforma Systemy Wbudowane IDE:, AVR mgr inż. Marek Wilkus Wydział Inżynierii Metali i Informatyki Przemysłowej AGH Kraków Mikrokontroler AVR Uno Środowisko Terminal Uruchamianie http://home.agh.edu.pl/~mwilkus

Bardziej szczegółowo

Server setup. #include <SPI.h> #include <Ethernet.h> boolean incoming = 0;

Server setup. #include <SPI.h> #include <Ethernet.h> boolean incoming = 0; Server setup #include #include boolean incoming = 0; byte mac[] = 0x00, 0xAA, 0xBB, 0xCC, 0xDA, 0x02 ; IPAddress ip(192,168, 0, 230); EthernetServer server(80); void setup() pinmode(2,

Bardziej szczegółowo

Obsługa przetwornika ADC na mikrokontrolerze ATmega8 CEZARY KLIMASZ OBSŁUGA PRZETWORNIKA ADC NA MIKROKONTROLERZE ATMEGA8

Obsługa przetwornika ADC na mikrokontrolerze ATmega8 CEZARY KLIMASZ OBSŁUGA PRZETWORNIKA ADC NA MIKROKONTROLERZE ATMEGA8 OBSŁUGA PRZETWORNIKA ADC NA MIKROKONTROLERZE ATMEGA8 Opracowanie zawiera treści różnych publikacji takich jak: książki, datasheety, strony internetowe Cezary Klimasz Kraków 2008 1 Spis treści 1. Wprowadzenie...

Bardziej szczegółowo

Mikroprocesory i Mikrosterowniki Laboratorium

Mikroprocesory i Mikrosterowniki Laboratorium Laboratorium Ćwiczenie 4 Magistrala SPI Program ćwiczenia: konfiguracja transmisji danych między mikrokontrolerem a cyfrowym czujnikiem oraz sterownikiem wyświetlaczy 7-segmentowych przy użyciu magistrali

Bardziej szczegółowo

Wstęp...9. 1. Architektura... 13

Wstęp...9. 1. Architektura... 13 Spis treści 3 Wstęp...9 1. Architektura... 13 1.1. Schemat blokowy...14 1.2. Pamięć programu...15 1.3. Cykl maszynowy...16 1.4. Licznik rozkazów...17 1.5. Stos...18 1.6. Modyfikowanie i odtwarzanie zawartości

Bardziej szczegółowo

Systemy wbudowane. Uniwersytet Łódzki Wydział Fizyki i Informatyki Stosowanej. Witold Kozłowski

Systemy wbudowane. Uniwersytet Łódzki Wydział Fizyki i Informatyki Stosowanej. Witold Kozłowski Uniwersytet Łódzki Wydział Fizyki i Informatyki Stosowanej Systemy wbudowane Witold Kozłowski Zakład Fizyki i Technologii Struktur Nanometrowych 90-236 Łódź, Pomorska 149/153 https://std2.phys.uni.lodz.pl/mikroprocesory/

Bardziej szczegółowo

Mikroprocesory i Mikrosterowniki

Mikroprocesory i Mikrosterowniki Mikroprocesory i Mikrosterowniki Wykład 1 Wydział Elektroniki Mikrosystemów i Fotoniki dr inż. Piotr Markowski Na prawach rękopisu. Na podstawie dokumentacji ATmega8535, www.atmel.com. Konsultacje Pn,

Bardziej szczegółowo

Wbudowane układy peryferyjne cz. 1 Wykład 7

Wbudowane układy peryferyjne cz. 1 Wykład 7 Wbudowane układy peryferyjne cz. 1 Wykład 7 Wbudowane układy peryferyjne UWAGA Nazwy rejestrów i bitów, ich lokalizacja itd. odnoszą się do mikrokontrolera ATmega32 i mogą być inne w innych modelach! Ponadto

Bardziej szczegółowo

Metody obsługi zdarzeń

Metody obsługi zdarzeń SWB - Przerwania, polling, timery - wykład 10 asz 1 Metody obsługi zdarzeń Przerwanie (ang. Interrupt) - zmiana sterowania, niezależnie od aktualnie wykonywanego programu, spowodowana pojawieniem się sygnału

Bardziej szczegółowo

XMEGA. Warsztaty CHIP Rok akademicki 2014/2015

XMEGA. Warsztaty CHIP Rok akademicki 2014/2015 XMEGA Warsztaty CHIP Rok akademicki 2014/2015 Plan warsztatów: Wprowadzenie do Atmel Studio (20/11/2014) Porty I/O (20/11/2014) Przerwania (27/11/2014) Wykorzystana literatura: [1] Dokumentacja ATMEL(www.atmel.com):

Bardziej szczegółowo

Kurs Zaawansowany S7. Spis treści. Dzień 1

Kurs Zaawansowany S7. Spis treści. Dzień 1 Spis treści Dzień 1 I Konfiguracja sprzętowa i parametryzacja stacji SIMATIC S7 (wersja 1211) I-3 Dlaczego powinna zostać stworzona konfiguracja sprzętowa? I-4 Zadanie Konfiguracja sprzętowa I-5 Konfiguracja

Bardziej szczegółowo

Uczeń/Uczennica po zestawieniu połączeń zgłasza nauczycielowi gotowość do sprawdzenia układu i wszystkich połączeń.

Uczeń/Uczennica po zestawieniu połączeń zgłasza nauczycielowi gotowość do sprawdzenia układu i wszystkich połączeń. Nazwa implementacji: Termometr cyfrowy - pomiar temperatury z wizualizacją pomiaru na wyświetlaczu LCD Autor: Krzysztof Bytow Opis implementacji: Wizualizacja działania elementu zestawu modułu-interfejsu

Bardziej szczegółowo

/* dołączenie pliku nagłówkowego zawierającego deklaracje symboli dla wykorzystywanego mikrokontrolera */ #include <aduc834.h>

/* dołączenie pliku nagłówkowego zawierającego deklaracje symboli dla wykorzystywanego mikrokontrolera */ #include <aduc834.h> Szablon programu: /* dołączenie pliku nagłówkowego zawierającego deklaracje symboli dla wykorzystywanego mikrokontrolera */ #include /* opcjonalne: deklaracja typów o rozmiarze jednego i dwóch

Bardziej szczegółowo

Technika Mikroprocesorowa Laboratorium 5 Obsługa klawiatury

Technika Mikroprocesorowa Laboratorium 5 Obsługa klawiatury Technika Mikroprocesorowa Laboratorium 5 Obsługa klawiatury Cel ćwiczenia: Głównym celem ćwiczenia jest nauczenie się obsługi klawiatury. Klawiatura jest jednym z urządzeń wejściowych i prawie zawsze występuje

Bardziej szczegółowo

Charakterystyka mikrokontrolerów. Przygotowali: Łukasz Glapiński, Mateusz Kocur, Adam Kokot,

Charakterystyka mikrokontrolerów. Przygotowali: Łukasz Glapiński, Mateusz Kocur, Adam Kokot, Charakterystyka mikrokontrolerów Przygotowali: Łukasz Glapiński, 171021 Mateusz Kocur, 171044 Adam Kokot, 171075 Plan prezentacji Co to jest mikrokontroler? Historia Budowa mikrokontrolera Wykorzystywane

Bardziej szczegółowo

1. Wprowadzenie Programowanie mikrokontrolerów Sprzęt i oprogramowanie... 33

1. Wprowadzenie Programowanie mikrokontrolerów Sprzęt i oprogramowanie... 33 Spis treści 3 1. Wprowadzenie...11 1.1. Wstęp...12 1.2. Mikrokontrolery rodziny ARM...13 1.3. Architektura rdzenia ARM Cortex-M3...15 1.3.1. Najważniejsze cechy architektury Cortex-M3... 15 1.3.2. Rejestry

Bardziej szczegółowo

Organizacja pamięci VRAM monitora znakowego. 1. Tryb pracy automatycznej

Organizacja pamięci VRAM monitora znakowego. 1. Tryb pracy automatycznej Struktura stanowiska laboratoryjnego Na rysunku 1.1 pokazano strukturę stanowiska laboratoryjnego Z80 z interfejsem częstościomierza- czasomierz PFL 21/22. Rys.1.1. Struktura stanowiska. Interfejs częstościomierza

Bardziej szczegółowo

Uniwersalny asynchroniczny. UART Universal Asynchronous Receier- Transmiter

Uniwersalny asynchroniczny. UART Universal Asynchronous Receier- Transmiter UART Universal Asynchronous Receier- Transmiter Cel projektu: Zbudowanie układu transmisji znaków z komputera na wyświetlacz zamontowany na płycie Spartan-3AN, poprzez łacze RS i program TeraTerm. Laboratorium

Bardziej szczegółowo

Ćwiczenie 7 Matryca RGB

Ćwiczenie 7 Matryca RGB IMiO PW, LPTM, Ćwiczenie 7, Matryca RGB -1- Ćwiczenie 7 Matryca RGB IMiO PW, LPTM, Ćwiczenie 7, Matryca RGB -2-1. Cel ćwiczenia Celem ćwiczenia jest zapoznanie się z inną oprócz RS - 232 formą szeregowej

Bardziej szczegółowo

Spis treœci. Co to jest mikrokontroler? Kody i liczby stosowane w systemach komputerowych. Podstawowe elementy logiczne

Spis treœci. Co to jest mikrokontroler? Kody i liczby stosowane w systemach komputerowych. Podstawowe elementy logiczne Spis treści 5 Spis treœci Co to jest mikrokontroler? Wprowadzenie... 11 Budowa systemu komputerowego... 12 Wejścia systemu komputerowego... 12 Wyjścia systemu komputerowego... 13 Jednostka centralna (CPU)...

Bardziej szczegółowo

Układy czasowo-licznikowe w systemach mikroprocesorowych

Układy czasowo-licznikowe w systemach mikroprocesorowych Układy czasowo-licznikowe w systemach mikroprocesorowych 1 W każdym systemie mikroprocesorowym znajduje zastosowanie układ czasowy lub układ licznikowy Liczba liczników stosowanych w systemie i ich długość

Bardziej szczegółowo

Mikroprocesory i Mikrosterowniki Analog-Digital Converter Konwerter Analogowo-Cyfrowy

Mikroprocesory i Mikrosterowniki Analog-Digital Converter Konwerter Analogowo-Cyfrowy Mikroprocesory i Mikrosterowniki Analog-Digital Converter Konwerter Analogowo-Cyfrowy Wydział Elektroniki Mikrosystemów i Fotoniki dr inż. Piotr Markowski Na prawach rękopisu. Na podstawie dokumentacji

Bardziej szczegółowo

Akademia Górniczo-Hutnicza w Krakowie Katedra Elektroniki

Akademia Górniczo-Hutnicza w Krakowie Katedra Elektroniki Akademia Górniczo-Hutnicza w Krakowie Katedra Elektroniki Laboratorium mikrokontrolerów Ćwiczenie 7 Przerwania Autor: Paweł Russek Tłumaczenie: Sebastian Koryciak http://www.fpga.agh.edu.pl/tm ver. 25.05.16

Bardziej szczegółowo

2.1 Porównanie procesorów

2.1 Porównanie procesorów 1 Wstęp...1 2 Charakterystyka procesorów...1 2.1 Porównanie procesorów...1 2.2 Wejścia analogowe...1 2.3 Termometry cyfrowe...1 2.4 Wyjścia PWM...1 2.5 Odbiornik RC5...1 2.6 Licznik / Miernik...1 2.7 Generator...2

Bardziej szczegółowo

Gdzie przyjęto, że: IR7...IR4 to starsze bity przesyłanej danej lub rozkazu, IR3...IR0 to młodsze bity przesyłanej danej lub rozkazu.

Gdzie przyjęto, że: IR7...IR4 to starsze bity przesyłanej danej lub rozkazu, IR3...IR0 to młodsze bity przesyłanej danej lub rozkazu. Temat: Obsługa wyświetlacza LCD systemie STRC51. Ćwiczenie 5. (sd) 1.Wyświetlacz LCD. 1.1.Zasada pracy wyświetlaczy LCD i kody sterujące. Standardem na rynku wyświetlaczy LCD alfanumerycznych, są moduły

Bardziej szczegółowo