Mikrovezérlők alkalmazástechnikája laboratóriumi gyakorlat Timer és megszakítások használata Mingesz Róbert 2017.03.08.
Timerek
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
Timer 0 (/Timer 1): Mode 2
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: 𝑇= 256−𝑇𝐻0 ∙Δ 𝑡 𝑇𝐶𝐿𝐾 Δ 𝑡 𝑇𝐶𝐿𝐾 = 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: 𝑇=(65536−𝑇𝑀𝑅2𝑅𝐿)∙Δ 𝑡 𝑇𝐶𝐿𝐾2
Timer 2 auto reload
Megszakítások
Megszakításvektorok Forrás Cím sorszám Flag A flag-et a hardver törli Reset 0x0000 - igen /INT0 külső 0x0003 IE0 Timer 0 overflow 0x000B 1 TF0 /INT1 külső 0x0013 2 IE1 Timer 1 overflow 0x001B 3 TF1 UART0 0x0023 4 RI0, TI0 nem Timer 2 overflow 0x002B 5 TF2H, TF2L SPI0 0x0033 6 SPIF, WCOL,MODF, RXOVRN SMB0 0x003B 7 SI
Megszakítás idődiagramja Események (megszakítások) kezelése
Megszakításkezelő rutin void timermegszak(void) __interrupt INT_TIMER2 { TF2 = 0; // timer flag 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
Valós idejű többszálú környezet
Éhezés
Éhezés
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
Oszcilloszkóp mérőfej használata
Oszcilloszkóp mérőfej Jelvezeték ! GND ! Földelés
Mérés a mérőfejjel
Mérés a mérőfejjel
Mérés a mérőfejjel
GND elhelyezése
GND elhelyezése
Tilos! Hibás csatlakozás!
Tilos! Hibás csatlakozás!
Példa mérésre
Példa mérésre
Jegyzőkönyv készítése
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
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
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
Javítási útmutató Tájékoztató jelleggel!
Feladatok
1. feladat LED1 villogtatása 2 s-os periódusidővel a Timer 2 használatával. (LED 1 s-ig ég, 1 s-ig sötét) 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!
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!
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)
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ása A 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
Hibaelhárítás Laboratory practical with the C8051Fxxx microcontroller family, Authors: Zoltán Gingl and Róbert Zoltán Mingesz, chapter 5.5
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.
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.
Következő óra Van előzetes feladat Lesz jegyzőkönyvkészítés