הצעה לפתרון מלא — אלקטרוניקה ומחשבים
בגרות · קיץ תשע"ז 2017 · שאלון 815381 · שאלות 1–14
✦ בנוי על ידי פהד גאנם ✦
💡
על המסמך: הצעה לפתרון מלא לשאלון 815381 — אלקטרוניקה ומחשבים, קיץ תשע"ז 2017. בשאלון ארבע-עשרה שאלות בשלושה פרקים, ועל הנבחן לענות על חמש שאלות — אחת לפחות מכל פרק. פרק ראשון (1–4) מבוא להנדסת אלקטרוניקה; פרק שני (5–6) תורת החשמל; פרק שלישי (7–14) מבוא להנדסת מחשבים — תכנות בשפת C ובסביבת Arduino. כאן פתורות כל השאלות, לנוחות הלימוד.
🔧 פרק ראשון — מבוא להנדסת אלקטרוניקה (שאלות 1–4)
שאלה 1 — שני מגברי שרת אידאליים (לא-מהפך ומגבר הפרש)
נתונים: R₁=‎1 kΩ · R₂=‎2 kΩ · R₃=‎1 kΩ · R₄=‎3 kΩ · R₅=‎10 kΩ · R₆=‎20 kΩ · מקור 2V · אספקה ±12V
💡
מבנה המעגל: הדק A מוארק (0V). מחלק המתח R₃–R₄ המוזן מ-2V יוצר את נקודה X, המחוברת אל הכניסה החיובית של שני המגברים. המגבר הראשון מחובר במשוב שלילי דרך R₂ (מוצא Vo1) — צירוף לא-מהפך. המגבר השני מחובר במשוב שלילי דרך R₆, וכניסתו השלילית היא הצומת שבין R₅ ל-R₆. בשני המגברים מתקיים V− = V+ = VX.
סעיף א — המתח בנקודה X

X הוא צומת מחלק המתח בין R₃ ל-R₄, המוזן ממקור 2V (כניסות המגברים אינן מושכות זרם):

VX = 2 · R₄R₃ + R₄ = 2 · 31 + 3 = ‎1.5 V
VX = ‎1.5 V
סעיף ב — הזרם בנגד R₁ וכיוונו

במגבר הראשון קיים קצר מדומה, ולכן מתח הכניסה השלילית (צומת B) שווה למתח הכניסה החיובית: VB = VX = 1.5V. הדק A מוארק (VA = 0). לכן דרך R₁ עובר זרם מ-B אל A:

I(R₁) = VB - VAR₁ = 1.5 - 01000 = ‎0.0015 A
I(R₁) = ‎1.5 mA (מ-B ל-A)
סעיף ג — מתח המוצא של המגבר הראשון Vo1

A מוארק, R₁ מן ההארקה אל B, ו-R₂ במשוב מ-Vo1 אל B — צירוף לא-מהפך בעל הגבר 1 + R₂/R₁ ביחס למתח בכניסה החיובית X:

Vo1 = VX · (1 + R₂R₁) = 1.5 · (1 + 21) = 1.5 × 3
Vo1 = ‎4.5 V
סעיף ד — מתח-המוצא Vo

במגבר השני הכניסה החיובית היא X (1.5V), והכניסה השלילית (הצומת שבין R₅ ל-R₆) שווה לה. נכתוב את חוק הזרמים בצומת השלילי:

Vo1 - VXR₅ + Vo - VXR₆ = 0
4.5 - 1.510k + Vo - 1.520k = 0 → Vo - 1.5 = -6
Vo = -‎4.5 V
🧪סימולציה בתוך הדף— לא-מהפך ומגבר הפרש — שני מגברים
שתי הדרגות חולקות את נקודה X; שנו את R₄ וראו את שני המוצאים זזים יחד.▶ פתח את מעבדת מגברי השרת
🧪 בגרסת האתר יש כאן סימולציה אינטראקטיבית — לא-מהפך ומגבר הפרש — שני מגברים.
שאלה 2 — מגבר טרנזיסטור בפולט משותף (CE) עם קבל עוקף
נתונים: VCC=12V · VCE=6V · VBE=0.7V · β=hfe=50 · hie=1.5kΩ · RE=1kΩ · RL=2kΩ · IB=10µA
סעיף א — ערך הנגד RB

זו הזנה קבועה (RB מ-VCC אל הבסיס) עם נגד פולט. זרם הפולט IE = (β+1)·IB = 51 × 10µA = 0.51mA. נכתוב את משוואת חוג הבסיס-פולט:

VCC = IB·RB + VBE + IE·RE
RB = VCC - VBE - IEREIB = 12 - 0.7 - 0.5110µ = ‎1.079 MΩ
RB ≈ ‎1.08 MΩ
סעיף ב — ערך הנגד RC

