Cara Interface I2C-EEPROM dengan 8051 Microcontroller

Cuba Instrumen Kami Untuk Menghapuskan Masalah





Istilah singkatan I2C atau IIC adalah inter litar bersepadu dan ia dipanggil semasa saya kuasa dua C. I2C adalah bas komputer bersiri , yang dicipta oleh semikonduktor NXP sebelumnya ia dinamakan sebagai semikonduktor Philips. Bas I2C digunakan untuk memasang litar bersepadu periferal berkelajuan rendah ke mikrokontroler dan pemproses . Pada tahun 2006, untuk melaksanakan protokol I2C tidak ada bayaran pelesenan yang diperlukan. Tetapi bayaran diperlukan untuk mendapatkan alamat hamba I2C yang diberikan oleh semikonduktor NXP.

Beberapa pesaing seperti Texas Instruments, Siemens AG, NEC, Motorola, Intersil dan STMicroelectronics telah mengumumkan produk I²C yang sesuai untuk dipasarkan pada pertengahan 1990-an. Pada tahun 1995, SMBus didefinisikan oleh Intel, iaitu subkumpulan I²C yang menyatakan protokolnya lebih ketat. Tujuan utama SMBus adalah untuk menyokong interoperabiliti dan ketahanan. Oleh itu, sistem I²C semasa merangkumi peraturan dan dasar dari SMBus, kadang-kadang ia menyokong I2C dan SMBus dengan konfigurasi minimum.




Bas I2C

Bas I2C

Antaramuka I2C Bus-EEPROM dengan 8051 Microcontroller

Apa itu Bas I2C

Bas I2c menggunakan dua garis longkang terbuka dua arah seperti SDA (garis data bersiri) dan SCl (garis jam bersiri) dan ini ditarik dengan perintang. Bas I2C membenarkan peranti induk memulakan komunikasi dengan peranti hamba. Data ditukar antara kedua-dua peranti ini. Voltan biasa yang digunakan ialah + 3.3V atau + 5V walaupun sistem dengan voltan tambahan dibenarkan.



Antaramuka I2C

Antaramuka I2C

EEPROM

ROM yang boleh diprogramkan secara elektrik (EEPROM) adalah ROM yang dapat diubah pengguna yang dapat dikeluarkan dan diprogram ulang dengan kerap melalui penggunaan voltan elektrik yang lebih tinggi daripada biasa. EEPROM adalah sejenis memori yang tidak menentu yang digunakan dalam peranti elektronik seperti komputer untuk menyimpan sejumlah kecil data yang harus disimpan ketika daya terlepas.

Papan Slicker 8051

Papan 8051 Slicker direka khas untuk membantu pelajar teknikal di kawasan sistem terbenam . Kit ini direka sedemikian rupa sehingga semua ciri 8051 mikrokontroler kemungkinan akan digunakan oleh pelajar. Papan penyerang ini menyokong ISP (In System Programming) yang dilakukan melalui port bersiri. Kit ini dan 8051 dari NXP dicadangkan untuk melancarkan kemajuan penyahpepijatan banyak reka bentuk mikrokontroler berkelajuan 8-bit.

Antara muka I2C - EEPROM

Gambar berikut menunjukkan antara muka I2C-EEPROM dengan 8051 mikrokontroler. Di sini, I2C adalah protokol master-slave, yang merangkumi data bersama dengan denyutan jam. Biasanya, peranti induk menukar garis jam, SCL. Garis ini memerintahkan pemasaan data yang dipindahkan pada bas I2C. Sekiranya jam tidak dikendalikan, data tidak akan dipindahkan. Semua hamba dikawal oleh jam yang sama, SCL.


Antara muka I2C - EEPROM

Antara muka I2C - EEPROM

Bas I2C menyokong pelbagai peranti di mana setiap peranti dikenal pasti dengan alamat unik sama ada pemacu LCD, kad memori, mikrokontroler atau antara muka papan kekunci yang boleh beroperasi sebagai Tx atau Rx bergantung pada fungsi peranti. Pengawal ini dirancang untuk mengawal peranti EEPROM melalui protokol I2C. Di sini, dia protokol I2C berfungsi sebagai peranti induk dan mengatur EEPROM dan berfungsi sebagai hamba. Operasi R / W mahir dengan memindahkan satu set isyarat kawalan yang merangkumi alamat data DAN / ATAU. Isyarat ini harus dihadiri dengan isyarat jam yang sesuai

Antaramuka I2C Bus-EEPROM dengan 8051 Microcontroller

Sekiranya anda mahu membaca, Tulis dan Padam EEPROM dengan menggunakan bas I2C di papan penyerang 8051. Antaramuka bas I2-EEPROM dengan 8051 mikrokontroler sangat mudah . Operasi antara muka ini adalah untuk menghantar isyarat seperti MENULIS, diikuti dengan data dan bus alamat. Dalam operasi ini, EEPROM digunakan untuk menyimpan data. Dalam kit 8051, dua nombor garis EEPROM diatur oleh pemandu yang disokong oleh I2C. SCL dan SDA disambungkan ke IC EEPROM bersiri berasaskan I2C.

Antaramuka I2C Bus-EEPROM dengan 8051 Microcontroller

Antaramuka I2C Bus-EEPROM dengan 8051 Microcontroller

Dengan menggunakan garis SDA dan SCL I2C, operasi membaca dan menulis EEPROM dilakukan dalam 8051 Slicker Kit

