Comment interfacer I2C-EEPROM avec le microcontrôleur 8051

Essayez Notre Instrument Pour Éliminer Les Problèmes





Le terme abréviation I2C ou IIC est un inter circuit intégré et il est appelé comme j'ai quadrillé C. I2C est un bus informatique série , qui a été inventé par les semi-conducteurs NXP auparavant, il est appelé semi-conducteurs Philips. Le bus I2C est utilisé pour connecter des circuits intégrés périphériques à basse vitesse microcontrôleurs et processeurs . En 2006, pour mettre en œuvre le protocole I2C, aucun frais de licence n'est nécessaire. Mais des frais sont nécessaires pour obtenir l'adresse d'esclave I2C attribuée par les semi-conducteurs NXP.

Certains concurrents comme Texas Instruments, Siemens AG, NEC, Motorola, Intersil et STMicroelectronics ont annoncé des produits I²C bien adaptés sur le marché au milieu des années 90. En 1995, SMBus est défini par Intel, c'est-à-dire un sous-groupe d'I²C qui déclare que les protocoles sont plus stricts. L'objectif principal de SMBus est de prendre en charge l'interopérabilité et la robustesse. Par conséquent, les systèmes I²C actuels incluent des règles et des politiques de SMBus, parfois il prend en charge à la fois I2C et SMBus avec une reconfiguration minimale.




Bus I2C

Bus I2C

Interface I2C Bus-EEPROM avec microcontrôleur 8051

Qu'est-ce que le bus I2C

