לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה --לשאלות בנושאי טלוויזיות, מערכות קולנוע ביתי, הגברה וסאונד - אנא פנו לפורום אודיו וקולנוע ביתי -- www.fresh.co.il/f=103 תגיות פורום: פורום אלקטרוניקה - פורום חשמל - שאלות בנושאי אלקטרוניקה - תכנון מעגלים - מעגלים מודפסים - פיתוח אלקטרוני - תכנון PCB - בקרים למנועים - תאורת לדים - תכנון דימר - מודינג - Arduino - מיקרו בקרים - שליטה על תאורה - שלט רחוק - משדר FM - תאורת LED - פתרון שאלות בחשמל - אלקטרוניקה תקבילית חץ ימינה  

לך אחורה   לובי הפורומים > תחביבים > חשמל ואלקטרוניקה
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #1  
ישן 03-07-2013, 09:37
  gal_e gal_e אינו מחובר  
 
חבר מתאריך: 03.07.13
הודעות: 2
הוספת פורטים לבקר 8051 וmultitasking בC

שלום לכולם.
אני מתכנן מעגל עם מיקרו בקר 8051/52.
לבקר הזה קיים 32 סיביוט כלומר 4 פורטים I/O.
אני מתכנן מעגל עם 7 סיגמנט
ואני צריך יותר פורטים כי כל רכיב 7 סיגמנט תופס 7 סיביות (כמעט פורט שלהם).
מה אתם ממליצים לי לעשות?
*אני משתמש ב7 סיגמנט רגיל עם 7 רגלים ולא עם 7 סיגמנט מסוג אקסה דצימלי (4 רגליים).

השאלה השנייה שלי היא:
אך אני עושה multitasking בשפת C (ריבועי משימות).
אני מריץ את התוכנית בלולאה ואם אני שם את הפקודה DELEY בשביל לעכב איזה שהו תהליך,כל התוכנית מתעכבת
לדוגמה: אם אני גורם לLED להבהב הוא יעקב את הבדיקה של מתג מסוים ונצטרך ללחוץ במשך כל זמן ההשהיה על המתג
עד שהעיכוב של הפקודה DELEY תפסיק (ואז היא חוזרת על עצמה כמה וכמה פעמים)
אז מה אתם ממליצים לעשות?
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #2  
ישן 03-07-2013, 20:27
  משתמש זכר DigiGil DigiGil אינו מחובר  
 
חבר מתאריך: 20.10.06
הודעות: 202
שלח הודעה דרך MSN אל DigiGil
מידע תשובות
בתגובה להודעה מספר 1 שנכתבה על ידי gal_e שמתחילה ב "הוספת פורטים לבקר 8051 וmultitasking בC"

יש שיטה מקובלת להפעלת מספר יחידות של 7SEG והיא נקראת "ריבוב".
אתה אמור לחבר את 7 הכניסות של כל מקטעי הלד במקביל, כלומר אתה צריך לשם כך, רק 7 רגלי IO של המיקרובקר.
את רגלי ה-Common של ה-7SEG (התצוגה יכולה להיות Common Anode או Common Cathode), אתה צריך לחבר ליציאה של דוחף זרם מתאים (Buffer,Latch או דומה), לחילופין, אתה יכול לחבר אותה לדרלינגטון מבוקר, כמו למשל הרכיב ULN2003. התשובה היא כללית, כי זה תלוי בסוג רכיב ה-7SEG הספציפי בו תשתמש..
לבסוף, עם יתר כמות רגלי ה-IO של המיקרובקר, אתה שולט על פעולת דוחף הזרם, כך שרק יחידת 7SEG אחת בלבד מאופשרת, בכל רגע נתון.
אתה צריך לכתוב תוכנה מתאימה, שמעלה את הנתון המתאים להצגה ב-7SEG ואז מפעילה את ה-7SEG הרצוי, אחרי זמן-מה, מפסיקה את ה-7SEG ומפעילה אחר וכך הלאה וחוזר חלילה..
אם עושים זאת מספיק מהר, אך לא מהר מדי, זה נראה כאילו כל התצוגות פועלות במקביל.
זה אולי נשמע מעט מסובך בתחילה, אבל זו השיטה שכל התצוגות 7SEG במכשירים מסחריים עובדות. זה גם חוסך בקווי IO של המיקרובקר וגם חוסך הספק (לא כל הלדים דלוקים במקביל).

תשובה לשאלה השניה:
ישנן מספר שיטות לפתרון בעיות מהסוג הזה, כולן קשורות בטכניקות של תכנות.
שיטה אחת היא בעזרת פסיקת טיימר ומונה. נניח אתה מגדיר שבכל חצי שניה, תהיה פסיקת טיימר. בתוך רוטינת הטיפול בפסיקה (ISR), אתה מגדיל מונה. אם המונה הגיע לערך מסוים (נניח 20), אתה מדליק את הלד, אם המונה הגיע לערך אחר (נניח 40), אתה מכבה את הלד ומאפס את המונה. אותו העיקרון ניתן לאימוץ גם אם יש לך כמות גדולה יותר של אירועים שונים..

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

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

