Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

POLITECHNIKA POZNAŃSKA WBMiZ Zakład Urządzeń Mechatronicznych STEROWNIKI URZĄDZEŃ MECHATRONICZNYCH

Podobne prezentacje


Prezentacja na temat: "POLITECHNIKA POZNAŃSKA WBMiZ Zakład Urządzeń Mechatronicznych STEROWNIKI URZĄDZEŃ MECHATRONICZNYCH"— Zapis prezentacji:

1 POLITECHNIKA POZNAŃSKA WBMiZ Zakład Urządzeń Mechatronicznych STEROWNIKI URZĄDZEŃ MECHATRONICZNYCH GRZEGORZ.PITTNER@PUT.POZNAN.PL www.zum.put.poznan.pl

2 GPIO

3 General Purpose Input / Output Jest to podstawowe peryferium służące do komunikacji MCU z układami zewnętrznymi. GPIO może być wejściem lub wyjściem sygnału. GPIO jest urządzeniem cyfrowym ( 0 / 1). Spotykane są GPIO w standardzie: – TTL (0 – 5 V), – CMOS (0 – 3.3 V).

4 Budowa GPIO

5 Oznaczenia GPIO GPIO w mikrokontrolerze podzielone są na grupy logiczne zwane PORT. Pojedynczą nóżkę GPIO nazywamy pinem Porty znakowane są literami A,B,C… np.: PORTA, PORTB, itd… Piny są numerowane od 0 do 7 (dla MCU 8 bit) Aby zaadresować GPIO podaje się port i numer pinu np.: PORTA, pin1 lub prościej PA1 (czyli druga nóżka portu A)

6 GPIO Aby sterować GPIO ustawia się rejestry konfiguracyjne Rejestry konfiguracyjne dla 8 bitowych MCU są 8 bitowymi zmiennymi (unsigned char) W języku GCC zapis rejestru wygląda następująco: – Binarnie: REJESTR=0b00000010; – Decymalnie: REJESTR=10; – Heksadecymalnie: REJESTR=0x10;

7 DDRx: Rejestr kierunkowy 0 na danej pozycji rejestru oznacza, że odpowiadający pin jest traktowany jako WEJŚCIE 1 na danej pozycji rejestru oznacza, że odpowiadający pin jest traktowany jako WYJŚCIE DDRC=0b00011000; software:

8 Budowa GPIO

9 PORTx – rejestr WYJŚCIA 0 na danej pozycji rejestru oznacza, że odpowiadający pin ustawiony w stan logicznego 0 (potencjał 0[V]) 1 na danej pozycji rejestru oznacza, że odpowiadający pin ustawiony w stan logicznego 1 (potencjał 5[V]) software:

10 Budowa GPIO

11 PINx – rejestr WEJŚCIA Uwaga! Nazwa rejestru PINx może być mylona ze słowem „pin” opisującego potocznie „nóżkę” układu scalonego w j. ang. Jest to rejestr tylko do odczytu. 0 na danej pozycji rejestru oznacza, że przez odpowiadający pin nie płynie prąd. 1 na danej pozycji rejestru oznacza, że przez odpowiadający pin płynie prąd. software:

12 Podłączenie WYJŚCIA Maksymalna obciążalność prądowa GPIO jest ograniczona (dla ATmega128 wynosi 15-50mA w zależności od wersji i sposobu pracy) Suma wszystkich prądów mikrokontrolera ATmaga128 nie może przekroczyć wartości podanej przez producenta (ok. 150-250mA dla ATmega128 w zależności od wersji i sposobu pracy) hardware: PA1 PA2 GND +5V R R PORTA=0b00000010; PORTA=0b00000100; PORTA=0b00000000; PORTA=0b00000110; D1 D2

13 Maksymalna obciążalność prądowa GPIO jest ograniczona. 1Pin należy podłączyć tak aby prąd przepływał bądź aby był uziemiony Istnieje kilka możliwych rozwiązań – Pull-up zewnętrzny – Pull-up wewnętrzny – Pull-down zewnętrzny – Pull-down wewnętrzny – Floating Na potrzeby zajęć będziemy używać jedynie podłączenia „pull-up zewnętrzny” hardware: Podłączenie WEJŚCIA PA3 R +5V GND

14 Budowa GPIO

15 PA3 R +5V GND PA3 R +5V GND R wew. R≈0

16 Jeśli GPIO jest wejściem i ustawimy rejestr PORTx na odpowiedniej pozycji w stan 1 to załączony zostanie pull-up wewnętrzny.

17 PA3 R +5V GND

18

19 Przykład: przycisk + LED Hardware: PA2 GND R D1 PB3 R +5V GND Software: void main(void) { DDRA=0b00000100; DDRB=0; PORTA=0b00000000; PORTB=0b00000000; while(1) { if(PINB!=0) PORTA=0b00000100; else PORTA=0b00000000; } SW1

20 Maski bitowe &iloczyn bitowy |suma bitowa ~negacja ^XOR >>przesuwanie bitowe w prawo <<przesuwanie bitowe w lewo

21 & (iloczyn) Bitowo: X & Y = Z X00010010 Y00001010 Z00000010 18dec 10dec 2dec Bitowo: 18 & 10 = 2 Logicznie: 18 && 10 = 1 (prawda i prawda = prawda)

22 | (suma) Bitowo: X | Y = Z X00010001 Y00001001 Z00011001 17dec 9dec 25dec Bitowo: 17 | 9 = 25 Logicznie: 17 || 9 = 1 (prawda lub prawda = prawda)

23 ~ (negacja) Bitowo: ~X X00010001 ~X11101110 17dec 238dec Bitowo: ~17=238 Logicznie: !17 =0 (nie prawda = fałsz)

24 ^ (XOR) Bitowo: X ^ Y = Z X00010001 Y00001001 Z00011000 17dec 9dec 12dec Bitowo: 17 ^ 9 = 12 Logicznie: brak odpowiednika w języku ANSI C

25 > Bitowo: X<<Y = Z X10010001 Y00000010 Z01000100 145dec 2dec 68dec Bitowo: 145<<2=145*4=580=68 (przepełnienie unsigned char)

26 Dostęp bitowy PORTA=0b00001000;//ustawia cały port PORTA=(1<<3);//ustawia cały port PORTA=PORTA|(1<<3);//ustawia jeden pin PORTA|=(1<<3);//prościej PORTA&=(1<<3); PORTA&=~(1<<3);dobrze//kasuje pin PORTA^=0xFF;//neguje cały port PORTA^=0b00001111;//neguje 4 piny źle//nie kasuje pinu

27 Przykład 2 Hardware: PA1 GND R D1 PA0 R +5V GND Software: void main(void) { DDRA=0b00000110; //we/wy PORTA=0b00000000; //stan pocz. while(1) { //pętla główna if(PINA&0b00000001==1) //warunek we. { //jeśli prawda PORTA|=(1<<1); //ustaw 1 na poz. 1 PORTA&=~(1<<2); //ustaw 0 na poz 2 } else { //jeśli fałsz PORTA&=~(1<<1); //ustaw 0 na poz. 1 PORTA|=(1<<2); //ustaw 1 na poz. 2 } SW1 PA2 GND R D2

28 ułatwienie Zapis „PINA&0b00000001” można zastąpić w języku GCC komendą: bit_is_set(REJESTR,POZYCJA) Np.. If(bit_is_set(PINA,0)) {…} Dostępna jest też komenda bit_is_clear(REJESTR,POZYCJA) Komendy te znajdują się w bibliotece #include

29 Przykład 2 Hardware: PA1 GND R D1 PA0 R +5V GND Software: #include void main(void) { DDRA=0b00000110; //we/wy PORTA=0b00000000; //stan pocz. while(1) { //pętla główna if(bit_is_set(PINA,0)) //warunek we. { //jeśli prawda PORTA|=(1<<1); //ustaw 1 na poz. 1 PORTA&=~(1<<2); //ustaw 0 na poz 2 } else { //jeśli fałsz PORTA&=~(1<<1); //ustaw 0 na poz. 1 PORTA|=(1<<2); //ustaw 1 na poz. 2 } SW1 PA2 GND R D2

30 Synchronizacja wejścia

31 Synchronizacja wyjścia

32 Funkcje alternatywne

33 zwłoka

34 Pytania? www.zum.put.poznan.pl

35 Dziękuję (lista)


Pobierz ppt "POLITECHNIKA POZNAŃSKA WBMiZ Zakład Urządzeń Mechatronicznych STEROWNIKI URZĄDZEŃ MECHATRONICZNYCH"

Podobne prezentacje


Reklamy Google