תוכן עניינים:

כיצד לממשק מטריצת LED מונעת MAX7219 8x8 עם מיקרו -בקר ATtiny85: 7 שלבים
כיצד לממשק מטריצת LED מונעת MAX7219 8x8 עם מיקרו -בקר ATtiny85: 7 שלבים

וִידֵאוֹ: כיצד לממשק מטריצת LED מונעת MAX7219 8x8 עם מיקרו -בקר ATtiny85: 7 שלבים

וִידֵאוֹ: כיצד לממשק מטריצת LED מונעת MAX7219 8x8 עם מיקרו -בקר ATtiny85: 7 שלבים
וִידֵאוֹ: 🚀 RUTUBE ונקודה. פיתוח RUTUBA תוך 5 שעות *ללא מים* [הבא / תגובה / Nest / PostgreSQL / Redux] 2024, יולי
Anonim
כיצד להתממשק למטריקס LED מונע MAX7219 8x8 עם מיקרו -בקר ATtiny85
כיצד להתממשק למטריקס LED מונע MAX7219 8x8 עם מיקרו -בקר ATtiny85

בקר MAX7219 מיוצר על ידי Maxim Integrated הוא קומפקטי, כניסת/פלט סידורי של תצוגת קתודה משותפת שיכול להתממשק עם מיקרו-בקרים ל -64 נוריות בודדות, תצוגות LED נומריות של 7 פלחים של עד 8 ספרות, תצוגות בגרף עמודים וכו '. שבב הם מפענח קוד BCD, מעגלי סריקה מרבב, מנהלי קטע וספרות וזיכרון RAM סטטי של 8 × 8 המאחסן כל ספרה.

המודולים MAX7219 נוחים מאוד לשימוש עם בקרי מיקרו כגון ATtiny85, או במקרה שלנו לוח Tinusaur.

שלב 1: החומרה

החומרה
החומרה
החומרה
החומרה

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

המודולים בהם אנו משתמשים מסוגלים להתחבר בשרשרת באמצעות 5 מגשרים קטנים. ראה את התמונה למטה.

שלב 2: Pinout ואותות

מודול MAX7219 כולל 5 פינים:

  • VCC - כוח (+)
  • GND-הקרקע (-)
  • DIN - קלט נתונים
  • CS - בחר שבב
  • CLK - שעון

זה אומר שאנחנו צריכים 3 סיכות בצד המיקרו -בקר ATtiny85 כדי לשלוט במודול. אלה יהיו:

  • PB0 - מחובר ל- CLK
  • PB1 - מחובר ל- CS
  • PB2 - מחובר ל- DIN

זה מספיק כדי להתחבר למודול MAX7219 ולתכנת אותו.

שלב 3: הפרוטוקול

הפרוטוקול
הפרוטוקול

התקשורת עם ה- MAX7219 היא קלה יחסית - היא משתמשת בפרוטוקול סינכרוני שפירושו שלכל ביט נתונים שאנו שולחים קיים מחזור שעון המסמל את נוכחותו של סיביות הנתונים ההם.

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

שלב 4: התוכנה

התוכנה
התוכנה

אופן הפעולה של מודול MAX7219 זה הוא:

  • אנו כותבים בתים לרשם הפנימי שלו.
  • MAX7219 מפרש את הנתונים.
  • MAX7219 שולט על נוריות ה- LED במטריצה.

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

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

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

  • כתיבת בייט ל- MAX7219.
  • כתיבת מילה (2 בתים) ל- MAX7219.

הפונקציה שכותבת בתים אחד לבקר נראית כך:

void max7219_byte (uint8_t data) {for (uint8_t i = 8; i> = 1; i--) {PORTB & = ~ (1 << MAX7219_CLK); // הגדר CLK ל- LOW אם (data & 0x80) // מסוך את ה- MSB של הנתונים PORTB | = (1 << MAX7219_DIN); // הגדר DIN ל- HIGH else PORTB & = ~ (1 << MAX7219_DIN); // הגדר DIN ל- LOW PORTB | = (1 << MAX7219_CLK); // הגדר CLK לנתונים גבוהים << = 1; // העבר שמאלה}}

כעת, לאחר שנוכל לשלוח בתים ל- MAX7219, אנו יכולים להתחיל לשלוח פקודות. זה נעשה על ידי שליחת 2 ביי - 1 לכתובת הרשום הפנימי והשני לנתונים שברצוננו לשלוח.

בבקר MAX7219 יש יותר מתריסר רישומים.

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

void max7219_word (כתובת uint8_t, נתונים uint8_t) {PORTB & = ~ (1 << MAX7219_CS); // הגדר CS ל- LOW max7219_byte (כתובת); // שליחת הכתובת max7219_byte (נתונים); // שליחת הנתונים PORTB | = (1 << MAX7219_CS); // הגדר CS ל- HIGH PORTB & = ~ (1 << MAX7219_CLK); // הגדר CLK ל- LOW}

חשוב לציין כאן את השורה שבה אנו מחזירים את אות ה- CS ל- HIGH - זה מסמן את סוף הרצף - במקרה זה, סוף הפקודה. טכניקה דומה משמשת לשליטה על מטריצה אחת המחוברת בשרשרת. השלב הבא, לפני שנתחיל להדליק ולכבות את הנורות, הוא לאתחל את בקר MAX7219. זה נעשה על ידי כתיבת ערכים מסוימים לרשמים מסוימים. לנוחות, תוך קידוד אותו נוכל לשים את רצף האתחול במערך.

uint8_t initseq = {0x09, 0x00, // Decode-Mode Register, 00 = אין פענוח 0x0a, 0x01, // Register Intensity, 0x00.. 0x0f 0x0b, 0x07, // Register-Limit Register, 0x07 להצגת כל השורות 0x0c, 0x01, // Register Shutdown, 0x01 = פעולה רגילה 0x0f, 0x00, // Register-Test Register, 0x00 = הפעלה רגילה};

אנחנו רק צריכים לשלוח את 5 הפקודות למעלה ברצף כזוגות כתובת/נתונים. השלב הבא - הדלקת שורה של נוריות LED.

זה מאוד פשוט - אנחנו פשוט כותבים פקודה אחת שבה הבייט הראשון הוא הכתובת (מ -0 עד 7) והבייט השני הוא 8 הביטים המייצגים את 8 הלדים בשורה.

void max7219_row (uint8_t address, uint8_t data) {if (address> = 1 && address <= 8) max7219_word (כתובת, נתונים); }

חשוב לציין שזה יעבוד עבור מטריצה אחת בלבד. אם נחבר עוד מטריצות בשרשרת כולן יראו את אותם הנתונים. הסיבה לכך היא שאחרי שליחת הפקודה אנו מחזירים את אות ה- CS ל- HIGH שגורם לכל בקרי MAX7219 בשרשרת להינעל ולהראות מה שהפקודה האחרונה הייתה.

מוּמלָץ: