AVR ATmega128 mikrokontroller

Slides:



Advertisements
Hasonló előadás
C# nyelvi áttekintő A „Programozás C# nyelven (Illés Zoltán)”
Advertisements

1 Számítógépek felépítése 9. előadás I/O rendszerek.
ARM tanfolyam 1. előadás.
PIC mikrokontrollerek
A mikroprocesszor 1. rész.
Számítógépek felépítése 3. előadás CPU, utasítás ciklus, címzés
Small Liga Mozgás vezérlő rendszere
Az LCD kijelző programozása
9. előadás (2005. április 26.) Parancssor argumentum kezelés példák (K&R) Fordítóprogramok A C előfordító 1.
ATMEL AVR mikrokontroller család hardver-felépítése
PIC mikrovezérlők.
Rekurzió (Horváth Gyula és Szlávi Péter előadásai felhasználásával)
Bevezetés a Java programozásba
10. előadás (2004. április 20.) A C előfordító (folytatás) Néhány hasznos compiler opció Egy tanulságos könyvtári függvény Változó hosszúságú argumentum.
11. előadás (2005. május 10.) A make segédprogram Alacsony szintű műveletek és bitmezők Fájl, katalógus rendszer hívások 1.
Mikrovezérlők alkalmazástechnikája laboratóriumi gyakorlat Kovács Tamás & Mingesz Róbert 3. óra február 20., 23.
Mikrovezérlők, perifériák laboratóriumi gyakorlat
Ez a dokumentum az Európai Unió pénzügyi támogatásával valósult meg. A dokumentum tartalmáért teljes mértékben Szegedi Tudományegyetem vállalja a felelősséget,
Mérés és adatgyűjtés laboratóriumi gyakorlat Makan Gergely, Mingesz Róbert, Nagy Tamás 2. óra szeptember 9., 10. v
Ez a dokumentum az Európai Unió pénzügyi támogatásával valósult meg. A dokumentum tartalmáért teljes mértékben Szegedi Tudományegyetem vállalja a felelősséget,
A verem működése fpga-n
Alapfogalmak Adat: fogalmak, tények, jelenségek olyan formalizált ábrázolása, amely emberi vagy gépi értelmezésre, feldolgozásra, közlésre alkalmas. Információ:
Miskolci Egyetem Informatikai Intézet Általános Informatikai Tanszé k Pance Miklós Adatstruktúrák, algoritmusok előadásvázlat Miskolc, 2004 Technikai közreműködő:
Mikroszámítógépek I 8085 processzor.
Mikroszámítógépek I 8085 processzor.
PIC processzor és környezete
C++ Alapok, első óra Elemi típusok Vezérlési szerkezetek
A JAVA TECHNOLÓGIA LÉNYEGE Többlépcsős fordítás A JAVA TECHNOLÓGIA LÉNYEGE Platformfüggetlenség.
A PLC-s vezérlés előnyei és alkalmazásai (Mitsubishi)
A mikrovezérlők világa
Egy harmadik generációs gép (az IBM 360) felépítése
PHP I. Alapok. Mi a PHP? PHP Hypertext Preprocessor Szkriptnyelv –Egyszerű, gyors fejlesztés –Nincs fordítás (csak értelmező) Alkalmazási lehetőségek:
Címzési módok, utasítások a CPU-ban Címértelmezés műv. kódadat műv. kód 0 1 cím adat cím adat közvetlen (immediat) adatmegadás rejtett (inheritent),
A programozás alapjai A számítógép számára a feladat meghatá- rozását programozásnak nevezzük. Ha a processzor utasításait használjuk a feladat meghatározásához,
Mikrovezérlők, perifériák laboratóriumi gyakorlat 3. óra szeptember 18. Mingesz Róbert v
Számítógép architektúra
Atmega128 mikrokontroller programozása
Mikrokontroller (MCU, mikroC)
Programozási nyelvek.
Készítette: Csíki Gyula
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Hernyák Zoltán Programozási Nyelvek II.
Széchenyi Isván Egyetem Számítógépes hálózatok II 1 Számítógépes Hálózatok II Széchenyi István Egyetem.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 1. gyakorlat.
Java programozási nyelv Vezérlési szerkezetek
Egy második generációs gép (az IBM 7094) felépítése
Egy első generációs gép (az IAS) felépítése
A Mikroprocesszor Harmadik rész.
Objektum orientált programozás
Objektum orientált programozás
CUDA C/C++ programozás
A Visual Basic nyelvi elemei
Mikroprocesszor.
Írja fel a tizes számrendszerbeli
Mikroprocesszorok Működés.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 1. gyakorlat.
IT ALAPFOGALMAK HARDVER.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 1. gyakorlat.
HEFOP 3.3.1–P /1.0A projekt az Európai Unió társfinanszírozásával, az Európa terv keretében valósul meg. 1 Számítógép architektúrák dr. Kovács.
Excel programozás (makró)
Számítógépek felépítése 4. előadás ALU megvalósítása, vezérlő egység
1 Számítógépek felépítése 5. előadás a CPU gyorsítása, pipeline, cache Dr. Istenes Zoltán ELTE-TTK.
PIC mikrokontroller.
Z-80-s monitor program működésének aprólékos elemzése
A berendezés tervező korszerű eszköztára
Excel programozás (makró)
A programozható mikrokontroller
A Számítógépek felépítése, működési módjai
A Számítógépek felépítése, működési módjai
A Számítógépek felépítése, működési módjai
Előadás másolata:

AVR ATmega128 mikrokontroller BME VIK - Mérés laboratórium 2 1. mérés AVR ATmega128 mikrokontroller

BME VIK - Mérés laboratórium 2 A mérés célja Mikrokontrolleres környezet megismerése Jobb rálátás arra, mi zajlik a magasszintű programozási nyelvek „hátterében” Beágyazott alkalmazásfejlesztés módszereinek elsajátítása BME VIK - Mérés laboratórium 2

BME VIK - Mérés laboratórium 2 A mérés témái ATmega128 hardver ismertető Assembly bevezető Beágyazott specialitások I/O portok kezelése Megszakítások Időzítés Amikről nem beszélünk… De tudni kell!  Fejlesztőkörnyezet, szimuláció BME VIK - Mérés laboratórium 2

ATmega128 hardver ismertető CPU: 16 MHz (11 MHz a laborban használt paneleken) 133 RISC jellegű utasítás Általában 1 utasítás/ciklus, ha nem ugrás Mem: 128K Flash (program) 4K EEPROM + 4K belső SRAM (adat) 32 regiszter, 16 felsőnek kitüntetett szerep, 3 páros regiszter Perifériák: (mérőpanel-specifikus) LED, nyomógomb, kapcsoló, LCD, potméter, fényérzékelő, hőmérséklet-szenzor, UART, … Perifériakezelés: I/O reg. tartomány és memóriába ágyazott Sok I/O láb; némely kimenet alkalmas LED-ek közvetlen meghajtására, beépítése pl. FPGA-khoz képest könnyű További paraméterek: avr128-leir2.pdf (+389 oldalas adatlap) Harvard-architektúra BME VIK - Mérés laboratórium 2

BME VIK - Mérés laboratórium 2 ATmega128 mérőpanel TODO: új kép Mérőpanel-specifikus: AVR_ExperimentBoard_v103.pdf BME VIK - Mérés laboratórium 2

BME VIK - Mérés laboratórium 2 AVR blokkvázlat Harvard-architektúra BME VIK - Mérés laboratórium 2

Házi feladatot mindenki ellenőrizze otthon! ATmega128 programozása AVR: Atmel RISC processzorcsalád, ATmega128: AVR processzor 128K flash memóriával („Advanced Virtual RISC”) Fejlesztőkörnyezet: AVRStudio Assembly és C nyelv támogatott (utóbbi nem beépített: AVR-GCC, WinAVR) Hardverben történő felprogramozás (ISP, In System Programming) és debug (JTAG-ICE, In Circuit Emulation) Jó minőségű szimulációs felület (mikrokontroller + integrált perifériák) – kész hardver nélkül is elkezdhető a programozás Házi feladatot mindenki ellenőrizze otthon! (azokat a részeket, amiket lehet) BME VIK - Mérés laboratórium 2

BME VIK - Mérés laboratórium 2 AVRStudio IDE (IDE: Integrated Development Environment) Használata: avrst-haszn1.pdf + mérés 2. része BME VIK - Mérés laboratórium 2

BME VIK - Mérés laboratórium 2 A mérés témái ATmega128 hardver ismertető Assembly bevezető Beágyazott specialitások I/O portok kezelése Megszakítások Időzítés Amikről nem beszélünk… De tudni kell!  Fejlesztőkörnyezet, szimuláció BME VIK - Mérés laboratórium 2

Assembly kitérő (x86) – mekkora kód? BME VIK - Mérés laboratórium 2

Assembly kitérő (x86) – ekkora! S equ 0E5h ; like original org 100h ; assumes: ah=0 bx=0 cl>0 di=0FFFEh si=0100h mov al,13h ; (2) int 10h ; (2) lds bx,[bx] ; (2) bx=20CDh ds=9FFFh M: cmp [bx],cl ; (2) adc [bx],ah ; (2) if ([bx] < cl) [bx]++ (first pass increases) imul bx,byte S ; (3) pseudorandom generator: bx = S*bx-1 (works if S%4==1) mov cl,[bx] ; (2) we don't decrease bx yet add cl,[bx+di] ; (2) add cl,[bx-321] ; (4) add cl,[bx+si+63]; (3) cl = ([bx+1]+[bx-1]+[bx-320]+[bx+320]) & 0FFh dec bx ; (1) in al,60h ; (2) standard ESC check dec al ; (2) jnz M ; (2) ret ; (1) Lefordítva gépi kódra: 32 byte (Forrás: http://www.pouet.net/prod.php?which=28913) BME VIK - Mérés laboratórium 2

Assembly kitérő (x86) – C fordítás menete C nyelvű forráskód Előfeldolgozó (preprocessor) C forrás (makrók stb. behelyettesítve: #define; #include…) gcc –E prog.c Fordító (compiler) Assembly kód (architektúra-függő, optimalizált) gcc –S prog.c Assembler Tárgykód (Object code) Könyvtári függvények (libraries) Linker Futtatható állomány (.com, .exe, ELF…) BME VIK - Mérés laboratórium 2

BME VIK - Mérés laboratórium 2 Assembly bevezető Assembly = „összeszerelés” Alacsonyszintű programozási nyelv Architektúrafüggő (pl. x86, PPC, AVR…) C nyelv és gépi kód között – tömör és jól kiszámítható lefutású Alkalmazás: főként kis beágyazott rendszerek (pl. PIC, AVR) Nagyobb projektek: asm fejlesztés drága, rugalmatlan; C fordítók jól optimalizálnak Főként számításintenzív feladatokra, ott is ritkán (matematikai, grafikai) + reverse engineering (pl. programok feltörése) BME VIK - Mérés laboratórium 2

AVR assembly - regiszterek RISC utasításkészlet, load/store architektúra: egyszerű memóriamanipulációk a regiszterkészlet segítségével Regiszterkészlet: kiemelt fontosságú, 32 db 8 bites adat szinte minden művelet rajtuk keresztül zajlik 16 fölöttiek használhatók közvetlen műveletekhez Utolsó 3 pár kettősregiszterként (16 bit) is szolgál Pl: „rakj a LED-re 00110011 mintát”: 1. Tölts egy regiszterbe 00110011-et: ldi temp, 0b00110011 2. Add ki a kimenetre a regisztert: out PORTC, temp BME VIK - Mérés laboratórium 2

AVR assembly – speciális regiszterek Státuszregiszter (SREG) - flagek Carry, Zero, Global Interrupt Enable/Disable… Néhány utasítás automatikusan átbillentheti értéküket (aritmetikaiak), mások az értékük alapján adnak lehetőséget elágazásra – lásd az utasításkészletben buta megoldás: I/O címtartományban, emiatt interruptkezelő rutin elején státuszmentés: PUSH temp PUSH SREG helyett IN temp, SREG További információ: avr128-leir2.pdf, „Regiszterek” fejezet TODO: interruptrutin miatti mentés BME VIK - Mérés laboratórium 2

AVR assembly – speciális regiszterek Veremmutató (SP, Stack pointer) Szubrutinok visszatérési címeinek és megszakításkezelő rutin környezeti változóinak átmeneti tárolására (push, pop) Inicializálás RAM tetejére: 2 byte-os regiszter Utasításszámláló (PC, Program Counter) Aktuális utasítás címe CALL és megszakítás hatására verembe mentődik; RET és RETI innen tölti vissza a szubrutin ill. megszakításkezelő rutin végén ldi temp, LOW(RAMEND) out SPL, temp ldi temp, HIGH(RAMEND) out SPH, temp BME VIK - Mérés laboratórium 2

AVR assembly - utasítások utasítás (mnemonic) argumentumok (operandusok) ldi temp, 0xA5 ; 10100101 out PORTC, temp ; LEDre írás megjegyzés (nagyon fontos!) Utasítás-család pl: load, load immediate, load direct from SRAM… LD, LDI, LDS… BME VIK - Mérés laboratórium 2

AVR assembly - utasítások argumentumok ldi temp, 0xA5 ; 10100101 out PORTC, temp ; LEDre írás „hátulról előre” SREG Utasításkészlet: avr128-prog1.pdf + Instr_set.pdf + fejlesztőkörnyezet súgója BME VIK - Mérés laboratórium 2

AVR assembly - utasítástípusok aritmetikai és logikai utasítások elágazások és ugrások adatmozgató bitmódosító, bittesztelő utasítások TODO: ellenőrizni hogy helyes-e a felosztás BME VIK - Mérés laboratórium 2

AVR assembly – utasítások C jelleggel Aritmetikai és logikai Adatmozgató Bitműveletek, egyebek reg1=reg2 MOV reg=17 LDI reg=mem LDS reg=*mem LD mem=reg STS *mem=reg ST perifériáról IN perifériára OUT verembe PUSH veremből POP … a+b ADD a-b SUB a&b AND a|b OR a++ INC a-- DEC -a NEG a=0 CLR … a<<1 LSL a>>1 LSR, Ø C meg-felelő ROL, ROR státusz-bitek SEI, CLI, CLZ... Üres utasítás NOP … BME VIK - Mérés laboratórium 2

AVR assembly - ugróutasítások JMP: feltétel nélküli ugrás Végtelen ciklus pl.: CALL, RET: szubrutinhívás és visszatérés (PC bekerül a verembe) RETI: visszatérés interruptból Szubrutin: Hasonló C konstrukció: M_LOOP: …utasítások… jmp M_LOOP while (1) { ...utasítások... } M_LOOP: … CALL FV FV:…utasítások… RET void fv() { …utasítások… return; } void main () {… fv(); BME VIK - Mérés laboratórium 2

AVR assembly – feltételes elágazások egyenlőségvizsgálat A CPSE utasítás a „JMP L2”-t átugorja, ha a két operandus egyenlő - így pont L1-re érkezik. Az összetettebb feltételekhez rajzoljunk folyamatábrát, különben a mérésvezető sem fogja tudni követni! M_LOOP: ; compare, CPSE a, b ; skip if eq. JMP L2 L1:… ; a == b JMP M_LOOP L2:… ; a != b if (a==b) { (L1) } else { (L2) } BME VIK - Mérés laboratórium 2

AVR assembly – feltételes elágazások switch / case M_LOOP: .. CP ch, 65 ; compare->ZeroF BREQ L1 ; branch if eq. CP ch, 66 BREQ L2 ... JMP VEGE L1:… L2:… (JMP VEGE) VEGE: ... switch (ch) { case 'A': (L1) break; case 'B': (L2) } (VEGE) Figyelem! A BREQ maximálisan 64 byte távolságra alkalmazható! (Távolabbra pl. közbeiktatott JMP-vel.) BME VIK - Mérés laboratórium 2

AVR assembly – for ciklus több byte-os ciklusszámlálójú for ciklus: LDI temp0, 0x20 ; belső változó LDI temp1, 0x4E ; külső változó LOOP: ... DEC temp0 BRNE LOOP ; branch if !=0 DEC temp1 BRNE LOOP for (int a=0; i<20000; i++) { }; Megoldható 2 byte-os utasításokkal is (pl. SBIW vagy ADIW). BME VIK - Mérés laboratórium 2

AVR assembly – direktívák, egyebek .include "m128def.inc" az ATmega128 regisztereit és bitjeit specifikáló állomány beolvasása .def temp = r16 az r16-os regiszterre a továbbiakban temp-ként is hivatkozhatunk .equ tconst = 100 konstans érték definiálása .org $0046 az ezt a sort követő utasítás kezdőcíme a memóriában (pl. interrupt-táblának hely fenntartása a program elején) M_LOOP: címke ugróutasítások, elágazások számára BME VIK - Mérés laboratórium 2

BME VIK - Mérés laboratórium 2 A mérés témái ATmega128 hardver ismertető Assembly bevezető Beágyazott specialitások I/O portok kezelése Megszakítások Időzítés Amikről nem beszélünk… De tudni kell!  Fejlesztőkörnyezet, szimuláció BME VIK - Mérés laboratórium 2

Beágyazott specialitások I/O portok kezelése: LED, gomb, kapcsoló Megszakítások kezelése Időzítés + házi feladathoz (nem lesz róluk részletesen szó): pergésmentesítés (gombok) A/D konverzió (fény- és hőmérséklet-érzékelő, potméter) stamp2.asm: LCD kijelző UART (soros kommunikáció) memóriakezelés (EEPROM) SPI, PWM kimenet, … BME VIK - Mérés laboratórium 2

BME VIK - Mérés laboratórium 2 I/O portok kezelése Portonként 3 I/O regiszter, bitenként szabályozható DDRx: irány (1: ki, 0: be) PORTx: DDR=ki esetén ide írjuk a kimeneti adatot DDR=be esetén itt szabályozzuk a bemeneti felhúzó ellenállást/lebegést PINx: a kimeneti port aktuális értéke DDR=ki esetén 1 órajel késéssel PORTx DDR=be esetén a bemeneti adat IN, OUT utasítással (kivéve: kapcsolók, ezekre LDS, STS – memóriába ágyazott) BME VIK - Mérés laboratórium 2

BME VIK - Mérés laboratórium 2 I/O portok kezelése irány DDRx DDRx értéke kimeneti érték / bemenet felhúzása PORTx PORTx értéke PINx (ki/)bemeneti érték BME VIK - Mérés laboratórium 2

BME VIK - Mérés laboratórium 2 I/O portok kezelése LED-ek bekapcsolása: ldi temp, 0xff ; 8 bites LED kimenet out DDRC, temp out PORTC, temp ; LED-ek bekapcsolása Kapcsolók beolvasása: ldi temp, 0xFF sts PORTG, temp ; nem tri-state ldi temp, 0xEB ; csak a kapcsoló-biteket olvassuk sts DDRG, temp ; bemenet lds temp, PING ; kapcsolók allapotanak beolvasasa LDS/STS csak a kapcsolóknál kell, többi IN/OUT. A SW2 PING 4. bitjére van kötve a 2. helyett. A nyomógombok nem pergésmentesítettek! BME VIK - Mérés laboratórium 2

I/O portok kezelése - további infók bekötések az AVR_ExperimentBoard_v103.pdf alapján minta-programváz fejlécében a lényegesebb regiszterek felsorolva avr128-leir2.pdf-ben a portok kezelése részletesebben excel állomány a lábkiosztással (+ m128def.inc-ben megtalálhatóak az I/O műveletekre definiált regiszterek) BME VIK - Mérés laboratórium 2

Megszakítások kezelése Egyszintű, egyszerű interruptrendszer Beérkező interrupt törli a globális megszakításengedélyező flaget, interruptból visszatérés (RETI) engedélyezi – nem kell még egyszer törölni / engedélyezni a rutinon belül! Megszakítási ugrótáblába (v. vektortábla) bejegyezzük megszakításkezelőnket Megszakítások egyedi engedélyezése, pl. interrupt control regiszter + interrupt maszk: EICRB, EIMSK (gombok esetén) SEI utasítást ki kell adnunk a megszakítások globális engedélyezéséhez Megszakításkezelő rutinban a státuszregisztert és minden más használt regisztert el kell menteni, visszatéréskor pedig engedélyezni BME VIK - Mérés laboratórium 2

Megszakítási vektortábla .org $0000 ; Define start of Code segment jmp RESET ; Reset Handler, jmp is 2 word instruction reti ; INT0 Handler on $0002, dummy nop reti ; INT1 Handler, if INTn used, 'reti' and 'nop' ; will be replaced by 'jmp INTn_Handler_Address' reti ; INT2 Handler ... reti ; Timer1 Compare Match B Handler reti ; Timer1 Overflow Handler reti reti ; Timer0 Overflow Handler .org $0046 ; MAIN program... jmp TIMER_IT; Timer0 Compare Match Handler BME VIK - Mérés laboratórium 2

Megszakításkezelő rutin TIMER_IT: ; nem kell CLI ; elmentjük a státusz és az átmeneti regiszert push temp in temp, SREG <...IT-kezelés...> ; visszaállítjuk a státusz és az átmeneti regiszert pop temp out SREG, temp ; nem kell SEI reti ; visszatérünk SREG mentése arra az esetre, ha az összehasonlítás és az azt követő elágazás között futna le az IT rutin BME VIK - Mérés laboratórium 2

BME VIK - Mérés laboratórium 2 Időzítés Időzítés, megszakítás használata nélkül: egymásba ágyazott ciklusok (16MHz-es órajel miatt a 8 bit kevés a számlálóhoz) timer counter folyamatos lekérdezése (itt is kell saját számláló) egyszerűbb őket megvalósítani, debugolni csúnya megoldások, alkalmatlanok pontos időzítésre Időzítő megszakítás használata időzítő prescaler (előosztó) értékét be kell állítani, hogy ne túl sűrűn érkezzen IT engedélyezni az időzítő megszakítást mintapélda a timer0-it.asm-ben számláló szükséges (prescaler: 1/1024) BME VIK - Mérés laboratórium 2

Időzítés megszakítással ; ***** Timer 0 inicializálása ***** ; előosztás (prescaler) beállítása ldi temp,0b00001111 ; 0....... ; FOC=0 ; .0..1... ; WGM=10 (clear timer on compare match) ; ..00.... ; COM=00 (kimenet tiltva) ; .....111 ; CS0=111 (CLK/1024) out TCCR0,temp ; Timer 0 TCCR0 regiszter ; compare regiszter beállítása ldi temp,108 ; 11059200Hz/1024 = 108*100 out OCR0,temp ; Timer 0 OCR0 regiszter ; Timer 0 IT engedélyezése, többiek tiltása ldi temp,0b00000010 ; 000000.. ; Timer2,1 IT tiltva ; ......1. ; OCIE0=1 - match ; .......0 ; TOIE0=0 - overflow out TIMSK,temp ; Timer IT Mask regiszter sei ; globális IT engedélyezve dokumentáció segítségével össze kell tudni állítani + tudni, melyik bit mit jelent pontos baudrate érdekében BME VIK - Mérés laboratórium 2

BME VIK - Mérés laboratórium 2 További tudnivalók... Kommentezés nélküli assembly kód nem fogadható el, még akkor se, ha tökéletes! A házi feladathoz áttekintő folyamatábrát kell készíteni Általában van benne megszakításkezelés A házi feladat komplexitása miatt a leszimulálható részek működőképessége otthon ellenőrzendő (egyszerű IT is szimulálható!) Közösen írt HF: a másik által írt részt is értsd és tudd bővíteni, ha szükséges; kiadásnál egyeztetni, hogy ki melyik részt csinálja stamp2.asm-ben sok olyan rutin, ami ötletet adhat a házihoz (LCD, UART, SW timer...) BME VIK - Mérés laboratórium 2

BME VIK - Mérés laboratórium 2 A mérés témái ATmega128 hardver ismertető Assembly bevezető Beágyazott specialitások I/O portok kezelése Megszakítások Időzítés Amikről nem beszélünk… De tudni kell!  Fejlesztőkörnyezet, szimuláció BME VIK - Mérés laboratórium 2

Szimulációval egybekötött fejlesztés Kiindulási alap: avrblank1.asm 1. feladat: LED-ek kigyújtása számlálóval 2. feladat: LED-ek vezérlése kapcsolóval 3. feladat: Kapcsolók sorbarendezése Minden lépésben ellenőrizni a várt működést szimulációval. BME VIK - Mérés laboratórium 2