בפרויקט זה אנו מתכננים לעצב שעון מעורר פשוט באמצעות טיימרים ATMEGA32. למיקרו-בקרת ATmega32A יש טיימר של 16 סיביות, ואנחנו נשתמש בטיימר הזה כדי לספור את השניות ולפתח שעון דיגיטלי.
לכל השעונים הדיגיטליים יש גביש שבתוכו שהוא לב השעון. הקריסטל הזה לא רק קיים בשעון אלא קיים בכל מערכות המחשוב בזמן אמת. גביש זה מייצר פעימות שעון, הדרושות לחישובי תזמון. אמנם ישנן דרכים אחרות להשיג פעימות שעון אך לדיוק ולתדירות גבוהה יותר מעדיפות שעון מבוסס גביש. אנו הולכים לחבר גביש ל- ATMEGA32 לקבלת שעון מדויק.
רכיבים נדרשים
חומרה: מיקרו-בקרת ATmega32, קריסטל 11.0592 מגה-הרץ, קבלים 22pF (2 יח '), ספק כוח (5 וולט), AVR-ISP PROGRAMMER, JHD_162ALCD (16x2 LCD), קבל 100uF (מחובר על פני ספק כוח), כפתורים (ארבעה חלקים), נגד 10KΩ (שש חתיכות), 100 nF קיבול r (ארבע חתיכות), שלושה מתגי סיכה (2 חתיכות), טרנזיסטור 2N2222, זמזם, נגד 200Ω.
תוכנה: Atmel studio 6.1, פרוגיספ או קסם פלאש.
תרשים מעגל והסבר עבודה
לתזמון מדויק חיברנו גביש 11.0592 מגה-הרץ לשעון. כעת לצורך השבתת השעון הפנימי של ATMEGA עלינו לשנות את BITS FUSE BITS שלו. זכור שאיננו נוגעים בפיסות הנתיך הגבוהות כך שתקשורת JTAG עדיין תהיה מופעלת.
כדי לומר ל- ATMEGA להשבית את השעון הפנימי ולעבוד על חיצוני עלינו להגדיר:
BYTE לשימוש נמוך = 0xFF או 0b11111111.
במעגל PORTB של ATMEGA32 מחובר ליציאת נתונים LCD. כאן צריך לזכור להשבית את תקשורת JTAG ב- PORTC של ATMEGA על ידי שינוי בתים הנתיכים הגבוהים, אם רוצים להשתמש ב- PORTC כיציאת תקשורת רגילה. ב- LCD 16x2 יש 16 פינים בכל מקום אם יש נורה שחורה, אם אין אור אחורי יהיו 14 פינים. אפשר להפעיל או להשאיר את סיכות התאורה האחורית. עכשיו ב -14 הפינים ישנם 8 פינים נתונים (7-14 או D0-D7), 2 פינים לאספקת חשמל (1 & 2 או VSS & VDD או GND & + 5V), סיכה שלישית 3 לבקרת ניגודיות (VEE שולט עד כמה הדמויות צריכות להיות עבות מוצג), ו -3 סיכות בקרה (RS & RW & E)
במעגל תוכלו לראות שלקחתי רק שתי סיכות בקרה. זה נותן את הגמישות של הבנה טובה יותר, ביט הניגודיות ו- READ / WRITE לא משמשים לעתים קרובות, כך שניתן לקצר אותם לקרקע. זה מכניס את LCD למצב הניגודיות והקריאה הגבוה ביותר. אנחנו רק צריכים לשלוט בסיכות ENABLE ו- RS כדי לשלוח תווים ונתונים בהתאם.
החיבורים שבוצעו עבור LCD מובאים להלן:
PIN1 או VSS לקרקע
PIN2 או VDD או VCC ל- + 5v כוח
PIN3 או VEE לקרקע (נותן ניגודיות מרבית הטובה ביותר למתחילים)
PIN4 או RS (בחירת רישום) ל- PD6 של uC
PIN5 או RW (קריאה / כתיבה) לקרקע (מכניס את LCD למצב קריאה מקל על התקשורת עבור המשתמש)
PIN6 או E (אפשר) ל- PD5 של uC
PIN7 או D0 עד PB0 של uC
PIN8 או D1 עד PB1 של uC
PIN9 או D2 ל- PB2 של uC
PIN10 או D3 ל- PB3 של uC
PIN11 או D4 ל- PB4 של uC
PIN12 או D5 ל- PB5 של uC
PIN13 או D6 ל- PB6 של uC
PIN14 או D7 ל- PB7 של uC
במעגל אתה יכול לראות שהשתמשנו בתקשורת 8 ביט (D0-D7) אולם זה לא חובה, אנו יכולים להשתמש בתקשורת 4 ביט (D4-D7) אבל עם תוכנית תקשורת של 4 סיביות הופכת להיות קצת מורכבת. אז כפי שמוצג בטבלה לעיל אנו מחברים 10 פינים של LCD לבקר, בהם 8 פינים הם פינים של נתונים ו -2 פינים לשליטה.
מתג אחד מיועד להפעלת תכונת התאמה בין אזעקה לזמן. אם הסיכה נמוכה, אנו יכולים להתאים את זמן האזעקה על ידי לחיצה על כפתורים. אם הכפתורים הגבוהים שלו מיועדים לכוונון TIME בלבד. ישנם כאן ארבעה לחצנים, הראשון מיועד להגדלת דקות לאזעקה או זמן. השני הוא לירידה של MINUTES בהתראה או בזמן. השלישי הוא להגדלת שעה ב- אזעקה או זמן. FOURTH נועד להפחתת HOURS באזעקה או בזמן.
הקבלים המצויים כאן נועדים לביטול האפקט המקפיץ של כפתורים. אם הם מוסרים הבקר עשוי לספור יותר מאחד בכל לחיצה על הכפתור. הנגדים המחוברים לסיכות נועדו להגבלת הזרם, כאשר לוחצים על הכפתור כדי למשוך את הסיכה לקרקע.
בכל פעם שלוחצים על כפתור, הסיכה המתאימה של הבקר נמשכת לקרקע וכך הבקר מזהה שלוחצים על כפתור מסוים ומבצעים פעולה מתאימה.
קודם כל, השעון שאנחנו בוחרים כאן הוא 11059200 הרץ, ומחלק אותו ב- 1024 נותן 10800. אז על כל שנייה נקבל 10800 פעימות. אז אנחנו הולכים להתחיל מונה עם 1024 prescaler כדי לקבל את השעון נגד כ 10800 הרץ. שנית אנו הולכים להשתמש במצב CTC (Clear Timer Counter) של ATMEGA. יהיה רישום של 16 סיביות בו נוכל לאחסן ערך (השווה ערך), כאשר המונה סופר עד לערך ההשוואה שהפרעה מוגדרת ליצור.
אנו הולכים להגדיר את ערך ההשוואה ל- 10800, כך שבעצם יהיה לנו ISR (שגרת שירות להפסיק בכל השוואה) לכל שנייה. אז אנו הולכים להשתמש בשגרה המתוזמנת הזו בכדי להשיג את השעון שהיינו זקוקים לו.
BROWN (WGM10-WGM13): סיביות אלה נועדו לבחירת מצב פעולה לטיימר.
כעת מכיוון שאנו רוצים את מצב CTC עם השוואה בין ערך בתים OCR1A, עלינו רק להגדיר את WGM12 לאחד, הנותרים נותרים מאחר שהם כברירת מחדל.
אדום (CS10, CS11, CS12): שלושת הסיביות הללו נועדו לבחירת ה- prescalar וכך לקבל שעון נגד מתאים.
מכיוון שאנחנו רוצים 1024 כגודל מראש, עלינו להגדיר גם CS12 וגם CS10.
עכשיו יש מרשם אחר שעלינו לשקול:
ירוק (OCIE1A): יש להגדיר סיבית זו כדי לקבל הפרעה בהתאמה השוואתית בין ערך מונה לבין ערך OCR1A (10800) אותו הגדרנו.
ערך OCR1A (ערך השוואה נגד), כתוב במרשם הנ"ל.
הסבר על תכנות
העבודה של שעון מעורר מוסברת שלב אחר שלב בקוד שלהלן:
# כלול // כותרת כדי לאפשר בקרת זרימת נתונים על פינים # הגדר F_CPU 1000000 // אומר תדר גביש לבקר המצורף # כולל