Datenaustausch zwischen zwei (oder mehreren) PIC16Fxx-Mikrocontrollern via I²C in C (Elektronik)

(oder: Wie realisiere ich einen I²C-Slave mit einem PIC16Fxx-Mikrocontroller)

zurück zu Elektronik, Homepage


4. PIC16Fxx als I²C-Master

Dieser Abschnitt beschreibt nun wie ein PIC16Fxx-Mikrocontroller als Master für den I²C zu konfigurieren ist und welche Software-Routinen notwendig sind.

Wichtig:
Damit ein Mikrocontroller vom Typ PIC16Fxx als Master für den I²C-Bus verwendet werden kann muss dieser über das MSSP-Modul verfügen. MSSP steht für Master Synchronous Serial Port.
nach oben

4.1. Hardware

Zunächst die Hardwarebeschaltung. Abbildung 6 zeigt die minimal notwendige Beschaltung des PIC16Fxx-Mikrocontrollers..

PIC16Fxx als I²C-Master, Schaltung

Auffällig ist, dass hier kein Oszillator vorhanden ist. Dies ist auch nicht notwendig, da die Kommunikation via I²C-Bus nicht zeitkritisch ist, und daher ein interner Oszillator verwendet werden kann.

Wichtig sind hier nur die Pull-Up-Widerstände R2 bis R4 für die beiden I²C-Leitungen (SDA und SCL) sowie für die Interrupt-Leitung (INT)5. An die Buchse K3 bzw. an den Stecker K4 kann ein beliebiges (5-poliges) Kabel angeschlossen werden. Buchsentyp sowie Steckertyp und Pinbelegung sind frei wählbar. Hier wird auch die Betriebsspannung sowie die Masse über das Kabel übertragen, so dass die I²C-Slaves mit dieser Betriebsspannung versorgt werden können.

Wie schon bei der Beschaltung für den PIC16Fxx als Slave wird auch der Master mittels ICSP6 programmiert. Schaltungsteil um Buchse K5.

nach oben

4.2. Software

Der hier verwendete C-Compiler verfügt bereits über Unterprogramme zur Kommunikation via I²C für den Master [4].

Wichtig ist dass zu Beginn die Taktfrequenz für den I²C-Bus definiert werden muss. Diese Aufgabe übernimmt das Unterprogramm I2C_Init(). Für die Erzeugung der Start- und Stopp-Bedingung stehen die Unterprogramme I2C_Start() und I2C_Stop() zur Verfügung. Das Schreiben von 8-Bit-Daten erfolgt mit dem Unterpogramm I2C_Wr() und das Lesen von 8-Bit-Daten erfolgt mit dem Unterprogramm I2C_Rd().

Wichtig ist dass die Pins SDA und SCL (beim Master) als Ausgang definiert werden müssen. (Vgl.: Bei der Verwendung eines PIC16Fxx als I²C-Slave müssen die Pins SDA und SCL als Eingang definiert werden).

nach oben

4 Achtung: Dies ist kein Interrupt des Mikrocontroller PIC16Fxx. Es gibt I²C-Bausteine (Slaves) die neben den Leitungen SDA und SCL einen so genannten INT-Ausgang besitzen um den I²C-Master mitzuteilen, dass Daten zum Abholen bereit sind. z.B. siehe PCF8574.

6 ICSP steht für In-Circuit-Serial-Programming

nach oben


zurück zu Elektronik, Homepage

Autor: Stefan Buchgeher
Erstellt: 31. Juli 2014
Letzte Änderung: