350 likes | 519 Views
POLITECHNIKA POZNAŃSKA. STEROWNIKI URZĄDZEŃ MECHATRONICZNYCH LAB. WBMiZ Zakład Urządzeń Mechatronicznych. GRZEGORZ.PITTNER@PUT.POZNAN.PL. Urządzenia mechatroniczne. Mechanika. Elektronika. ?. Co nimi steruje?. Co to jest mikrokontroler?. Co to jest mikroprocesor?. 0 1. ?. 0 1.
E N D
POLITECHNIKA POZNAŃSKA STEROWNIKI URZĄDZEŃ MECHATRONICZNYCH LAB WBMiZZakład Urządzeń Mechatronicznych GRZEGORZ.PITTNER@PUT.POZNAN.PL
Urządzenia mechatroniczne Mechanika Elektronika ?
Co to jest mikroprocesor? 0 1 ? 0 1 ?
Co to jest mikroprocesor? • Mikroprocesor przetwarza sygnały wejścia na sygnały wyjścia według wcześniej zdefiniowanego programu • Sam mikroprocesor jest zdolny jedynie do cyfrowych operacji logicznych, nie jest on zdolny do sterowania maszynami mechanicznymi ani nie cyfrowymi układami elektronicznymi • Aby mikroprocesor mógł sterować maszyną należy doposażyć go w tzw. peryferia • Mikroprocesor + peryferia = mikrokontroler
Standardowe peryferia wewnętrzne mikrokontrerów • Zegar wewnętrzny (generator RC) • GPIO • TIMER/COUNTER • INT (zwane także EXTI) • ADC • PWM • Pamięć RAM • Pamięć Flash • Pamięć EEPROM • Interface’y komunikacyjne (SPI, UART, USART, I2C, CAN) • Watchdog • DAC • I inne…
Harmonogram Laboratorium 0) Zajęcia organizacyjne • GPIO • INT (EXTI) • TIM/CNT • PWM • ADC • Kolokwium • www.zum.put.poznan.pl
Ocena • Wejściówki: • mogą pojawić się na każdym ćwiczeniu w formie ustnej bądź pisemnej • Osoba, która z uwagi na nieobecność nie pisała wejściówki jest zobligowana do napisania jej w terminie późniejszym • Sprawozdania: • indywidualnie • Sprawozdanie jest przyjmowane, na „+”, na „-” bądź na „0”. • Plusy za aktywność oraz za samodzielność podczas ćwiczeń • Kolokwium końcowe z całości materiału poznanego na lab. • Ocena końcowa to średnia ważona ocen z wejściówek z wagą 1 oraz oceny z kolokwium z wagą 2 • W sytuacjach wyjątkowych dopuszczane jest zwolnienie z kolokwium na podstawie ocen z wejściówek i zebranych plusów z ćwiczeń.
Ocena c.d. • Nie możliwe jest ocenienie działania software’u bez wiedzy o działaniu hardware’u. Dlatego też prawidłowa odpowiedź na wejściówce bądź kolokwium musi zawierać pełne informacje o obu sferach aplikacji. • Na zajęciach obowiązuje podstawowa znajomość języka C (a ściślej ANSI C) • Na zajęciach programujemy w języku GCC.
Literatura: Wydawnictwo BTC: • „Mikrokontrolery AVR ATmega w praktyce” • „Mikrokontrolery AVR w praktyce” • „Mikrokontrolery AVR - niezbędnik programisty” • „Mikrokontrolery dla początkujących” • „Sztuka programowania mikrokontrolerów AVR – podstawy” • „Sztuka programowania mikrokontrolerów AVR – przykłady”
MCU na zajęciach • 8 bit • Producent MCU: ATMEL • Rodzina MCU: AVR • Podrodzina MCU: ATmega • Model MCU: ATmega128 • Środowisko IDE: • AVR studio (freeware) • WinAVR : AVR-GCC for Windows (freeware) • Nota katalogowa • google:„ATmega128.pdf” • pobrać:„doc2467.pdf” (ENG, 386str.)
GPIO • General PurposeInput / Output • GPIO w mikrokontrolerze podzielone są na grupy logiczne zwane PORT • Pojedynczą nóżkę GPIO nazywamy PIN • Porty znakowane są literami np.: PORTA, PORTB, itd… • Piny są numerowane od 0 do 7 (dla MCU 8 bit) • Aby zaadresować GPIO podaje się port i pin np.: PORTA, pin1 lub prościej PA1 (czyli druga nóżka portu A) • GPIO może przyjąć jedynie 2 stany logiczne 0 lub 1 • Dla stanu 0 potencjał na danej nóżce wynosi 0[V], a dla stanu 1 potencjał wynosi 5[V] (wg. standardu TTL)
GPIO • Aby sterować GPIO ustawia się tzw. 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;
software: 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: 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: 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.
hardware: Podłączenie WYJŚCIA • Maksymalna obciążalność prądowa GPIO dla ATmega128 wynosi 40mA • Suma wszystkich prądów mikrokontrolera ATmaga128 nie może przekroczyć 200mA • PORTA=0b00000010; • PORTA=0b00000100; • PORTA=0b00000000; • PORTA=0b00000110; ? +5V R D1 PA1 PA2 R D2 GND
hardware: Podłączenie WEJŚCIA • Maksymalna obciążalność prądowa GPIO dla ATmega128 wynosi 40mA • Pin 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” +5V PA3 R GND
R Rwew. +5V +5V R R≈0 PA3 PA3 Rwew. GND GND
Przykład: przycisk + LED Software: voidmain(void) { DDRA=0b00000100; DDRB=0; • PORTA=0b00000000; • PORTB=0b00000000; • while(1) • { • if(PINB!=0) PORTA=0b00000100; • else PORTA=0b00000000; • } } Hardware: R D1 SW1 +5V PA2 PB3 R GND GND
Maski bitowe • & iloczyn bitowy • | suma bitowa • ~ negacja • ^ XOR • << przesuwanie bitowe w prawo • >> przesuwanie bitowe w lewo
& (iloczyn) Bitowo: X & Y = Z 18dec 10dec 2dec Bitowo: 18 & 10 = 2 Logicznie: 18 && 10 = 1 (prawda i prawda = prawda)
| (suma) Bitowo: X | Y = Z 17dec 9dec 25dec Bitowo: 17 | 9 = 25 Logicznie: 17 || 9 = 1 (prawda lub prawda = prawda)
~ (negacja) Bitowo: ~X 17dec 238dec Bitowo: ~17=238 Logicznie: !17 =0 (nie prawda = fałsz)
^ (XOR) Bitowo: X ^ Y = Z 17dec 9dec 12dec Bitowo: 17 ^ 9 = 12 Logicznie: brak odpowiednika w języku ANSI C
<< (przesuwanie bitowe) >> Bitowo: X<<Y = Z 145dec 2dec 68dec • Bitowo: • 145<<2=145*4=580=68 (przepełnienie unsigned char)
Dostęp bitowy • PORTA=0b000001000; //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
Przykład 2 Software: Hardware: voidmain(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 R R D1 D2 +5V PA0 PA1 PA2 R GND GND GND
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 <avr/io.h>
Przykład 2 Software: #include <avr/io.h> voidmain(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 • } • } } Hardware: SW1 R R D1 D2 +5V PA0 PA1 PA2 R GND GND GND
programowanie PC Program *.c biblioteki *.h kompilacja Kod maszynowy *.hex USB PCB MCU Programator JTAG lub ISP Pamięć FLASH Interface JTAG lub ISP
Pytania? www.zum.put.poznan.pl
dziękuję I proszę o sporządzenie listy osób wg poniższego przykładu