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


1. Einleitung

Der I2C-Bus1 wurde ursprünglich von der Firma Philips für die Kommunikation verschiedener Baugruppen in einem Gerät entwickelt.

Der I2C-Bus ist eine so genannte synchrone serielle Zwei-Drahtverbindung zwischen einem Master und einem oder mehreren Slaves. In den meisten Fällen ist der Master ein Mikrocontroller (z.B. ein PIC), während es sich beim Slave z.B. um einen Speicherbaustein handelt, oder um Porterweiterungsbausteine, Temperatursensor, Uhrenbausteine, Analog-Digital-Wandler oder um Spezialbausteine aus dem Bereich der Audio- und Videotechnik. Oder, und darum geht es hier, kann der Slave auch ein PIC-Mikrocontroller sein.

Der I²C-Bus benötigt neben einer Masseleitung nur zwei Leitungen:

In den meisten Fällen wird die Datenübertragung von einem Master ausgelöst. Es ist aber auch möglich, dass zwei oder mehr Master in einen Bus vorkommen. In diesem Fall spricht man vom Multi-Master-Mode. Hier ist durch ein bestimmtes Protokoll gesichert, dass immer nur ein Master den Bus übernehmen kann, wenn der Bus frei ist. Der Multi-Master-Mode soll hier nicht näher betrachtet werden. Diese Dokumentation bezieht sich ausschließlich auf die Konfiguration ein Master mit einem oder mehreren Slaves.

Einige Bausteine der PIC16-Familie beinhalten ein (oder zwei) Hardwaremodul(e) für die Ansteuerung von I²C-Slave-Bausteinen (z.B. PIC16F88x). Beinhaltet der für ein Projekt ausgewählte PIC kein I²C-Hardwaremodul, so ist man gezwungen diese per Software zu realisieren, wenn man mit I²C-Bausteinen kommunizieren muss. Diese Dokumentation beschreibt die Software für die Implementierung des I²C-Protokolls für einen Slave mit einem PIC-Mikrocontroller mit I²C-Hardwaremodul.

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

Als Informationsquellen für diese Arbeit dienen das Datenblatt des verwendeten PIC-Mikrocontroller (hier PIC16F887 [1]) und die Application-Note AN734 mit dem Titel: Using the Mid-Range Enhanced Core PIC16 Devices’ MSSP Modules for Slave I²C Communication [2].

Als Programmiersprache für die PIC-Mikrocontroller-Software wurde C mit dem mikroC-Compiler2 verwendet. Für die Demonstrationsbeispiele ist die kostenlose Demoversion3 ausreichend.

nach oben

1 Das Kürzel I²C bedeutet Inter-Integrated-Circuit, wird daher auch oft mit IIC abgekürzt

2 Der mikroC-Compiler wurde von der Firma mikroElektronika [3] enwickelt und dient zum Programmieren der PIC16Fxx-Familie in der Hochsprache C

3 Die freie Demoversion ist nur auf eine Programmspeichergröße von 2k begrenzt. Ansonst voll kompatibel zur Vollversion. Die Demoversion ist auf der Firmen-Webseite [3] downloadbar

nach oben


zurück zu Elektronik, Homepage

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