זרם הקולט IC = β·IB = 50 × 10µA = 0.5mA. נכתוב את משוואת חוג המוצא (קולט-פולט):

VCE = VCC - ICRC - IERE
RC = VCC - VCE - IEREIC = 12 - 6 - 0.510.5m = ‎10.98 kΩ
RC ≈ ‎11 kΩ
סעיף ג — דגם החילופין הזעיר

בזרם חילופין כל הקבלים מהווים קצר. מתח המבוא Vi מגיע דרך C₁ אל הבסיס; המעבר בסיס-פולט מיוצג בהתנגדות hie=1.5kΩ; הקבל C₃ מקצר את RE ולכן הפולט מוארק לחילופין; במוצא פועל מקור זרם תלוי β·ib בקולט, המזין את העומס RC ∥ RL. הנגד RB מחובר בין הבסיס לאדמת החילופין.

ViRB1.08 MΩhie1.5 kΩBibhfe·ib50·ibRC11 kΩRL2 kΩCVoE
סעיף ד — הגבר המתח AV
RC ∥ RL = 11000 × 200011000 + 2000 ≈ ‎1692 Ω
AV = - β (RC ∥ RL)hie = - 50 × 16921500
AV ≈ -56 (מהפך)
🧪סימולציה בתוך הדף— מגבר CE עם קבל עוקף
הקבל מקצר את R_E באות החילופין, ולכן R_E אינו מופיע בנוסחת ההגבר. ובכל זאת שינוי R_E משנה את R_C הדרוש לאותו V_CE — ודרכו גם את ההגבר.▶ פתח את מעבדת מגבר CE
🧪 בגרסת האתר יש כאן סימולציה אינטראקטיבית — מגבר CE עם קבל עוקף.
שאלה 3 — מסנן LP, משווה ונורית LED
נתונים: E=12V · R=‎2 kΩ · C=‎1000 µF · R₁=‎10 kΩ · R₂=‎10 kΩ · VLED=1.5V · ILED=‎10 mA
💡
מבנה המעגל: המגבר משמש כמשווה (הזנה יחידה 0–12V). הכניסה + מחוברת אל VC — מתח הקבל הנטען דרך R; הכניסה − מחוברת אל הצומת X של מחלק המתח R₁–R₂ (מתח ייחוס קבוע). מתח הקבל ההתחלתי הוא 0V, וברגע t=0 סוגרים את המפסק S. ה-LED נדלק כאשר VC עולה מעל מתח הייחוס X.
סעיף א — המתח בנקודה X
VX = E · R₂R₁ + R₂ = 12 · 1010 + 10 = ‎6 V
VX = ‎6 V
סעיף ב — סרטוט VC(t) ו-Vo(t)

מרגע סגירת המפסק הקבל נטען דרך R לפי VC(t) = 12(1 − e−t/τ), כאשר קבוע הזמן τ = R·C = 2000 × 1000µF = 2s. עקומת VC(t) עולה מעריכית מ-0 לכיוון 12V. מתח המוצא Vo נמוך (0V, LED כבוי) כל עוד VC < 6V, וברגע ש-VC חוצה את 6V הוא קופץ לרמה גבוהה (≈12V, LED דולק).

τ = ‎2 s ; Vo קופץ מ-0V ל-12V כאשר VC = 6V
126VC [V]t [s]01.39468106 V12Vo [V]t [s]01.3946810
סעיף ג — הזמן עד הדלקת ה-LED

ה-LED נדלק כאשר VC מגיע ל-6V:

12(1 - e-t/τ) = 6 → e-t/τ = 0.5 → t = τ · ln 2
t = 2 × 0.693 = ‎1.386 s
t ≈ ‎1.39 s
סעיף ד — ההתנגדות של הנגד RL

כאשר המוצא גבוה Vo ≈ 12V. RL מגביל את זרם ה-LED:

RL = Vo - VLEDILED = 12 - 1.50.010
RL = ‎1050 Ω
🧪סימולציה בתוך הדף— מסנן LP, משווה ונורית
גררו את הזמן וראו את מתח הקבל חוצה את קו הייחוס — הנורית נדלקת.▶ פתח את פרק רשתות RC
🧪 בגרסת האתר יש כאן סימולציה אינטראקטיבית — מסנן LP, משווה ונורית.
שאלה 4 — משווה עם אות משולש ומדידה באוסצילוסקופ
נתונים: אספקה יחידה 5V · מחלק ‎10 kΩ + ‎10 kΩ (ייחוס 2.5V) · אות מבוא משולש 0–5V · זמן מחזור ‎1 ms
💡
מבנה המעגל: Vin מחובר אל הכניסה החיובית, ומחלק המתח 10kΩ–10kΩ מייצר מתח ייחוס 2.5V בכניסה השלילית. לכן מוצא המשווה גבוה (≈5V) כאשר Vin > 2.5V, ונמוך (≈0V) כאשר Vin < 2.5V.
סעיף א — חיבור שלושת המכשירים

מחברים את שלושת המכשירים כך:

מחולל-האותות: הדק ה-(+) אל מבוא המעגל Vin, והדק ה-(−) אל אדמת המעגל.
ספק-המתח (5V): הדק ה-(+) אל פס האספקה 5V (המזין את המגבר ואת מחלק המתח), והדק ה-(−) אל אדמת המעגל.
אוסצילוסקופ דו-ערוצי: ערוץ 1 — הדק ה-(+) אל Vin, הדק ה-(−) אל האדמה; ערוץ 2 — הדק ה-(+) אל Vout, הדק ה-(−) אל האדמה. כל הדקי ה-(−) משותפים לאדמה אחת.

10 kΩ10 kΩ2.5 V5 V+−DC5 V+−FGVinVoutSCOPECH1CH2++− (GND)−+
סעיף ב — ערך ה-Time/div

למסך האוסצילוסקוֹפ עשר משבצות לרוחב. כדי להציג שני מחזורים (2 × 1ms = 2ms) על מלוא הרוחב:

Time/div = 2 מחזורים × 1ms10 משבצות = 2ms10 = ‎0.2 ms/div
Time/div = ‎0.2 ms/div
סעיף ג — סרטוט Vin ו-Vo

אות המבוא הוא משולש 0–5V בזמן מחזור 1ms. מוצא המשווה הוא אות מלבני בזמן מחזור זהה: גבוה (5V) בקטע שבו האות המשולש עובר את 2.5V (סביב הפסגה, כלומר 0.25ms < t < 0.75ms בכל מחזור), ונמוך (0V) בשאר המחזור (סביב הבקעים). מחזוֹר מלא של המבוא נותן מחזור מלא של המוצא ביחס מחזור 50%.

אות מלבני 0/5V, מחזור 1ms — גבוה כאשר Vin > 2.5V
52.5Vin [V]t [ms]00.250.50.7511.251.51.7525Vo [V]t [ms]00.250.50.7511.251.51.752
🧪סימולציה בתוך הדף— משווה עם אות משולש
הזיזו את מתח הייחוס וראו את רוחב הפולס במוצא משתנה.▶ פתח את משקף התנודות
🧪 בגרסת האתר יש כאן סימולציה אינטראקטיבית — משווה עם אות משולש.
🔌 פרק שני — תורת החשמל (שאלות 5–6)
שאלה 5 — מעגל RC טורי בזרם חילופין עם אמפרמטר ומפסק
נתונים: תנופה מרבית Umax=311.13V · f=‎1 kHz · אמפרמטר אידאלי · מפסק S במקביל לקבל
סעיף א — המתח היעיל של המקור
Veff = Umax√2 = 311.131.414
Veff = ‎220 V
סעיף ב — ההתנגדות R (המפסק סגור)

כאשר המפסק S סגור הוא מקצר את הקבל, ובמעגל נותר רק הנגד R. מנתון Ieff = 5.5A:

R = VeffIeff = 2205.5
R = ‎40 Ω
סעיף ג — היגב הקבל (המפסק פתוח)

כשהמפסק פתוח R ו-C בטור. מהזרם החדש Ieff = 4.4A נמצא את העכבה, ומתוכה את היגב הקבל:

Z = VeffIeff = 2204.4 = ‎50 Ω
XC = √Z² - R² = √50² - 40² = √900 = ‎30 Ω
XC = ‎30 Ω
סעיף ד — הקיבול של הקבל C
C = 12π f XC = 12π × 1000 × 30
C ≈ ‎5.3 µF
🧪סימולציה בתוך הדף— מפסק שמקצר את הקבל
סגור — רק הנגד; פתוח — נוסף ההיגב, והזרם יורד.▶ פתח את מעבדת RLC — לשונית טורי
🧪 בגרסת האתר יש כאן סימולציה אינטראקטיבית — מפסק שמקצר את הקבל.
שאלה 6 — רשת נגדים בזרם ישר
נתונים: R₁=‎2 Ω · R₂=‎2 Ω · R₃=‎4 Ω · R₄=‎4 Ω · R₅=‎6 Ω · I₂ = ‎2 A (בנגד R₂)
💡
מבנה המעגל: מן המקור עובר הזרם דרך R₁ אל צומת עליון, ומשם הוא מתפצל לשני ענפים בין הצומת העליון לצומת התחתון: הענף R₂ (2Ω), והענף הטורי R₃+R₄ (4+4=8Ω) המקביל לו. מן הצומת התחתון חוזר הזרם דרך R₅ אל המקור. הזרם ב-R₁ וב-R₅ הוא זרם המקור המלא.
סעיף א — הזרם בנגד R₄

