על ידי ארי גרינשפון » ה' נובמבר 18, 2010 12:01 pm
איגור שלום,
אם אני מבין נכון אז מה שאתה רוצה לעשות כתבתי לפי השלבים הבאים
א. להשתמש ברגיסטר CCP כדי לשלוט על אות היציאה PWM כדי לשלוט על מהירות הסיבוב של המנוע.
ב.חיישן Hall Effect יזהה את מהירות סיבוב המנוע או זיהוי פרק הזמן שלוקח למנוע לעשות סיבוב
וזה יהיה הכניסה למיקרו מעבד.
ג. להשתמש בטיימר למדידת פרק הזמן של אות החיישן
ד. להשתמש באותו טיימר מסעיף ג' כדי לתאם את ה duty cycle של אות ה PWM שישמר על מהירות המנוע
אם אכן הבנתי אותך נכון אז בטיימר 2 יש לך אפשרות לבצע הפרעות (Interrupts) ב Duty Cycle של אות ה PWM
ובנוסף לזה אתה צריך להשתמש בעוד כניסה שיש במיקרו מעבד עבור ההפרעות לחיישן Hall Effect
חיישן Hall Effect צריך לקבל את המידע מהטיימר 2, צריך שיהיה לו אפשרות לאפס את הטיימר 2 עבור ספירת פרק הזמן הבא, להרים דגל עבור התוכנית לחישוב ה Duty Cycle החדש עבור אות ה PWM
בקשר לפעולות שמבצעים "בו זמנית" המיקרו מעבד PIC מבצע רק פעולה אחת בכל זמן
כדי שיראה כאילו שהמיקרו מעבד PIC מבצע שתי פעולות בו זמנית אז צריך לבצע תזמון
אם לא תבצע תזמון של התהליכים אז התהליכים יכולים להתנגש זה בזה ולתקוע את המערכת כי כל אחד לוקח משאב (למשל זמן חישוב מהמיקרו מעבד) שתוקע את התהליך האחר מלסיים את משימתו ואז כל התהליכים תקועים
הפיתרון האפשרי הכי טוב לבעיה שלך היא למנוע את זה בעזרת שטות תזמון שמשתמשות בהפרעות יש גם כמה אלגוריתמים לפיתרון הבעיה הזאת אבל במקרה שלך הם לא נחוצים
קיימות המון שיטות לתזמון המערכת למשל תהליך ראשון שמגיע למיקרו מעבד הוא הראשון שיקבל שירות מהמיקרו מעבד
שיטת תזמון אחרת היא שכל תהליך יקבל יחידת זמן שגודלה ממוצעת ביחס לזמן שכל התהליך לוקח (אפשר לשערך את הזמן שהתהליך ייקח לפי ההיסטוריה שלו)
שיטת תזמון אחרת היא שכל תהליך יקבל זמן קבוע
שיטת תזמון אחרת היא שהתהליך עם העדיפות הגבוה יותר יהיה הראשון (אבל אז התהליך עם העדיפות הנמוכה יכול להיתקע)
שיטת תזמון אחרת היא המתנה מעגלית
ויש עוד שיטות תזמון ...
בכל אופן לא תוכל לחלק לתהליכים יותר משאבים ממה שיש לך אבל ברגע שהתהליך הסתיים אז המשאבים שהתהליך לקח יחזרו ואז תוכל לחלק אותם לתהליכים אחרים
בנוסף להקצאות המשאבים שסיפקת לתהליכים, כדי שתוכל לתזמן את המערכת אתה צריך למנוע מתהליך אחד להתבצע כל עוד התהליך השני לא סיים את התוכנית הקריטית שלו
כי אם לא אז מה שיקרה זה שהתוצאות של התהליכים לא יהיו נכונות כי הם התערבבו בדיוק בזמן החישוב וישבשו זה לזה את התוצאות בגלל שהתהליך הראשון עדיין לא סיים לחשב והשני נדחף ושיבש לו את החשבון כך שהתוצאה של החישוב הראשון תהיה מורכבת מחלק ראשון שלו במקום לא ידוע בחישוב נדחף החישוב של התהליך השני ואז המשיך החישוב של התהליך הראשון
וגם כאן יש הרבה שיטות לבעיה הזאת למשל בעזרת דגלים או נעילות או רמזורים או לולאה שגורמת לתהליך שאנו רוצים שיחכה לחכות או אלגוריתמים שמיועדים לכך ויש עוד ...
ארי גרינשפון