© DrHitch/Shutterstock.com
PIC-Mikrocontroller

4 Erweiterbarkeit der Funktionalität von PIC-Mikrocontrollern


In unserem PIC-Mikrocontrollerprojekt haben wir in den ersten drei Kapiteln dieses shortcuts die Grundfunktionalität in Hard- und Software umgesetzt. Mit Sicherheit entsteht nach einiger Zeit jedoch ein Bedarf an Erweiterungen und Anpassungen. Dann kommen die Vorzüge moderner Mikrocontrollersysteme zum Tragen. Oft sind nicht einmal Änderungen an der Schaltung notwendig, sofern diese ausreichend flexibel gestaltet ist.

Die Vorteile des Einsatzes programmierbarer Hardware liegen in deren Anpassbarkeit. Lassen sich die Erweiterungen mit der bereits aufgebauten Schaltung umsetzen, ist eine Anpassung sehr einfach und kostengünstig. Sie beschränkt sich auf ein Update der Software (Firmwareupdate). Etwas umfangreichere Erweiterungen erfordern ggf. Anpassungen in der Hardware. Dabei steht die Beschaltung der I/O-Pins im Fokus, denn hierüber läuft die Kommunikation des Mikrocontrollers mit seiner Umwelt. Dieses vierte Kapitel beschäftigt sich im Einzelnen mit den folgenden Themen:

  • Anpassung durch Softwareupdate
  • Funktionserweiterung mittels Hard- und Software
  • Varianten der I/O-Beschaltung

Anpassung durch Softwareupdate

Viele Funktionserweiterungen, Anpassungen, Verbesserungen und auch Fehlerkorrekturen können vorgenommen werden, ohne in die bestehende Hardware einzugreifen: Ein Update der Software genügt. Man hat entweder beim Design das direkte „Flashen“ der Software über die vom Mikrocontroller angebotene Schnittstelle vorgesehen, also das In Circuit Serial Programming (ICSP), oder der Mikrocontroller sollte möglichst frei zugänglich auf der Platine platziert werden. Bei Verwendung von ICSP könnte eine nach außen hin zugängliche Schnittstelle am Endgerät angebracht werden (zum Beispiel ein Mini-USB-Anschluss). Über diese Schnittstelle kann im Bedarfsfall das Update der Firmware erledigt werden. Dazu erfolgt eine Koppelung an das Entwicklungsboard und darüber an den PC. So kann der Mikrocontroller in der eigenen Hardware programmiert werden – eine sehr komfortable Angelegenheit. Die Alternative: Der Mikrocontroller kann leicht zum Programmieren aus der Schaltung entnommen werden. Die Programmierung erfolgt in diesem Fall im Entwicklungsboard. Dazu ist es notwendig, für den Controller einen Sockel vorzusehen. Der Controller kann dann aus dem Sockel leicht entnommen und wieder eingesteckt werden. Bei einem 40-poligen IC (wie dem PIC 16F887) ist hier größte Sorgfalt angebracht, damit keine Anschlüsse beschädigt werden. In einem ersten Entwurf der Platine wurde der Mikrocontroller auf der gleichen Seite wie die anderen Bauteile platziert. Diese Entscheidung war aus genannten Gründen nicht optimal. In späteren Versionen wurde er auf der anderen Leiterplattenseite angeordnet (Abb. 4.1), so ist er leichter zugänglich.

Abbildung_4_3.jpg

Abbildung 4.1: Der Mikrocontroller wurde auf einem Sockel auf der Rückseite der Platine für eine leichte Zugänglichkeit platziert

Zur Demonstration von Funktionsanpassungen über ein reines Softwareupdate haben wir zwei kleinere Beispiele ausgewählt.

Versionsanzeige: Da die Software fortlaufend weiterentwickelt wird, sollte auch stets in Erfahrung gebracht werden können, welche Version sich im aktuellen Chip befindet. Eine Möglichkeit: Nach dem Einschalten der Uhr (Verbindung mit der Versorgungsspannung) wird für einige Sekunden die aktuelle Softwareversion in der 7-Segment Anzeige eingeblendet. Die Umsetzung sieht man in Listing 4.1.