המתח על R₂ שווה למתח על הענף R₃+R₄ (הם מקבילים):

U(R₂) = I₂ · R₂ = 2 × 2 = ‎4 V
I(R₄) = I(R₃) = U(R₂)R₃ + R₄ = 44 + 4 = ‎0.5 A
I(R₄) = ‎0.5 A
סעיף ב — הזרם שמספק המקור E

בצומת העליון זרם R₁ מתפצל בין R₂ לענף R₃+R₄:

I(E) = I₂ + I(R₄) = 2 + 0.5
I(E) = ‎2.5 A
סעיף ג — ההתנגדות השקולה של המעגל
R₂ ∥ (R₃+R₄) = 2 × 82 + 8 = ‎1.6 Ω
Rשקולה = R₁ + 1.6 + R₅ = 2 + 1.6 + 6
Rשקולה = ‎9.6 Ω
סעיף ד — מתח המקור E
E = I(E) · Rשקולה = 2.5 × 9.6
E = ‎24 V
סעיף ה1 — ההספק על כל אחד מהנגדים
P(R₁) = I(E)²·R₁ = 2.5² × 2 = ‎12.5 W
P(R₂) = I₂²·R₂ = 2² × 2 = ‎8 W
P(R₃) = I(R₃)²·R₃ = 0.5² × 4 = ‎1 W
P(R₄) = I(R₄)²·R₄ = 0.5² × 4 = ‎1 W
P(R₅) = I(E)²·R₅ = 2.5² × 6 = ‎37.5 W
P₁=12.5W · P₂=8W · P₃=1W · P₄=1W · P₅=37.5W
סעיף ה2 — סכום ההספקים שווה להספק המקור
ΣP = 12.5 + 8 + 1 + 1 + 37.5 = ‎60 W
P(E) = E · I(E) = 24 × 2.5 = ‎60 W ✓
ΣPנגדים = P(E) = ‎60 W
🧪סימולציה בתוך הדף— רשת נגדים ומאזן הספקים
סכום ההספקים על חמשת הנגדים שווה תמיד להספק המקור.▶ פתח את מעבדת המעגל המעורב
🧪 בגרסת האתר יש כאן סימולציה אינטראקטיבית — רשת נגדים ומאזן הספקים.
💻 פרק שלישי — מבוא להנדסת מחשבים (שאלות 7–14) · שפת C ו-Arduino
שאלה 7 (C) — קריאת מפסקים והפעלת שמונה נוריות
חומרה: מפתח-קלט 300H (מפסקים S₀,S₁ על D₀,D₁) · מפתח-פלט 301H (שמונה נוריות D₀–D₇)
💡
מצב המפסקים: כל מבוא מחובר דרך נגד-מעלה (pull-up) אל 5V, והמפסק מחבר אותו אל האדמה. לכן מפסק פתוח ← הסיבית 1, מפסק סגור ← הסיבית 0. בפלט: כל נורית נדלקת כאשר הסיבית המתאימה היא 1 (0xFF = כל הנוריות דולקות, 0x00 = כבויות).
התוכנית בשפת C
#include <windows.h> void main(void) { int in, i; while (1) { in = Inp32(0x300) & 0x03; /* read the two switches, mask D2..D7 */ if (in == 0x03) /* both switches open -> all LEDs on */ Out32(0x301, 0xFF); else if (in == 0x00) /* both switches closed -> all LEDs off */ Out32(0x301, 0x00); else /* exactly one switch closed -> blink */ { for (i = 0; i < 10; i++) /* blink 10 times */ { Out32(0x301, 0xFF); Sleep(1000); Out32(0x301, 0x00); Sleep(1000); } } } }

הפעולה Inp32(0x300) & 0x03 מבודדת את שתי הסיביות D₀,D₁ בלבד (מיסוך שאר המבואות). שלושת המצבים נבדקים לפי הערך המתקבל: 0x03 (שניהם פתוחים), 0x00 (שניהם סגורים), וכל ערך אחר (0x01 או 0x02) פירושו מפסק אחד סגור והשני פתוח — ואז לולאת ה-for מהבהבת את כל הנוריות עשר פעמים בהשהיה של שנייה (Sleep(1000)) בין הדלקה לכיבוי.

