דלגו לתוכן המרכזי
KitLab
שיעור קודם
תצוגת ארבע ספרות וסריקה דינמית· 18 / 41
תצוגת ארבע ספרות וסריקה דינמית
🎬

הסרטון בדרך אלינו

בינתיים — התמלול המלא של השיעור מחכה לכם למטה

תצוגת ארבע ספרות וסריקה דינמית

מה בשיעור?

  • השתהות ראייה — למה סרטים נראים רציפים
  • למה 4 ספרות היו דורשות 32 פינים
  • קווי מקטעים מול קווי בחירה
  • סריקה דינמית: להציג בתורות מהר מאוד
  • למה delay(5) הוא הלב של השיעור

מה נלמד כאן

  • מה זו השתהות ראייה
  • תצוגת ארבע ספרות ובעיית הפינים
  • סריקה דינמית (Multiplexing)
  • להציג ארבע ספרות בו-זמנית

הבעיה

בשיעור הקודם הצגתם ספרה אחת. אבל שעון צריך ארבע, ומדחום צריך שתיים עם נקודה.

תצוגת ארבע ספרות

ספרה אחת דרשה שמונה פינים. ארבע ספרות ידרשו 32 — יותר ממה שיש ללוח כולו.

הפתרון הוא תעלול יפהפה שמסתמך על מגבלה של העין האנושית.


הידע שצריך

1. השתהות ראייה

השתהות ראייה (Persistence of Vision) היא התופעה שבה העין ממשיכה "לראות" תמונה כ-0.1 שנייה אחרי שהיא נעלמה.

השתהות ראייה

זו לא תיאוריה — אתם נתקלים בה כל יום:

  • סרטים מוקרנים ב-24 תמונות סטטיות בשנייה, והמוח רואה תנועה רציפה
  • להבי מאוורר מהירים נראים מטושטשים או "נעלמים"
  • ציור באור בלילה — מזיזים פנס ומצלמים, ורואים קו רציף

בכל המקרים האלה המוח ממלא את החורים בין תמונות בדידות.

2. תצוגת ארבע הספרות

היא בנויה מארבע תצוגות שבעה מקטעים באריזה אחת.

מבנה התצוגה

וכאן הטריק שחוסך פינים: כל ארבע הספרות חולקות את אותם 8 קווי מקטעים. בנוסף יש ארבעה קווי בחירה (D1-D4) שקובעים איזו ספרה פעילה כרגע.

סוג הקו כמות מה הוא קובע
קווי מקטעים (a-g, dp) 8 מה מוצג
קווי בחירה (D1-D4) 4 איפה זה מוצג

12 פינים במקום 32.

3. סריקה דינמית — הרעיון המרכזי

⚠️ יש מגבלה: מכיוון שכל הספרות חולקות את אותם קווי מקטעים, רק ספרה אחת יכולה להיות דלוקה בכל רגע. אם תדליקו שתיים — שתיהן יציגו את אותו דבר.

אז איך מציגים 1234?

סריקה דינמית

לא מציגים אותן בו-זמנית — מציגים אותן בתורות, מהר מאוד:

  1. מדליקים את ספרה 1, מציגים "1", ממתינים 5 מילי-שניות
  2. מכבים, מדליקים את ספרה 2, מציגים "2", ממתינים 5 מילי-שניות
  3. וכן הלאה, ואז חוזרים מהתחלה

כל ספרה דולקת רבע מהזמן — אבל בגלל השתהות הראייה, העין רואה את ארבעתן דולקות יחד.

זה נקרא סריקה דינמית או Multiplexing, וזו אותה טכניקה שמפעילה לוחות פרסום ענקיים ומסכי LED.


הניסוי

המטרה: להציג "1234".

רשימת רכיבים

הרכיב כמות
לוח ESP32 1
לוח ניסוי 400 נקודות 1
תצוגת ארבע ספרות 1
נגד 220Ω 8

התרשים החשמלי

התרשים החשמלי

החיבור

חיבור הרכיבים


הקוד

// קווי בחירת הספרה
int seg_1 = 14;  int seg_2 = 25;  int seg_3 = 26;  int seg_4 = 27;
int seg_array[4] = { seg_1, seg_2, seg_3, seg_4 };

// קווי המקטעים
int a = 5;   int b = 16;  int c = 17;  int d = 18;
int e = 19;  int f = 23;  int g = 12;  int dp = 13;
int led_array[8] = { a, b, c, d, e, f, g, dp };

// טבלת הספרות — כמו בשיעור הקודם
int logic_array[][8] = {
  { 1, 1, 1, 1, 1, 1, 0, 0 },  // 0
  { 0, 1, 1, 0, 0, 0, 0, 0 },  // 1
  { 1, 1, 0, 1, 1, 0, 1, 0 },  // 2
  { 1, 1, 1, 1, 0, 0, 1, 0 },  // 3
  { 0, 1, 1, 0, 0, 1, 1, 0 },  // 4
  { 1, 0, 1, 1, 0, 1, 1, 0 },  // 5
  { 1, 0, 1, 1, 1, 1, 1, 0 },  // 6
  { 1, 1, 1, 0, 0, 0, 0, 0 },  // 7
  { 1, 1, 1, 1, 1, 1, 1, 0 },  // 8
  { 1, 1, 1, 1, 0, 1, 1, 0 },  // 9
};

// מכבים הכול — מקטעים וספרות
void clear() {
  for (int i = 0; i < 8; i++) digitalWrite(led_array[i], LOW);
  for (int i = 0; i < 4; i++) digitalWrite(seg_array[i], HIGH);
}

// מציגים ספרה אחת במיקום מסוים
void display_number(int order, int number) {
  clear();
  digitalWrite(seg_array[order], LOW);        // מפעילים את הספרה הנבחרת
  for (int i = 0; i < 8; i++) {
    digitalWrite(led_array[i], logic_array[number][i]);
  }
}

void setup() {
  for (int i = 0; i < 4; i++) {
    pinMode(seg_array[i], OUTPUT);
    digitalWrite(seg_array[i], HIGH);
  }
  for (int i = 0; i < 8; i++) {
    pinMode(led_array[i], OUTPUT);
    digitalWrite(led_array[i], LOW);
  }
}

void loop() {
  int digits[4] = {1, 2, 3, 4};

  for (int i = 0; i < 4; i++) {
    display_number(i, digits[i]);
    delay(5);           // זה הזמן שכל ספרה דולקת
  }
}

delay(5) הוא הלב של השיעור. עם 5 מילי-שניות לספרה, סיבוב שלם לוקח 20 מילי-שניות — כלומר 50 סריקות בשנייה. מהר הרבה מעבר לסף ההשתהות של העין.

נסו לשנות ל-100 ותראו את הטריק מתפרק לנגד עיניכם.

מה אמור לקרות

התצוגה מראה 1234


נסו בעצמכם

  • שנו את delay(5) ל-100. מה קורה? עכשיו הבנתם בדיוק מה עושה השתהות ראייה.
  • שנו את digits[4] למספר אחר. עובד?
  • הציגו מונה שעולה: 0000, 0001, 0002…
  • שלבו עם שיעור 12: הציגו את הטמפרטורה על התצוגה.
  • למה clear() נקראת בתחילת display_number ולא בסופה?

🧰 הרכיבים לשיעור הזה

רוצים את חומרי הקורס והעדכונים?

נשלח למייל את קובצי הקוד, החומרים ועדכונים על שיעורים חדשים. בלי ספאם.