שְׁאֵלָה:
רעיונות להגדרת מזהי מכשיר I2C
ThatAintWorking
2014-11-21 03:33:06 UTC
view on stackexchange narkive permalink

אני משתמש ב- I2C כדי לתקשר בין אוסף של ATtiny85 שפועלים כבקרים עבור חלקים שונים במערכת לבין "המוח הראשי" - RaspberryPi. ברוב ה- ATtiny85 נותרו רק כמה סיכות פנויות (בדרך כלל סיכות 1 ו -2 - האיפוס והסיכה שלא ניתן להשתמש בהן עבור PWM) ולכן אני לא יכול להשתמש במשהו כמו מתג DIP כדי להגדיר ישירות מזהי מכשיר . אני מעדיף לא לקודד את מזהי המכשיר כשאני דוחף את הקוד לטניס, אבל אני לא יכול לחשוב על דרך טובה, פשוטה ואמינה לעשות זאת אחרת. למישהו כאן יש הצעה?

שתיים תשובות:
Ignacio Vazquez-Abrams
2014-11-21 04:08:25 UTC
view on stackexchange narkive permalink

שים את הכתובת ב- EEPROM. זה עדיין "על השבב", אך ניתן לתכנת אותו ללא תלות בפלאש, וניתן לשנותו באופן מיידי אם נחשב לנכון.

האם תוכל לתת דוגמה או קישור לדוגמא כיצד לתכנת את ה- EEPROM ב"זמן ההתקנה "בנפרד מכשאני טוען את הקוד שלי ב- ATtiny85? אני משתמש ב- Arduino IDE כדי לבצע את התכנות שלי אם זה משנה.
לתאי EEPROM ריקים יש ערך של 0xFF, כך שאם הקוד שלך מזהה שהוא משתמש באותה כתובת אז עליו להיכנס למצב מיוחד שבו מאסטר I2C יכול להתחבר אליו ולספר לו את הכתובת החדשה ואז הוא יכול לבצע את הפעולות המתוארות ב סעיף המשנה "זיכרון נתונים EEPROM" בסעיף "זיכרונות AVR" בגליון הנתונים כדי לכתוב את הכתובת החדשה ל- EEPROM ואז להתחיל לפעול רגיל.
הקפד לתכנת את נתיך ה- EESAVE, כך שתוכן ה- eeprom נשמר בעת העלאת קוד חדש.
Craig
2014-11-21 04:01:45 UTC
view on stackexchange narkive permalink

אתה יכול להשתמש בכניסה האנלוגית על סיכה 1.

הכן טבלה בקוד שלך כדי למפות את ספי המתח למזהי I2C.

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

זה בנוסח מה שחשבתי. אולי אוכל להשתמש ב- TinyDebugSerial כדי לדווח על הערך שנבחר כשאני מכוון נגד משתנה או משהו כזה.
מישהו פשוט הציע לי להשתמש בסולם נגדים R-2R עם מתג DIP כדי ליצור ערך אנלוגי צפוי ואמין. אם אוכל להבין את המעגל, זה נראה כמו הדרך ללכת.
אם אתה עובר מסלול זה, אולי כדאי שתשתמש ב- DS4303 או DS4305 במקום ב- DAC מלא.
בסופו של דבר הלכתי עם גוש מגשרים שקשור לנגדים שונים כדי לשנות את המתח. חיברתי את גוש המגשר לסיכה 1 (כדי שאוכל להשתמש בסיכה 2 עבור TinySerialDebug) ואז השתמשתי ב- AnalogRead () כדי לקרוא את הערך של סיכה 1 ולמפות אותה לסט של כתובות I2C.


שאלה ותשובה זו תורגמה אוטומטית מהשפה האנגלית.התוכן המקורי זמין ב- stackexchange, ואנו מודים לו על רישיון cc by-sa 3.0 עליו הוא מופץ.
Loading...