🧪סימולציה בתוך הדף— ‏C — שני מפסקים ושמונה נוריות
שני המפסקים פתוחים — כל הנוריות דולקות; שניהם סגורים — כבויות; אחד סגור ואחד פתוח — עשרה הבהובים בהשהיה של שנייה. הזיזו את הזמן כדי לראות את ההבהוב.▶ פתח את פרק המערכות המשובצות
🧪 בגרסת האתר יש כאן סימולציה אינטראקטיבית — ‏C — שני מפסקים ושמונה נוריות.
שאלה 8 (C) — מערך, איברים במקומות אי-זוגיים וסכומם
הפעולות: הגדרת מערך של עשרה שלמים, קליטה, הדפסה, איברים אי-זוגיים וסכומם
💡
מקומות אי-זוגיים: בשפת C האינדקסים מתחילים מ-0, ולכן המקומות האי-זוגיים הם אינדקסים 1, 3, 5, 7, 9.
התוכנית בשפת C
#include <stdio.h> void main(void) { int arr[10]; /* 1 - array of ten integers */ int i, sum_ez = 0; /* 2 - read from keyboard, in a loop, and fill the array */ for (i = 0; i < 10; i++) scanf("%d", &arr[i]); /* 3 - print the whole array in one row, one space between values */ printf("arr : "); for (i = 0; i < 10; i++) printf("%d ", arr[i]); printf("\n"); /* 4 - print, in a column, the elements at odd positions */ for (i = 1; i < 10; i += 2) printf("%d\n", arr[i]); /* 5 - sum of the elements at odd positions */ for (i = 1; i < 10; i += 2) sum_ez += arr[i]; printf("sum ez = %d\n", sum_ez); }

שורות 4–5 (הלולאה עם i += 2 החל מ-1) עוברות על המקומות האי-זוגיים בלבד: תחילה מדפיסות אותם בטור, זה מתחת לזה, ואחר-כך צוברות את סכומם ל-sum_ez ומדפיסות אותו בתבנית sum ez = ... בתחתית.

🧪סימולציה בתוך הדף— ‏C — איברים במקומות אי-זוגיים
מערך של עשרה איברים (ערכים לדוגמה — בשאלון הם נקלטים מן המקלדת). רק האינדקסים האי-זוגיים 1, 3, 5, 7, 9 נכנסים לסכום; שנו איבר וראו מתי הסכום זז.▶ פתח את פרק המערכות המשובצות
🧪 בגרסת האתר יש כאן סימולציה אינטראקטיבית — ‏C — איברים במקומות אי-זוגיים.
שאלה 9 (C) — ספירת מפסקים סגורים ותצוגה על 7-Segment
חומרה: שמונה מפסקים על מפתח-קלט 300H · תצוגת 7-seg בחיבור קתודה משותפת (CC) על מפתח-פלט 301H
קטע הקוד הנתון
void main(void) { int arr[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F}; int i,in,t; while (1) { t = 0; in = Inp32(0x300); for (i = 0; i < 8; i++) { if ((in & 1) == 1) t = t + 1; in = in >> 1; } Out32(0x301, arr[t]); } }
סעיף א — הסבר השורות 8, 11, 12, 14

שורה 8: in = Inp32(0x300) — קוראת את מצב שמונת המפסקים ממפתח-הקלט 300H אל המשתנה in.
שורה 11: if ((in & 1) == 1) t = t + 1 — בודקת את הסיבית הימנית ביותר; אם המפסק הנוכחי סגור (הסיבית 1), מגדילה את המונה t.
שורה 12: in = in >> 1 — הזזה ימינה כדי לבחון את המפסק הבא.
שורה 14: Out32(0x301, arr[t]) — מוציאה אל תצוגת ה-7-seg את הקוד arr[t], כלומר את הספרה השווה למספר המפסקים הסגורים.

המערך arr מכיל את קודי ה-7-seg (קתודה משותפת) של הספרות 0–8, ולכן התוכנית מציגה את מספר המפסקים הסגורים.

סעיף ב — התצוגה כאשר S₁, S₃, S₅, S₇ סגורים

ארבעה מפסקים סגורים ושאר המפסקים פתוחים, ולכן t = 4. מתקבל arr[4] = 0x66 — קוד הספרה 4:

התצוגה מראה את הספרה   4
סעיף ג — מעבר לחיבור אנודה משותפת (CA)

בתצוגת אנודה משותפת מקטע נדלק כאשר מזינים אותו ב-0 (פעולה משלימה לקתודה משותפת). כדי לשמר את אותה תצוגה, יש להוציא את הקוד המשלים. משנים את שורה 14:

Out32(0x301, arr[t] ^ 0xFF); /* invert all ‎8 bits for common-anode */

הפעולה arr[t] ^ 0xFF (או ~arr[t] & 0xFF) הופכת כל סיבית, כך שאותם מקטעים בדיוק נדלקים — והפלט הנראה אינו משתנה עם החלפת התצוגה.