בברכה,
דיגיגיל
_____________________________________
_- סיוע בהשלמת פרויקט-גמר להנדסאים -_
(האתר digigil.com נסגר)



נערך לאחרונה ע"י DigiGil בתאריך 03-07-2013 בשעה 20:32.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #3  
ישן 03-07-2013, 22:15
  gal_e gal_e אינו מחובר  
 
חבר מתאריך: 03.07.13
הודעות: 2
בתגובה להודעה מספר 2 שנכתבה על ידי DigiGil שמתחילה ב "תשובות"

ציטוט:
במקור נכתב על ידי DigiGil
יש שיטה מקובלת להפעלת מספר יחידות של 7SEG והיא נקראת "ריבוב".
אתה אמור לחבר את 7 הכניסות של כל מקטעי הלד במקביל, כלומר אתה צריך לשם כך, רק 7 רגלי IO של המיקרובקר.
את רגלי ה-Common של ה-7SEG (התצוגה יכולה להיות Common Anode או Common Cathode), אתה צריך לחבר ליציאה של דוחף זרם מתאים (Buffer,Latch או דומה), לחילופין, אתה יכול לחבר אותה לדרלינגטון מבוקר, כמו למשל הרכיב ULN2003. התשובה היא כללית, כי זה תלוי בסוג רכיב ה-7SEG הספציפי בו תשתמש..
לבסוף, עם יתר כמות רגלי ה-IO של המיקרובקר, אתה שולט על פעולת דוחף הזרם, כך שרק יחידת 7SEG אחת בלבד מאופשרת, בכל רגע נתון.
אתה צריך לכתוב תוכנה מתאימה, שמעלה את הנתון המתאים להצגה ב-7SEG ואז מפעילה את ה-7SEG הרצוי, אחרי זמן-מה, מפסיקה את ה-7SEG ומפעילה אחר וכך הלאה וחוזר חלילה..
אם עושים זאת מספיק מהר, אך לא מהר מדי, זה נראה כאילו כל התצוגות פועלות במקביל.
זה אולי נשמע מעט מסובך בתחילה, אבל זו השיטה שכל התצוגות 7SEG במכשירים מסחריים עובדות. זה גם חוסך בקווי IO של המיקרובקר וגם חוסך הספק (לא כל הלדים דלוקים במקביל).

בברכה,
דיגיגיל


מצאתי את התמונה הבאה:


[התמונה הבאה מגיעה מקישור שלא מתחיל ב https ולכן לא הוטמעה בדף כדי לשמור על https תקין: http://www.electroons.com/8051/electroons/images/8051_7_segment.jpg]


לפי מה שאני מבין מהמעגל הזה ולפי מה שאמרתה, שכל הלדים מחוברים במקביל
כלומר אם אני נותן פקודה שיצא 0X00 (הפלט יצא: 8.) אז כל הLEDS יוציאו את אותו פלט ואני רוצה שכל אחד יתן לי פלט שונה ומפה אני מסיק שכל 7SEG צריך פורט משלו (אלה אם כן אני לא מבין מה הסירטוט מסביר)
וגם לפי הסירטוט ניתן ליראות אם אני מכניס 0 לוגי לרגל הקומון אנודה של ה7SEG אז הוא לא יעבוד בכלל אז אני יכול לחבר אותו ישירות לVCC (כמובן שאני לא מבתר על הטרנזיסטור כי הוא משמש לי כדוחף זרם)?

נערך לאחרונה ע"י gal_e בתאריך 03-07-2013 בשעה 22:17.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #4  
ישן 04-07-2013, 16:38
צלמית המשתמש של MatiM
  משתמש זכר MatiM MatiM אינו מחובר  
 
חבר מתאריך: 12.04.06
הודעות: 2,021
שלח הודעה דרך MSN אל MatiM
בתגובה להודעה מספר 3 שנכתבה על ידי gal_e שמתחילה ב "[QUOTE=DigiGil]יש שיטה מקובלת..."

זה עושה בדיוק מה שאמרת, אבל אתה לא יכול לוותר על כלום כדי להגיע לתוצאה שאתה רוצה.

הטרנזיסטורים הם אלה שקובעים איזו תצוגה תקבל את הפלט.
הרעיון הוא לא לחבר את כולם לVCC ולשלוח לכולם את אותו פלט.

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

וכן הלאה לפי מספר התצוגות שיש לך.

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

אם תעשה את זה יותר מהר, העין האנושית לא תקלוט את השינויים [כיבוי והפעלה של כל תצוגה] ולכן המספר יוצג לך בשלמותו.

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

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 15:15

הדף נוצר ב 0.06 שניות עם 10 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר