View RSS Feed

הבייט הלבן ג'וניור

מיקרו-בקר במהירות שעון 1Hz

דרג את הבלוג הזה
כחלק מהניסויים שהתחלתי לעשות כדי להכיר לעומק את ה-ATtiny85 וה-Atmel Studio, שיחקתי קצת עם עניין השעון. מיקרו-בקרים בארכיטקטורת AVR יכולים לעבוד על סמך שעון פנימי, מתנד חיצוני (כמו שקיים בארדואינו) או אות שעון חיצוני. המפרט הטכני מזהיר שאות השעון החיצוני חייב להיות בעל קצב אחיד (עד כדי 2% סטיה), אך לא אומר כלום על קצב מינימלי... מה שהעלה מיד את המחשבה על מיקרו-בקר שעובד בקצב שעון בלתי שימושי בעליל של הרץ אחד - מחזור שעון אחד בשניה.

מקור האות שיצרתי עבור השעון הזה הוא פשוט מאד - ארדואינו שמריץ blink מזורז (במקום שניה הפעלה ושניה כיבוי, רק חצי שניה לכל אחד). חיברתי את ה-GND ואת פין 13 המהבהב של הארדואינו ל-GND ולפין מקור השעון של ה-ATtiny85 (פין מס' 2), בהתאמה. כמובן שאפשר ליצור מקור לאות שעון גם עם רכיב 555.

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

קוד:
#include <avr/io.h>
#include <avr/interrupt.h> 

int main(void)
{
	DDRB = 7; // PB0,1,2 (pins 5,6,7) are OUTPUT  

    cli(); // Stop interrupts,
    CLKPR = 1 << CLKPCE; // Change Enable, must precede changes
    CLKPR = 0; // Prescaler Select bits, 2^{4 last bits}
    sei(); // Re-enable interrupts
		
	while(1)
    {
 		PORTB ^= 1; // PB0 (pin 5) toggle
    }
}
מה שהתקבל מכל זה הוא מערכת עם ארדואינו שמהבהב לאיטו, ושכל הבהוב שלו מקביל למחזור שעון אחד של הטייני. כך אני יכול ממש לספור כמה מחזורי שעון דרושים ללולאה הראשית של הטייני: הוא מדליק ומכבה את הלד שמחובר אליו כל חמישה מחזורים. בניסוח אחר, אם ארצה שהקוד הנ"ל יגרום להבהוב "קלאסי" של פעם בשניה בטייני, לא תהיה לי ברירה אלא לעשות אובר-קלוקינג מטורף ל-5Hz

מה עוד אפשר לעשות עם מיקרו-בקר שעובד בקצב של 1Hz?

עודכן בתאריך 13-10-2013 בשעה 02:20-24 על ידי igendel

קטגוריות
ללא קטגוריה

תגובות

  1. guynaor's Avatar
    ניסוי מעניין! לגבי צריבת הפיוזים, אם אתה מעוניין, פיתחתי לוח קטנטן מבוסס ATTiny84 שבלחיצת כפתור מאפס את הפיוזים של כל מיני ATTiny לערכים המקוריים.
    עודכן בתאריך 13-10-2013 בשעה 07:17-24 על ידי guynaor
  2. igendel's Avatar
    ציטוט נכתב במקור על ידי guynaor
    ניסוי מעניין! לגבי צריבת הפיוזים, אם אתה מעוניין, פיתחתי לוח קטנטן מבוסס ATTiny84 שבלחיצת כפתור מאפס את הפיוזים של כל מיני ATTiny לערכים המקוריים.
    איך, עם מתח גבוה?
    בעצם, דבר כזה הוא חיוני רק אם הגדרתי את הפיוז Reset Disable, לא?
  3. guynaor's Avatar
    כן, עם מתח גבוה בעזרת Voltage Pump.
  4. Mishka's Avatar
    תזהר עם אובר-קלוקינג מטורף כל כך, שלא ישרף הרכיב
    אולי שווה לבדוק אפשרות קירור מים

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

    מיכאל
  5. igendel's Avatar
    ציטוט נכתב במקור על ידי Mishka
    תזהר עם אובר-קלוקינג מטורף כל כך, שלא ישרף הרכיב
    אולי שווה לבדוק אפשרות קירור מים

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

    מיכאל
    אני אשים אותו בחנקן נוזלי, נוציא לו את המיץ

    אני לא חושב שיש גבול תחתון לקצב השעון, אז בתיאוריה אפשר למשל להשתמש בחיישן אור על הגג כמקור לאות שעון, וככה בכל בוקר המיקרו-בקר יבצע עוד פעולה אחת... אולי בלינק שמדליק לד ביום שבת!
  6. bdizen's Avatar
    ציטוט נכתב במקור על ידי igendel
    אני אשים אותו בחנקן נוזלי, נוציא לו את המיץ

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