Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
OpublikowałZbigniew Głowacki Został zmieniony 8 lat temu
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
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)
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.