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?
💡 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?
💡 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?
💡 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?
💡 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?
💡 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?
💡 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?
💡 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?
💡 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)?
💡 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?
💡 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?
💡 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)?
💡 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?
💡 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?
💡 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?
💡 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?
💡 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?
💡 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?
💡 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?
💡 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?
💡 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?
💡 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?
💡 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?
💡 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)?
💡 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?
💡 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?
💡 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?
💡 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?
💡 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)?
💡 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?
💡 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?
💡 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?
💡 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?
💡 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?
💡 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?
💡 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?
💡 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?
💡 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?
💡 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)?
💡 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)?
💡 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?
💡 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?
💡 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?
💡 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?
💡 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?
💡 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?
💡 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?
💡 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?
💡 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?
💡 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?
💡 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?
💡 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?
💡 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?
💡 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?
💡 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?
💡 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?
💡 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?
💡 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?
💡 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?
💡 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?
💡 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)?
💡 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?
💡 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?
💡 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?
💡 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?
💡 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?
💡 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?
💡 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?
💡 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?
💡 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?
💡 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?
💡 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?
💡 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?
💡 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?
💡 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?
💡 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)?
💡 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.)
💡 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?
💡 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)?
💡 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)?
💡 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?
💡 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?
💡 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?
💡 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?
💡 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)?
💡 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)?
💡 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.