תוכן עניינים:
- שלב 1: אפנון רוחב הדופק לערבוב צבעים
- שלב 2: דיבור עם משמרות רשימות ולדים
- שלב 3: סכמטי
- שלב 4: קוד מקור C ++
- שלב 5: גאדג'ט סיים
- שלב 6: יישום: צג עומס CPU עבור Linux באמצעות Perl
- שלב 7: יישום: דיבור עם מודולים אחרים באמצעות I²C
- שלב 8: יישום: "קוביית המשחק":-)
- שלב 9: הצגת תמונות / הנפשות במטריצה - פריצה מהירה
- שלב 10: בקרה אינטראקטיבית של הנפשות מאוחסנות
- שלב 11: הצגת וידאו חי
- שלב 12: יותר אור כמעט בחינם
2025 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2025-01-13 06:57
תצוגה זו מבוססת על מטריצת LED 8X8 RGB. למטרות בדיקה הוא היה מחובר ללוח ארדואינו סטנדרטי (Diecimila) באמצעות 4 רגידי משמרות. לאחר שהבאתי אותו לעבודה, פרמטתי אותו על לוח PCB מעוגל. רשימות המשמרות רחבות 8 סיביות ומתממשקות בקלות לפרוטוקול SPI. אפנון רוחב הדופק משמש לערבוב הצבעים, עוד על כך בהמשך. חלק מהזיכרון RAM של ה- MCU משמש כמאגר מסגרות להחזיק את התמונה. RAM הווידאו מנותח על ידי שגרת הפרעה ברקע, כך שהמשתמש יכול לעשות דברים שימושיים אחרים כמו דיבור עם מחשב, קריאת לחצנים ופוטנציומטרים. מידע נוסף על "Arduino": www.arduino.cc
שלב 1: אפנון רוחב הדופק לערבוב צבעים
מודול רוחב הדופק - מה? אפנון רוחב הדופק הוא בעצם הפעלה וכיבוי של הכוח המוזן למכשיר חשמלי די מהר. הכוח השמיש נובע מהממוצע המתמטי של פונקציית הגל המרובע שנלקח על פני מרווח של תקופה אחת. ככל שהפונקציה נשארת במצב ON יותר, כך תקבל יותר כוח. ל- PWM אותה השפעה על בהירות הנורות לדמרור על נורות AC. המשימה שלפניכם היא לשלוט בנפרד על הבהירות של 64 נוריות RGB (= 192 נוריות בודדות!) בצורה זולה וקלה, כך שניתן להשיג את השלם קשת הצבעים. רצוי שלא יהיו הבהובים או השפעות מטרידות אחרות. תפיסת הבהירות הלא לינארית שהציגה העין האנושית לא תובא בחשבון כאן (למשל ההבדל בין בהירות בין 10% ל -20% נראה "גדול יותר" בין 90% ל -100%). תמונה (1) ממחישה את עקרון העבודה של אלגוריתם PWM. נניח שהקוד מקבל ערך 7 עבור בהירות ה- LED (0, 0). יתר על כן הוא יודע שיש מקסימום N צעדים בהירות. הקוד מפעיל לולאות N עבור כל רמות הבהירות האפשריות וכל הלולאות הדרושות לשירות כל נורית בודדת בכל השורות. במקרה שמונה הלולאה x בלולאת הבהירות קטן מ -7, הנורית נדלקת. אם הוא גדול מ -7, הנורית כבויה. אם עושים זאת מהר מאוד עבור כל הלדים, רמות הבהירות וצבעי הבסיס (RGB), ניתן להתאים כל נורית בנפרד להצגת הצבע הרצוי. מדידות עם אוסצילוסקופ מראות שקוד רענון התצוגה לוקח כ- 50% זמן מעבד. השאר יכול לשמש לביצוע תקשורת סדרתית עם מחשב, קריאת כפתורים, שיחה עם קורא RFID, שליחת I2נתוני C למודולים אחרים …
שלב 2: דיבור עם משמרות רשימות ולדים
מאגר משמרות הוא מכשיר המאפשר טעינת נתונים באופן סדרתי ופלט מקביל. הפעולה ההפוכה אפשרית גם עם השבב המתאים. יש הדרכה טובה על רשמי משמרות באתר arduino. נוריות ה- LED מונעות על ידי רגידי משמרות 8 סיביות מסוג 74HC595. כל יציאה יכולה להזרים או לשקוע בערך 25mA של זרם. הזרם הכולל לשבב שקוע או מקור לא יעלה על 70mA. השבבים האלה זולים במיוחד, אז אל תשלמו יותר מכ- 40 סנט ליחידה. מכיוון שלנוריות LED יש מאפיין זרם / מתח אקספוננציאלי, צריך להיות נגדים המגבילים זרם. שימוש בחוק אוהם: R = (V - Vf) / IR = נגד מגביל, V = 5V, Vf = מתח קדימה של LED, I = זרם רצוי נוריות אדומות בעלי מתח קדימה של כ 1.8V, כחול וירוק נע בין 2.5V ל 3.5V. השתמש במולטימטר פשוט כדי לקבוע זאת. לצורך שחזור צבע נכון יש לקחת בחשבון כמה דברים: רגישות ספקטרלית של העין האנושית (אדום/כחול: רע, ירוק: טוב), יעילות הנורית באורך גל מסוים וזרם. בפועל פשוט לוקחים 3 פוטנציומטרים ומתאימים אותם עד שהנורית מראה אור לבן תקין. כמובן שאסור לחרוג מזרם ה- LED המרבי. מה שחשוב גם כאן הוא שרשם המשמרות המניע את השורות חייב לספק זרם לנורות 3x8 נוריות, לכן מוטב שלא לדחוף את הזרם גבוה מדי. הצלחתי עם נגדים מגבילים של 270Ohm לכל הלדים, אבל זה תלוי כמובן במתנת ה- LED כמובן.רשמי המשמרות נמצאים בממשק עם SPI סידורי. SPI = ממשק היקפי סידורי (תמונה (1)). מול יציאות טוריות במחשבים אישיים (אסינכרוני, ללא אות שעון), SPI זקוק לקו שעון (SRCLK). לאחר מכן יש קו אות המספר למכשיר כאשר הנתונים תקפים (בחירת שבב / תפס / RCLK). לבסוף יש שתי קווי נתונים, האחד נקרא MOSI (master out slave in), השני נקרא MISO (master in slave out). SPI משמש לממשק מעגלים משולבים, בדיוק כמוני2ג לפרויקט זה דרושים MOSI, SRCLK ו- RCLK. בנוסף נעשה שימוש גם בשורת ההפעלה (G). מחזור SPI מתחיל על ידי משיכת קו RCLK ל- LOW (תמונה (2)). ה- MCU שולח את הנתונים שלו על קו MOSI. המצב הלוגי שלו נדגם על ידי רשם המשמרות בקצה העולה של קו SRCLK. המחזור מסתיים על ידי משיכת קו RCLK בחזרה ל- HIGH. כעת הנתונים זמינים ביציאות.
שלב 3: סכמטי
תמונה (1) מראה כיצד רשמי המשמרת מחוברים. הם כבולים בחינניות, כך שניתן להעביר נתונים לשרשרת זו וגם דרכה. לכן הוספת רישומי משמרת נוספים היא קלה.
תמונה (2) מציגה את שאר הסכימות עם ה- MCU, מחברים, קוורץ … קובץ ה- PDF המצורף מכיל את כל העבודות, הטובות ביותר להדפסה.
שלב 4: קוד מקור C ++
ב- C/C ++ בדרך כלל יש לבצע אב טיפוס לפונקציות לפני קידודם.#כוללים int main (void); void do_something (void); int main (void) {do_something ();} void do_something (void) {/ * comment */ } ה- IDE של Arduino אינו דורש שלב זה, מכיוון שאבות -טיפוס של פונקציות נוצרים באופן אוטומטי. לכן אב טיפוס פונקציות לא יופיע בקוד המוצג כאן. תמונה (1): setup () functionImage (2): פונקציה spi_transfer () באמצעות חומרת SPI של שבב ATmega168 (פועל מהר יותר) תמונה (3): קוד framebuffer באמצעות הפסקת הצפה של טיימר 1. פיסות קוד בעלות מראה מעט קריפי למתחילים, למשל בעוד (! (SPSR & (1 << SPIF))) {} השתמש ישירות ברשמי MCU. דוגמה זו במילים: "בעוד ש- SPIF-bit ברישום SPSR אינו מוגדר אל תעשה כלום". אני רק רוצה להדגיש שבפרויקטים סטנדרטיים ממש לא צריך להתמודד עם הדברים האלה כל כך קשורים לחומרה. למתחילים אסור לפחד מזה.
שלב 5: גאדג'ט סיים
לאחר שפתרתי את כל הבעיות והפעלתי את הקוד, פשוט הייתי צריך ליצור פריסת PCB ולשלוח אותו לבית מפואר. זה נראה הרבה יותר נקי:-) תמונה (1): לוח בקר מאוכלס לגמרי תמונה (2): הצד הקדמי של ה- PCBI החשוף תמונה (2): הצד האחורי ישנם מחברים פורצים PORTC ו- PORTD של שבב ATmega168/328 ו- 5V/GND. יציאות אלה מכילות את קווי RX, TX הטוריים, ה- I2קווי C, קווי I/O דיגיטליים ו -7 קווי ADC. זה מיועד להערמת מגנים על גב הלוח. המרווח מתאים לשימוש ב- perfboard (0.1in). ניתן להבהב את מטען האתחול באמצעות כותרת ICSP (עובד עם USBtinyISP של adafruit). ברגע שזה נעשה, פשוט השתמש במתאם סידורי FTDI USB/TTL רגיל או דומה. הוספתי גם מגשר לאיפוס אוטומטי. בישלתי גם סקריפט Perl קטן (עיין בבלוג שלי), המאפשר איפוס אוטומטי עם כבלי FTDI שלרוב אינו פועל מחוץ לקופסה (קו RTS לעומת DTR). זה עובד על לינוקס, אולי על MAC. מעגלים מודפסים וכמה ערכות DIY זמינות בבלוג שלי. נדרש הלחמה SMD! עיין בקובצי PDF להוראות בנייה ומקורות למטריצות LED.
שלב 6: יישום: צג עומס CPU עבור Linux באמצעות Perl
זהו צג עומס בסיסי מאוד עם עלילת היסטוריה. זה מבוסס על סקריפט Perl שאוסף את "ממוצע העומס" של המערכת כל 1 ב באמצעות iostat. הנתונים מאוחסנים במערך המועבר בכל עדכון. נתונים חדשים מתווספים בראש הרשימה, הערך הישן ביותר נדחק החוצה. מידע מפורט יותר והורדות (קוד …) זמינים בבלוג שלי.
שלב 7: יישום: דיבור עם מודולים אחרים באמצעות I²C
זוהי רק הוכחה עקרונית ועדיין לא הפתרון הפשוט ביותר לתפקיד זה. שימוש ב- I2C מאפשר לפנות ישירות עד 127 לוחות "עבדים". כאן הלוח בצד ימין בסרטון הוא ה"מאסטר "(שיוזם את כל ההעברות), הלוח השמאלי הוא העבד (מחכה לנתונים). אני2C צריך 2 קווי אותות וקווי החשמל הרגילים (+, -, SDA, SCL). מכיוון שהוא אוטובוס, כל המכשירים מחוברים אליו במקביל.
שלב 8: יישום: "קוביית המשחק":-)
רק מחשבה פריקית. זו מתאימה גם למארז עץ המוצג בדף המבוא. יש לו 5 כפתורים בצד האחורי שאפשר להשתמש בהם למשחק פשוט.
שלב 9: הצגת תמונות / הנפשות במטריצה - פריצה מהירה
אז יש לו רק 8x8 פיקסל וכמה צבעים זמינים. ראשית השתמש במשהו כמו Gimp כדי להקטין את התמונה המועדפת עליך עד 8x8 פיקסלים בדיוק ולשמור אותה כפורמט ".ppm" גולמי (לא ASCII). קל לקרוא ולעבד PPM בסקריפט Perl. השימוש ב- ImageMagick וכלי שורת הפקודה "המרה" לא יפעל כראוי. העלה את קוד הארדואינו החדש, ולאחר מכן השתמש בסקריפט Perl להעלאה לבקר. ההבהוב הוא רק חוסר התאמה של רענון LED וקצב הפריימים של המצלמה שלי. לאחר עדכון קצת של הקוד, הוא פועל למדי. כל התמונות מועברות בשידור חי על פי סדרות כפי שאתה רואה אותן. ניתן לאחסן אנימציות ארוכות יותר ב- EEPROM חיצוני כמו שזה נעשה בלוחות דיבור שונים.
שלב 10: בקרה אינטראקטיבית של הנפשות מאוחסנות
למה לתת לבקר המיקרו ליהנות מכל הפולחן בארדואינו עוסק במחשוב פיזי ואינטראקציה, אז פשוט הוסף פוטנציומטר והשתלט! שימוש באחת משמונה כניסות הממיר האנלוגי לדיגיטלי הופך את זה לפשוט מאוד.
שלב 11: הצגת וידאו חי
שימוש בסקריפט Perl ובכמה מודולים מקל על הצגת וידאו כמעט מעשי במערכות X11. הוא מקודד בלינוקס ועשוי לעבוד גם על מחשבי MAC. זה עובד כך:- קבל את מיקום סמן העכבר- לכידת קופסה של פיקסל NxN שבמרכז הסמן- קנה מידה של התמונה ל 8x8 פיקסלים- שלח אותה ללוח ה- LED- חזור
שלב 12: יותר אור כמעט בחינם
בשני שלבים בלבד ניתן להעלות את הבהירות לא מעט. החלף את נגדי 270Ω עם אלה של 169Ω ופיגבק עוד מרשם משמרת 74HC595 אל IC5.