כיצד לממשק את I2C-EEPROM עם מיקרו-בקר 8051

נסה את הכלי שלנו לביטול בעיות





המונח I2C או קיצור IIC הוא אינטר מעגל משולב וזה נקרא כמו שאני בריבוע ג '. I2C הוא אוטובוס מחשב סדרתי , שהומצא על ידי מוליכים למחצה NXP בעבר נקרא כמוליכים למחצה של פיליפס. אוטובוס I2C משמש לחיבור מעגלים משולבים היקפיים במהירות נמוכה מיקרו-בקרים ומעבדים . בשנת 2006, לצורך יישום פרוטוקול I2C אין צורך בתשלום רישוי. אבל יש צורך בתשלום בכדי לקבל כתובת עבדים I2C המוקצית על ידי מוליכים למחצה NXP.

כמה מתחרות כמו טקסס אינסטרומנטס, סימנס AG, NEC, מוטורולה, אינטרסיל ו- STMicroelectronics הודיעו על מוצרי I²C מתאימים לשוק באמצע שנות ה 90. בשנת 1995, SMBus מוגדר על ידי אינטל, כלומר תת-קבוצה של I²C הקובעת שהפרוטוקולים קפדניים יותר. המטרה העיקרית של SMBus היא לתמוך ביכולת פעולה הדדית וחוסן. לכן, מערכות I²C הנוכחיות כוללות כללים ומדיניות של SMBus, לפעמים היא תומכת ב- I2C וגם ב- SMBus עם תצורה מינימלית מחדש.




אוטובוס I2C

אוטובוס I2C

ממשק I2C Bus-EEPROM עם מיקרו-בקר 8051

מהו אוטובוס I2C

אוטובוס I2c משתמש בשני קווי ניקוז פתוחים דו כיווניים כגון SDA (קו נתונים סדרתי) ו- SCl (קו שעון סדרתי) ואלה נמשכים עם נגדים. אוטובוס I2C מאפשר למכשיר ראשי להתחיל תקשורת עם מכשיר עבדים. הנתונים מוחלפים בין שני המכשירים הללו. מתחים אופייניים המשמשים הם + 3.3 וולט או +5 וולט, אם כי מערכות עם מתח נוסף מותרות.



ממשק I2C

ממשק I2C

EEPROM

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

8051 לוח סליקר

לוח 8051 Slicker תוכנן במיוחד כדי לעזור לסטודנטים טכניים באזור מערכות מוטמעות . ערכה זו מעוצבת בצורה כזו שכל התכונות של מיקרו-בקר 8051 אולי ישמש את התלמידים. לוח חלוצים זה תומך ב- ISP (בתכנות מערכת) שמתבצע דרך היציאה הטורית. ערכה זו ו- 8051 מבית NXP מוצעים על מנת להחליק את התקדמות ניפוי הבאגים של עיצובים רבים סביב מיקרו-בקרים במהירות 8 סיביות.

ממשק I2C - EEPROM

האיור הבא מראה ממשק I2C-EEPROM עם מיקרו-בקר 8051. כאן, I2C הוא פרוטוקול עבד-מאסטר, הכולל את הנתונים יחד עם דופק השעון. בדרך כלל, מכשיר האב החליף את קו השעון, SCL. קו זה מזמין את תזמון הנתונים המועבר באוטובוס I2C. אלא אם כן השעון מופעל, לא יועברו נתונים. כל העבדים נשלטים על ידי אותו שעון, SCL.


ממשק I2C - EEPROM

ממשק I2C - EEPROM

אוטובוס I2C תומך במכשירים השונים כאשר כל מכשיר מזוהה על ידי כתובת ייחודית בין אם הוא מנהל התקן LCD, כרטיס זיכרון, מיקרו-בקר או ממשק של המקלדת שיכולים לפעול כ- Tx או Rx תלוי בתפקוד המכשיר. הבקר נועד לשלוט במכשיר EEPROM באמצעות פרוטוקול I2C. כאן, הוא פרוטוקול I2C עובד כמכשיר ראשי ומווסת EEPROM וזה עובד כעבד. פעולות ה- R / W בקיאות על ידי העברת קבוצה של אותות בקרה הכוללים את כתובת ה- AND / OR data bus. יש להשתתף באותות אלה עם אותות שעון מתאימים

ממשק I2C Bus-EEPROM עם מיקרו-בקר 8051

אם אתה רוצה לקרוא, לכתוב ולמחוק את EEPROM באמצעות אוטובוס I2C בלוח החלוצים 8051. ממשק I2 Bus-EEPROM עם מיקרו-בקר 8051 הוא פשוט מאוד . פעולת הממשק הזה היא שליחת אות כמו WRITE, ואחריו אוטובוס נתונים וכתובות. בפעולה זו, ה- EEPROM משמש לאחסון הנתונים. בערכת 8051 שני מספרים של קווי EEPROM מוסדרים על ידי מנהלי התקנים הנתמכים ב- I2C. SCL ו- SDA מחוברים ל- EEPROM IC מבוסס I2C.

ממשק I2C Bus-EEPROM עם מיקרו-בקר 8051

ממשק I2C Bus-EEPROM עם מיקרו-בקר 8051

