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.