🧪סימולציה בתוך הדף— ‏C — ספירת מפסקים ותצוגת 7-seg
סגרו מפסקים וראו את הספרה מתעדכנת יחד עם קוד התצוגה. מפסק סגור נקרא 1; בשאלון סגורים S₁, S₃, S₅, S₇.▶ פתח את פרק המערכות המשובצות
🧪 בגרסת האתר יש כאן סימולציה אינטראקטיבית — ‏C — ספירת מפסקים ותצוגת 7-seg.
שאלה 10 (C) — היפוך ספרות של מספרים דו-ספרתיים
קליטה: עד עשרה מספרים שלמים בטווח 0–99 · לכל מספר מחשבים את היפוך ספרותיו
קטע הקוד הנתון
#include <stdio.h> void main(void) { int arr1[10], arr2[10]; int cnt = 0, i; while (cnt < 10) { scanf("%d", &i); if ((i >= 0) && (i < 100)) { arr1[cnt] = i; cnt++; } } for (i = 0; i < 10; i++) { arr2[i] = (arr1[i] / 10) + ((arr1[i] % 10) * 10); printf("%d-->%d\n", arr1[i], arr2[i]); } }
סעיף א — הסבר השורות 4, 6, 9, 17

שורה 4: int arr1[10], arr2[10] — הגדרת שני מערכים בני עשרה איברים שלמים.
שורה 6: while (cnt < 10) — הלולאה נמשכת עד שנקלטו עשרה מספרים תקינים.
שורה 9: if ((i >= 0) && (i < 100)) — מסננת: רק מספרים בטווח 0–99 מתקבלים ונשמרים; מספרים מחוץ לטווח מושמטים.
שורה 17: arr2[i] = (arr1[i]/10) + ((arr1[i]%10)*10) — מחליפה בין ספרת העשרות לספרת האחדות (היפוך המספר הדו-ספרתי).

סעיף ב — הפלט עבור רצף הקלט

רצף הקלט (משמאל לימין): 16, 21, 145, 45, 50, 1, 10, 0, 23, 256, 14, 73. המספרים 145 ו-256 נדחים (מחוץ לטווח 0–99), ולכן עשרת המספרים שנשמרים ב-arr1 הם: 16, 21, 45, 50, 1, 10, 0, 23, 14, 73. לכל מספר מוחלפות הספרות:

16-->61 21-->12 45-->54 50-->5 1-->10 10-->1 0-->0 23-->32 14-->41 73-->37
סעיף ג — הצגת האיבר הגדול ביותר ב-arr2

מוסיפים את המשתנה max להגדרות שבשורה 5 (int cnt = 0, i, max;), ובסוף התוכנית קטע-קוד המוצא את הערך המרבי במערך arr2:

max = arr2[0]; for (i = 1; i < 10; i++) if (arr2[i] > max) max = arr2[i]; printf("max = %d\n", max); /* -> 61 */
האיבר הגדול ביותר ב-arr2 הוא 61
🧪סימולציה בתוך הדף— ‏C — היפוך ספרות
זה רצף הקלט שבשאלון: 145 ו-256 נדחים, ועשרת המספרים האחרים מתהפכים. שנו מספר וראו מה נדחה ומי הגדול ביותר ב-arr2 (בירוק).▶ פתח את פרק המערכות המשובצות
🧪 בגרסת האתר יש כאן סימולציה אינטראקטיבית — ‏C — היפוך ספרות.
שאלה 11 (Arduino) — בקרת נורית RGB לפי שלושה מפסקים
חומרה: SW₀,SW₁,SW₂ בהדקים 2,3,4 · נוריות RED,GREEN,BLUE ב-PB₁,PB₂,PB₃ (הדקים 9,10,11)
💡
מצב המפסקים: כל מפסק מחובר אל 5V עם נגד-מטה, ולכן מפסק סגור ← HIGH, מפסק פתוח ← LOW. אם SW₀ פתוח — שלוש הנוריות כבויות; אם SW₀ סגור — הצבע נקבע לפי SW₁ ו-SW₂ (לפי טבלת המצבים).
התוכנית בשפת C (Arduino)
#define SW0 2 #define SW1 3 #define SW2 4 #define RED 9 #define GREEN 10 #define BLUE 11 void setup() { pinMode(SW0, INPUT); pinMode(SW1, INPUT); pinMode(SW2, INPUT); pinMode(RED, OUTPUT); pinMode(GREEN, OUTPUT); pinMode(BLUE, OUTPUT); } void loop() { int s0 = digitalRead(SW0); int s1 = digitalRead(SW1); int s2 = digitalRead(SW2); /* default - all LEDs off */ digitalWrite(RED, LOW); digitalWrite(GREEN, LOW); digitalWrite(BLUE, LOW); if (s0 == HIGH) /* SW0 closed */ { if (s1 == LOW && s2 == LOW) digitalWrite(RED, HIGH); else if (s1 == LOW && s2 == HIGH) digitalWrite(GREEN, HIGH); else if (s1 == HIGH && s2 == LOW) digitalWrite(BLUE, HIGH); else /* s1 == HIGH && s2 == HIGH */ { digitalWrite(RED, HIGH); digitalWrite(GREEN, HIGH); digitalWrite(BLUE, HIGH); } } }
SW1SW2נוריות שנדלקות
open (LOW)open (LOW)RED
open (LOW)closed (HIGH)GREEN
closed (HIGH)open (LOW)BLUE
closed (HIGH)closed (HIGH)RED, GREEN, BLUE
🧪סימולציה בתוך הדף— ארדואינו — שלושה מפסקים ושלוש נוריות
SW₀ פתוח — הכול כבוי; SW₀ סגור — SW₁ ו-SW₂ בוחרים: אדומה, ירוקה, כחולה או שלושתן, לפי טבלת השאלה.▶ פתח את פרק המערכות המשובצות
🧪 בגרסת האתר יש כאן סימולציה אינטראקטיבית — ארדואינו — שלושה מפסקים ושלוש נוריות.
שאלה 12 (Arduino) — חיישן אור LDR וממיר A/D
חומרה: LDR מ-5V, נגד ‎20 kΩ אל האדמה, הצומת A₀ · נורית LED בין 5V (דרך נגד ‎1 kΩ) ל-PB₁ (הדק 9) — נדלקת ב-LOW · ממיר A/D בעל 10 סיביות
סעיף א — המתח בהדק A₀ בהארה ‎6 lux

מהגרף, בהארה של ‎6 lux ההתנגדות של ה-LDR היא RLDR = ‎20 kΩ. המתח בהדק A₀ נקבע ממחלק המתח בין ה-LDR לנגד 20kΩ:

VA₀ = 5 · RRLDR + R = 5 · 20k20k + 20k = ‎2.5 V
VA₀ = ‎2.5 V
💡
ככל שההארה גדֵלה, RLDR קטֵנה ולכן VA₀ עולה. סף ההארה ‎6 lux מתאים ל-2.5V, כלומר לקריאת ממיר analogRead ≈ 2.5/5 × 1023 ≈ 511. הארה גדולה מ-‎6 lux ← קריאה גדולה מ-511.
סעיף ב — התוכנית בשפת C (Arduino)
#define analogPin A0 #define ledPin 9 int val; void setup() { pinMode(ledPin, OUTPUT); } void loop() { val = analogRead(analogPin); /* 1 - read the analog voltage at A0 (0..1023) */ if (val > 511) /* V(A0) > 2.5V <=> illumination > ‎6 lux */ digitalWrite(ledPin, LOW); /* 2 - LED on (LED tied to 5V: active-low) */ else digitalWrite(ledPin, HIGH); /* LED off (illumination <= ‎6 lux) */ }

הנורית נדלקת כאשר ההארה גדולה מ-‎6 lux (המתח בהדק A₀ עולה מעל 2.5V, כלומר הקריאה עולה מעל 511), ונכבית כאשר ההארה שווה ל-‎6 lux או קטנה מכך. מכיוון שהנורית מחוברת בין 5V להדק 9, היא נדלקת כאשר ההדק ב-LOW ונכבית כאשר הוא ב-HIGH.

🧪סימולציה בתוך הדף— ארדואינו — חיישן אור וממיר
בהארה של 6 lux התנגדות ה-LDR היא 20 kΩ והקריאה 511 — בדיוק הסף, ולכן הנורית עדיין כבויה. הקטינו את ה-LDR (אור חזק יותר) וראו אותה נדלקת.▶ פתח את פרק החיישנים
🧪 בגרסת האתר יש כאן סימולציה אינטראקטיבית — ארדואינו — חיישן אור וממיר.
שאלה 13 (Arduino) — הזזת נורית דולקת לפי תווים מהמקלדת
חומרה: PB₀–PB₅ (הדקים 8–13) המחוברים לשש נוריות LED דרך נגדי ‎220 Ω
קטע הקוד הנתון
byte c, out; void setup() { Serial.begin(9600); DDRB = 0x3F; out = 1; PORTB = out; } void loop() { if (Serial.available() > 0) { c = Serial.read(); if (c == '+') out = out << 1; if (out == 0x20) out = 1; PORTB = out; } }
סעיף א — הסבר השורות 4, 5, 11, 15

שורה 4: Serial.begin(9600) — אתחול תקשורת טורית בקצב 9600 סיביות לשנייה.
שורה 5: DDRB = 0x3F — הגדרת ההדקים PB₀–PB₅ (הסיביות 0–5, 0x3F = 00111111) כמוצאים.
שורה 11: if (Serial.available() > 0) — בדיקה אם התקבל תו כלשהו בכניסה הטורית.
שורה 15: if (out == 0x20) out = 1 — כאשר הסיבית הדולקת מגיעה ל-PB₅ (0x20), מאפסים חזרה ל-PB₀ (0x01) עוד לפני ההוצאה ל-PORTB.