Antaramuka I2C sangat mudah dan dalam setiap data Baca / Tulis di EEPROM. Kelewatan bergantung pada penyusun bagaimana ia meningkatkan gelung sebaik sahaja anda membuat perubahan dalam pilihan penundaan itu berbeza-beza.

Kod Sumber untuk Antaramuka I2C

#sertakan
#sertakan
#sertakan

#tentukan ACK 1
#tentukan NO_ACK 0

char tidak bertanda i
EData yang tidak ditandatangani [5]
Data char yang tidak ditandatangani
kekosongan InitSerial (kekosongan)
batal DelayMs (int tidak ditandatangani)
batal WriteI2C (char yang tidak ditandatangani)
kekosongan Mula (kekosongan)
batal Berhenti (batal)
batal ReadBYTE (int tidak ditandatangani)
batal WriteBYTE (int tidak ditandatangani)
arang tidak bertanda ReadI2C (bit)

sbit SCL = P2 ^ 0 // sambungkan ke pin SCL (Jam)
sbit SDA = P2 ^ 1 // sambungkan ke pin SDA (Data)

// ——————————————
// Program utama
// ——————————————
kekosongan utama (kekosongan)
{
InitSerial () // Memulakan port bersiri
putchar (0x0C) // terminal hiper yang jelas
KelewatanM (5)
TulisBYTE (0x0000)
WriteI2C (‘A’) // Tulis Data Di Sini
TulisI2C (‘B’)
TulisI2C (‘C’)
TulisI2C (‘D’)
TulisI2C (‘E’)
TulisI2C (‘F’)
Berhenti ()
KelewatanM (10)

BacaBYTE (0x0000)
EData [0] = BacaI2C (NO_ACK)
EData [1] = BacaI2C (NO_ACK)
EData [2] = BacaI2C (NO_ACK)
EData [3] = BacaI2C (NO_ACK)
EData [4] = BacaI2C (NO_ACK)
EData [5] = BacaI2C (NO_ACK)

untuk (i = 0i<6i++)
{
printf (“value =% c n”, EData [i]) // paparan data * /
KelewatanM (100)
}

semasa (1)
}

// ——————————————
// Memulakan port bersiri
// ——————————————
kekosongan InitSerial (kekosongan)
{
SCON = 0x52 // tetapkan kawalan port bersiri
TMOD = 0x20 // perkakasan (9600 BAUD @ 11.0592MHZ)
TH1 = 0xFD // TH1
TR1 = 1 // Pemasa 1 dihidupkan
}

// ———————————-
// mulakan I2C
// ———————————-
kekosongan Mula (kekosongan)
{
SDA = 1
SCL = 1
_button _ () _ nop_ ()
SDA = 0
_button _ () _ nop_ ()
SCL = 0
_button _ () _ nop_ ()
}

// ———————————-
// hentikan I2C
// ———————————-
batal Berhenti (batal)
{
SDA = 0
_button _ () _ nop_ ()
SCL = 1
_button _ () _ nop_ ()
SDA = 1
}

// ———————————-
// Tulis I2C
// ———————————-
batal WriteI2C (Data char yang tidak ditandatangani)
{

untuk (i = 0i<8i++)
{
SDA = (Data & 0x80)? 1: 0
SCL = 1SCL = 0
Data<<=1
}

SCL = 1
_button _ () _ nop_ ()
SCL = 0

}

// ———————————-
// Baca I2C
// ———————————-
charIl yang tidak ditandatangani ReadI2C (bit ACK_Bit)
{

Mulakan ()
TulisI2C (0xA1)

SDA = 1
untuk (i = 0i<8i++)

SCL = 1
Data<<= 1
Tarikh = (Tarikh

jika (ACK_Bit == 1)
SDA = 0 // Hantar ACK
yang lain
SDA = 1 // Hantar TIADA ACK

_button _ () _ nop_ ()
SCL = 1
_button _ () _ nop_ ()
SCL = 0
Berhenti ()
mengembalikan Data
}

// ———————————-
// Baca 1 bait borang I2C
// ———————————-
batal ReadBYTE (tidak ditandatangani int Addr)
{
Mulakan ()
TulisI2C (0xA0)
WriteI2C ((char yang tidak ditandatangani) (Addr >> 8) & 0xFF)
WriteI2C ((char yang tidak ditandatangani) Addr & 0xFF)
}

// ———————————-
// Tulis 1 bait hingga I2C
// ———————————-
batal WriteBYTE (tidak ditandatangani int Addr)
{
Mulakan ()
TulisI2C (0xA0)
WriteI2C ((char yang tidak ditandatangani) (Addr >> 8) & 0xFF) // hantar alamat tinggi
WriteI2C ((char tidak bertanda tangan) Addr & 0xFF) // hantar alamat rendah
}

// ——————————————
// Kelewatan fungsi mS
// ——————————————
batal DelayMs (bilangan int yang tidak ditandatangani)
{// mSec Kelewatan 11.0592 Mhz
int tidak bertanda // Keil v7.5a
semasa (kiraan)
{
i = 115
semasa (i> 0) i–
mengira–
}
}

Oleh itu, ini semua mengenai pelaksanaan antara muka I2C. Kami harap anda dapat memahami konsep ini dengan lebih baik. Selanjutnya, sebarang pertanyaan mengenai konsep ini atau peranti antara muka sila berikan cadangan berharga anda dengan memberi komen di bahagian komen di bawah.