Le bus I2c utilise deux lignes bidirectionnelles à drain ouvert telles que SDA (ligne de données série) et SCl (ligne d'horloge série) et celles-ci sont tirées vers le haut avec des résistances. Le bus I2C permet à un appareil maître de démarrer la communication avec un appareil esclave. Les données sont échangées entre ces deux appareils. Les tensions typiques utilisées sont + 3,3 V ou + 5 V bien que les systèmes avec des tensions supplémentaires soient autorisés.



Interface I2C

Interface I2C

EEPROM

ROM programmable effaçable électriquement (EEPROM) est une ROM modifiable par l'utilisateur qui peut être retirée et reprogrammée fréquemment grâce à l'application d'une tension électrique supérieure à la normale. Une EEPROM est une sorte de mémoire non volatile utilisée dans les appareils électroniques comme les ordinateurs pour stocker de petites quantités de données qui doivent être sauvegardées lorsque l'alimentation est coupée.

8051 Slicker Board

La planche 8051 Slicker est spécialement conçue pour aider les étudiants techniques dans le domaine de systèmes embarqués . Ce kit est conçu de telle manière que toutes les fonctionnalités de Microcontrôleur 8051 sera éventuellement utilisé par les étudiants. Cette carte de percuteur prend en charge ISP (In System Programming) qui se fait via le port série. Ce kit et 8051 de NXP sont proposés pour lisser la progression du débogage de nombreuses conceptions entourant des microcontrôleurs de vitesse 8 bits.

Interfaçage I2C - EEPROM

La figure suivante montre l'interfaçage de l'I2C-EEPROM avec le microcontrôleur 8051. Ici, I2C est un protocole maître-esclave, qui inclut les données avec l'impulsion d'horloge. En règle générale, l'appareil maître a commuté la ligne d'horloge, SCL. Cette ligne commande la synchronisation des données qui sont transférées sur le bus I2C. À moins que l'horloge ne soit actionnée, aucune donnée ne sera transférée. Tous les esclaves sont contrôlés par la même horloge, SCL.


Interfaçage I2C - EEPROM

Interfaçage I2C - EEPROM

Le bus I2C prend en charge les différents appareils où chaque appareil est identifié par une adresse unique, qu'il s'agisse d'un pilote LCD, d'une carte mémoire, d'un microcontrôleur ou interface de clavier qui peut fonctionner comme Tx ou Rx dépend du fonctionnement de l'appareil. Le contrôleur est conçu pour contrôler le dispositif EEPROM via le protocole I2C. Ici, le protocole I2C fonctionne comme un appareil maître et régule l'EEPROM et il fonctionne comme un esclave. Les opérations R / W sont efficaces en transférant un ensemble de signaux de commande comprenant le bus de données d'adresse ET / OU. Ces signaux doivent être accompagnés de signaux d'horloge appropriés

Interface I2C Bus-EEPROM avec microcontrôleur 8051

Si vous voulez lire, écrire et effacer l'EEPROM en utilisant le bus I2C dans la carte de percuteur 8051. Interfaçage du bus I2-EEPROM avec Le microcontrôleur 8051 est très simple . Le fonctionnement de cette interface consiste à envoyer un signal comme WRITE, suivi d'un bus de données et d'adresses. Dans cette opération, l'EEPROM est utilisée pour stocker les données. Dans le kit 8051, deux nombres de lignes EEPROM sont régulés par des pilotes pris en charge par I2C. Le SCL et le SDA sont connectés au CI EEPROM série basé I2C.

Interface I2C Bus-EEPROM avec microcontrôleur 8051

Interface I2C Bus-EEPROM avec microcontrôleur 8051

En utilisant les lignes SDA et SCL I2C, les opérations de lecture et d'écriture de l'EEPROM sont effectuées dans 8051 Slicker Kit

L'interfaçage de I2C est si simple et dans chaque donnée unique en lecture / écriture en EEPROM. Le délai dépend de la façon dont le compilateur améliore les boucles dès que vous modifiez les choix, le délai varie.

Code source pour l'interface I2C

#comprendre
#comprendre
#comprendre

#define ACK 1
#define NO_ACK 0

caractère non signé i
caractère non signé EData [5]
Données char non signées
void InitSerial (void)
void DelayMs (entier non signé)
void WriteI2C (caractère non signé)
void Start (annulé)
void Stop (annulé)
void ReadBYTE (entier non signé)
void WriteBYTE (entier non signé)
caractère non signé ReadI2C (bit)

sbit SCL = P2 ^ 0 // se connecter à la broche SCL (horloge)
sbit SDA = P2 ^ 1 // se connecter à la broche SDA (données)

// ——————————————
// Programme principal
// ——————————————
void main (void)
{
InitSerial () // Initialise le port série
putchar (0x0C) // effacer l'hyper terminal
RetardMs (5)
WriteBYTE (0x0000)
WriteI2C ('A') // Écrire les données ici
WriteI2C ('B')
WriteI2C («C»)
WriteI2C («D»)
WriteI2C («E»)
WriteI2C («F»)
Arrêter()
RetardMs (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)

pour (i = 0i<6i++)
{
printf ('valeur =% c n', EData [i]) // afficher les données * /
RetardMs (100)
}

tandis que (1)
}

// ——————————————
// Initialiser le port série
// ——————————————
void InitSerial (void)
{
SCON = 0x52 // configuration du contrôle du port série
TMOD = 0x20 // matériel (9600 BAUD @ 11.0592MHZ)
TH1 = 0xFD // TH1
TR1 = 1 // Timer 1 activé
}

// ————————————-
// démarrer I2C
// ————————————-
void Start (annulé)
{
SDA = 1
SCL = 1
_bouton _ () _ nop_ ()
SDA = 0
_bouton _ () _ nop_ ()
SCL = 0
_bouton _ () _ nop_ ()
}

// ————————————-
// arrête I2C
// ————————————-
void Stop (annulé)
{
SDA = 0
_bouton _ () _ nop_ ()
SCL = 1
_bouton _ () _ nop_ ()
SDA = 1
}

// ————————————-
// Ecrire I2C
// ————————————-
void WriteI2C (données char non signées)
{

pour (i = 0i<8i++)
{
SDA = (Données & 0x80)? dix
SCL = 1SCL = 0
Données<<=1
}

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

}

// ————————————-
// Lire I2C
// ————————————-
caractère non signé ReadI2C (bit ACK_Bit)
{

Début()
ÉcritureI2C (0xA1)

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

SCL = 1
Données<<= 1
Date = (Date

si (ACK_Bit == 1)
SDA = 0 // Envoyer ACK
autre
SDA = 1 // N'envoie AUCUN ACK

_bouton _ () _ nop_ ()
SCL = 1
_bouton _ () _ nop_ ()
SCL = 0
Arrêter()
retourner les données
}

// ————————————-
// Lire 1 octet sous forme I2C
// ————————————-
void ReadBYTE (addr int non signé)
{
Début()
ÉcritureI2C (0xA0)
WriteI2C ((caractère non signé) (Addr >> 8) & 0xFF)
WriteI2C ((caractère non signé) Addr & 0xFF)
}

// ————————————-
// Ecrit 1 octet dans I2C
// ————————————-
void WriteBYTE (addr int non signé)
{
Début()
ÉcritureI2C (0xA0)
WriteI2C ((unsigned char) (Addr >> 8) & 0xFF) // envoyer l'adresse haute
WriteI2C ((unsigned char) Addr & 0xFF) // adresse d'envoi faible
}

// ——————————————
// Fonction Delay mS
// ——————————————
void DelayMs (nombre entier non signé)
{// Délai msec 11,0592 Mhz
unsigned int i // Keil v7.5a
tandis que (compter)
{
i = 115
tandis que (i> 0) i–
compter-
}
}

Il s'agit donc de l'implémentation de l'interface I2C. Nous espérons que vous avez une meilleure compréhension de ce concept. De plus, toute question concernant ce concept ou dispositifs d'interfaçage veuillez donner vos précieuses suggestions en commentant dans la section des commentaires ci-dessous.