320 likes | 428 Views
Mikrovezérlők alkalmazástechnikája laboratóriumi gyakorlat ( lev ). Megszakítások Jelzőlámpa készítése. Makan Gergely, Mellár János, Mingesz Róbert, Boros Péter, Zana Roland. 2014. március 22. Tartalom. Timer használata Megszakításkezelés Feladatok. Timerek. Számlálók.
E N D
Mikrovezérlők alkalmazástechnikája laboratóriumi gyakorlat (lev) Megszakítások Jelzőlámpa készítése Makan Gergely, Mellár János, Mingesz Róbert, Boros Péter, Zana Roland 2014. március 22.
Tartalom • Timer használata • Megszakításkezelés • Feladatok
Számlálók • Négy 16-bites számláló • Különböző üzemmódok • Választható órajelforrások • Események számlálása • Periodikus események generálása • Idő-, frekvencia-, fázisszögmérés
8 bit auto reload mode TL0 TF0 • 8-bites számláló • TL0: kezdőérték • TH0: reload érték • Reload: TL0 túlcsordulásakor • Példa: • TL0=0, TH0=252; • Periódus: 0 0 t 1 0 255 0 252 1 253 1 4t 254 1 255 1 252 1 253 1 4t CLR TF0 254 0 255 0 252 1 253 1
Timer üzembe helyezése • Mikrovezérlő órajel beállítása (SYSCLK) • Üzemmód kiválasztása (8 bit auto reload) • Órajel forrás kiválasztása (SYSCLK/x) • Timer engedélyezése • Reload érték kiszámolása (TH0) • TL0 = TH0
Timer 2 (/Timer 3): Auto-reload • 16 bit-es • Periódus:
Timer 2 auto reload TMR2 =TMR2H*256 +TMR2L TMR2RL =TMR2RLH*256 +TMR2RLL TMR2RL 0 t TMR2RL+1 0 Nt 65534 0 Set TF2H (HW, interrupt) 65535 0 TMR2RL 1 TMR2RL+1 1 Nt Clear TF2H (SW) 65534 0 65535 0 TMR2RL TMR2RL 1 TMR2RL+1 1
Megszakítás idődiagramja • Események (megszakítások) kezelése a főprogram nem fut t t t t Utasítás #1 Utasítás #2 Utasítás #3 Megszakítási alprogram LCALL RETI esemény
Megszakításkezelő rutin voidtimermegszak(void) __interrupt INT_TIMER2 { TF2 = 0; // timerflag törlése maga a kód; } • INT_TIMER2: a 2. timer megszakításvektorának sorszáma (header file)
Timer megszakítás használata • Megszakításkezelő rutin definiálása ! • Timer megszakítás engedélyezése • Megszakítások globális engedélyezése
Tippek többszálú környezethez • Éhezés elkerülése • Gyorsan végrehajtódó megszakításrutinok • Hosszabb feldolgozások: fő szál • Elegendő processzorsebesség • Gyakoriság megfelelő kiválasztása • volatile változók: biztonságos használat többszálú környezetben
A kiegészítő áramkör kapcsolási rajza Mingesz Róbert
A kiegészítő áramkör panelterve Mingesz Róbert
Jegyzőkönyv készítése • Formátum megőrzése!(a fekete részek a hallgatói tartalom) • Csak a lényeges kódelemek beírásaA többi mellékletként (feladatonként): • C források • cwg fájlok
Kit üzembe helyezése • Jumperek ellenőrzése • Szalagkábel csatlakoztatása • USB kábel csatlakoztatása • AC/DC adapter csatlakoztatása • Kikapcsolás fordított sorrendben
1. feladat • LED1 villogtatása 0,5 Hz frekvenciával a Timer 2 használatával. • Válassza ki a megfelelő processzorsebesség és timer beállításokat. Részletezze a számolását! • Mérje pontosan a villogás frekvenciáját!
3. feladat • A kiegészítő panel megismerése. • LED-ek ki-be kapcsolása. • Mikor világít egy, a panelen lévő LED?
4. feladat • Jelzőlámpa készítése: • Zöld jelzés: 5 s • Sárga: 1 s • Keresztező forgalom irányítása • A feladatot egy timer rutin lássa el!
Tipp • Változó deklarálása, mely minden egyes timer megszakításnál növekszik • Megadott értékek esetén kimeneti konfiguráció megváltoztatása • Maximum elérésekor változó törlése
Laboratory practical with theC8051Fxxx microcontroller family, Authors: Zoltán Gingl and RóbertZoltán Mingesz, chapter 5.5 Hibaelhárítás
Timer-es időzítés Probléma: - A Timer nem fut vagy nem várt időzítés történik. Lehetséges okok: - A Timer nincs engedélyezve. - A Timer nem megfelelően van beállítva. - A bemenő órajel nem megfelelően van beállítva. - A Timer0 és a Timer1 lehet, hogy kapuzott (gate) módban van és a gate jel sosem lesz aktív. - AzSFR értékek el vannak számolva vagy nincsenek megfelelően beírva.
Timer-esidőzítés megszakítással Probléma : - A Timer nem fut vagy a megszakítási periódusidő értéke nem egyezik meg a várttal. Lehetséges okok : - A Timer nincs engedélyezve. - A kapcsolódó megszakítás nincs engedélyezve. - Az interruptflag nincs törölve ezért folyamatos megszakítás generálódik. Ebben az esetben szinte az összes processzoridő elmegy. - Egyéb megszakítás kezelő rutinok végrehajtása késleltetheti a timer megszakítást. - A megszakítás kezelő rutin végrehajtása több időt vehet igénybe, mint amennyi idő eltelik két megszakítás között; a túlcsordulási gyakoriság túl magas. - A timer-ekegyszerre többféle célra használhatóak és a beállítások eltérőek.