Bei diesem Demonstrationsbeispiel soll ein Mikrocontroller (PIC16F628) zyklisch (ca. alle 65ms) die Temperatur von einem Temperatursensor (IC2; mit I²C-Schnittstelle) auslesen und in BCD kodierter Form am Port B ausgeben. Wie schon im Abschnitt 3 (Hardware) beschrieben sind sowohl bei der Datenleitung (SDA), als auch bei der Taktleitung (SCL) Pull-Up-Widerstände notwendig. (Hier R1 bzw. R2). Die Temperaturanzeige erfolgt der Einfachheit halber nur mit Leuchtdioden (D1 bis D8). Eine zusätzliche Leuchtdiode (D9) am Portpin RA0 soll das Vorzeichen anzeigen, wobei eine leuchtende LED eine negative Temperatur kennzeichnet.
Für die Takterzeugung dient eine Standardbeschaltung bestehend aus einem 4-MHz-Quarz
(X1), zwei Kondensatoren (C4, C5) und einem Widerstand (R4).
Das RC-Glied (R3, C3) erzeugt einen definierten Reset beim Anlegen der
Betriebsspannung.
Die Diode D10 verhindert eine Zerstörung des Mikrocontrollers bei einer Falschpolung der Betriebsspannung. Als Betriebsspannung muss eine stabile 5-V-Spannungsquelle verwendet werden.
Die Software zum Demonstrationsbeispiel befindet sich im Download- Bereich auf dieser Seite
Die Software besteht im Wesentlichen aus einem kurzen Hauptprogramm, einer Interrupt-Service-Routine (kurz ISR), die die im Abschnitt 4.3 besprochenen Unterprogramme, zur Erzeugung des I²C-Protokolls, und einem Unterprogramm, welches ein Byte von binär nach BCD umwandelt, aufruft.
Die ISR wird ca. alle 65ms aufgerufen und besitzt folgende Aufgaben:
Das Hauptprogramm besteht nach der Initialisierung (Unterprogramm INIT) und der Interruptfreigabe nur mehr aus einer Endlosschleife.
Das Unterprogramm INIT dient zur Initialisierung des Controller. Hier werden u.a. die Ports konfiguriert (Port dient als Eingang oder als Ausgang), der oder die Timer eingestellt usw. Dieses Unterprogramm ist vom Controllertyp abhängig und je nach Anwendung mehr oder weniger umfangreich.