1. Tétel • Számábrázolás
1 / 136
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?
💡 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 / 136
Mi a Harvard architektúra legfőbb előnye a klasszikus Von Neumann (Princeton) architektúrával szemben?
💡 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 / 136
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?
💡 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 / 136
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?
💡 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 / 136
Mi a `volatile` kulcsszó kötelező feladata egy beágyazott C programban?
💡 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 / 136
Mi a "Vector Remapping" (vektor-átirányítás) feladata egy Bootloaderrel ellátott mikrovezérlős rendszerben?
💡 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 / 136
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?
💡 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 / 136
Mi a Watchdog Timer (WDT) működési mechanizmusa és alapvető célja?
💡 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 / 136
Miért pontosan 32.768 kHz frekvenciájú kvarckristályt alkalmaznak a valós idejű órákban (RTC)?
💡 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 / 136
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?
💡 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 / 136
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?
💡 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 / 136
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)?
💡 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 / 136
Milyen feszültségszintek reprezentálják a logikai '0' (Space) és '1' (Mark) állapotokat a szabványos RS232 fizikai interfészen?
💡 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 / 136
Hogyan definiálja az I2C protokoll a START (Kezdeti) állapot feltételét a buszon?
💡 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 / 136
Mit jelent a Full-Duplex működés az SPI (Serial Peripheral Interface) kommunikációnál?
💡 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 / 136
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?
💡 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 / 136
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?
💡 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 / 136
Mi jellemzi a "Load-Store" elvű RISC architektúrát (pl. PIC18, AVR, ARM Cortex-M) a CISC felépítéssel szemben?
💡 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 / 136
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?
💡 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 / 136
Melyik hardveres képesség különbözteti meg elsődlegesen a Cortex-M4 magot az egyszerűbb Cortex-M0/M0+ magtól?
💡 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 / 136
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?
💡 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 / 136
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?
💡 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 / 136
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?
💡 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 / 136
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)?
💡 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 / 136
Mi teszi a CMSIS (Cortex Microcontroller Software Interface Standard) réteget egyedivé a gyártófüggő HAL/LL rétegekhez képest?
💡 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 / 136
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?
💡 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 / 136
Miért használnak kifejezetten Open-Drain (nyitott nyelőjű) kimeneti fokozatot az I2C busz SDA és SCL vonalain, Push-Pull kimenet helyett?
💡 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 / 136
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?
💡 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 / 136
Mi a szerepe a különálló VBAT (tartalék akkumulátor/gombelem) bemenetnek egy dedikált RTC IC-n (pl. DS3231)?
💡 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 / 136
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?
💡 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 / 136
Mire szolgál az ADCON1 regiszter VCFG1:VCFG0 bitpárja a PIC18F4620 ADC moduljában?
💡 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 / 136
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?
💡 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 / 136
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?
💡 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 / 136
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?
💡 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 / 136
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?
💡 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 / 136
Melyik lapkát tartják az első valódi, egy szilíciumdarabon CPU-t, ROM-ot és RAM-ot egyaránt integráló mikrokontrollernek?
💡 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 / 136
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?
💡 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 / 136
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?
💡 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 / 136
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)?
💡 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 / 136
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)?
💡 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 / 136
Mi a különleges tulajdonsága az
x0 regiszternek a RISC-V RV32I utasításkészletben?
💡 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 / 136
Mi különbözteti meg elsődlegesen a Microchip dsPIC33 családot az általános célú PIC24 családtól?
💡 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 / 136
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?
💡 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 / 136
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?
💡 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 / 136
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?
💡 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 / 136
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?
💡 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 / 136
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?
💡 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 / 136
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?
💡 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 / 136
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?
💡 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 / 136
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?
💡 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 / 136
Miért használnak Schmitt-triggeres komparátort a mikrovezérlő digitális bemeneti fokozatában, egyszerű küszöbszintes komparátor helyett?
💡 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 / 136
Mi történik, ha a
TRISB = 0xFF; utasítást hajtjuk végre egy PIC18F4620-on?
💡 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 / 136
Mi a különbség a Timer2 modul Prescalere és Postscalere között?
💡 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 / 136
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?
💡 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 / 136
Milyen célt szolgál egy RTC IC beépített Ébresztési (Alarm) funkciója beágyazott, energiatakarékos alkalmazásokban?
💡 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 / 136
A tipikus dedikált RTC IC-k (pl. DS3231, DS1307) hardveresen, automatikusan meddig kezelik helyesen a szökőéveket?
💡 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 / 136
Melyik regiszterpár együttes tartalma határozza meg a PIC18 CCP modul teljes, 10 bites PWM kitöltési tényezőjét?
💡 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 / 136
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?
💡 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 / 136
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?
💡 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 / 136
Mit befolyásol az ADCON2 regiszter
ADFM bitje?
💡 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 / 136
Mi történik, ha a PIC18-on
RCONbits.IPEN = 0 (kompatibilitási mód, prioritásrendszer letiltva)?
💡 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 / 136
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?
💡 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 / 136
Mi váltja ki jellemzően a Framing Error (
FERR) jelzőbit beállítását egy UART/EUSART vevőben?
💡 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 / 136
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?
💡 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 / 136
Az SPI "Mode 0" beállításnál (
CPOL=0, CPHA=0) mikor mintavételezik az adatbitet a shift regiszterek?
💡 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 / 136
Konkrétan milyen buszesemény jelenti az I2C ACK (nyugtázás) jelet a 9. órajelimpulzus alatt?
💡 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 / 136
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?
💡 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 / 136
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?
💡 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 / 136
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?
💡 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 / 136
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?
💡 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 / 136
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?
💡 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 / 136
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?
💡 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 / 136
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?
💡 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 / 136
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?
💡 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 / 136
Egy PIC18F4620 rendszerben FOSC = 20 MHz,
PR2 = 249, és a Timer2 előosztója (prescaler) 1:4. Mekkora a keletkező PWM jel frekvenciája?
💡 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 / 136
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)?
💡 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 / 136
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.)
💡 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 / 136
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?
💡 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 / 136
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)?
💡 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 / 136
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)?
💡 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 / 136
Egy PIC18F4620 FOSC = 32 MHz-en fut. Mekkora egyetlen utasításciklus (Instruction Cycle, TCY) időtartama, tudva hogy TCY = 4 × TOSC?
💡 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 / 136
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?
💡 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 / 136
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?
💡 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 / 136
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?
💡 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 / 136
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)?
💡 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 / 136
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)?
💡 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.
Labor 6 • SPI Kijelző
87 / 136
A Labor 6 kódjában miért van szükség egy külön, szoftveresen vezérelt GPIO lábra (Latch/RCLK) a hardveres SPI SDO és SCK vonalai mellett a 74HC595 shiftregiszter meghajtásához?
💡 Szakmai Indoklás:
Helyes válasz: D. A 74HC595-nek két különálló órajele van: a shiftelő (SRCLK, amit az SPI SCK-ja hajt) és a tároló/kimeneti (RCLK, "Latch"). A shiftregiszter tartalma csak a Latch impulzus hatására másolódik át a kimeneti reteszbe — enélkül a kiszámított bitminta sosem jelenne meg a fizikai LCD vezérlővonalakon.
Labor 6 • HD44780 Inicializálás
88 / 136
A Labor 6
lcd_init_4bit() függvényében a lcd_command(0x28) hívás mit állít be a HD44780 kijelzőn?
💡 Szakmai Indoklás:
Helyes válasz: B. A
0x28 a HD44780 szabványos "Function Set" parancsa 4 bites módban: kijelöli, hogy a busz 4 bites, a kijelző 2 soros, és 5×8 pontmátrixos karaktereket használ. A törlés a 0x01, a kijelző/kurzor beállítás a 0x0C, az automatikus léptetés a 0x06 parancs feladata.
Labor 7 • Timer0 Interrupt
89 / 136
A Labor 7
handle_timer0_interrupt() rutinja miért tölti újra a TMR0H/TMR0L regisztereket az előre kiszámított értékkel minden egyes megszakításkor, ahelyett hogy hagyná a Timer0-t 0-ról szabadon tovább futni?
💡 Szakmai Indoklás:
Helyes válasz: A. A Timer0 mindig a betöltött értéktől számol felfelé egészen a túlcsordulásig (16 bitesnél 0xFFFF-ig). Az előtöltés (0xC2F7) pontosan annyi ticket hagy hátra, amennyi 250 ms-nak felel meg; ha a számláló minden alkalommal 0-ról indulna, a teljes 65536 tickes tartományt be kellene futnia, ami (1:32 előosztóval) kb. 8,4x hosszabb, kb. 4,19 s-os periódust adna a kívánt 250 ms helyett.
Labor 7 • 16 bites Regiszterírás
90 / 136
Miért fontos a sorrend, hogy a Labor 7 kódja előbb a
TMR0H, majd csak utána a TMR0L regisztert írja be egy 16 bites előtöltési érték betöltésekor?
💡 Szakmai Indoklás:
Helyes válasz: C. Ha a két bájtot két külön, nem szinkronizált műveletben írnánk, fennállna a veszélye, hogy a számláló a két írás között "elfut" egy köztes, hibás 16 bites értékkel. A pufferelt írási mechanizmus (előbb TMR0H a bufferbe, majd TMR0L a tényleges betöltést kiváltva) garantálja az atomi, konzisztens frissítést.
Labor 8 • SPI Slave Konfiguráció
91 / 136
A Labor 8 Slave kártyájának kódja miért az
SSPM3:SSPM0 = 0100 értéket használja (SS pin vezérlés engedélyezve) a 0101 (SS pin vezérlés letiltva) helyett?
💡 Szakmai Indoklás:
Helyes válasz: B. Az
SS-vezérelt Slave mód (0100) biztosítja, hogy a Slave csak akkor reagáljon a buszforgalomra, amikor a Master ténylegesen az ő SS vonalát húzza le — ez elengedhetetlen, ha a buszon több eszköz osztozik. A 0101 mód (SS letiltva) csak egyetlen, kizárólagos Slave esetén használható, ahol az SS láb szabad GPIO-ként is felhasználható.
Labor 8 • SPI Slave SMP Bit
92 / 136
Miért kötelező az SSPSTAT regiszter
SMP bitjét 0-ra állítani, amikor a PIC18 MSSP modulját SPI Slave módban konfiguráljuk?
💡 Szakmai Indoklás:
Helyes válasz: A. Az SMP (Sample) bit azt szabályozza, hogy a bemeneti adatot a hardver mikor mintavételezze az órajelperiódushoz képest. Master módban ez szabadon állítható, de Slave módban — mivel az órajelet a Master adja, a Slave-nek pedig ehhez kell igazodnia — az adatlap kötelezővé teszi az SMP=0 beállítást a helyes mintavételezési időzítéshez.
5. Tétel • Kódhiba-keresés: volatile
93 / 136
Egy hallgató a következő kódot írta. Melyik a legkomolyabb hiba benne?
uint8_t data_ready = 0;
void __interrupt(high_priority) ISR(void) {
if (PIR1bits.RCIF) { data_ready = 1; PIR1bits.RCIF = 0; }
}
void main(void) {
while(1) { while(!data_ready); process(); data_ready = 0; }
}
💡 Szakmai Indoklás:
Helyes válasz: B. Az ISR és a főprogram közösen használt, az ISR-ben módosított változóknak kötelezően
volatile-nak kell lenniük (lásd 5. és 14. Tétel). Enélkül a fordító jogosan feltételezheti, hogy egy olyan változó, amit a látott kódfolyam sosem ír, állandó marad, és regiszterben tárolt, egyszer beolvasott értéket használhat a ciklusfeltételben.
9. Tétel • Kódhiba-keresés: PORT/LAT
94 / 136
Egy hallgató a következő függvényt írta egy LED billentésére. Mi a hiba benne?
void toggle_led(void) {
PORTBbits.RB2 = !PORTBbits.RB2;
}
💡 Szakmai Indoklás:
Helyes válasz: C. Ez a klasszikus RMW (Read-Modify-Write) hiba (lásd 9. Tétel): a helyes megoldás a
LATBbits.LATB2 ^= 1; (vagy LATBbits.LATB2 = !LATBbits.LATB2;), mert a LAT regiszter a belső reteszt olvassa/módosítja, nem a potenciálisan terhelt fizikai lábat.
14. Tétel • Kódhiba-keresés: ISR Flag
95 / 136
Az alábbi Timer0-alapú ISR lefagyasztja a mikrovezérlőt (a főprogram sosem fut le). Mi a hiba?
void __interrupt(high_priority) ISR(void) {
if (INTCONbits.TMR0IF) {
LATDbits.LATD0 ^= 1;
}
}
💡 Szakmai Indoklás:
Helyes válasz: A. A legtöbb PIC18 interrupt flag (így a
TMR0IF is) nem törlődik automatikusan. Hiányzó INTCONbits.TMR0IF = 0; sor esetén a kilépés utáni pillanatban a megszakításvezérlő azonnal újra aktívnak látja a forrást, és a CPU visszaugrik az ISR elejére — végtelen megszakítási hurkot okozva, ami blokkolja a főprogramot.
16. Tétel • Kódhiba-keresés: I2C NACK
96 / 136
Egy hallgató 4 bájtot próbál kiolvasni egy I2C szenzorból az alábbi ciklussal, de a szenzor "összezavarodik" és hibás adatokat küld a 3. bájt után. Mi a hiba?
for (i = 0; i < 4; i++) {
buf[i] = i2c_read(1); // ack paraméter mindig 1
}
i2c_stop();
💡 Szakmai Indoklás:
Helyes válasz: D. Az I2C olvasásnál a Master ACK-ja azt jelenti a Slave-nek: "kérek még egy bájtot". Ha az utolsó bájt után is ACK megy ki, a Slave megpróbál további bájtokat kiküldeni, ami ütközik a rákövetkező STOP feltétellel és összezavarja a protokollállapotot. A helyes hívás az utolsó bájtnál
i2c_read(0) (NACK) lenne — lásd Labor 5 kódját.
12. Tétel • Kódhiba-keresés: PWM Felbontás
97 / 136
Egy hallgató a PWM kitöltési tényezőt így próbálja beállítani, de a motor csak "durva" léptékben tud gyorsulni. Mi a hiba?
void set_duty(uint16_t duty10bit) {
CCPR1L = duty10bit;
}
💡 Szakmai Indoklás:
Helyes válasz: B. A 10 bites PWM kitöltés hardveresen két helyre van szétosztva: a felső 8 bit a
CCPR1L-be, az alsó 2 bit a CCP1CON<5:4>-be kerül. A bemutatott kód csak az elsőt tölti ki (a 16 bitesből 8 bit implicit csonkolással), a 2 LSB-t figyelmen kívül hagyja — emiatt a kitöltés csak 256, nem 1024 diszkrét szinten állítható (lásd Labor 2 helyes megoldását).
9. Tétel • Kódhiba-keresés: TRIS Beállítás
98 / 136
Az alábbi kódra a LED egyáltalán nem világít, bármit is ír bele a program. Mi a hiba?
void init_led(void) {
LATDbits.LATD0 = 0;
}
💡 Szakmai Indoklás:
Helyes válasz: C. A LAT regiszter írása csak a belső kimeneti reteszt módosítja — ez csak akkor jelenik meg ténylegesen a fizikai lábon, ha az adott lábhoz tartozó
TRISx bit kimenetre (0) van állítva. A hiányzó TRISDbits.TRISD0 = 0; miatt a láb bemenet (POR alapállapot) marad, függetlenül attól, mit ír a program a LAT-ba.
13. Tétel • Kódhiba-keresés: ADC Polling
99 / 136
Az alábbi ADC-olvasó kód szinte mindig érvénytelen (a konverzió befejezése előtti) eredményt ad vissza. Mi a hiba?
ADCON0bits.GO = 1;
while (ADCON0bits.GO_nDONE == 0);
result = ADRESH;
💡 Szakmai Indoklás:
Helyes válasz: D. A
GO/DONE bit (más néven GO_nDONE) 1-re áll a GO=1 hívás után és a hardver automatikusan 0-ra törli, amikor a konverzió befejeződött. A kódban a ciklusfeltétel a fordítottját teszteli (egyenlő 0-val), így a program szinte azonnal, a valódi konverziós idő kivárása nélkül kilép a várakozásból, és a még érvénytelen ADRESH tartalmat olvassa ki.
10. Tétel • Kódhiba-keresés: Watchdog
100 / 136
Egy engedélyezett Watchdog Timerrel (rövid timeout-tal) rendelkező rendszerben az alábbi ciklus véletlenszerű Reseteket okoz futás közben. Mi a hiba?
for (i = 0; i < 60000; i++) {
slow_computation();
}
💡 Szakmai Indoklás:
Helyes válasz: C. A Watchdog pontosan erre a helyzetre lett tervezve: ha a szoftver "elakad" (vagy csak egyszerűen tovább fut, mint a megengedett idő), és nem törli időben a WDT-t, az automatikusan Resetet vált ki. A megoldás: rendszeres
CLRWDT(); hívás beszúrása a hosszan futó ciklusba, vagy a WDT timeout/postscaler növelése, ha a hosszú futás szándékos.
Labor 4 • Kódhiba-keresés: Körpuffer
101 / 136
Az alábbi (a Labor 4 valós kódjától eltérő, hibás) körpuffer-kezelő sor idővel memóriasérülést okoz. Mi a hiba?
uint8_t next_head = rx_head + 1;
if (next_head != rx_tail) {
rx_buf[rx_head] = data;
rx_head = next_head;
}
💡 Szakmai Indoklás:
Helyes válasz: B. A helyes körkörös index-számítás
(rx_head + 1) % RX_BUFFER_SIZE (ahogy a valódi Labor 4 kódja is teszi), amely biztosítja, hogy az index a tömb méreténél elérve visszaugorjon 0-ra. A modulo nélküli verzió tovább növekvő indexet ad, ami a tömb határán túli, definiálatlan memóriaterületre írna.
16. Tétel • Kódhiba-keresés: SPI CS
102 / 136
A Master a következő függvénnyel próbál adatot küldeni egy SPI Slave-nek, de a Slave sosem reagál rá. Mi hiányzik?
void spi_send_to_slave(uint8_t data) {
SSPBUF = data;
while (!PIR1bits.SSPIF);
}
💡 Szakmai Indoklás:
Helyes válasz: C. Az SPI Slave Select vonala jelzi az adott Slave-nek, hogy a busz éppen neki szól. A helyes sorrend:
SS = 0 (aktiválás) → SSPBUF írás és várakozás → SS = 1 (deaktiválás). Enélkül több eszközös buszon egyik Slave sem tudja, hogy figyelnie kellene az adatra (lásd Labor 8 master_broadcast_sync_counter() függvényét).
14. Tétel • Kódhiba-keresés: GIE
103 / 136
Az alábbi inicializáló függvény lefut, de a Timer0 ISR sosem hívódik meg. Mi hiányzik?
void init_timer0_interrupt(void) {
T0CON = 0b10000100;
INTCONbits.TMR0IE = 1;
}
💡 Szakmai Indoklás:
Helyes válasz: D. A PIC18 megszakításai egy háromszintű "ÉS kapcsolatot" igényelnek: Flag, egyedi Enable és a globális
GIE (kompatibilitási módban) vagy GIEH/GIEL (prioritásos módban). A bemutatott kód elfelejti a globális engedélyezést beállítani, ezért az ISR sosem fut le, még ha a TMR0IF folyamatosan be is áll.
15. Tétel • Kódhiba-keresés: SPBRG
104 / 136
Az alábbi UART inicializáló sor mérhetően rossz (a kívánttól eltérő) Baud Rate-et állít be. Mi a hiba?
// Fosc = 16 MHz, kívánt baud = 9600, BRGH=1, BRG16=0
SPBRG = FOSC / (16 * BAUD);
💡 Szakmai Indoklás:
Helyes válasz: B. A BRGH=1, BRG16=0 esetre érvényes hivatalos képlet
SPBRG = FOSC/(16×Baud) − 1 (lásd 15. Tétel). A −1 elhagyása azért hiba, mert a hardver ténylegesen (SPBRG+1)-gyel osztja az órajelet — a hiányzó eltolás miatt a kapott Baud Rate szisztematikusan alacsonyabb lesz a kívántnál.
16. Tétel • Számítás: I2C Bitidő
105 / 136
100 kHz-es Standard módú I2C órajel esetén mekkora egyetlen bit átvitelének periódusideje?
💡 Szakmai Indoklás:
Helyes válasz: C. T = 1/f = 1/100000 Hz = 10 µs. Ennyi ideig tart az SCL egy teljes periódusa (magas + alacsony szintje együtt) 100 kHz-en.
17. Tétel • Számítás: FAT Klaszterméret
106 / 136
Egy SD-kártya 512 bájtos szektorméretet és 8 szektor/klaszter beállítást használ. Mekkora egy klaszter mérete?
💡 Szakmai Indoklás:
Helyes válasz: B. Klaszterméret = szektorméret × szektor/klaszter = 512 × 8 = 4096 bájt = 4 KB. A FAT fájlrendszer mindig egész klaszterekben allokál helyet a fájloknak, még akkor is, ha egy fájl ennél kisebb.
17. Tétel • Számítás: SD Dummy Órajel
107 / 136
Az SD-kártya SPI inicializálásához legalább 74 dummy órajelimpulzus szükséges. Mivel az SPI hardver csak egész bájtokat (8 bit) tud kiküldeni, legalább hány bájtot (kerekítve felfelé) kell ehhez ténylegesen kiküldeni?
💡 Szakmai Indoklás:
Helyes válasz: A. 74 / 8 = 9.25, ezt felfelé kell kerekíteni egész bájtra, tehát legalább 10 bájtot (=80 impulzust) kell kiküldeni, hogy a minimálisan előírt 74 dummy órajelciklus biztosan teljesüljön. A gyakorlati implementációk emiatt szinte mindig kerek 10 bájtot (0xFF) küldenek induláskor.
11. Tétel • Számítás: BCD Dekódolás
108 / 136
Egy RTC másodperc regiszterének tartalma binárisan
0101 1001 (BCD kódolt, felső nibble a tízesek, alsó nibble az egyesek helyiértéke). Hány másodpercet jelent ez decimálisan?
💡 Szakmai Indoklás:
Helyes válasz: D. A felső nibble
0101 = 5 (tízes helyiérték), az alsó nibble 1001 = 9 (egyes helyiérték). BCD-ben ez 5 × 10 + 9 = 59 másodpercet jelent (a bájt hexadecimális alakja 0x59, ami pontosan megegyezik a decimális "59"-cel — ez a BCD lényege).
10. Tétel • Számítás: Timer1 Túlcsordulás
109 / 136
A Timer1-et 32.768 kHz-es órakvarccal, 1:1 előosztóval, 16 bites módban, 0-ról indítjuk. Kb. mennyi idő alatt csordul túl (65536 tick után)?
💡 Szakmai Indoklás:
Helyes válasz: B. 65536 / 32768 Hz = 2 s. Mivel 65536 = 2 × 32768, a teljes 16 bites tartomány éppen kétszer annyi tick, mint az órakvarc egy másodperc alatti ciklusszáma — ezért a túlcsordulás pontosan 2 másodperc alatt következik be, ami kiváló, kerek időalap RTC célra.
12. Tétel • Számítás: PWM Frekvencia (2)
110 / 136
FOSC = 4 MHz,
PR2 = 255 (a maximális 8 bites érték), Timer2 előosztó 1:1. Mekkora a PWM frekvenciája?
💡 Szakmai Indoklás:
Helyes válasz: A. fPWM = FOSC / (4 × (PR2+1) × Prescaler) = 4000000 / (4 × 256 × 1) = 4000000 / 1024 ≈ 3906.25 Hz ≈ 3.91 kHz.
13. Tétel • Számítás: Teljes ADC Idő
111 / 136
TACQ = 4 µs és TAD = 2 µs (11 TAD-s konverzióval). Összesen mennyi idő telik el a csatornaválasztástól a kész eredményig (mintavétel + konverzió)?
💡 Szakmai Indoklás:
Helyes válasz: C. A teljes idő TACQ + (11 × TAD) = 4 µs + (11 × 2 µs) = 4 µs + 22 µs = 26 µs. A mintavételi idő és a konverziós idő két egymást követő, összeadódó szakasz.
16. Tétel • Számítás: I2C Fast Mode SSPADD
112 / 136
FOSC = 16 MHz, és 400 kHz-es I2C Fast Mode órajelet szeretnénk beállítani (Clock = FOSC/(4 × (SSPADD+1))). Milyen
SSPADD értéket kell betölteni?
💡 Szakmai Indoklás:
Helyes válasz: D. SSPADD = FOSC/(4 × Baud) - 1 = 16000000/(4 × 400000) - 1 = 16000000/1600000 - 1 = 10 - 1 = 9.
15. Tétel • Számítás: UART Átviteli Idő
113 / 136
115200 baud sebességen, 8-N-1 keretezéssel (10 bit/bájt), kb. mennyi ideig tart 100 bájt kiküldése folyamatosan, szünet nélkül?
💡 Szakmai Indoklás:
Helyes válasz: B. Egy bitidő 1/115200 ≈ 8.68 µs. Egy bájt (10 bit) ≈ 86.8 µs. 100 bájt: 100 × 86.8 µs = 8680 µs ≈ 8.68 ms.
10. Tétel • Számítás: WDT Max Timeout
114 / 136
A PIC18F4620 WDT névleges alapperiódusa 4 ms, a postscaler 16 bites, maximális aránya 1:32768. Kb. mekkora a leghosszabb elérhető WDT timeout?
💡 Szakmai Indoklás:
Helyes válasz: C. 4 ms × 32768 = 131072 ms ≈ 131 s ≈ 2.18 perc. Ez a maximálisan konfigurálható WDT timeout a WDTPS3:WDTPS0 konfigurációs bitek
1111 (1:32768) beállításánál.
15. Tétel • Számítás: Baud Rate Hiba %
115 / 136
A kívánt Baud Rate 19200, de a kerekítés miatt ténylegesen elért Baud Rate 19230. Mekkora a relatív hiba (kerekítve)?
💡 Szakmai Indoklás:
Helyes válasz: B. Hiba = (19230 - 19200)/19200 = 30/19200 ≈ 0.0016 = 0.16%. Ez jóval a megengedett ±2.5%-os tűréshatáron belül van, tehát a kommunikáció megbízható marad.
13. Tétel • Számítás: ADC LSB Skálázás
116 / 136
Ha a referenciafeszültséget külső forrásra állítjuk (VREF+ = 2.5V, VREF- = 0V), mekkora 1 LSB értéke egy 10 bites ADC-nél (a megszokott 5V-os referenciával szemben)?
💡 Szakmai Indoklás:
Helyes válasz: A. ULSB = VREF/1024 = 2.5V/1024 ≈ 2.44 mV. Az 1 LSB mérete arányosan skálázódik a referenciafeszültséggel — kisebb referencia esetén finomabb (kisebb) a kvantálási lépésköz, cserébe szűkebb a mérhető feszültségtartomány.
1. Tétel • Endianness
117 / 136
Milyen bájtsorrendet (Endianness) használ a PIC18 és az ARM Cortex-M egy többbájtos (pl. 16 vagy 32 bites) érték memóriában tárolásakor?
💡 Szakmai Indoklás:
Helyes válasz: A. A PIC, az ARM Cortex-M, az x86 és a RISC-V is Little-Endian sorrendet használ. (A Big-Endian jellemzően a hálózati TCP/IP protokollokra és néhány régebbi architektúrára, pl. Motorola 68k, jellemző.)
1. Tétel • IEEE 754 Formátum
118 / 136
Az IEEE 754 32 bites egyszeres pontosságú (single precision) lebegőpontos formátumban hány bitet foglal el az előjel, az exponens és a mantissza (ebben a sorrendben)?
💡 Szakmai Indoklás:
Helyes válasz: C. 1 előjelbit (S), 8 bit exponens (E, bias=127), 23 bit mantissza (M): összesen 32 bit. Az érték: (−1)S × 1.M × 2E−127.
2. Tétel • 16 bites MCU Előnyök
119 / 136
Mi a fő előnye egy 16 bites MCU-nak (pl. PIC24, dsPIC33) egy 8 bites MCU-hoz (pl. PIC18F4620) képest?
💡 Szakmai Indoklás:
Helyes válasz: B. Egy 8 bites ALU-val (pl. PIC18) egy 16 vagy 32 bites összeadáshoz több lépésben, átviteli (Carry) bit láncolásával kell dolgozni. A 16 bites architektúrák ezt egyetlen ciklus alatt végzik, és jellemzően kiegészítő DSP célú funkciókkal (szorzás, MAC) is rendelkeznek.
2. Tétel • Port-Mapped I/O
120 / 136
Mi jellemzi a Port-Mapped (Isolated) I/O periféria-hozzáférési modellt a Memory-Mapped I/O-val (MMIO) szemben?
💡 Szakmai Indoklás:
Helyes válasz: D. A PIC18 és az ARM Cortex-M is MMIO-t használ (a perifériaregiszterek a normál memóriatérben, C pointerekkel is elérhetők). A Port-Mapped (Isolated) I/O ezzel szemben elkülönített címteret és dedikált gépi utasításokat (pl. x86
IN/OUT) igényel a periféria eléréséhez.
4. Tétel • AVR Jellemzők
121 / 136
Melyik jellemző különbözteti meg tipikusan az AVR (pl. ATmega) családot a PIC családtól?
💡 Szakmai Indoklás:
Helyes válasz: C. Az AVR architektúra (amire később az Arduino épült) 32 általános célú munkaregisztert biztosít, ami rugalmasabb, GCC-barát regiszterallokációt tesz lehetővé, szemben a PIC18 korlátozottabb, akkumulátor (WREG) központú, Access Bank alapú modelljével.
4. Tétel • RISC-V "M" Kiterjesztés
122 / 136
Mit ad hozzá a RISC-V utasításkészlethez az opcionális "M" moduláris kiterjesztés?
💡 Szakmai Indoklás:
Helyes válasz: B. A RISC-V moduláris felépítésű: az alap RV32I-hez az "M" kiterjesztés hardveres szorzást/osztást ad, az "A" atomi műveleteket, az "F"/"D" lebegőpontos (egyszeres/dupla) számítást, a "C" pedig a tömörített 16 bites utasításokat.
5. Tétel • Bitmezős Struktúra
123 / 136
Mi a célja a regiszterleíró fejlécekben (pl. pic18f4620.h) használt bitmezős (bitfield) union/struct deklarációknak, mint amilyen a
LATBbits.LATB2 = 1; is?
💡 Szakmai Indoklás:
Helyes válasz: B. A bitmezős deklaráció tisztán szintaktikai kényelem: a fordító ugyanazt a bitművelet-gépi kódot generálja, mint egy kézi bitmaszkolásnál, de a forráskód sokkal olvashatóbb és kevésbé hibalehetőséges (nem kell fejben tartani, melyik bitpozíció melyik funkciót jelenti).
5. Tétel • Fordítási Lánc: AST
124 / 136
A C fordítási lánc melyik lépése épít absztrakt szintaxisfát (AST), végez optimalizációt, és generálja a processzor-specifikus Assembly kódot?
💡 Szakmai Indoklás:
Helyes válasz: A. A Fordító végzi a lexikális, szintaktikai és szemantikai elemzést, felépíti az AST-t, optimalizál, majd generálja a célprocesszor Assembly forráskódját (
.s/.asm kimenet). Az Előfeldolgozó csak szöveges behelyettesítést, az Asszembler gépi kód fordítást, a Linker pedig objektumfájl-összefűzést végez.
6. Tétel • Firmware Magic Number
125 / 136
Mire szolgál a firmware image elején elhelyezett, specifikus "Magic Number" azonosító egy bootloaderes rendszerben?
💡 Szakmai Indoklás:
Helyes válasz: C. A Magic Number (pl.
0xAA55BEEF) és az eszköz-azonosító (Device ID) egyfajta "aláírás", amit a bootloader ellenőriz — ha nem egyezik, elutasítja a letöltést, megelőzve, hogy egy másik projekthez készült vagy sérült firmware felülírja a Flash-t.
6. Tétel • ICSP PGC/PGD Vonalak
126 / 136
Mi a szerepe a PIC ICSP interfész
PGC és PGD vezetékeinek?
💡 Szakmai Indoklás:
Helyes válasz: B. Az ICSP protokoll a
PGC (órajel) és PGD (kétirányú adat) vonalpáron zajlik, a VDD/VSS táp- és testvezetékek, valamint a MCLR/VPP programozófeszültség-vezeték mellett.
7. Tétel • MPLAB X Alapja
127 / 136
Milyen platformra épül a Microchip MPLAB X IDE-je?
💡 Szakmai Indoklás:
Helyes válasz: D. Az MPLAB X a nyílt forráskódú NetBeans keretrendszerre épül, amit a Microchip kiegészített PIC/AVR-specifikus eszközökkel (XC8/XC16/XC32 fordítók, MCC, debugger integráció).
7. Tétel • STM32CubeMX
128 / 136
Melyik eszköz segíti grafikusan az STM32 mikrovezérlők órahálózatának (Clock Tree) és lábkiosztásának (Pinout) megtervezését?
💡 Szakmai Indoklás:
Helyes válasz: C. A STM32CubeMX (ma jellemzően a STM32CubeIDE-be integrálva) grafikus felületen teszi lehetővé az órahálózat, a lábkiosztás és a perifériák beállítását, majd inicializáló kódot generál. Az MCC ennek Microchip-analógja PIC/AVR eszközökhöz.
8. Tétel • HAL Függvénypélda
129 / 136
Melyik szoftverréteg biztosít olyan magas szintű, objektum-szerű API-t, mint a
HAL_UART_Transmit(&huart1, data, len, timeout) függvényhívás?
💡 Szakmai Indoklás:
Helyes válasz: A. A HAL a legmagasabb absztrakciós szint a négy közül: kényelmes, handle-alapú (
&huart1), paraméterezhető függvényeket ad, a legnagyobb kódméret és a legkisebb futásidejű sebesség árán.
8. Tétel • Szoftverréteg Sebesség
130 / 136
A négy tárgyalt szoftverréteg (Közvetlen regiszterkezelés, LL, HAL, CMSIS) közül melyik nyújtja a legnagyobb sebességet és a legkisebb kódméretet, a hordozhatóság rovására?
💡 Szakmai Indoklás:
Helyes válasz: C. A közvetlen regiszterkezelés (pl.
TRISB=0; PORTB=1;) adja a maximális sebességet és a legkisebb kódméretet, mert nincs semmilyen absztrakciós réteg vagy függvényhívási overhead — cserébe teljesen az adott chiphez kötött, nem hordozható kódot eredményez.
9. Tétel • Weak Pull-Up Bit
131 / 136
Melyik PIC18 bit engedélyezi vagy tiltja le a PORTB belső felhúzó ellenállásait (Weak Pull-Up)?
💡 Szakmai Indoklás:
Helyes válasz: B. Az
INTCON2bits.RBPU bit (0 = engedélyezve) kapcsolja be a PORTB lábak belső felhúzó ellenállásait — ezt használja ki a Labor 1 debounce kódja is a nyomógomb bekötésénél, hogy külső felhúzó ellenállás nélkül lehessen a gombot GND-re kötni.
9. Tétel • LAT Írás TRIS Nélkül
132 / 136
Mi történik, ha egy GPIO lábat bemenetnek konfigurálunk (
TRISx = 1), de a program mégis ír a hozzá tartozó LAT bitre?
💡 Szakmai Indoklás:
Helyes válasz: D. A LAT regiszter és a fizikai kimeneti meghajtó között a TRISx bit dönt: TRISx=1 (bemenet) esetén a kimeneti meghajtó fizikailag le van választva a lábról (High-Z), így a LAT tartalma "készenlétben" vár, és csak akkor jelenik meg ténylegesen a lábon, ha a TRISx bitet később 0-ra (kimenetre) állítják.
14. Tétel • GIEL Bit
133 / 136
Prioritásos megszakítási módban (
IPEN=1) melyik bit engedélyezi globálisan az ALACSONY prioritású megszakítási forrásokat?
💡 Szakmai Indoklás:
Helyes válasz: B. A
GIEH a magas, a GIEL az alacsony prioritású megszakítások globális engedélyezője. Mindkettőnek 1-en kell lennie ahhoz, hogy az adott prioritási szintű, egyébként engedélyezett források ténylegesen lefuthassanak.
14. Tétel • Interrupt vs. Polling
134 / 136
Mi az interrupt-vezérelt működés fő előnye a szoftveres lekérdezéssel (polling) szemben?
💡 Szakmai Indoklás:
Helyes válasz: C. Polling esetén a CPU-nak folyamatosan, ciklusban kell ellenőriznie egy flaget vagy bemenetet, ami feleslegesen leköti a processzort. Az interrupt-vezérelt megközelítésnél a CPU szabadon dolgozhat (vagy alhat), és a hardver automatikusan "megszólítja", amikor tényleg történt valami.
17. Tétel • MBR Tartalma
135 / 136
Mit tartalmaz jellemzően a Master Boot Record (MBR) egy tárolóeszközön (pl. SD-kártyán)?
💡 Szakmai Indoklás:
Helyes válasz: B. Az MBR a lemez legelső szektorában található, és tartalmazza a partíciós táblát (partíciók kezdő/záró címei, típusa). Ezt követi partíciónként a VBR (Volume Boot Record) a fájlrendszer-specifikus paraméterekkel (BIOS Parameter Block).
17. Tétel • FatFs disk_status()
136 / 136
Mire szolgál a ChaN FatFs könyvtár alsó szintű
disk_status() függvénye, amit a fejlesztőnek kell implementálnia?
💡 Szakmai Indoklás:
Helyes válasz: A. A
disk_status() a Disk I/O réteg egyik kötelezően implementálandó függvénye (a disk_initialize(), disk_read(), disk_write(), disk_ioctl() mellett), amely a hardverfüggő állapotinformációt (pl. jelen van-e a kártya) szolgáltatja a hardverfüggetlen FatFs magnak.