באמצעות שורות SDA ו- SCL I2C, פעולות הקריאה והכתיבה של EEPROM נעשות ב- 8051 Slicker Kit

הממשק של I2C כל כך פשוט ובכל נתונים לקרוא / לכתוב בנתונים ב- EEPROM. העיכוב תלוי במהדר כיצד הוא משפר את הלולאות ברגע שאתה מבצע שינויים בבחירות העיכוב משתנה.

קוד מקור לממשק I2C

#לִכלוֹל
#לִכלוֹל
#לִכלוֹל

#define ACK 1
#define NO_ACK 0

char לא חתומה
חתימה לא חתומה EData [5]
נתוני char לא חתומים
בטל InitSerial (בטל)
בטל DelayMs (int חתום)
בטל WriteI2C (תו לא חתום)
בטל התחל (בטל)
בטל עצור (בטל)
בטל ReadBYTE (int חתום)
בטל WriteBYTE (int חתום)
לא חתום ReadI2C (bit)

sbit SCL = P2 ^ 0 // התחבר לסיכת SCL (שעון)
sbit SDA = P2 ^ 1 // התחבר לסיכת SDA (נתונים)

// ——————————————
// תוכנה ראשית
// ——————————————
בטל ראשי (בטל)
{
InitSerial () // אתחל את היציאה הטורית
putchar (0x0C) // ברור היפר מסוף
DelayMs (5)
WriteBYTE (0x0000)
כתוב I2C ('A') // כתוב נתונים כאן
WriteI2C ('B')
WriteI2C ('C')
WriteI2C ('D')
WriteI2C ('E')
WriteI2C ('F')
תפסיק()
DelayMs (10)

ReadBYTE (0x0000)
EData [0] = ReadI2C (NO_ACK)
EData [1] = ReadI2C (NO_ACK)
EData [2] = ReadI2C (NO_ACK)
EData [3] = ReadI2C (NO_ACK)
EData [4] = ReadI2C (NO_ACK)
EData [5] = ReadI2C (NO_ACK)

עבור (i = 0i<6i++)
{
printf ('value =% c n', EData [i]) // הצגת נתונים * /
DelayMs (100)
}

בעוד (1)
}

// ——————————————
// אתחל את היציאה הטורית
// ——————————————
בטל InitSerial (בטל)
{
SCON = 0x52 // הגדרת בקרת יציאה טורית
TMOD = 0x20 // חומרה (9600 BAUD @ 11.0592MHZ)
TH1 = 0xFD // TH1
TR1 = 1 // טיימר 1 מופעל
}

// ————————————-
// להתחיל את I2C
// ————————————-
בטל התחל (בטל)
{
SDA = 1
SCL = 1
_ כפתור _ () _ נופ_ ()
SDA = 0
_ כפתור _ () _ נופ_ ()
SCL = 0
_ כפתור _ () _ נופ_ ()
}

// ————————————-
// עצור את I2C
// ————————————-
בטל עצור (בטל)
{
SDA = 0
_ כפתור _ () _ נופ_ ()
SCL = 1
_ כפתור _ () _ נופ_ ()
SDA = 1
}

// ————————————-
// כתוב I2C
// ————————————-
בטל WriteI2C (נתוני char לא חתומים)
{

עבור (i = 0i<8i++)
{
SDA = (נתונים ו -0 x 80)? 1: 0
SCL = 1 SCL = 0
נתונים<<=1
}

SCL = 1
_ כפתור _ () _ נופ_ ()
SCL = 0

}

// ————————————-
// קרא את I2C
// ————————————-
לא חתום ReadI2C (קצת ACK_Bit)
{

הַתחָלָה()
WriteI2C (0xA1)

SDA = 1
עבור (i = 0i<8i++)

SCL = 1
נתונים<<= 1
תאריך = (תאריך

אם (ACK_Bit == 1)
SDA = 0 // שלח ACK
אַחֵר
SDA = 1 // שלח NO ACK

_ כפתור _ () _ נופ_ ()
SCL = 1
_ כפתור _ () _ נופ_ ()
SCL = 0
תפסיק()
להחזיר נתונים
}

// ————————————-
// קרא טופס 1 בתים I2C
// ————————————-
בטל ReadBYTE (intr intr לא חתום)
{
הַתחָלָה()
WriteI2C (0xA0)
WriteI2C ((תו לא חתום) (Addr >> 8) & 0xFF)
WriteI2C ((תו לא חתום) Addr & 0xFF)
}

// ————————————-
// כתוב 1 בית ל- I2C
// ————————————-
בטל WriteBYTE (intr intr לא חתום)
{
הַתחָלָה()
WriteI2C (0xA0)
WriteI2C ((לא חתום) (Addr >> 8) & 0xFF) // שלח כתובת גבוהה
WriteI2C ((לא חתום) Addr & 0xFF) // כתובת למשלוח נמוכה
}

// ——————————————
// עיכוב פונקציית mS
// ——————————————
בטל DelayMs (ספירת int לא חתומה)
{// mSec Delay 11.0592 Mhz
int חתום i // Keil v7.5a
בזמן (ספירה)
{
115 =
בעוד (i> 0) i–
לספור-
}
}

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