חיפוש
  • יניב אור

העברת אותות בין ה-RPi ל-AVR - עם timer

עודכן ב: 16 יול 2019

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


בתור התחלה, אשלח אותות בלופ אינסופי מפורט 0 של ה-attiny13 ל-GPIO11 של ה-RPi.

בין אות לאות אכניס השהייה, אשתמש ב-delay תוכנה - שזאת הדרך הפחות מומלצת לייצור timer. דרכים אחרות, בהמשך.




והנה הקוד בצד ה-RPi:






בקוד של ה-RPi אני מגדיר את GPIO11 בתור INPUT ומוסיף את ההגדרה:

pull_up_down = GPIO.PUD_UP

* בדוק מה זה בדיוק

בלופ אינסופי אני דוגם את GPIO11 כל חצי שנייה.

* בדוק אם יש שימוש בטיימרים של חומרה - ב-RPi

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

ניתן לראות בוידאו שמידע הולך לאיבוד.


כדי שיהיה ברור לעין מהי מהירות השליחה לעומת מהירות הדגימה, הנה סרטון שימחיש את העניין:




* לבדוק שימוש באוסילוסקופים - תוכנה, חומרה

* לבדוק חישובים - הגל המרובע של השליחה והגל המרובע של הדגימה (ב-RPi).


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

בהמשך, אעבור ל-interrupts. ב-AVR וב-RPi.

שיניתי את מהירות הדגימה ל-5 מאיות השנייה (0.05sec).

זה נראה טוב אבל התחושה שלי אומרת שקשה להגיע לסנכרון בין השליחה לדגימה ללא איבוד מידע בכל מקרה (אלא אם כן אולי מסנכרנים שעונים של כל המערכות).




* השאלה איך זה נעשה בפרוטוקולים השונים RS-232, i2c1 וכו', בהמשך


שיניתי את המהירות למאית השנייה (0.01sec).

ניתן לראות כי על כל אות שנשלח, יש מספר דגימות בצד השני (ה-1-ים).

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




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

https://www.instructables.com/id/Cicadaboom-8-step-sequencer-and-a-simple-synth/

עדיף שהשעון הראשי יהיה master clock והוא "ישודר" ל-RPi, ל-GPIO שיוגדר כ-input וזה יהיה השעון הראשי של ה-RPi.

דבר נוסף, האם לא יהיה איבוד מידע בתוך ה-8 פעימות ואז כל הרעיון הזה לא רלוונטי.

* לכתוב קוד ולפתח את הרעיונות האלה




כמו שאפשר לראות בקוד של ה-AVR ובסרטון עם הלד המהבהב, ה-duty-cycle בין ה-0 ל-1 הוא לא 50/50. עשיתי את זה באופן שרירותי. אני רוצה לשנות ל-50/50.


זה נראה ככה:



ניסוי נוסף. מה אם ה-duty-cycle יהיה 10/90, למשל, לטובת ה-high.

יש סיכוי, לדעתי (אינטואיטיבית) שיהיה איבוד מידע של 0 (low).


© 2023 by DO IT YOURSELF. Proudly created with Wix.com