Const LED_MASK:array[12] of byte=(0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F, 0x00, 0x2A ); 0,1,2,3,4,5,6,7,8,9, ,v
...
// Display the version of the software
// Digit2, Digit1, Digit4, Digit 3
digit1:=LED_Mask[10];
digit2:=LED_Mask[11];
digit3:=LED_Mask[1];
digit4:=LED_Mask[1]+0x80;
Delay_ms(4500);

Listing 4.1: Anzeige der Softwareversion beim Start der Uhr

Mit dem Start des Hauptprogramms wird auf der ersten Stelle (digit2) ein V (für Version angezeigt). Dieses erreicht man über den Hex-Code 0x2A, in dem der Array-Speicher für die LED-Maske um diesen Eintrag erweitert wird. Im Übrigen verfügt die Entwicklungsumgebung über ein gutes Hilfsmittel (den so genannten 7-Segment-Editor, Abb. 4.2), um zu einer bestimmten Anzeigeoption den Hex-Code zu ermitteln.

Abbildung_4_4.jpg

Abbildung 4.2: Mittels des 7-Segment-Editors der IDE ermittelt man die zugehören Hex-Codes für das Anzeigen der gewünschten Zahlen und Zeichen auf der Anzeige

Im Editor können die Werte komfortabel für Anzeigen mit gemeinsamer Kathode (wie hier benutzt) oder gemeinsamer Anode abgelesen werden. Stelle 2 (digit1) wird inaktiv geschaltet, an Stelle 3 (digit4) wird die Hauptversion ausgegeben und zusätzlich der Doppelpunkt eingeblendet (Zusatz: 0x80) sowie die Nebenversion an Stelle 4 (digit3). Damit erreicht man im konkreten Fall die Ausgabe von „V 1.1“. Die Reihenfolge der Ziffern ist somit (von links nach rechts): digit2, digit1, digit4 und Digit3. Damit die Anzeige der Version nicht sofort wieder überschrieben wird, muss eine bestimmte Zeit gewartet werden. Hier zeigen sich die Vorteile einer Hochsprache bei der Programmentwicklung für Mikrocontrollersysteme. Mittels des Befehls Delay_ms(time_in_ms) kann der Mikrocontroller angewiesen werden, eine bestimmte Zeit mit „Warten“ zu verbringen; hier wird also 4,5 Sekunden gewartet, bis das eigentliche Hauptprogramm der Uhr gestartet wird.

Helligkeitssteuerung: LCD-Anzeigen sieht man nicht ohne Fremdbeleuchtung im Dunkeln, und LED-Anzeigen neigen bei nicht gedämpftem Umgebungslicht zu einem Blenden. Eine automatische Helligkeitssteuerung benötigt ein Fotoelement (Fotodiode, -widerstand, -transistor) zur Wahrnehmung der Umgebungshelligkeit und einer damit verbunden Anpassung der Leuchtstärke. Eine Hardwareerweiterung wäre also notwendig. Aber auch eine manuelle Einstellmöglichkeit der Helligkeit könnte helfen. Dies kann über das Einstellen des Tastverhältnisses zwischen Hell- und Dunkelsteuerung der Anzeigen realisiert werden. Das Verfahren wird als Pulsweitenmodulation (PWM) bezeichnet. Die Anzeigen werden ausreichend schnell (mit hoher Frequenz) an- und ausgeschaltet. Das Verhältnis von Ein- und Ausschaltzeit bestimmt damit die letztendlich wahrgenommene Helligkeit der LED-Anzeigen. Das Verfahren muss mit dem Multiplexbetrieb kombiniert werden. Wir definieren eine Variable zur Speicherung der gewählten Anzeigenhelligkeit (timer_dis_current). Diese kann Werte zwischen 2 und 15 annehmen. Auch fügen wir einen weiteren Betrie...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Gewinner-Teams

Wir bieten Lizenz-Lösungen für Teams jeder Größe: Finden Sie heraus, welche Lösung am besten zu Ihnen passt.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang