על המסמך: הצעה לפתרון מלא לשאלון 815381 — אלקטרוניקה ומחשבים, קיץ תשע"ז 2017. בשאלון ארבע-עשרה שאלות בשלושה פרקים, ועל הנבחן לענות על חמש שאלות — אחת לפחות מכל פרק. פרק ראשון (1–4) מבוא להנדסת אלקטרוניקה; פרק שני (5–6) תורת החשמל; פרק שלישי (7–14) מבוא להנדסת מחשבים — תכנות בשפת C ובסביבת Arduino. כאן פתורות כל השאלות, לנוחות הלימוד.
🔧 פרק ראשון — מבוא להנדסת אלקטרוניקה (שאלות 1–4)
שאלה 1 — שני מגברי שרת אידאליים (לא-מהפך ומגבר הפרש)
מבנה המעגל: הדק 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
🧪סימולציה בתוך הדף— לא-מהפך ומגבר הפרש — שני מגברים
בזרם חילופין כל הקבלים מהווים קצר. מתח המבוא Vi מגיע דרך C₁ אל הבסיס; המעבר בסיס-פולט מיוצג בהתנגדות hie=1.5kΩ; הקבל C₃ מקצר את RE ולכן הפולט מוארק לחילופין; במוצא פועל מקור זרם תלוי β·ib בקולט, המזין את העומס RC ∥ RL. הנגד RB מחובר בין הבסיס לאדמת החילופין.
סעיף ד — הגבר המתח 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 עם קבל עוקף.
מבנה המעגל: המגבר משמש כמשווה (הזנה יחידה 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
סעיף ג — הזמן עד הדלקת ה-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, הדק ה-(−) אל האדמה. כל הדקי ה-(−) משותפים לאדמה אחת.
סעיף ב — ערך ה-Time/div
למסך האוסצילוסקוֹפ עשר משבצות לרוחב. כדי להציג שני מחזורים (2 × 1ms = 2ms) על מלוא הרוחב:
אות המבוא הוא משולש 0–5V בזמן מחזור 1ms. מוצא המשווה הוא אות מלבני בזמן מחזור זהה: גבוה (5V) בקטע שבו האות המשולש עובר את 2.5V (סביב הפסגה, כלומר 0.25ms < t < 0.75ms בכל מחזור), ונמוך (0V) בשאר המחזור (סביב הבקעים). מחזוֹר מלא של המבוא נותן מחזור מלא של המוצא ביחס מחזור 50%.
מבנה המעגל: מן המקור עובר הזרם דרך R₁ אל צומת עליון, ומשם הוא מתפצל לשני ענפים בין הצומת העליון לצומת התחתון: הענף R₂ (2Ω), והענף הטורי R₃+R₄ (4+4=8Ω) המקביל לו. מן הצומת התחתון חוזר הזרם דרך R₅ אל המקור. הזרם ב-R₁ וב-R₅ הוא זרם המקור המלא.
מצב המפסקים: כל מבוא מחובר דרך נגד-מעלה (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. לכל מספר מוחלפות הספרות:
מצב המפסקים: כל מפסק מחובר אל 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);
}
}
}
SW1
SW2
נוריות שנדלקות
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
הנורית הדולקת
לפני התחלת הלחיצות
0x01
LED0
אחרי הלחיצה הראשונה
0x02
LED1
אחרי הלחיצה השנייה
0x04
LED2
אחרי הלחיצה השלישית
0x08
LED3
אחרי הלחיצה הרביעית
0x10
LED4
אחרי הלחיצה החמישית
0x01
LED0
אחרי הלחיצה השישית
0x02
LED1
סעיף ג — האם ניתן להדליק את 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 סיביות
שורה 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