סעיף ב — טבלת המעקב אחר המשתנה OUT
לחיצות על "+"OUTהנורית הדולקת
לפני התחלת הלחיצות0x01LED0
אחרי הלחיצה הראשונה0x02LED1
אחרי הלחיצה השנייה0x04LED2
אחרי הלחיצה השלישית0x08LED3
אחרי הלחיצה הרביעית0x10LED4
אחרי הלחיצה החמישית0x01LED0
אחרי הלחיצה השישית0x02LED1
סעיף ג — האם ניתן להדליק את LED5

לא. ברגע ש-out מגיע לערך 0x20 (הסיבית של LED5), שורה 15 מאפסת אותו ל-0x01 עוד לפני ההוצאה ל-PORTB, ולכן LED5 לעולם אינו נדלק. כדי שגם LED5 יידלק, יש לשנות את סף האיפוס בשורה 15 ל-0x40:

if (out == 0x40) out = 1; /* now 0x20 (LED5) is displayed before wrapping */

כך הערך 0x20 מוצא אל PORTB (LED5 נדלק), ורק ההזזה הבאה (0x40, שאין לו נורית) מאפסת חזרה ל-0x01.

🧪סימולציה בתוך הדף— ארדואינו — הזזת נורית
כל לחיצה על + מזיזה את הנורית צעד אחד. בקוד המקורי אחרי LED4 חוזרים ל-LED0, ו-LED5 אינה נדלקת; בשורה המתוקנת (0x40) גם LED5 נדלקת.▶ פתח את פרק המערכות המשובצות
🧪 בגרסת האתר יש כאן סימולציה אינטראקטיבית — ארדואינו — הזזת נורית.
שאלה 14 (Arduino) — יצירת אות PWM לפי פוטנציומטר
חומרה: פוטנציומטר בהדק A₀ · מוצא "out" ב-PB₅ (הדק 13) · ממיר A/D בעל 10 סיביות
קטע הקוד הנתון
#define analogPin A0 #define outPin 13 int analogValue; void setup() { pinMode(outPin, OUTPUT); } void loop() { analogValue = analogRead(analogPin) / 100; digitalWrite(outPin, HIGH); delay(analogValue); digitalWrite(outPin, LOW); delay(10 - analogValue); }
סעיף א — הסבר השורות 2, 6, 10, 12

שורה 2: #define outPin 13 — הגדרת קבוע בשם outPin המייצג את הדק 13.
שורה 6: pinMode(outPin, OUTPUT) — הגדרת הדק 13 כמוצא.
שורה 10: analogValue = analogRead(analogPin) / 100 — קריאת המתח האנלוגי ב-A₀ (ערך 0–1023) וחלוקתו ב-100 (חלוקה שלמה) לקבלת ערך שלם 0–10.
שורה 12: delay(analogValue) — השהיית המוצא במצב HIGH למשך analogValue אלפיות-שנייה.

סעיף ב — תחום הערכים של analogValue

הפעולה analogRead מחזירה 0–1023; חלוקה שלמה ב-100 נותנת 1023/100 = 10 לכל היותר:

analogValue מקבל ערכים שלמים בתחום 0 – 10
סעיף ג — צורת הגל בהדק 13

התוכנית יוצרת אות PWM בזמן מחזור קבוע של 10ms, שבו משך ה-HIGH הוא analogValue ומשך ה-LOW הוא (10 − analogValue). לכל מתח בהדק A₀:

1) VA₀=1.25V → analogRead ≈ 255 → /100 = 2 → HIGH 2ms , LOW 8ms (מחזור פעולה 20%)
2) VA₀=2.5V → analogRead ≈ 511 → /100 = 5 → HIGH 5ms , LOW 5ms (מחזור פעולה 50%)
3) VA₀=3.75V → analogRead ≈ 767 → /100 = 7 → HIGH 7ms , LOW 3ms (מחזור פעולה 70%)
בכל המקרים זמן המחזור 10ms; משך ה-HIGH: 2ms · 5ms · 7ms
5V13 [V]t [ms]021012201) VA0 = 1.25 V → HIGH 2 ms, LOW 8 ms5V13 [V]t [ms]051015202) VA0 = 2.5 V → HIGH 5 ms, LOW 5 ms5V13 [V]t [ms]071017203) VA0 = 3.75 V → HIGH 7 ms, LOW 3 ms
🧪סימולציה בתוך הדף— ארדואינו — אות PWM
המתח בהדק A0 קובע את זמן ה-HIGH בחלוקה שלמה ב-100; זמן המחזור קבוע, 10 אלפיות שנייה.▶ פתח את פרק המערכות המשובצות
🧪 בגרסת האתר יש כאן סימולציה אינטראקטיבית — ארדואינו — אות PWM.
🏠 ♿