In questa pagina è mostrato come utilizzare MPLAB Code Configurator per realizzare un master I2C con un PIC18 dotato di modulo I2C dedicato, per esempio un PIC18(L)F26K42. Non verrà qui spiegato cosa è e come si usa il bus I2C. Semplicemente verranno presentati alcuni esempi che permettono di comprendere come usare un dispositivo I2C collegato ad un PIC. Qui qualche informazione.
Questo esempio utilizza come slave il sensore di temperatura LM75A, ma può essere considerato sufficientemente generale per qualunque tipo di dispositivo.
Come microcontrollore è stato utilizzato un PIC18(L)F26K42 che contiene due moduli dedicati I2C ed un modulo PPS. Se il processore che utilizzate contiene un modulo MSSP invece che I2C (per esempio un PIC18F25K50 o un PIC18F2xK22), fate riferimento alla pagina Master I2C con MCC (MSSP).
Il circuito di riferimento è PIC-WL-Sen, ma il circuito può essere realizzato senza problemi con una qualunque scheda di sviluppo (nota 1) o direttamente su breadboard.
Si noti in particolare:
La configurazione del modulo I2C è particolarmente semplice:
L'unica particolarità e fonte di errate interpretazioni è la scelta della frequenza del clock I2C; quella visibile in basso non è infatti la frequenza del clock visibile all'esterno sul pin SCL, ma, nel caso specifico, un valore cinque volte superiore: nell'esempio il bus avrà una frequenza di 100 kHz, quella standard (nota 2).
Altrettanto semplice è la configurazione dei pin. Occorre prestare attenzione alle impostazioni dei due pin I2C che devono essere uscite e Open Drain (OD).
Una differenza significativa rispetto a quasi tutti gli altri PIC18 è la flessibilità permessa nella scelta dei pin, praticamente tutti quelli delle porte B e C.
Il codice per leggere due byte da un registro è costituito da una sola funzione
Temperature = i2c2_read2ByteRegister(0x48, 0);
Simile la funzione di scrittura del dato 0x01 (terzo argomento) nel registro 0x01 (secondo argomento):
i2c2_write1ByteRegister(0x48, 0x01, 0x01);
Un esempio di uso minimale delle funzioni contenute nel codice disponibile a fondo pagina:
#include "mcc_generated_files/mcc.h"
#include "LM75A.h"
void main(void) {
float Temperature_f; // Temperature [degree Celsius]
SYSTEM_Initialize();
while (1) {
PowerUpLM75(); // Wake up
LM75A
__delay_ms(300); // Wait
Temperature_f = ReadTemperatureLM75Af();
PowerDownLM75(); // Power down LM75A
// NOP();
// For debug, place here breakpoint
// Do other stuff
}
}
Il codice delle funzioni disponibile a fondo pagina deve essere ovviamente letto consultando i fogli tecnici di LM75A. L'unica osservazione è relativa alla presenza di due funzioni molto simili:
La seconda funzione è meno comoda, ma ha due importanti vantaggi:
Data di creazione di questa pagina: luglio 2019
Ultima modifica: 20 luglio 2019
PIC18 in C - Versione 0.991 - luglio 2019
Copyright 2014-2019, Vincenzo Villa (https://www.vincenzov.net)
PIC18 in C di Vincenzo Villa è distribuito con Licenza Creative Commons Attribuzione 4.0 Internazionale