Dernière mise à jour le 25/10/25
Présentation
Le but de ce montage electronique est de comprendre le fonctionnement I2C du PIC18F4550 et de savoir comment régler les différents registres en I2C.Pour cela nous allons utiulisr la simulation Proteus isis et le debugger rien de plus…
Logiciel du PIC
Programme MikroPascal du PIC 12F675 [ Logiciel non disponible sur ce site. – Interface MIDI 020 – PIC 18F26K22 – 31/07/2016 – ou mettre un fichier compresser avec le programme du PIC en question]
Programme du PIC – I²C Esclave
unsigned int iInc = 0;
unsigned char clearBuffer;
void interrupt()
{
if (PIR1.SSPIF)
{
if (R_NOT_W_bit == 1) // Le maître veut lire
{
clearBuffer = SSPBUF;
if ((iInc == 0) && (BF_bit == 0))
{
SSPBUF = 0x55; // 1er octet
LATA = 0x55;
iInc++;
}
else if ((iInc == 1) && (BF_bit == 0))
{
Delay_ms(2000); // On attend 2 sec pour voir le changement
SSPBUF = 0xF0; // 2e octet
LATD = 0xFF;
iInc = 0; // Réinitialisation pour la prochaine lecture
}
}
CKP_bit = 1; // On relâche l'horloge afin de poursuivre
PIR1.SSPIF = 0; // Reset flag
}
}
// Initialisation du PIC18F4550
void init()
{
TRISA = 0x00; // On configure le PORTA comme sortie
LATA = 0x00;
TRISB = 0x03; // On confirgure les broches du PORT B - RB0 et RB1 comme entrée
LATB = 0x00;
TRISC = 0x00; // On configure le PORTD comme sortie
LATC = 0x00;
TRISD = 0x00; // On configure le PORTD comme sortie
LATD = 0x00;
TRISE = 0x00; // On configure le PORTE comme sortie
LATE = 0x00;
INTCON.GIE = 1; // On active les interruptions globales
INTCON.PEIE = 1; // On active les interruptions périphériques
PIE1.SSPIE = 1; // On active les interuptions du MSSP ( Module de port sortie synchrone principal I2C ou SPI)
PIR1.SSPIF = 0; // On met le drapeau à zéro pour commencer
SSPCON1.SSPEN = 1; // On active les broches RB0 et RB1 en mode SDA et SCL
SSPCON1.SSPM0 = 0;
SSPCON1.SSPM1 = 1; // On active le mode 7 bits (0 ? 7 = 8 bits) avec interruptions sur bit Start et Bit Stop
SSPCON1.SSPM2 = 1;
SSPCON1.SSPM3 = 0;
SSPADD = 0x10; // Configuration de l'adresse de l'esclave du PIC 18F4550
SSPSTAT.SMP = 1; // Speed mmode 100 Khz (standard)
SSPCON2.SEN = 1; // étirement activé (permet de génèrer automatiquement une condition Start)
}
// Programme principal
void main()
{
init();
while (1) // Boucle principale
{
// On ne fait rien
}
}
|
I2C debugger
Côté Proteus il suffit de mettre cette ligne de code ci-dessous
Côté maître, le “S” indique la condition de start, suivi de “0x11”, qui correspond à l’adresse de l’esclave en mode lecture. En effet, 0x11 en binaire est 0b00010001, et le bit de poids faible à 1 indique la lecture.Le “A” représente le bit d’acquittement (ACK), qui signifie que le maître continue la lecture. Il est ensuite suivi de “N”, le NACK, indiquant que nous avons terminé et que nous ne réclamons plus d’octet à l’esclave. Enfin, le “P” correspond à la condition de stop.
{SEQUENCE002=S 0x11 A N P}
|
Historiques
– 25/10/25
Première mise à disposition.
