🎓 Versenyvizsga Teszt Értékelő Rendszer
0 / 86
Megválaszolt kérdések: 0 db
1. Tétel • Számábrázolás 1 / 86
Miért a kettes komplemens (two's complement) a legelterjedtebb előjeles egész számábrázolási mód a digitális mikrovezérlőkben?
A Mert kétszer akkora pozitív értéktartományt tesz lehetővé, mint az előjel nélküli ábrázolás.
B Mert a lebegőpontos műveleteket hardveres FPU nélkül is egyetlen órajelciklus alatt hajtja végre.
C Mert az előjeles összeadás és kivonás hardveres áramköre azonos az előjel nélküli összeadóval, és egyértelmű a nulla ábrázolása.
D Mert automatikusan megakadályozza a matematikai túlcsordulást (overflow).
💡 Szakmai Indoklás:
Helyes válasz: C. A kettes komplemens legnagyobb előnye az egyszerű hardveres implementáció: a bináris összeadó áramkörnek nem kell tudnia, hogy előjeles vagy előjel nélküli számokat ad össze, az eredmény megegyezik. Továbbá csak egyetlen nulla létezik (nincs külön +0 és -0, mint az egyes komplemensnél vagy előjeles nagyságnál).
2. Tétel • Architektúrák 2 / 86
Mi a Harvard architektúra legfőbb előnye a klasszikus Von Neumann (Princeton) architektúrával szemben?
A Kevesebb belső buszvezetéket igényel a mikrovezérlő lapkáján.
B A fizikailag különálló program- és adatbusz révén az utasítás beolvasása (Fetch) és az adatművelet egyidejűleg, párhuzamosan történhet.
C Lehetővé teszi, hogy a program kód futás közben közvetlenül felülírja önmagát az adatmemóriában.
D Csak CISC típusú processzoroknál alkalmazható.
💡 Szakmai Indoklás:
Helyes válasz: B. A Von Neumann architektúrában a közös busz miatt "Von Neumann bottleneck" alakul ki (nem lehet egyszerre utasítást és adatot elérni). A Harvard architektúra külön buszrendszere teszi lehetővé az egyciklusos műveleteket és a hatékony csővezeték (pipeline) rendszert.
3. Tétel • Pipeline & CPU 3 / 86
Mi történik a mikrovezérlő utasítás-csővezetékével (pipeline), amikor a program egy feltételes ugróutasítást (pl. BRA vagy GOTO) hajt végre?
A Az ugrás 0 órajelciklus alatt azonnal lefut, késleltetés nélkül.
B A processzor hardveres Reset állapotba kerül és újraindul.
C A DMA vezérlő automatikusan befejezi a megszakított szálat a háttérben.
D Pipeline Flush következik be: a már előre beolvasott következő utasítás érvénytelenné válik (NOP-ként fut le), így az ugrás 2 ciklust vesz igénybe.
💡 Szakmai Indoklás:
Helyes válasz: D. Mivel a 2-fokozatú pipeline párhuzamosan olvassa be a következő szekvenciális utasítást, ugrás esetén a Program Counter megváltozik, így az előre beolvasott utasítást el kell dobni (flush), ami +1 ciklus időkiesést (összesen 2 ciklust) okoz.
4. Tétel • ARM Cortex-M 4 / 86
Melyik integrált periféria felelős az ARM Cortex-M mikrovezérlőkben a hardveres prioritásos, alacsony késleltetésű megszakítások kezeléséért?
A NVIC (Nested Vectored Interrupt Controller)
B SysTick Timer
C MPU (Memory Protection Unit)
D WDT (Watchdog Timer)
💡 Szakmai Indoklás:
Helyes válasz: A. Az NVIC az ARM Cortex-M mag szabványos, szorosan integrált megszakításvezérlője, amely támogatja az egymásba ágyazott megszakításokat, a dinamikus prioritásállítást és a hardveres vektor-címzést.
5. Tétel • C Programozás 5 / 86
Mi a `volatile` kulcsszó kötelező feladata egy beágyazott C programban?
A Az adatot a Flash kódmemóriába helyezi a RAM helyett.
B Megtiltja a fordítónak, hogy optimalizáláskor regiszterben cache-elje a változót vagy kihagyja az újraolvasást (pl. ISR és hardver regisztereknél).
C 64 bites duplapontos lebegőpontossá alakítja a számtani változót.
D Automatikusan kölcsönös kizárást (mutex zárolást) biztosít több szál között.
💡 Szakmai Indoklás:
Helyes válasz: B. Ha egy változót egy Megszakítási Rutin (ISR) vagy a hardver (pl. PIR1bits.RCIF) módosít, a fordító a főprogram ciklusában (`while(!flag)`) azt feltételezheti, hogy nem változott, és a regiszterben tárolt értéket olvassa újra. A `volatile` garantálja, hogy minden hozzáférés a fizikai memóriából/regiszterből történik.
6. Tétel • Bootloader 6 / 86
Mi a "Vector Remapping" (vektor-átirányítás) feladata egy Bootloaderrel ellátott mikrovezérlős rendszerben?
A A CPU órajelének átkapcsolása belső RC oszcillátorról külső kvarcra.
B Az analóg bemenetek digitális GPIO-vá alakítása.
C A hardveres megszakítási vektorok (pl. 0x0008, 0x0018) átirányítása a felhasználói alkalmazás eltolt vektortáblájára (pl. 0x1008, 0x1018).
D A Flash memória törlése blokkonként az új firmware fogadása előtt.
💡 Szakmai Indoklás:
Helyes válasz: C. Mivel a fix hardveres címekre (0x0000, 0x0008) érkező események a Bootloader kódjába futnak be, a Bootloadernek ugróutasításokkal (GOTO) tovább kell irányítania a megszakításokat a felhasználói program saját címeire.
9. Tétel • GPIO & RMW 7 / 86
PIC18 mikrovezérlőknél miért kötelező a LATx (Output Latch) regisztert használni kimeneti bit billentésekor (pl. LATBbits.LATB2 = 1) a PORTx helyett?
A Mert a PORTx regiszter csak 4 bites felbontású.
B Mert a LATx regiszter bekapcsolja a belső pull-down ellenállásokat.
C Mert a PORTx regisztert csak Assembly kódból lehet elérni.
D A Read-Modify-Write (RMW) hiba elkerülése miatt: a PORTx a fizikai láb feszültségét olvassa vissza, ami terhelés esetén hibásan felülírhatja a többi kimeneti bitet.
💡 Szakmai Indoklás:
Helyes válasz: D. A bitműveletek (pl. BSF, BCF, |=) beolvasás-módosítás-visszaírás ciklust hajtanak végre. Ha a PORTx-et olvassuk, és egy szomszédos kimeneti lábon kapacitív terhelés van, a feszültsége még alacsony szintű lehet, így a CPU véletlenül lekapcsolja (0-ra írja) a szomszédos kimenetet. A LATx a belső reteszt módosítja, nem a terhelt lábat olvassa!
10. Tétel • Watchdog Timer 8 / 86
Mi a Watchdog Timer (WDT) működési mechanizmusa és alapvető célja?
A A CPU órajelének stabilizálása külső kvarckristály használata esetén.
B Független belső oszcillátorról járó számláló, amely ha nem kap rendszeres szoftveres törlő parancsot (CLRWDT) a timeout előtt, újraindítja (Reset) az MCU-t.
C A programmemória tartalmának folyamatos titkosítása.
D Az analóg bemeneti feszültségek túlcsordulásának detektálása.
💡 Szakmai Indoklás:
Helyes válasz: B. A Watchdog célja a fagyások és végtelen ciklusok automatikus feloldása zord ipari környezetben, biztosítva a rendszer önálló talpra állását emberi beavatkozás nélkül.
11. Tétel • RTC 9 / 86
Miért pontosan 32.768 kHz frekvenciájú kvarckristályt alkalmaznak a valós idejű órákban (RTC)?
A Mert 32768 = 215, így egy 15 fokozatú bináris osztólánccal (flip-flop sorral) pontosan 1 Hz-es (1 másodperces) órajel állítható elő.
B Mert ez a maximális frekvencia, amit az I2C busz még át tud vinni.
C Mert ennél a frekvenciánál a kristály ellenállása zérusra csökken.
D Mert pontosan egybeesik a rádiós időszinkronizációs jel (DCF77) vivőjével.
💡 Szakmai Indoklás:
Helyes válasz: A. A 215 = 32768 kettő-hatvány révén tisztán egyszerű digitális bináris osztókkal rendkívül alacsony áramfelvétel mellett (néhány mikroamper) állítható elő az 1 másodperces időalap.
12. Tétel • CCP & PWM 10 / 86
PIC18 mikrovezérlőben melyik hardveres időzítő és melyik regiszter határozza meg a CCP modul PWM jelének frekvenciáját / periódusidejét?
A Timer0 és T0CON
B Timer1 és T1CON
C Timer2 és a PR2 (Period Register)
D WDT és a WDTCON
💡 Szakmai Indoklás:
Helyes válasz: C. A CCP PWM modul időalapja a Timer2. A PWM periódusidejét a TPWM = [(PR2) + 1] × 4 × TOSC × (TMR2 Prescaler) képlet adja meg, míg a kitöltést a `CCPRxL` regiszter határozza meg.
13. Tétel • ADC 11 / 86
Miért elengedhetetlen a megfelelő TACQ (Acquisition Time / Mintavételezési idő) kivárása az ADC konverzió elindítása (`GO/DONE = 1`) előtt?
A Hogy a CPU órajele leálljon az alacsony fogyasztású konverzió idejére.
B Hogy a belső Sample & Hold mintavevő kondenzátor (CHOLD) teljesen feltöltődjön a bemeneti analóg feszültségre.
C Hogy az EEPROM memória automatikusan törlődjön.
D Hogy a komparátor hiszterézise nullára álljon be.
💡 Szakmai Indoklás:
Helyes válasz: B. Az analóg bemenet és a mintavevő kondenzátor egy RC kört alkot. Ha nem hagyunk elegendő időt (TACQ ≥ 2.4µs, tipikus RS=2.5kΩ forrásimpedancia mellett) a töltődésre a csatornaváltás után, a SAR konverter a korábbi csatorna vagy a lezáratlan kapacitás hibás feszültségét fogja digitalizálni!
14. Tétel • Interruptok 12 / 86
Mit eredményez, ha egy periféria megszakítás-kiszolgáló rutinjában (ISR) elfelejtjük szoftveresen törölni a hozzá tartozó jelzőbitet (pl. TMR0IF = 0)?
A A processzor a megszakításból való visszatérés után azonnal újra belép az ISR-be, így a főprogram végleg blokkolódik (végtelen megszakítási hurok).
B A periféria hardvere azonnal kikapcsol és leég.
C Semmit, mert a hardware a RETFIE utasításra mindig automatikusan törli az összes flaget.
D A megszakítás prioritása automatikusan alacsony szintre vált.
💡 Szakmai Indoklás:
Helyes válasz: A. A legtöbb megszakítási flag (pl. TMR0IF, INT0IF) nem törlődik automatikusan! Ha a szoftver nem ír 0-t a flag regiszterbe, az ISR lefutása és a `RETFIE` után az interrupt kontroller azonnal újra aktívnak látja a kérést, és visszaugrik a rutin elejére.
15. Tétel • UART & RS232 13 / 86
Milyen feszültségszintek reprezentálják a logikai '0' (Space) és '1' (Mark) állapotokat a szabványos RS232 fizikai interfészen?
A '0' = 0V, '1' = +5V (TTL szintek)
B '0' = 0V, '1' = +3.3V (CMOS szintek)
C '0' = -12V, '1' = +12V
D '0' = +3V .. +15V (pozitív feszültség), '1' = -3V .. -15V (negatív feszültség, invertált logika)
💡 Szakmai Indoklás:
Helyes válasz: D. Az RS232 bipoláris és invertált logikát használ: a pozitív feszültség a logikai 0 (Space), a negatív feszültség pedig a logikai 1 (Mark / Idle állapot). Ehhez illeszt a MAX232 töltéspumpás IC.
16. Tétel • I2C Busz 14 / 86
Hogyan definiálja az I2C protokoll a START (Kezdeti) állapot feltételét a buszon?
A Az SCL vonal alacsony szintre váltása, miközben az SDA magas.
B Az SDA vonal magasból alacsonyba vált (lefutó él), miközben az SCL órajelvonal magas szinten van.
C 8 darab egymást követő logikai '1' bit kiküldése az SDA-n.
D A Chip Select (CS) vonal lehúzása alacsony szintre.
💡 Szakmai Indoklás:
Helyes válasz: B. Normál adatátvitel alatt az SDA csak akkor változhat, amikor az SCL alacsony. Az egyetlen kivétel a START és STOP feltétel: START esetén az SDA magasból alacsonyba vált magas SCL alatt, míg STOP-nál alacsonyból magasba vált magas SCL alatt.
16. Tétel • SPI Protokoll 15 / 86
Mit jelent a Full-Duplex működés az SPI (Serial Peripheral Interface) kommunikációnál?
A Minden egyes kiküldött órajelimpulzusra egyszerre történik meg 1 bit kiküldése (SDO/MOSI) és 1 bit fogadása (SDI/MISO) a shift regiszterek között.
B Hogy a Master és Slave tetszőleges sebességgel, független órajellel kommunikálhat.
C Hogy az adatátvitelhez mindössze 1etlen vezeték szükséges.
D Hogy a buszon automatikus ütközésérzékelés (collision detection) és arbitration működik.
💡 Szakmai Indoklás:
Helyes válasz: A. Az SPI Master és Slave belső shift regiszterei egy közös gyűrűt alkotnak: egy bájt elküldése egyúttal egy bájt beolvasásával jár együtt 8 órajeltaktus alatt.
17. Tétel • SD & Fájlrendszer 16 / 86
Melyik parancs (Command) küldésével kapcsolható át az SD-kártya a mikrovezérlők által használt SPI módba a bekapcsolás és a 74 dummy órajel után?
A CMD17 (READ_SINGLE_BLOCK)
B CMD24 (WRITE_BLOCK)
C CMD0 (GO_IDLE_STATE) alacsony szinten tartott CS láb mellett
D CMD16 (SET_BLOCKLEN)
💡 Szakmai Indoklás:
Helyes válasz: C. Az SD kártya bekapcsoláskor natív SD módban indul. Ha a Master lehúzza a CS lábat és elküldi a `CMD0` parancsot érvényes CRC-vel (`0x95`), a kártya észleli az SPI módot, és `0x01` (In Idle State) válasszal megerősíti az átállást.
1. Tétel • BCD & Számformátumok 17 / 86
Miért használnak BCD (Binary Coded Decimal) formátumot bináris egész szám helyett a valós idejű órák (RTC) és 7-szegmenses kijelzők vezérlésénél?
A Mert a BCD formátum fele annyi memóriát foglal, mint a bináris ábrázolás.
B Mert 4 biten (nibble-önként) közvetlenül tárolja a decimális számjegyeket (0-9), így a kijelzéshez vagy az időegységek elválasztásához nincs szükség lassú bináris-decimális osztás/maradékszámításra.
C Mert a BCD formátum lebegőpontos műveleteket tesz lehetővé hardveres FPU nélkül.
D Mert a BCD az egyetlen formátum, amit az I2C busz protokollja támogat.
💡 Szakmai Indoklás:
Helyes válasz: B. A BCD minden decimális számjegyet külön 4 biten tárol (pl. 0x59 = 59), így a "perc" vagy "másodperc" érték azonnal tízes és egyes számjegyre bontható, elkerülve a bináris → decimális konverzióhoz szükséges ismételt osztás/maradék (/10, %10) műveleteket. Cserébe minden nibble-ből 6 kombináció (10–15) kihasználatlan marad, ami pazarlóbb, mint a tiszta bináris ábrázolás.
2. Tétel • CISC vs. RISC 18 / 86
Mi jellemzi a "Load-Store" elvű RISC architektúrát (pl. PIC18, AVR, ARM Cortex-M) a CISC felépítéssel szemben?
A Az utasítások változó hosszúságúak (1–15 bájt), és egyetlen utasítás közvetlenül végezhet műveletet a memórián.
B Az aritmetikai és logikai műveletek kizárólag belső munkaregiszterek között zajlanak; a memóriát csak dedikált LOAD és STORE utasítások érik el.
C A RISC processzorok mindig mikroprogramozott vezérlőegységet használnak a gyorsabb dekódolás érdekében.
D A RISC utasításkészlet több száz különböző címzési módot definiál a rugalmasság érdekében.
💡 Szakmai Indoklás:
Helyes válasz: B. A RISC (Reduced Instruction Set Computer) tervezés lényege a kevés, egyszerű, fix hosszúságú utasítás; a memóriaelérés kizárólag explicit LOAD/STORE utasításokkal történik, míg az ALU műveletek regiszter-regiszter között futnak. A CISC (pl. 8051, x86) ezzel szemben megengedi, hogy egy utasítás közvetlenül a memórián végezzen számítást, változó utasításhosszal.
3. Tétel • DMA 19 / 86
Mi a fő előnye, ha egy nagysebességű ADC mintasorozatot DMA vezérlővel írunk közvetlenül SRAM pufferbe, ahelyett hogy minden mintát megszakításban (ISR) a CPU másolna át?
A A DMA vezérlő automatikusan kiszámítja a minták Fourier-transzformáltját hardveresen.
B Az átvitel közben a CPU szabadon végezhet más számítási feladatokat, mivel az adatmozgatás a CPU aktív beavatkozása (utasításvégrehajtása) nélkül, önállóan zajlik.
C A DMA kiküszöböli a mintavevő kondenzátor feltöltési idejének (TACQ) szükségességét.
D A DMA vezérlő növeli az ADC felbontását 10 bitről 16 bitre.
💡 Szakmai Indoklás:
Helyes válasz: B. A DMA (Direct Memory Access) a periféria és a memória között közvetlen adatutat biztosít; a CPU-nak csak a kezdeti beállítás (forrás, cél, hossz) a feladata. Ezzel a processzor tehermentesül a sok kis, ismétlődő adatmásolási megszakítás kiszolgálása alól, és a felszabaduló időt hasznos számításra fordíthatja.
4. Tétel • ARM Cortex-M család 20 / 86
Melyik hardveres képesség különbözteti meg elsődlegesen a Cortex-M4 magot az egyszerűbb Cortex-M0/M0+ magtól?
A Csak a Cortex-M4 rendelkezik NVIC megszakításvezérlővel.
B Csak a Cortex-M4 programozható SWD interfészen keresztül.
C A Cortex-M4 beépített, egyszeres pontosságú hardveres lebegőpontos egységgel (FPU) és DSP/SIMD utasításokkal rendelkezik, amivel az M0/M0+ nem.
D A Cortex-M4 kizárólag 8 bites adatokat tud kezelni, míg az M0 32 bites feldolgozásra képes.
💡 Szakmai Indoklás:
Helyes válasz: C. Minden Cortex-M mag rendelkezik NVIC-cel és SWD-vel, így A és B hamis. A Cortex-M0/M0+ a minimális fogyasztásra és egyszerűségre optimalizált ARMv6-M maggal rendelkezik, FPU nélkül, míg a Cortex-M4 (ARMv7E-M) hardveres, egyszeres pontosságú FPU-t és DSP célú SIMD utasításokat (pl. gyors szorzás-összeadás jelfeldolgozáshoz) integrál.
5. Tétel • Fordítási lánc / Linker 21 / 86
Mi a Linker (Szerkesztő) konkrét feladata a beágyazott C fordítási láncban, miután az Assembler elkészítette az objektumfájlokat?
A Ellenőrzi a C forráskód szintaktikai helyességét és típusait.
B Végrehajtja a #include és #define direktívák szöveges kifejtését.
C Optimalizálja a ciklusokat és függvényhívásokat, majd Assembly kódot generál.
D Összefűzi a lefordított objektumfájlokat és könyvtárakat, majd a Linker Script memóriatérképe alapján konkrét Flash/RAM címekhez rendeli a szimbólumokat és függvényeket.
💡 Szakmai Indoklás:
Helyes válasz: D. A szintaktikai/szemantikai elemzés és optimalizálás a Fordító (Compiler) feladata, a makrókifejtés az Előfeldolgozóé. A Linker a már lefordított, relokálható objektumfájlokat (.o) és a szükséges könyvtári függvényeket egyetlen végrehajtható képpé (.elf/.hex) fűzi össze, a Linker Script (.lkr/.ld) által megadott fizikai memóriatérkép szerint rendelve hozzá a végleges címeket.
6. Tétel • ICSP: HVP vs. LVP 22 / 86
Mi a különbség a hagyományos nagyfeszültségű (HVP) és az egytápfeszültségű (LVP – Single-Supply) ICSP programozási mód között PIC18 mikrovezérlőknél?
A Az LVP mód gyorsabb adatátviteli sebességet biztosít a PGD vonalon.
B HVP módban a MCLR/VPP lábra ~12–13V programozófeszültséget kell kapcsolni a programozási mód aktiválásához; az LVP mód ehelyett egy dedikált lábat (PIC18F4620-nál RB5/PGM) használ logikai szintű jellel, cserébe ez a láb elveszik általános célú GPIO-ként, amíg az LVP engedélyezve van.
C A HVP mód kizárólag Flash memóriát tud írni, az LVP mód csak EEPROM-ot.
D Az LVP mód csak szimulátorban működik, valós hardveren nem támogatott.
💡 Szakmai Indoklás:
Helyes válasz: B. A klasszikus HVP programozás a MCLR/VPP lábra adott magas feszültséggel (~12–13V) lépteti programozó módba az eszközt. Az LVP (Single-Supply ICSP) engedélyezésekor (LVP konfigurációs bit = 1) a mikrovezérlő az RB5/PGM láb logikai szintje alapján lép be programozó módba HV nélkül — cserébe ez a láb véglegesen elveszik digitális I/O célra, amíg az LVP bit engedélyezve marad.
7. Tétel • Hardveres Debugging 23 / 86
Miért előnyösebb egy hardveres töréspont (Hardware Breakpoint) használata egy szoftveres töréspont helyett, éles Flash memórián történő hibakereséskor?
A Mert a hardveres töréspont korlátlan számban helyezhető el bárhol a kódban, memóriakorlátozás nélkül.
B Mert egy dedikált címkomparátor figyeli a Program Counter értékét, és nem igényli a Flash memória tartalmának (egy törésponti utasításnak) módosítását vagy újraírását.
C Mert csak a hardveres töréspont képes megállítani a Watchdog Timert.
D Mert a hardveres töréspont automatikusan kijavítja a program hibáit.
💡 Szakmai Indoklás:
Helyes válasz: B. A szoftveres töréspont jellemzően egy speciális megszakító utasítást ír ideiglenesen a kód közé, ami Flash-írási ciklust és a memóriatartalom visszaállítását igényli. A hardveres töréspont ezzel szemben egy dedikált, korlátozott számú komparátor regiszterrel figyeli a busz/PC címét, és a Flash tartalmának módosítása nélkül állítja meg a magot, amikor a cím egyezik.
7. Tétel • Fejlesztőkörnyezetek 24 / 86
Melyik hivatalos Microchip eszköz generál az MPLAB X IDE-ben grafikus felületen, kattintással kész, regiszterszintű C inicializáló kódot a kiválasztott perifériákhoz (pl. ADC, UART, Timer)?
A MCC (MPLAB Code Configurator)
B CubeMX
C HAL Wizard
D FatFs Generator
💡 Szakmai Indoklás:
Helyes válasz: A. Az MCC (MPLAB Code Configurator) egy MPLAB X plugin, amely grafikus konfigurátorablakokból (pin, óra, perifériák) automatikusan generál regiszterszintű inicializáló és driver C kódot XC8/XC16/XC32 fordítókhoz. (A CubeMX az ST STM32 család analóg eszköze, nem Microchip termék.)
8. Tétel • CMSIS szabvány 25 / 86
Mi teszi a CMSIS (Cortex Microcontroller Software Interface Standard) réteget egyedivé a gyártófüggő HAL/LL rétegekhez képest?
A A CMSIS kizárólag PIC18 mikrovezérlőkön érhető el.
B A CMSIS egy ARM által definiált, gyártófüggetlen szabvány minden Cortex-M magra (pl. NVIC kezelés, SysTick, __enable_irq()), így a magfüggvények szintaxisa azonos STM32-n, NXP-n vagy más Cortex-M gyártó eszközén is.
C A CMSIS mindig lassabb, mint a HAL, mert extra ellenőrzéseket végez minden függvényhívásnál.
D A CMSIS egy fizetős licencelésű, zárt forráskódú könyvtár.
💡 Szakmai Indoklás:
Helyes válasz: B. A HAL és LL rétegek gyártóspecifikusak (pl. ST STM32Cube HAL csak STM32-n fut), míg a CMSIS-t maga az ARM definiálja, ezért a Cortex-M maghoz szorosan kötődő funkciók (megszakításkezelés, SysTick, intrinsic függvények) szintaxisa azonos marad, függetlenül attól, hogy STM32, NXP LPC vagy más Cortex-M lapkáról van szó.
8. Tétel • HAL vs. regiszterkezelés 26 / 86
Miért kockázatos egy időkritikus, gyors megszakítási rutinban (ISR) a gyártó HAL (Hardware Abstraction Layer) függvényeit használni a közvetlen regiszterírás helyett?
A Mert a HAL függvények csak a main() függvényből hívhatók.
B Mert a HAL réteg minden hívásnál újrafordítja a teljes projektet.
C Mert a HAL absztrakciós rétege (paraméter-ellenőrzés, handle struktúrák) jelentős extra végrehajtási ciklust és kódméretet ad hozzá, ami rontja az ISR determinisztikus, kiszámítható lefutási idejét.
D Mert a HAL függvények nem képesek bitszintű regisztert módosítani, csak bájtokat.
💡 Szakmai Indoklás:
Helyes válasz: C. A HAL kényelmes, hordozható API-t nyújt (pl. HAL_GPIO_WritePin), de ennek ára az extra függvényhívási overhead, paraméterellenőrzés és általánosított logika, ami több órajelciklust és nagyobb kódméretet eredményez, mint egy közvetlen bitművelet (LATx |= mask). Egy szűk időkeretű ISR-ben ez kiszámíthatatlanabb késleltetést okozhat.
9. Tétel • GPIO kimeneti fokozatok 27 / 86
Miért használnak kifejezetten Open-Drain (nyitott nyelőjű) kimeneti fokozatot az I2C busz SDA és SCL vonalain, Push-Pull kimenet helyett?
A Mert az Open-Drain kimenet gyorsabb kapcsolási sebességet biztosít nagy frekvencián.
B Mert így több eszköz oszthatja meg ugyanazt a vonalat anélkül, hogy két egyidejűleg aktív kimenet (egy '1'-et és egy '0'-t hajtó) ütközése rövidzárat okozna; bármelyik eszköz lehúzhatja a vonalat driver-driver konfliktus nélkül.
C Mert az Open-Drain kimenet nem igényel tápfeszültséget.
D Mert a Push-Pull kimenetek nem képesek logikai '0' szint előállítására.
💡 Szakmai Indoklás:
Helyes válasz: B. Push-Pull kimenetnél, ha egy eszköz '1'-et (VDD-re húz), egy másik pedig '0'-t (GND-re húz) hajtana egyszerre ugyanarra a vezetékre, rövidzár és károsodás lenne a következménye. Az Open-Drain fokozatnál csak lehúzó (N-MOS) tranzisztor van; ha senki nem húzza le a vonalat, a külső felhúzó ellenállás állítja be a magas szintet — így tetszőleges számú eszköz oszthatja meg biztonságosan a buszt (vezetékes VAGY / wired-AND logika).
10. Tétel • Timer1 & Órajelforrás 28 / 86
Miért pont a Timer1 modult választják PIC18-nál egy külső 32.768 kHz-es karórakvarc (RTC időalap) meghajtására, Timer0 vagy Timer2 helyett?
A Mert csak a Timer1 rendelkezik dedikált, alacsony fogyasztású másodlagos oszcillátor áramkörrel (T1OSI/T1OSO lábak) kifejezetten 32.768 kHz-es kvarchoz tervezve.
B Mert a Timer0 és Timer2 csak 4 bites felbontásúak, ami elégtelen az órához.
C Mert a Timer1 az egyetlen időzítő, amely rendelkezik PR2 periódusregiszterrel.
D Mert a Timer1 közvetlenül I2C-n kommunikál a valós idejű órával.
💡 Szakmai Indoklás:
Helyes válasz: A. A PIC18F4620-ban a Timer1 saját, kifejezetten 32.768 kHz-es "watch crystal" meghajtására tervezett, alacsony fogyasztású (nA–µA tartomány) másodlagos oszcillátor áramkörrel rendelkezik a T1OSI/T1OSO (RC1/RC0) lábakon, ami a Timer0-ból és Timer2-ből hiányzik. (A PR2 periódusregiszter valójában a Timer2 sajátja — ez is megkülönbözteti a moduljaikat.)
11. Tétel • RTC Tápellátás 29 / 86
Mi a szerepe a különálló VBAT (tartalék akkumulátor/gombelem) bemenetnek egy dedikált RTC IC-n (pl. DS3231)?
A Ez a láb szolgáltatja a fő digitális logika (CPU mag) tápfeszültségét normál üzem közben.
B Ha a fő VDD tápfeszültség megszűnik (pl. áramszünet), az RTC automatikusan erre a tartalék forrásra kapcsol át, hogy az óraszámláló és a kvarcoszcillátor folyamatosan, megszakítás nélkül tovább járjon.
C A VBAT láb tölti fel az ADC mintavevő kondenzátorát.
D A VBAT egy digitális kimenet, amely jelzi, ha lejárt egy ébresztés (alarm).
💡 Szakmai Indoklás:
Helyes válasz: B. Az RTC modulok elsődleges célja, hogy a valós idő folyamatosan, akár tápkimaradás esetén is helyesen teljen. A VBAT (gombelem, pl. CR2032, vagy szuperkondenzátor) automatikus átkapcsolással biztosítja az óraszámláló és a kvarcoszcillátor minimális, de folyamatos áramellátását, amíg a fő VDD helyre nem áll.
12. Tétel • CCP Capture mód 30 / 86
Egy ultrahangos távolságmérő szenzor (pl. HC-SR04) "Echo" kimenetének impulzusszélességét (amely arányos a mért távolsággal) szeretnénk pontosan megmérni. Melyik CCP üzemmódot kell használni?
A PWM üzemmódot, mert az képes bemeneti jelet fogadni.
B Compare üzemmódot, mert az automatikusan szoftveres megszakítást generál.
C Capture üzemmódot: az Echo láb felfutó és lefutó élénél a hardver automatikusan elmenti a Timer1 pillanatnyi értékét a CCPR regiszterbe, a két időbélyeg különbsége adja az impulzusszélességet.
D Egyik CCP mód sem alkalmas erre, csak szoftveres polling használható.
💡 Szakmai Indoklás:
Helyes válasz: C. A Capture üzemmód pontosan erre a feladatra való: a kiválasztott élnél (felfutó/lefutó, konfigurálható) egyetlen órajelciklus alatt automatikusan, CPU-beavatkozás nélkül másolja át a szabadonfutó Timer1 értékét a CCPRx regiszterbe. Két egymást követő Capture esemény (felfutó, majd lefutó él) időbélyegének különbsége adja a pontos impulzusszélességet, a megszakítási/válaszidő bizonytalanságától mentesen, szemben a tisztán szoftveres időméréssel.
13. Tétel • ADC Referenciafeszültség 31 / 86
Mire szolgál az ADCON1 regiszter VCFG1:VCFG0 bitpárja a PIC18F4620 ADC moduljában?
A Kiválasztja, hogy az ADC eredménye jobbra vagy balra legyen igazítva az eredményregiszterben.
B Beállítja az ADC konverzió indítási forrását (szoftveres vagy hardveres trigger).
C Kiválasztja az ADC pozitív és negatív feszültségreferenciáját: belső VDD/VSS, vagy külső VREF+/VREF- lábak.
D Engedélyezi vagy tiltja magát az ADC modult (be-/kikapcsolás).
💡 Szakmai Indoklás:
Helyes válasz: C. A VCFG1:VCFG0 bitek az ADC felső és alsó referenciapontját választják ki: alapértelmezésben a tápfeszültség (VDD) és föld (VSS) a referencia, de átállítással a dedikált VREF+/VREF- lábakra köthető külső, pontosabb referenciafeszültség is használható. (Az eredmény igazítását az ADFM bit az ADCON2-ben, az indítást a GO/DONE bit az ADCON0-ban, a be-/kikapcsolást pedig az ADON bit végzi.)
14. Tétel • Interrupt kontextusmentés 32 / 86
Miért nem kell a PIC18 magas prioritású (High Priority) megszakítási rutinjának (ISR) szoftveresen elmentenie és visszaállítania a WREG, STATUS és BSR regisztereket a főprogram folytatása előtt?
A Mert a magas prioritású megszakítás alatt ezek a regiszterek automatikusan nullázódnak, értékük irreleváns.
B Mert a hardver a vektorálás pillanatában automatikusan egy dedikált "Fast Register Stack"-be (árnyék-/shadow regiszterekbe) menti ezeket, majd a RETFIE FAST utasítás automatikusan visszaállítja őket.
C Mert a WREG, STATUS és BSR regiszterek a magas prioritású ISR alatt fizikailag le vannak tiltva.
D Mert ezeket a regisztereket a Watchdog Timer menti el automatikusan minden ciklusban.
💡 Szakmai Indoklás:
Helyes válasz: B. A PIC18 a gyors válaszidő érdekében egyetlen szintű hardveres "Fast Register Stack"-et biztosít a WREG, STATUS és BSR regiszterekhez. Magas prioritású megszakítás bekövetkezésekor a hardver automatikusan ide másolja ezek aktuális értékét, a RETFIE FAST utasítás pedig automatikusan visszatölti őket — nincs szükség kézi MOVFF mentésre. Alacsony prioritású ISR-nél ez a mechanizmus nem elérhető, ott szoftveres mentés szükséges.
15. Tétel • UART Aszinkron Vétel 33 / 86
Mivel az UART kommunikációnál nincs közös órajelvonal, hogyan ismeri fel a vevő EUSART egység pontosan, hogy egy új bájt átvitele kezdődött, és hol vannak az egyes bitek középpontjai?
A A vevő folyamatosan az adó belső kvarckristályának frekvenciáját méri, és ahhoz szinkronizál.
B A vevő figyeli az IDLE (magas szintű) vonal lefutó élét (a Start bit kezdetét), majd a beállított Baud Rate többszörösével (jellemzően 16x-os) túlmintavételezéssel megkeresi az egyes bitek időbeli közepét a helyes leolvasáshoz.
C Minden bájt előtt egy külön szinkronizációs bájtot kell küldeni, amit a vevő dekódol.
D A Stop bit hossza automatikusan kalibrálja a vevő órajelét minden bájt után.
💡 Szakmai Indoklás:
Helyes válasz: B. Az IDLE állapot magas szintű; a Start bit ennek lefutó éle, ami szinkronizálja a vevőt. Innentől a vevő egy belső, a névleges Baud Rate többszörösével (BRGH-tól függően, jellemzően 16x-os) futó órajellel túlmintavételezi a vonalat, és minden bitidő közepén olvassa le a logikai szintet, hogy a kábelhossz és a kis frekvenciaeltérések ellenére is helyesen dekódolja a bitet.
17. Tétel • FAT Fájlrendszer & FatFs 34 / 86
A ChaN FatFs könyvtár integrálásakor melyik alsó szintű függvényt KELL a fejlesztőnek megírnia ahhoz, hogy a könyvtár ténylegesen ki tudjon olvasni egy 512 bájtos fizikai szektort az SD-kártyáról SPI-n keresztül?
A f_open(), mert ez nyitja meg a fájlt a fájlrendszer szintjén.
B f_read(), mert ez olvassa be a fájl adatbájtjait a felhasználói pufferbe.
C disk_read(), mert ez a hardverfüggő Disk I/O rétegben implementálja a nyers szektorolvasást az MCU konkrét SPI perifériáján keresztül.
D main(), mert a FatFs minden funkciója a main ciklusban van implementálva.
💡 Szakmai Indoklás:
Helyes válasz: C. Az f_open() és f_read() a FatFs hardverfüggetlen, magas szintű fájlkezelő API-jának már kész részei. Ezek belül azonban meghívják az alacsony szintű, kötelezően a fejlesztő által megírandó Disk I/O réteg függvényeit (disk_initialize(), disk_status(), disk_read(), disk_write(), disk_ioctl()), amelyek ismerik a konkrét MCU SPI perifériáját és az SD-kártya parancskészletét (CMD17/CMD24).
1. Tétel • Fixpontos Ábrázolás 35 / 86
Miért érdemes fixpontos (pl. Q8.8) ábrázolást használni törtszámokhoz egy FPU nélküli 8 bites mikrovezérlőn, IEEE 754 lebegőpontos típus helyett?
A Mert a fixpontos formátum nagyobb számábrázolási tartományt tesz lehetővé, mint a 32 bites float.
B Mert a fixpontos műveletek egyszerű egész szám (integer) ALU-műveletekre (összeadás, szorzás) vezethetők vissza, elkerülve a lassú, sok Flash memóriát igénylő szoftveres lebegőpontos emulációt.
C Mert a fixpontos formátum automatikusan kezeli a túlcsordulást hardveresen minden PIC18-on.
D Mert a fixpontos számokat nem kell előjelesen ábrázolni.
💡 Szakmai Indoklás:
Helyes válasz: B. A Q-formátumú fixpontos szám valójában egy egész szám, amit a program egy elképzelt (implicit) törtvessző szerint értelmez. Az összeadás/kivonás/szorzás így a CPU natív egész ALU-jával, gyorsan elvégezhető, míg az IEEE 754 float szoftveres emulációja (mivel a legtöbb 8 bites MCU-nak nincs hardveres FPU-ja) sok utasítást és Flash memóriát emészt fel.
1. Tétel • Fejlődéstörténet 36 / 86
Melyik lapkát tartják az első valódi, egy szilíciumdarabon CPU-t, ROM-ot és RAM-ot egyaránt integráló mikrokontrollernek?
A Intel 4004 (1971)
B Intel 8080 (1974)
C Texas Instruments TMS1000 (1974)
D Intel 8051 (1980)
💡 Szakmai Indoklás:
Helyes válasz: C. Az Intel 4004 és 8080 általános célú mikroprocesszorok voltak, külső memóriával. A Texas Instruments TMS1000 volt az első lapka, amely a CPU-t, ROM-ot (programtár) és RAM-ot (adattár) egyetlen integrált áramkörbe foglalta, ezzel megteremtve a "mikrokontroller" fogalmát. Az Intel 8051 (1980) ezt a koncepciót vitte tovább iparági etalonná.
2. Tétel • Von Neumann Példák 37 / 86
A felsorolt eszközök közül melyik épül hagyományosan klasszikus Von Neumann (közös busz) architektúrára, szemben a többi Harvard/módosított Harvard felépítésű mikrovezérlővel?
A Intel 8086 (általános célú PC processzor)
B PIC18F4620
C ATmega328P (AVR)
D ARM Cortex-M4
💡 Szakmai Indoklás:
Helyes válasz: A. A PIC18, az AVR és az ARM Cortex-M egyaránt (módosított) Harvard elvű, fizikailag különálló program- és adatbusszal. A klasszikus x86 vonal (pl. 8086) és a hozzá kapcsolódó PC architektúra ezzel szemben a hagyományos Von Neumann elvet követi: a kód és az adat közös memóriatérben, közös buszon érhető el.
2. Tétel • Módosított Harvard 38 / 86
A "módosított Harvard" architektúrájú mikrovezérlők (pl. ARM Cortex-M, AVR, PIC18) hogyan tudnak mégis konstans adatokat (pl. lookup táblát) olvasni a program-memóriából (Flash), ha a program- és adatbusz elvileg elkülönül?
A Ideiglenesen Von Neumann módba kapcsolják a buszrendszert futás közben.
B Speciális utasításokkal (pl. ARM LDR, AVR LPM, PIC18 TBLRD), amelyek kifejezetten a programmemóriát címzik meg és olvassák be adatként.
C A Flash memóriát minden induláskor automatikusan átmásolják a RAM-ba.
D DMA vezérlő nélkül ez fizikailag lehetetlen ezeken az eszközökön.
💡 Szakmai Indoklás:
Helyes válasz: B. A "módosított" jelző pontosan erre utal: a szigorú Harvard-elvet enyhítve dedikált utasítások (LDR ARM-on, LPM AVR-on, TBLRD PIC18-on) képesek a normál adatműveleti utak megkerülésével közvetlenül a programmemória-buszról olvasni, így a nagy konstans táblázatok nem foglalnak drága SRAM-ot.
3. Tétel • Hardveres Stack 39 / 86
Mit tárol kizárólag a PIC18 31 szintű HARDVERES stack-je (szemben egy ARM Cortex-M szoftveres, RAM-ban elhelyezett stack-jével)?
A Tetszőleges lokális változókat és függvényparamétereket.
B Az ADC konverziók eredményét.
C Kizárólag a visszatérési címeket (Program Counter értékeket) CALL, hívás és megszakítás esetén — nem alkalmas általános adatok tárolására.
D A WREG munkaregiszter aktuális tartalmát minden órajelciklusban.
💡 Szakmai Indoklás:
Helyes válasz: C. A PIC18 dedikált 31 szintű hardveres verme kizárólag a visszatérési címek (PC) automatikus tárolására szolgál CALL/RCALL/megszakítás esetén, és RETURN/RETFIE automatikusan visszaolvassa azt. Ezzel szemben az ARM Cortex-M (és a C nyelv általában) egy RAM-ban kijelölt, sokkal rugalmasabb szoftveres stacket használ, amely lokális változókat, függvényparamétereket és regisztermentéseket is tárolhat.
3. Tétel • STATUS Regiszter Flag-ek 40 / 86
Melyik STATUS regiszter flag jelzi, hogy egy előjel nélküli összeadás vagy kivonás eredménye túllépte a regiszter kapacitását (átvitel/kölcsön keletkezett)?
A C (Carry) flag
B Z (Zero) flag
C N (Negative) flag
D OV (Overflow) flag
💡 Szakmai Indoklás:
Helyes válasz: A. A Carry (C) flag az előjel nélküli aritmetikánál jelez túlcsordulást/kölcsönt (pl. 8 bites összeadásnál a 9. bit "kicsordulását"). A Z flag a nulla eredményt, az N a legfelső (előjel-) bitet, az OV pedig kifejezetten az ELŐJELES aritmetikai túlcsordulást jelzi — ezek eltérő, önálló jelzőbitek.
4. Tétel • RISC-V RV32I 41 / 86
Mi a különleges tulajdonsága az x0 regiszternek a RISC-V RV32I utasításkészletben?
A x0 a verempointer (Stack Pointer), amit minden függvényhívás módosít.
B x0 hardveresen állandó 0 értékre van drótozva: bármit is írnak bele, olvasáskor mindig 0-t ad vissza.
C x0 az egyetlen regiszter, amely lebegőpontos értékeket tárolhat.
D x0 tartalmazza mindig a következő utasítás címét (Program Counter).
💡 Szakmai Indoklás:
Helyes válasz: B. A RISC-V tervezésének elegáns trükkje, hogy az x0 regiszter fizikailag konstans nullára van kötve: az adott regiszterbe írt bármely érték eldobódik, olvasáskor pedig mindig 0-t szolgáltat. Ez leegyszerűsíti számos utasítás (pl. feltétel nélküli ugrás, regiszter nullázás) kódolását külön speciális utasítás nélkül.
4. Tétel • dsPIC33 vs. PIC24 42 / 86
Mi különbözteti meg elsődlegesen a Microchip dsPIC33 családot az általános célú PIC24 családtól?
A A dsPIC33 kizárólag 8 bites adatokat tud kezelni, a PIC24 16 bitest.
B A dsPIC33-ban nincs UART periféria.
C A dsPIC33 beépített DSP motort (egyciklusos MAC – szorzó-akkumuláló egység, hardveres osztást) tartalmaz motorvezérlési és tápegység-szabályozási jelfeldolgozási feladatokhoz.
D A dsPIC33 nem programozható ICSP-vel.
💡 Szakmai Indoklás:
Helyes válasz: C. Mindkét család 16 bites, közös alapokra épül. A dsPIC33 pluszban egy dedikált DSP (Digitális Jelfeldolgozó) motort integrál — egyciklusos szorzás-összeadás (MAC), hardveres osztás —, amivel kifejezetten motorvezérlési szabályozókörök és kapcsolóüzemű tápegységek digitális jelfeldolgozási igényeit szolgálja ki, amit a sima PIC24 nem tartalmaz.
5. Tétel • A const kulcsszó 43 / 86
Miért érdemes egy nagyméretű lookup táblát (pl. szinusz-táblázat, betűkészlet) `const` kulcsszóval deklarálni egy beágyazott C programban?
A Mert a `const` gyorsabb hozzáférést biztosít, mint egy sima tömb.
B Mert a `const` automatikusan `volatile`-lá is teszi a változót.
C Mert `const` nélkül a fordító megtagadja a program lefordítását.
D Mert a `const` jelöléssel a fordító/linker a táblát a bőséges Flash kódmemóriában hagyhatja, ahelyett hogy induláskor a szűkös SRAM-ba másolná.
💡 Szakmai Indoklás:
Helyes válasz: D. Egy nem-`const` globális inicializált tömböt a C indítási rutin (startup kód) induláskor a Flash-ből az SRAM-ba másolja, mert elvileg írható kell legyen. A `const` jelöléssel a fordító tudja, hogy az adat sosem módosul, ezért közvetlenül a Flash-ben hagyhatja, és onnan olvassa (pl. `TBLRD`/`LDR` utasításokkal) — ez a szűkös SRAM-mal rendelkező MCU-knál kritikus memóriamegtakarítás.
5. Tétel • Előfeldolgozó 44 / 86
A C fordítási lánc melyik lépése kezeli a `#include` és `#define` direktívákat, és miért NEM jelez hibát, ha a behelyettesített kód szintaktikailag hibás?
A Az Előfeldolgozó (Preprocessor), mert az csak tisztán szöveges behelyettesítést és makrókifejtést végez, szintaktikai elemzés nélkül.
B A Linker, mert az csak a végleges bináris címeket ellenőrzi.
C Az Assembler, mert az csak mnemonikokat dolgoz fel.
D A Debugger, mert az csak futásidőben aktív.
💡 Szakmai Indoklás:
Helyes válasz: A. Az Előfeldolgozó a fordítási lánc legelső lépése: kizárólag szöveges műveleteket (fájlbeillesztés, makrókifejtés, feltételes fordítás) végez, magát a nyelvtant nem érti — ezért a kimenetében (.i fájl) lévő szintaktikai hibákat csak a következő lépés, a tényleges Fordító (Compiler) veszi észre.
6. Tétel • Bootloader Integritás 45 / 86
Mi véd meg egy Bootloaderrel ellátott rendszert attól, hogy egy megszakadt vagy zajos firmware-letöltés után a mikrovezérlő hibás, félig felírt programmal induljon el?
A A Watchdog Timer automatikusan visszaállítja az előző firmware-t.
B A PIC18 hardvere fizikailag megakadályozza a hibás Flash-írást.
C A Bootloader a teljes átvitel után CRC32/ellenőrzőösszeg-vizsgálatot végez, és csak akkor ugrik az új alkalmazásra (vagy jelzi érvényesnek), ha az egyezik a várt értékkel; hiba esetén törli a hibás területet és hibaállapotot jelez.
D A firmware fájlokat mindig titkosítva kell tárolni, ez önmagában garantálja az épséget.
💡 Szakmai Indoklás:
Helyes válasz: C. A robusztus bootloader-tervezés kulcseleme az integritásellenőrzés: a teljes új image átvitele után egy CRC32 (vagy egyszerűbb checksum) összevetésével dönt arról, hogy a Flash tartalma ép-e. Csak sikeres ellenőrzés után jelöli meg "érvényesnek" (vagy ugrik rá), különben megelőzi az indulást és hibaállapotot (pl. LED villogás) jelez, elkerülve a "half-flashed brick" állapotot.
6. Tétel • SWD Interfész 46 / 86
Az ARM Cortex-M mikrovezérlők SWD (Serial Wire Debug) interfésze hány aktív jelvezetéket igényel, kiváltva ezzel a hagyományos 20 lábas JTAG csatlakozót?
A 5 vonalat (TDI, TDO, TCK, TMS, TRST)
B Mindössze 2 aktív vonalat (SWCLK, SWDIO), a táp- és testvezetékeken felül
C 1 vezetéket, mert az SWD egyvezetékes protokoll
D 4 vezetéket, megegyezően a SPI busszal
💡 Szakmai Indoklás:
Helyes válasz: B. Az SWD mindössze két aktív jelvezetéket használ: SWCLK (órajel) és SWDIO (kétirányú, soros adatvonal), a táp/test lábak mellett. Ez a hagyományos, akár 20 lábas JTAG interfészhez képest drasztikus lábszám-csökkentést jelent, ezért terjedt el általánosan a Cortex-M eszközöknél.
7. Tétel • Step Into vs. Step Over 47 / 86
Mi a különbség a debuggerben a "Step Into" és a "Step Over" parancs között, amikor a soron következő C sor egy függvényhívás?
A Nincs különbség, a két parancs teljesen egyenértékű.
B "Step Into" belép a hívott függvény belsejébe, és ott is utasításonként/soronként halad tovább; "Step Over" a teljes függvényt egyben lefuttatja, és csak a visszatérés után áll meg a hívó kód következő során.
C "Step Over" töröl egy hardveres töréspontot, "Step Into" hozzáad egyet.
D "Step Into" csak Assembly kódnál, "Step Over" csak C kódnál működik.
💡 Szakmai Indoklás:
Helyes válasz: B. A "Step Into" a hívott függvény első utasításánál áll meg, lehetővé téve annak belső nyomkövetését. A "Step Over" ezzel szemben a teljes függvényhívást (annak minden belső utasításával együtt) egy műveletként hajtja végre a háttérben, és csak a hívási pontra való visszatéréskor, a következő sornál áll meg — hasznos, ha egy már bevizsgált/megbízható könyvtári függvény belsejét nem akarjuk nyomon követni.
7. Tétel • Live Watch 48 / 86
Mi a "Live Watch" (valós idejű figyelőablak) funkció legfőbb hozzáadott értéke egy hagyományos, megálláskor kiolvasott Watch ablakhoz képest?
A A Live Watch képes módosítani a program forráskódját futás közben.
B A Live Watch kizárólag konstans (`const`) változókat tud megjeleníteni.
C A Live Watch a CPU futásának megállítása (Halt) nélkül, periodikusan kiolvassa a kiválasztott változók/regiszterek értékét a memóriáról, miközben a program valós időben, zavartalanul fut tovább.
D A Live Watch automatikusan hardveres töréspontot helyez el minden globális változóra.
💡 Szakmai Indoklás:
Helyes válasz: C. A hagyományos Watch ablak csak akkor mutat érvényes értéket, ha a CPU meg van állítva egy töréspontnál. A Live Watch ezzel szemben a debug interfészen (pl. SWD/ICSP) keresztül, a mag megállítása nélkül, háttérben mintavételezi a memóriát — ez nélkülözhetetlen, amikor egy időzítéskritikus (pl. ISR-ben módosított `volatile` flag) változó valós idejű viselkedését kell megfigyelni anélkül, hogy a megállítás megzavarná a rendszer időzítését.
8. Tétel • LL Driverek 49 / 86
Hogyan helyezkednek el az LL (Low-Layer) driverek a HAL és a közvetlen regiszterkezelés között sebesség és hordozhatóság tekintetében?
A Az LL driverek lassabbak, mint a HAL, de teljesen hordozhatók bármely gyártó eszközére.
B Az LL driverek pontosan ugyanazt a kódméretet és sebességet nyújtják, mint a HAL, csak más névkonvenciót használnak.
C Az LL driverek vékony, gyakran inline függvényekként a regiszterek köré csomagolt wrapperek: közel akkora sebességet és kis kódméretet biztosítanak, mint a közvetlen regiszterírás, miközben olvashatóbb, gyártóspecifikus API-t adnak, mint a nyers bitmaszkolás.
D Az LL driverek kizárólag szimulációs környezetben használhatók, valós hardveren nem.
💡 Szakmai Indoklás:
Helyes válasz: C. Az LL (Low-Layer) réteg tudatosan a sebesség/olvashatóság kompromisszumot célozza meg: vékony, sokszor inline függvényhívásokba csomagolt regiszterműveletek (pl. LL_GPIO_SetOutputPin), amelyek a fordító optimalizálása után gyakorlatilag ugyanolyan gyorsak és kicsik, mint a nyers TRISB=0; PORTB=1; kód, de nem gyártófüggetlenek, mint a CMSIS.
8. Tétel • Közvetlen Regiszterkezelés 50 / 86
Mi a legnagyobb hátránya, ha egy komplex projektben mindent kizárólag közvetlen regiszterkezeléssel (pl. `TRISB=0; PORTB=1;`) írunk meg, HAL/LL réteg nélkül?
A A közvetlen regiszterkezelés mindig lassabb, mint a HAL használata.
B A kód erősen hardverfüggő és nem hordozható: egy másik MCU családra (vagy akár egy másik lábkiosztásra) váltáskor a kód nagy részét újra kell írni, és nehezebb karbantartani nagy csapatban.
C A közvetlen regiszterkezelés nem képes bitszintű műveletekre.
D A közvetlen regiszterkezelés nagyobb Flash-felhasználást eredményez, mint a HAL.
💡 Szakmai Indoklás:
Helyes válasz: B. A közvetlen regiszterkezelés a leggyorsabb és legkisebb kódméretű megoldás, de teljesen az adott chip konkrét regisztertérképéhez kötött. Egy chipváltás vagy csapaton belüli megosztás esetén ez megnehezíti a karbantartást és hordozhatóságot — pontosan ez az a hátrány, amit a HAL/LL/CMSIS rétegek hivatottak orvosolni, a sebesség/kódméret rovására.
9. Tétel • Schmitt-trigger Bemenet 51 / 86
Miért használnak Schmitt-triggeres komparátort a mikrovezérlő digitális bemeneti fokozatában, egyszerű küszöbszintes komparátor helyett?
A Mert a Schmitt-trigger analóg feszültséget mér, nem csak digitális szintet.
B Mert a Schmitt-trigger hiszterézist (két különböző, felfutó és lefutó kapcsolási küszöböt) vezet be, ami megakadályozza, hogy lassan változó vagy zajos jel a küszöb közelében többszörös, hamis állapotváltásokat generáljon.
C Mert a Schmitt-trigger csökkenti a láb áramfelvételét nulla közelébe.
D Mert a Schmitt-trigger nélkül a láb nem tudna bemenetként működni.
💡 Szakmai Indoklás:
Helyes válasz: B. Egy sima komparátornál egyetlen küszöbérték körüli lassú jelváltozás vagy zaj a küszöböt sokszor átlépve többszörös, hamis logikai átbillenéseket okozna. A Schmitt-trigger két külön küszöböt (magasabbat felfutásnál, alacsonyabbat lefutásnál) alkalmaz, ami stabil, egyértelmű "0"/"1" döntést biztosít még lassan változó vagy zajos jelek (pl. nyomógomb, hosszú vezeték) esetén is.
9. Tétel • TRISx Regiszter 52 / 86
Mi történik, ha a TRISB = 0xFF; utasítást hajtjuk végre egy PIC18F4620-on?
A A teljes PORTB mind a 8 lába bemenetként (High-Z, lebegő állapotú) konfigurálódik.
B A teljes PORTB mind a 8 lába kimenetként konfigurálódik, és mindegyik magas szintre áll.
C Az utasítás letiltja a PORTB belső felhúzó ellenállásait.
D Az utasítás az ADC csatornákat digitálisra állítja át PORTB-n.
💡 Szakmai Indoklás:
Helyes válasz: A. A TRISx (Tri-State) regiszterben az '1' bit jelenti a bemenetet (Input), a '0' bit a kimenetet (Output) — a betűk kezdőbetűjére emlékeztetve. A 0xFF minden bitet 1-re állít, tehát a teljes PORTB minden lába bemenetként, nagy impedanciájú (High-Z) állapotba kerül.
10. Tétel • Prescaler vs. Postscaler 53 / 86
Mi a különbség a Timer2 modul Prescalere és Postscalere között?
A A kettő pontosan ugyanazt a funkciót látja el, csak eltérő néven.
B A Prescaler csak a Timer0-nál, a Postscaler csak a Timer2-nél létezik.
C A Prescaler a bejövő órajelet osztja le, MIELŐTT a számlálóregisztert (TMR2) inkrementálná; a Postscaler a TMR2/PR2 egyezési (overflow/match) eseményeket osztja le, MIELŐTT beállítaná a megszakításjelző bitet (TMR2IF).
D A Postscaler a CCP modul PWM kimeneti feszültségét osztja le.
💡 Szakmai Indoklás:
Helyes válasz: C. A két osztó a jelút két különböző pontján hat: a Prescaler "előtte" van, tehát csökkenti azt a frekvenciát, amivel maga a számláló nő (befolyásolja a PWM periódusidejét is); a Postscaler "utána" van, csak azt szabályozza, hány egyezés/túlcsordulás után generálódjon ténylegesen megszakítási flag, a számlálás sebességét nem érinti.
10. Tétel • Timer0 Bitmódok 54 / 86
Melyik konfigurációs bit szabályozza, hogy a PIC18 Timer0 modulja 8 bites vagy 16 bites számlálóként működjön?
A TMR0IF, a Timer0 megszakítási flag bit
B PSA, a prescaler hozzárendelését szabályozó bit
C ADFM, az ADC eredmény igazítási bitje
D T08BIT, a T0CON regiszterben található bit
💡 Szakmai Indoklás:
Helyes válasz: D. A T0CON regiszter T08BIT bitje választja ki a Timer0 üzemmódját: 1 = 8 bites számláló (csak TMR0L aktív), 0 = 16 bites számláló (TMR0H:TMR0L regiszterpár). A PSA a prescaler be/kikapcsolását, nem a bitszélességet dönti el, a másik két opció teljesen más perifériához tartozik.
11. Tétel • RTC Alarm Funkció 55 / 86
Milyen célt szolgál egy RTC IC beépített Ébresztési (Alarm) funkciója beágyazott, energiatakarékos alkalmazásokban?
A Automatikusan törli az EEPROM tartalmát a beállított időpontban.
B A beállított időpont bekövetkezésekor hardveres megszakítást (interrupt) generál, amivel a mikrovezérlő felébreszthető mély Sleep állapotból anélkül, hogy folyamatosan pollingoznia kellene az órát.
C Az Alarm funkció növeli az óra pontosságát 32.768 kHz fölé.
D Az Alarm funkció automatikusan szinkronizálja az órát egy NTP szerverrel.
💡 Szakmai Indoklás:
Helyes válasz: B. Az Alarm funkció lényege az energiatakarékosság: a mikrovezérlő nyugodtan alhat (Sleep/Standby), mert nem kell folyamatosan ébren maradnia és lekérdeznie az időt — az RTC saját magától, hardveresen jelez (interrupt/láb-billentés) a beállított időpont elérésekor, ami felébreszti a rendszert a tényleges feladat elvégzésére.
11. Tétel • Szökőév Korrekció 56 / 86
A tipikus dedikált RTC IC-k (pl. DS3231, DS1307) hardveresen, automatikusan meddig kezelik helyesen a szökőéveket?
A 2038-ig (a UNIX time 32 bites túlcsordulásáig)
B 2050-ig
C 2099-ig
D A szökőévet sosem kezelik automatikusan, mindig szoftveres korrekció szükséges
💡 Szakmai Indoklás:
Helyes válasz: C. A dedikált RTC lapkák belső naptárlogikája hardveresen kezeli a hónapok eltérő hosszát és a szökőéveket egy egyszerűsített, 100 évig érvényes szabály alapján, jellemzően 2099-ig — ez a gyakori adatlapi specifikáció, amit a mikrovezérlős kurzus is tanít.
12. Tétel • PWM 10 bites Felbontás 57 / 86
Melyik regiszterpár együttes tartalma határozza meg a PIC18 CCP modul teljes, 10 bites PWM kitöltési tényezőjét?
A CCPR1L (felső 8 bit) és CCP1CON<5:4> (alsó 2 bit)
B Kizárólag a PR2 regiszter 10 bitje
C TMR2 és T2CON együttesen
D ADRESH és ADRESL regiszterpár
💡 Szakmai Indoklás:
Helyes válasz: A. A hardver a 10 bites duty cycle értéket két helyen tárolja: a felső 8 bitet a CCPR1L regiszterben, az alsó 2 bitet pedig a CCP1CON regiszter 5:4 pozíciójú bitjeiben. A szoftvernek mindkét helyre írnia kell a teljes felbontás kihasználásához (lásd Labor 2 set_motor_speed_and_dir() függvényét).
12. Tétel • Compare Mód Alkalmazása 58 / 86
A PWM-en és a kimeneti láb automatikus állapotváltásán túl mire lehet még hasznosan felhasználni a CCP modul Compare üzemmódját?
A Egy külső jel periódusidejének közvetlen mérésére.
B Egy pontosan időzített, előre kiszámított TMR1 értéknél bekövetkező szoftveres eseményindításra — pl. egy ADC-konverzió pontos, jitter-mentes triggerelésére.
C Az I2C busz sebességének növelésére.
D Az EEPROM írási ciklusok számának csökkentésére.
💡 Szakmai Indoklás:
Helyes válasz: B. Mivel a Compare mód hardveresen, CPU-beavatkozás nélkül, pontosan a Timer1 adott értékénél generál eseményt (megszakítást vagy kimeneti láb váltást), ideális egy jitter-mentes, előre kiszámítható időpontban induló művelet (pl. ADC trigger) elindítására — sokkal pontosabb, mint egy szoftveres időzítésre hagyatkozó megoldás. A periódusidő-mérés a Capture, nem a Compare mód feladata.
13. Tétel • ADC Felbontás 59 / 86
Egy 10 bites ADC-nél, 5V-os referenciafeszültség mellett, kb. mekkora feszültségváltozást (1 LSB) jelent az ADC eredményének 1 egységgel való növekedése?
A 48.8 mV
B 0.488 mV
C kb. 4.88 mV
D 500 mV
💡 Szakmai Indoklás:
Helyes válasz: C. 10 biten 210 = 1024 kvantálási szint létezik. Az 1 LSB feszültségérték: ULSB = VREF/1024 = 5.0V/1024 ≈ 4.88 mV — vagyis az ADC eredménye minden kb. 4.88 mV bemeneti feszültségváltozásra 1-gyel nő.
13. Tétel • ADFM Igazítás 60 / 86
Mit befolyásol az ADCON2 regiszter ADFM bitje?
A Hogy a 10 bites érvényes eredmény az ADRESH:ADRESL 16 bites regiszterpáron belül jobbra vagy balra igazítva helyezkedjen el.
B Az ADC konverzió indítási forrását (szoftveres GO/DONE vagy hardveres trigger).
C Az ADC referenciafeszültségének kiválasztását (belső vagy külső Vref).
D Az analóg csatorna (CHS3:CHS0) kiválasztását.
💡 Szakmai Indoklás:
Helyes válasz: A. Mivel a 10 bites eredmény egy 16 bites regiszterpárba (ADRESH:ADRESL) kerül, valahogyan el kell dönteni, hogy a 6 "felesleges" bit hol legyen. ADFM=1 esetén jobbra igazított (a 10 bit az alsó helyeken van, a felső 6 bit nullázott), ADFM=0 esetén balra igazított az eredmény. A referencia a VCFG, az indítás a GO/DONE, a csatorna a CHS bitek dolga.
14. Tétel • IPEN Kompatibilitási Mód 61 / 86
Mi történik, ha a PIC18-on RCONbits.IPEN = 0 (kompatibilitási mód, prioritásrendszer letiltva)?
A Minden megszakítás teljesen letiltásra kerül, egy sem futhat le.
B Csak egyetlen közös megszakítási vektor létezik a 0x0008 címen; minden engedélyezett forrás ide ugrik, az IPR regiszterek prioritásbeállításai nem érvényesülnek.
C Az összes megszakítás automatikusan magas prioritásúvá válik és egymást is megszakíthatják korlátlanul.
D A Watchdog Timer automatikusan letiltásra kerül.
💡 Szakmai Indoklás:
Helyes válasz: B. Az IPEN=0 kompatibilitási mód a régebbi PIC16-stílusú, egyszintű megszakításkezelést valósítja meg: nincs magas/alacsony prioritás megkülönböztetés, minden engedélyezett interrupt forrás a hagyományos 0x0008 vektorra fut be, függetlenül attól, mit állítottunk be az IPR1/IPR2 regiszterekben.
14. Tétel • Globális Interrupt Enable 62 / 86
Prioritásos módban (IPEN=1) mi mind szükséges ahhoz, hogy egy adott perifériaesemény (pl. Timer0 túlcsordulás) ténylegesen magas prioritású megszakítást váltson ki?
A Elegendő, ha csak a perifériaegység saját flagje (pl. TMR0IF) 1-re áll.
B Elegendő, ha csak a globális GIEH bit van engedélyezve.
C Elegendő, ha csak a perifériaegység egyedi engedélyező bitje (pl. TMR0IE) van beállítva.
D Mindhárom feltétel egyszerre szükséges: a perifériaegység egyedi engedélyező bitje (IE), a hozzárendelt prioritás magasra állítása (IP), ÉS a globális magas prioritású engedélyező bit (INTCONbits.GIEH) is be kell legyen kapcsolva.
💡 Szakmai Indoklás:
Helyes válasz: D. A PIC18 megszakításvezérlése egy háromszintű "ÉS kapcsolat": a Flag (IF) csak jelez, de nem indít semmit önmagában; az Enable (IE) bit nélkül a flag nem jut el a CPU-ig; és a globális GIEH/GIEL nélkül még az engedélyezett, megfelelő prioritású források sem futhatnak le. Mindhárom feltételnek egyszerre kell teljesülnie.
15. Tétel • Framing Error 63 / 86
Mi váltja ki jellemzően a Framing Error (FERR) jelzőbit beállítását egy UART/EUSART vevőben?
A A vevő a Stop bit várt időpillanatában nem magas, hanem alacsony szintet érzékel — jellemzően baud rate eltérés vagy zajos vonal miatt.
B A CPU túl gyorsan olvassa ki az RCREG regisztert.
C A felhasználó véletlenül kétszer hívta meg az `init_uart()` függvényt.
D A TX és RX vezetékek fel vannak cserélve.
💡 Szakmai Indoklás:
Helyes válasz: A. A vevő a bitidők alapján pontosan tudja, mikor "kellene" érkeznie a Stop bitnek (ami mindig magas szint). Ha ezen a ponton mégis alacsony szintet mér, az arra utal, hogy a bitidőzítés elcsúszott — tipikusan az adó és vevő közötti Baud Rate eltérés (a megengedett kb. ±2.5%-nál nagyobb hiba) vagy vonalzaj miatt —, ekkor áll be a FERR flag.
15. Tétel • Baud Rate Hibatűrés 64 / 86
Kb. mekkora a maximálisan megengedhető órajel-eltérési (Baud Rate) hiba az adó és a vevő EUSART egység között, hogy a kommunikáció még megbízható maradjon?
A ±25%
B ±10%
C kb. ±2.5%
D Pontosan 0%, a két órajelnek bit-azonosnak kell lennie.
💡 Szakmai Indoklás:
Helyes válasz: C. Mivel az UART aszinkron (nincs közös órajel), a vevő a saját, belső órajelére hagyatkozva mintavételezi az egyes bitek közepét egy teljes bájt (Start + 8 adat + Stop bit) időtartama alatt. A felhalmozódó fáziscsúszás miatt az adó és vevő SPBRG-ből számított tényleges Baud Rate-je között kb. ±2.5%-nál nagyobb eltérés esetén már a Stop bit mintavételezése rossz bitre csúszhat, Framing Error-t okozva.
16. Tétel • SPI Mode 0 (CPOL/CPHA) 65 / 86
Az SPI "Mode 0" beállításnál (CPOL=0, CPHA=0) mikor mintavételezik az adatbitet a shift regiszterek?
A Az órajel második (lefutó) élén, miközben az órajel alaphelyzetben magas szintű.
B Az órajel első (felfutó) élén, miközben az órajel alaphelyzetben (nyugalmi állapotban) alacsony szintű.
C Csak az átvitel legvégén, egyetlen összesített mintavétellel.
D Az SPI Mode 0-ban nincs is órajel, aszinkron módon történik az átvitel.
💡 Szakmai Indoklás:
Helyes válasz: B. CPOL=0 azt jelenti, hogy az órajel nyugalmi (inaktív) állapotban alacsony szintű. CPHA=0 azt jelenti, hogy a mintavételezés az első (ez esetben felfutó) élen történik. Ez a leggyakoribb, alapértelmezett SPI mód, amit a legtöbb SD-kártya és perifériaeszköz is támogat.
16. Tétel • I2C Nyugtázás (ACK) 66 / 86
Konkrétan milyen buszesemény jelenti az I2C ACK (nyugtázás) jelet a 9. órajelimpulzus alatt?
A Az adó egy külön "ACK" bájtot küld el a 8 adatbit után.
B Az SCL vonal 2 további órajelciklusra megnyúlik.
C A fogadó fél a 9. órajelimpulzus alatt alacsonyra húzza (lehúzza) az SDA vonalat.
D Az adó rövid időre megszakítja az SCL vonalat.
💡 Szakmai Indoklás:
Helyes válasz: C. Minden átvitt 8 bit (1 bájt) után a küldő fél elengedi az SDA vonalat, és a 9. órajelimpulzus alatt a FOGADÓ fél húzza azt alacsonyra, jelezve, hogy sikeresen vette a bájtot (ACK = 0). Ha a fogadó NEM húzza le (SDA magas marad), az NACK-ot (nyugtázás elmaradását) jelent — ezt használja ki a Labor 5 kódja is az utolsó bájt olvasásakor.
17. Tétel • SD Inicializálás (CMD8) 67 / 86
Mi a célja a CMD8 (SEND_IF_COND) parancs elküldésének az SD-kártya SPI módú inicializálási szekvenciájában, közvetlenül a CMD0 után?
A Ellenőrzi a kártya támogatott feszültségtartományát és megerősíti az SD 2.0-s (vagy újabb) verziószabvány kompatibilitást, mielőtt a host az ACMD41-gyel folytatná az inicializálást.
B Ez a parancs formázza a teljes SD-kártyát FAT32 fájlrendszerre.
C Ez a parancs írja az első 512 bájtos szektort a kártyára.
D A CMD8 kapcsolja át a kártyát natív 4 bites SD buszmódba.
💡 Szakmai Indoklás:
Helyes válasz: A. A CMD8 egy feltételellenőrző parancs: a host közli a működési feszültségtartományt és egy ellenőrző mintát, a kártya válaszából pedig kiderül, hogy az újabb (SD 2.00+, ezért CMD8-at ismerő) vagy régebbi (SD 1.x) szabványt követi-e a kártya — ez befolyásolja a további inicializálási lépések (pl. ACMD41 paraméterezésének) menetét.
17. Tétel • SD Blokkméret 68 / 86
Hány bájtos az a fix méretű nyers szektor, amelyet a CMD17 (READ_SINGLE_BLOCK) és CMD24 (WRITE_BLOCK) parancsok jellemzően egyszerre mozgatnak egy SD-kártyán?
A 256 bájt
B 512 bájt
C 4096 bájt
D 64 bájt
💡 Szakmai Indoklás:
Helyes válasz: B. Az SD-kártyák szabványos blokkmérete 512 bájt — ez az az egység, amit a CMD16 (SET_BLOCKLEN) jellemzően be is állít, és amit a FAT fájlrendszer klasztereinek felépítésénél is alapegységként kezelnek a FatFs-hez hasonló könyvtárak.
Labor 1 • Debounce FSM 69 / 86
A laborfeladatok oldalán szereplő debounce_task_10ms() állapotgépet miért kell pontosan egy 10 ms periódusú Timer megszakításból meghívni, ahelyett hogy a main() ciklus hívná olyan gyakran, ahogy csak lehet?
A Mert a `switch-case` szerkezet csak megszakításban futtatható helyesen.
B Mert a PORTBbits.RB0 csak megszakításból olvasható.
C Mert a debounce logika (`timer = 2`) a lenyomás érvényesítéséhez pontosan 2×10 ms = 20 ms ISMERT és FIX időtartamú mintavételi periódusra épít; ha a `main()` ciklus terhelésfüggő, változó sebességgel hívná, a tényleges szűrési idő kiszámíthatatlanná válna.
D Mert a `static` kulcsszóval deklarált változók csak ISR-ben inicializálódnak helyesen.
💡 Szakmai Indoklás:
Helyes válasz: C. A kód a timer változó lecsökkentésével számolja a szükséges 20 ms-os szűrési ablakot, feltételezve, hogy minden hívás pontosan 10 ms-ot jelent. Ha a függvényt a main() ciklusból, változó sebességgel hívnánk (ami függ az egyéb feladatok futási idejétől), a ténylegesen eltelt szűrési idő kiszámíthatatlan lenne — ez pontosan az az ok, amiért egy stabil, hardveres Timer megszakítás a helyes megoldás.
Labor 2 • PWM Motorvezérlés 70 / 86
A laborkód set_motor_speed_and_dir() függvényében miért kell a `speed` értéket kettébontani (`speed >> 2` a CCPR1L-be, `speed & 0x03` a CCP1CON<5:4>-be), ahelyett hogy egyetlen regiszterbe írnánk?
A Mert a PIC18 fordítója nem támogat 10 bites egész típusokat.
B Mert a CCP hardver a 10 bites PWM kitöltési értéket fizikailag két különálló helyen tárolja: 8 bitet a `CCPR1L`-ben, 2 bitet a `CCP1CON` regiszter felső biteiben — a szoftvernek ehhez a hardveres felosztáshoz kell igazodnia.
C Mert így csökkenthető a motor által felvett áram.
D Ez a felbontás opcionális, csak olvashatósági célt szolgál, funkcionálisan felesleges.
💡 Szakmai Indoklás:
Helyes válasz: B. Ez nem szoftveres döntés, hanem a CCP hardver regiszter-felépítéséből fakadó kényszer (lásd 12. Tétel / Q57): a 10 bites duty cycle-nek 8 bitje a CCPR1L-ben, 2 bitje pedig a CCP1CON<5:4>-ben helyezkedik el, ezért a 10 bites `speed` értéket a kódnak manuálisan szét kell darabolnia a két regiszter között a teljes felbontás kihasználásához.
Labor 3 • Mozgóátlag Szűrő 71 / 86
A laborkód get_filtered_adc() függvényében miért vonja ki a program a `buffer[idx]` régi értékét a `sum`-ból, MIELŐTT felülírná azt az új mintával?
A Ez egy hibás sorrend a kódban, helyesen csak összeadni kellene, kivonás nélkül.
B Mert ez egy csúszóablakos (16 elemű körpufferre épülő) mozgóátlag: a `sum`-nak mindig csak a legutóbbi 16 minta összegét szabad tartalmaznia, ezért a kicserélendő (legrégebbi) mintát ki kell vonni, mielőtt az új belépne, különben a `sum` folyamatosan és tévesen növekedne.
C Mert az ADC csak negatív értékeket ad vissza páros indexeknél.
D Mert a kivonás gyorsabb művelet, mint az osztás a `sum / FILTER_SIZE` sorban.
💡 Szakmai Indoklás:
Helyes válasz: B. Ez egy klasszikus, hatékony (O(1) költségű) csúszóablakos átlagszámítási technika: a `sum` mindig pontosan a puffer 16 aktuális elemének összegét tükrözi. Ha a régi értéket nem vonnánk ki, a `sum` idővel folyamatosan nőne (minden korábbi mintát is tartalmazna), és az eredmény már nem a legutóbbi 16 minta átlaga, hanem egy hibásan felduzzasztott érték lenne.
Labor 4 • UART Overrun Kezelés 72 / 86
A laborkód `HighISR()` UART vételi rutinjában miért ki- majd visszakapcsolja (CREN = 0; majd CREN = 1;) a vevőt, ha az OERR (Overrun Error) bit beállt?
A Ez csökkenti az energiafogyasztást vétel közben.
B Ez állítja be az UART Baud Rate-jét futás közben.
C Az OERR flag beállása után a hardver leblokkolja a további vételt; az RCREG puszta kiolvasása NEM törli az OERR-t, ezért a vevőt (CREN) szoftveresen ki, majd vissza kell kapcsolni a hiba nyugtázásához és a vétel folytatásához.
D Ez a művelet töröli a teljes körpuffer tartalmát minden hiba esetén.
💡 Szakmai Indoklás:
Helyes válasz: C. Az EUSART hardvere túlcsordulás (a CPU nem volt elég gyors kiolvasni az előző bájtot) esetén beállítja az OERR bitet és leállítja a további vételt, amíg ezt szoftveresen nem nyugtázzák. Mivel az OERR nem törlődik automatikusan az RCREG olvasásával, a szabványos eljárás a CREN bit letiltása, majd újbóli engedélyezése, ami törli a hibaállapotot és újraindítja a folyamatos vételt.
Labor 4 • Körpuffer Tele Állapot 73 / 86
A laborkód UART ISR-jében miért ellenőrzi a program a if (next_head != rx_tail) feltételt, mielőtt az új bájtot beírná a körpufferbe?
A Ez ellenőrzi, hogy a Baud Rate helyesen van-e beállítva.
B Ez a teli puffer állapot detektálása: ha a `head` utolérné a `tail`-t, az azt jelentené, hogy a kör körbeért és felülírná a még ki nem olvasott legrégebbi adatot; ezért ilyenkor a program inkább eldobja az új, éppen beérkezett bájtot, mint hogy korrumpálja a meglévő, még fel nem dolgozott adatokat.
C Ez ellenőrzi, hogy érkezett-e Stop bit.
D Ez a feltétel mindig igaz, gyakorlati szerepe nincs, csak védekező programozási stílus.
💡 Szakmai Indoklás:
Helyes válasz: B. Körkörös pufferben, ha a `head` (írási pozíció) körbeérve utolérné a `tail`-t (olvasási pozíció), az megkülönböztethetetlen lenne az "üres" állapottól, és a legrégebbi, még ki nem olvasott adat felülíródna. A kód ezért inkább feláldozza az éppen beérkező új bájtot (eldobja), mint hogy csendben adatvesztést/korrupciót okozzon a már pufferben lévő, régebbi adatokban.
Labor 5 • I2C Utolsó Bájt NACK 74 / 86
Az i2c_read_sensor_reg() laborkódban miért küld a Master kifejezetten NACK-ot (nem ACK-ot) az utolsó, olvasott bájt után, közvetlenül a STOP feltétel előtt?
A Mert a NACK jelzi a szenzornak, hogy hibás volt az átvitel, és meg kell ismételni.
B Mert az I2C protokoll szerint az utolsó bájt átvitele mindig NACK-kal kezdődik, nem végződik.
C Mert az I2C protokollban a Master ACK-ja azt jelenti a Slave-nek: "kérek még egy bájtot"; ha az utolsó, kívánt bájt után is ACK menne, a Slave megpróbálna további (nem kívánt) bájtokat kiküldeni. A NACK jelzi a Slave-nek, hogy engedje el az SDA vonalat, hogy a Master STOP-ot adhasson.
D Mert a NACK csökkenti az I2C busz órajel-frekvenciáját 100 kHz-ről 10 kHz-re.
💡 Szakmai Indoklás:
Helyes válasz: C. Olvasáskor a nyugtázás iránya megfordul: a Master nyugtázza a Slave-től kapott bájtokat. Egy Master-oldali ACK a Slave számára azt jelenti, "folytasd, küldj még egy bájtot" — ez helyes közbenső bájtoknál, de az utolsó, kívánt bájt után hibás lenne, mert a Slave további adatot próbálna küldeni, ütközve a Master által ezután kiadott STOP feltétellel. A NACK egyértelműen jelzi a Slave-nek az átvitel lezárását.
12. Tétel • Számítás: PWM Frekvencia 75 / 86
Egy PIC18F4620 rendszerben FOSC = 20 MHz, PR2 = 249, és a Timer2 előosztója (prescaler) 1:4. Mekkora a keletkező PWM jel frekvenciája?
A 20 kHz
B 20 MHz
C 5 kHz
D 1.25 kHz
💡 Szakmai Indoklás:
Helyes válasz: C. fPWM = FOSC / (4 × (PR2+1) × Prescaler) = 20000000 / (4 × 250 × 4) = 20000000 / 4000 = 5000 Hz = 5 kHz.
12. Tétel • Számítás: PWM Kitöltés 76 / 86
Ugyanennél a PWM beállításnál (PR2 = 249) a 10 bites kitöltési regiszter (CCPR1L:CCP1CON<5:4>) tartalma decimálisan 500. Hány százalékos a kitöltési tényező (Duty Cycle)?
A 20%
B 50%
C 100%
D 5%
💡 Szakmai Indoklás:
Helyes válasz: B. Duty(%) = [10 bit érték / (4 × (PR2+1))] × 100 = [500 / (4 × 250)] × 100 = (500 / 1000) × 100 = 50%.
15. Tétel • Számítás: SPBRG 77 / 86
FOSC = 16 MHz, a kívánt Baud Rate 9600, alacsony sebességű módban (BRGH=0, BRG16=0, osztó = 64). Mennyi legyen az SPBRG regiszterbe töltött (kerekített) érték? (Ez a gyártói adatlap saját, hivatalos példaszámítása.)
A 25
B 51
C 103
D 9
💡 Szakmai Indoklás:
Helyes válasz: A. SPBRG = (FOSC/Baud / 64) - 1 = (16000000/9600 / 64) - 1 = (1666.67 / 64) - 1 = 26.04 - 1 = 25.04 ≈ 25. A tényleges Baud Rate ekkor 16000000/[64 × 26)] ≈ 9615, a hiba mindössze (9615-9600)/9600 ≈ 0.16% — ez pontosan a PIC18F4620 adatlap saját, hivatkozott számpéldája.
13. Tétel • Számítás: ADC Feszültség 78 / 86
Egy 10 bites ADC konverzió eredménye (ADRESH:ADRESL, jobbra igazítva) decimálisan 512. A referenciafeszültség VREF = 5.0V. Kb. mekkora volt a mért analóg bemeneti feszültség?
A 5.0 V
B 1.0 V
C 0.5 V
D 2.5 V
💡 Szakmai Indoklás:
Helyes válasz: D. VIN = (ADC érték / 1024) × VREF = (512 / 1024) × 5.0V = 0.5 × 5.0V = 2.5V. Az 512 pontosan a 10 bites tartomány (0–1023) fele, ezért a referencia felét, 2.5V-ot jelent.
11. Tétel • Számítás: Órakvarc Osztás 79 / 86
A 32.768 kHz-es RTC kvarc jelét egy bináris osztólánc osztja. Mekkora frekvenciát kapunk a 15 fokozatból álló láncnak csak az első 8 fokozata után (azaz 28-cal osztva)?
A 1 Hz
B 128 Hz
C 256 Hz
D 4096 Hz
💡 Szakmai Indoklás:
Helyes válasz: B. 32768 ÷ 28 = 32768 ÷ 256 = 128 Hz. A teljes 1 Hz-es kimenethez mind a 15 fokozatra szükség van (32768/215=1), 8 fokozat után csak 215-8=27=128-szoros osztás valósult meg, innen a 32768/256 nem 1 Hz, hanem 128 Hz.
10. Tétel • Számítás: WDT Timeout 80 / 86
A PIC18F4620 Watchdog Timerének névleges alapperiódusa 4 ms. Ha a WDT postscalerét 1:128 arányra állítjuk, mennyi lesz a tényleges WDT timeout (az idő, ami után CLRWDT hiányában Reset következik be)?
A 4 ms
B 32 ms
C 512 ms
D 4 s
💡 Szakmai Indoklás:
Helyes válasz: C. A tényleges timeout = névleges periódus × postscaler = 4 ms × 128 = 512 ms. A WDT postscalere pontosan erre való: a 4 ms-os alapegységet 1:1-től egészen 1:32768-ig nyújthatja, hogy hosszabb, alkalmazásfüggő timeout időt kapjunk anélkül, hogy az alap RC oszcillátor frekvenciáját módosítanánk.
3. Tétel • Számítás: Utasításciklus 81 / 86
Egy PIC18F4620 FOSC = 32 MHz-en fut. Mekkora egyetlen utasításciklus (Instruction Cycle, TCY) időtartama, tudva hogy TCY = 4 × TOSC?
A 125 ns
B 31.25 ns
C 8 MHz
D 500 ns
💡 Szakmai Indoklás:
Helyes válasz: A. TOSC = 1/FOSC = 1/32000000 Hz = 31.25 ns. Az utasításciklus ennek négyszerese (mivel a PIC18 belső gépi ciklusa 4 oszcillátorperiódusból áll): TCY = 4 × 31.25 ns = 125 ns — vagyis a belső utasításvégrehajtási sebesség effektíve FOSC/4 = 8 MHz-nek felel meg.
12. Tétel • Számítás: Capture Impulzusszélesség 82 / 86
Egy ultrahangos Echo jel felfutó élénél a Capture modul TMR1 = 200-at, a lefutó élnél TMR1 = 1400-at ment el. FOSC = 8 MHz, a Timer1 belső órajelen, előosztó nélkül (1:1) fut. Kb. mekkora volt az Echo impulzus szélessége?
A 1200 s
B 150 µs
C 2400 µs
D 600 µs
💡 Szakmai Indoklás:
Helyes válasz: D. A Timer1 belső órajele (prescaler nélkül) az utasításciklussal egyezik meg: TCY = 4/FOSC = 4/8000000 = 0.5 µs/tick. A két Capture érték különbsége 1400-200=1200 tick, tehát az impulzusszélesség 1200 × 0.5 µs = 600 µs.
16. Tétel • Számítás: I2C SSPADD 83 / 86
FOSC = 20 MHz, és 100 kHz-es Standard módú I2C órajelet szeretnénk beállítani MSSP Masterként (Clock = FOSC/(4 × (SSPADD+1))). Milyen SSPADD értéket kell betölteni?
A 100
B 49
C 20
D 199
💡 Szakmai Indoklás:
Helyes válasz: B. SSPADD = FOSC / (4 × Baud) - 1 = 20000000 / (4 × 100000) - 1 = 20000000 / 400000 - 1 = 50 - 1 = 49.
15. Tétel • Számítás: UART Bájtidő 84 / 86
9600 baud sebességen, 8-N-1 keretezéssel (1 Start + 8 adatbit + 1 Stop bit = 10 bit/bájt) kb. mennyi ideig tart egyetlen bájt átvitele a vezetéken?
A 9.6 ms
B 8 ms
C kb. 1.04 ms
D 104 µs
💡 Szakmai Indoklás:
Helyes válasz: C. Egy bitidő 1/9600 ≈ 104.2 µs. Egy teljes keret (10 bit) átvitele: 10 × 104.2 µs ≈ 1042 µs ≈ 1.04 ms.
13. Tétel • Számítás: ADC Konverziós Idő 85 / 86
Az ADC órajel-periódusa (beállítás szerint) TAD = 1.6 µs. Tudva, hogy egy 10 bites konverzió az adatlap funkcionális leírása szerint 11 TAD-t vesz igénybe, mennyi ideig tart maga a konverzió (a mintavételi idő nélkül)?
A 17.6 µs
B 1.6 µs
C 11 µs
D 176 µs
💡 Szakmai Indoklás:
Helyes válasz: A. 11 × TAD = 11 × 1.6 µs = 17.6 µs. Ez a TACQ mintavételi időn felül értendő — a GO/DONE bit beállításától a konverzió tényleges befejezéséig eltelt idő.
10. Tétel • Számítás: Timer0 Túlcsordulás 86 / 86
FOSC = 4 MHz, a Timer0 16 bites módban fut, 1:64 előosztóval, 0-ról indulva. Kb. mennyi idő telik el egy teljes túlcsordulásig (65536 tick)?
A 65.536 ms
B 65.536 µs
C 419.4 ms
D kb. 4.19 s
💡 Szakmai Indoklás:
Helyes válasz: D. TCY = 4/FOSC = 1 µs. Egy Timer0 tick (1:64 előosztóval) 64 × 1 µs = 64 µs. A teljes 16 bites túlcsorduláshoz 65536 × 64 µs = 4194304 µs ≈ 4.19 s szükséges — ez mutatja, hogy nagy előosztóval és 16 bites móddal akár több másodperces periódusok is elérhetők egyetlen túlcsordulási megszakítással.