Mikrovezérlők alkalmazástechnikája laboratóriumi gyakorlat
Makan Gergely, Mellár János, Mingesz Róbert
V 5.0 2015. február 9.
Timer és megszakítások használata
4
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
6
8 bit auto reload mode
• 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:
01
255252253254255252253254255252253
0t
4t
4t
TL0 TF0
0
01111110011
CLR TF0
7
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
9
Timer 2 auto reload
TMR2RLTMR2RL+1
65534
0t
Nt
0
0011
0011
65535TMR2RL
TMR2RL+1
6553465535
TMR2RLTMR2RL+1
Clear TF2H (SW)
TMR2=TMR2H*256+TMR2LTMR2RL=TMR2RLH*256+TMR2RLL
Nt
Set TF2H(HW, interrupt)
TMR2RL
11
Megszakításvektorok
Forrás Cím sorszám Flag A flag-et ahardver törli
Reset 0x0000 - - igen
/INT0 külső 0x0003 0 IE0 igen
Timer 0 overflow
0x000B 1 TF0 igen
/INT1 külső 0x0013 2 IE1 igen
Timer 1 overflow
0x001B 3 TF1 igen
UART0 0x0023 4 RI0, TI0 nem
Timer 2 overflow
0x002B 5 TF2H, TF2L nem
SPI0 0x0033 6 SPIF, WCOL,MODF, RXOVRN
nem
SMB0 0x003B 7 SI nem
12
Megszakítás idődiagramja
• Események (megszakítások) kezelése
Utasítás #1
Utasítás #2Utasítás
#3
LC
AL
L
Meg
szakít
ási
alp
rog
ram
RE
TI
t t t t
a főprogram nem fut
esemény
13
Megszakításkezelő rutin
void timermegszak(void) __interrupt INT_TIMER2{
TF2 = 0; // timer flag törlésemaga a kód;
}• INT_TIMER2: a 2. timer
megszakításvektorának sorszáma (header file)
14
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
18
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
20
Mindenképp szükséges mellékletek
• *.cwg fájlok (konfig wizard konfigurációja)
• *.c(maga az elkészített kód)
• Esetleg header fájlok, ha azok módosítva lettek
21
Kód beillesztését igénylő feladatok
• Csak a fontos részletek• NEM az egész kód, főleg nem a
konfigurációs sorokkal
22
Program bemutatása
• Nélküle nem jár pont(a korábbi (rész)feladatokra sem)
• Lehet számítani:– Kérdésekre– Javaslatokra
25
1. feladat
• LED1 villogtatása 2 s-os periódusidővel 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!
26
2. feladat
• Amikor a LED1 aktív, a LED2 villogjon 6 Hz frekvenciával.
• LED1 vezérlését a Timer 2 végezze, a LED2-t pedig a Timer 1.
• Válassza ki a megfelelő processzorsebesség és timer beállításokat. Részletezze a számolását!
27
Tippek
• A megszakítások frekvenciája túl nagy → Szoftveres kiterjesztés: külön számlálót kell használni a rutinon belül (lásd előadás példa)
28
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
29
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
30
Hibaelhárítás
Laboratory practical with the C8051Fxxx microcontroller family, Authors: Zoltán Gingl and Róbert Zoltán Mingesz, chapter 5.5
31
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. - Az SFR értékek el vannak számolva vagy nincsenek megfelelően beírva.
32
Timer-es idő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 interrupt flag 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-ek egyszerre többféle célra használhatóak és a beállítások eltérőek.