Dein erstes Programm: “Hello World” (Blink) mit einem PIC16F84

Dein erstes Programm: “Hello World” (Blink) mit einem PIC16F84 ist der klassische Einstieg in die Mikrocontroller-Welt – und gleichzeitig eine sehr gute Übung, um die wichtigsten Grundprinzipien zu verstehen: Versorgung, Taktquelle, I/O-Pins, Registerkonfiguration und einfache Zeitverzögerungen. Der PIC16F84 (häufig in der Praxis als PIC16F84A verwendet) ist zwar ein älteres, sehr solides 8-Bit-Modell ohne Komfortfunktionen wie ADC oder interne Oszillatoren, aber genau das macht ihn für Einsteiger interessant: Man lernt die Hardware „ehrlich“ kennen und sieht unmittelbar, wie ein Portpin als Ausgang gesetzt wird und warum ein Programm ohne korrekte Konfiguration scheinbar „nichts tut“. In dieser Schritt-für-Schritt-Anleitung richten Sie die Hardware so ein, dass eine LED zuverlässig blinkt, konfigurieren im Projekt die richtigen Einstellungen (Takt, Watchdog, Power-up Timer) und bauen das Blink-Programm so auf, dass Sie es später leicht erweitern können – etwa um einen Taster, einen Timer oder eine saubere Entprellung. Wenn Sie am Ende eine LED im konstanten Rhythmus blinken sehen, haben Sie nicht nur ein Symbolerlebnis, sondern eine funktionsfähige Toolchain und eine belastbare Lernbasis für alle weiteren PIC-Projekte.

Was Sie für das Blink-Projekt mit PIC16F84 benötigen

Bevor es an Software geht, sollten die grundlegenden Bausteine stehen. Der PIC16F84 ist in vielen Setups schnell aufgebaut, aber er benötigt eine saubere Stromversorgung und in der Regel einen externen Quarz bzw. Resonator, weil er keinen modernen internen Taktgenerator wie viele neuere PICs besitzt.

  • PIC16F84 oder PIC16F84A: Für heutige Lernaufbauten wird häufig der PIC16F84A genutzt, weil er in vielen Tools besser gelistet ist.
  • Stromversorgung: 5 V stabil (z. B. über Labornetzteil oder geregeltes Netzteil). Der PIC16F84 arbeitet typischerweise im 5-V-Umfeld.
  • Abblockkondensator: 100 nF direkt zwischen VDD und VSS am Chip (sehr wichtig für Stabilität).
  • Taktquelle: Quarz (z. B. 4 MHz) plus passende Kondensatoren oder ein Resonator (je nach Bauart).
  • LED + Vorwiderstand: z. B. 330 Ω bis 1 kΩ für den Start.
  • Programmiermöglichkeit: Ein kompatibler Programmer/Debugger oder ein Board, das PIC16F84 unterstützt.
  • Entwicklungsumgebung: MPLAB X IDE mit Assembler (MPASM) oder eine geeignete Toolchain.

Für die Entwicklungsumgebung ist die offizielle Einstiegsseite zu MPLAB X IDE hilfreich: MPLAB X IDE bei Microchip. Wenn Sie zusätzlich einen Programmer/Debugger einrichten möchten, finden Sie die Übersicht bei Microchip hier: Debugger und Programmer (Microchip).

Hardware-Aufbau: LED sicher anschließen und typische Fehler vermeiden

Für ein Blink-Projekt reicht ein einzelner Ausgangspin, zum Beispiel RB0 (Port B, Bit 0). Sie können die LED so anschließen, dass der PIC sie gegen Masse schaltet (LED an +5 V über Widerstand, Pin zieht nach LOW) oder gegen +5 V (LED gegen Masse, Pin setzt HIGH). Für Einsteiger ist „Pin auf HIGH = LED an“ häufig intuitiver, aber beide Varianten funktionieren. Wichtig ist, dass Sie den Strom pro Pin nicht übertreiben und die LED immer mit Vorwiderstand betreiben.

Vorwiderstand grob berechnen

Für eine LED nutzen Sie das Ohmsche Gesetz, um einen sicheren Widerstand zu wählen. Mit 5 V Versorgung, einer typischen LED-Durchlassspannung und einem moderaten Strom (z. B. 5–10 mA) kommen Sie schnell zu praxisnahen Werten:

R = U_S U_F I

Mit US = 5 V, UF (LED) typischerweise 2 V und I = 0,01 A ergibt sich näherungsweise ein Widerstand um 300 Ω. In der Praxis sind 330 Ω ein sehr gängiger Startwert. Wenn Sie 1 kΩ wählen, ist die LED dunkler, aber besonders sicher und robust für erste Versuche.

Abblockkondensator und Takt: Warum das Blink-Projekt sonst „spinnt“

Viele Anfänger erleben flackernde LEDs, sporadische Resets oder scheinbar zufälliges Verhalten. In sehr vielen Fällen liegt es nicht am Code, sondern an der Hardware: fehlender 100-nF-Abblockkondensator direkt am PIC, zu lange Leitungen auf dem Breadboard oder eine unstabile Versorgung. Ebenso wichtig ist der Takt: Wenn Quarz/Resonator nicht korrekt angeschlossen oder falsch konfiguriert ist, läuft die CPU nicht stabil oder gar nicht.

Wichtige Pins beim PIC16F84: VDD/VSS, MCLR und Ports

Für das erste Programm lohnt es sich, die wichtigsten Anschlüsse bewusst zu benennen. Der PIC16F84 ist ein Mikrocontroller, bei dem die Konfiguration stark über Hardware und Konfigurationsbits zusammenwirkt.

  • VDD / VSS: Versorgung (typisch +5 V) und Masse. Direkt daneben gehört der 100-nF-Kondensator.
  • MCLR: Reset-Pin. Wenn MCLR aktiv ist, muss dieser Pin stabil auf HIGH liegen, sonst bleibt der Controller im Reset oder resettet zufällig.
  • PORTA und PORTB: Ein-/Ausgabeports. Für Blink wird meist PORTB genutzt, weil er mehrere digitale Pins bereitstellt.

Gerade MCLR ist eine häufige Fehlerquelle: Wenn er „in der Luft“ hängt oder über ungünstige Beschaltung Störungen einfängt, startet der PIC nicht zuverlässig. Ein sauberer Pull-up (typisch über Widerstand) ist hier Standard, sofern Sie MCLR nicht explizit deaktivieren (was bei klassischen Lernaufbauten eher nicht empfohlen wird).

Projekt in MPLAB X anlegen: Gerät wählen und Toolchain vorbereiten

Im nächsten Schritt richten Sie das Projekt so ein, dass die IDE den richtigen Controller kennt und die passende Buildkette verwendet. Für den PIC16F84 wird häufig Assembler verwendet, weil es ein sehr klassischer Controller ist und viele Blink-Beispiele darauf basieren. Falls Sie C nutzen möchten, ist das möglich, aber für den allerersten Schritt ist Assembler oft der direktere Weg, um Register und Ports zu verstehen.

  • Neues Projekt: In MPLAB X ein neues Standalone Project erstellen.
  • Device auswählen: PIC16F84 oder PIC16F84A wählen, je nach Bauteil.
  • Hardware Tool: Entweder Simulator (für Logiktests) oder Ihren Programmer/Debugger auswählen.
  • Compiler/Assembler: Für Assembler-Projekte MPASM (oder die passende Assembler-Integration) wählen, sofern verfügbar.

Wenn Sie MPLAB X noch nicht installiert haben, ist die offizielle Installations- und Einstiegshilfe hilfreich: Installations-Guide für MPLAB X IDE.

Konfigurationsbits verstehen: Damit der PIC wirklich läuft

Beim PIC16F84 sind Konfigurationsbits (Configuration Bits) zentral. Sie legen unter anderem fest, welche Taktquelle genutzt wird, ob der Watchdog aktiv ist und ob ein Power-up Timer verwendet wird. Ein Blink-Programm kann perfekt sein – wenn die Konfigurationsbits nicht passen, blinkt trotzdem nichts.

  • Oszillator-Modus: Muss zur realen Taktquelle passen (z. B. XT für einen typischen Quarz im MHz-Bereich).
  • Watchdog Timer: Für den Einstieg oft deaktivieren, um „unerklärliche Resets“ zu vermeiden.
  • Power-up Timer: Kann das Startverhalten stabilisieren, wenn die Versorgung langsam hochläuft.
  • Code Protection: Für Lernprojekte normalerweise aus, damit Sie problemlos programmieren und lesen können.

Wenn Sie später bewusst mit dem Watchdog arbeiten möchten, ist das eine sehr gute Übung. Für den ersten Blink ist es jedoch sinnvoll, zunächst eine möglichst „statische“ Umgebung zu schaffen, in der nur Sie den Reset auslösen (über MCLR oder Power Cycle).

Das Herzstück: Port konfigurieren und LED toggeln

Ein Blink-Programm besteht im Kern aus drei Teilen: Initialisierung, Endlosschleife und Delay. Beim PIC16F84 müssen Sie für digitale Ausgänge typischerweise das TRIS-Register korrekt setzen. Denn beim PIC gilt: Ein Pin ist erst dann ein Ausgang, wenn das entsprechende TRIS-Bit auf „Ausgang“ steht. Wenn der Pin noch als Eingang konfiguriert ist, kann Ihr Programm zwar PORT-Bits setzen, aber an der LED passiert nichts.

TRIS und PORT: Das Grundprinzip

Vereinfacht können Sie sich Folgendes merken:

  • TRISB: Legt die Richtung der PORTB-Pins fest (Eingang oder Ausgang).
  • PORTB: Das Register, über das Sie den Ausgangspegel setzen bzw. Eingangspegel lesen.

Für eine einzelne Blink-LED auf RB0 konfigurieren Sie RB0 als Ausgang und setzen dann in der Schleife das Bit abwechselnd auf HIGH und LOW. „Hello World“ für Mikrocontroller heißt also: „Ein Pin lebt“.

Delays richtig denken: Takt, Instruktionszyklus und Schleifenlängen

Ein Blink wirkt nur dann „sauber“, wenn die Zeitverzögerung reproduzierbar ist. Beim PIC16F84 hängt jede Delay-Schleife direkt vom Takt ab. Eine zentrale Daumenregel in vielen PIC-Architekturen lautet: Der Instruktionszyklus ist typischerweise ein Viertel der Oszillatorfrequenz.

f_cy = f_osc 4

Wenn Sie also einen 4-MHz-Quarz nutzen, ergibt sich ein Instruktionszyklus von etwa 1 MHz, also 1 Mikrosekunde pro Instruktionszyklus (grob). Damit können Sie abschätzen, wie viele Schleifendurchläufe Sie benötigen, um zum Beispiel 250 ms oder 500 ms zu warten. Eine einfache Orientierung ist: Je höher der Takt, desto kürzer sind Ihre Delays – und desto schneller blinkt die LED, wenn Sie die Schleifen nicht anpassen.

Warum Delay-Schleifen für den Einstieg okay sind – und wann Timer besser sind

Für das erste Blink-Programm sind einfache Delay-Schleifen vollkommen in Ordnung, weil sie leicht verständlich sind. Sie haben aber einen Nachteil: Die CPU „tut nichts anderes“ als warten. Sobald Sie zwei Dinge gleichzeitig tun möchten (z. B. Blink plus Tasterabfrage oder Blink plus UART), sind Timer-basierte Delays deutlich sauberer. Der PIC16F84 besitzt dafür Timer-Funktionalität (z. B. TMR0), die Sie später als nächsten Lernschritt nutzen können.

Programmier- und Testablauf: Vom Build bis zum ersten echten Blink

Damit Sie Fehler schnell eingrenzen können, empfiehlt sich ein klarer Ablauf. Viele Anfänger ändern gleichzeitig Hardware, Software und Tool-Einstellungen – und wissen dann nicht, was den Fehler verursacht. Gehen Sie stattdessen in kleinen, überprüfbaren Schritten vor.

  • Schritt 1: Hardware aufbauen und Versorgung prüfen (5 V am VDD, Masse am VSS, Kondensator nah am Chip).
  • Schritt 2: Taktquelle anschließen und Konfigurationsbits passend setzen.
  • Schritt 3: Projekt anlegen, Device korrekt wählen, Build ohne Fehler durchführen.
  • Schritt 4: Programmieren (Program) und danach Verifikation (Verify) abwarten.
  • Schritt 5: Reset auslösen (Power Cycle oder MCLR) und LED-Verhalten beobachten.

Wenn Sie beim Programmieren einen PICkit oder SNAP verwenden, lohnt es sich, die Microchip-Übersicht als Referenz zu nutzen, falls Treiber oder Toolauswahl unklar sind: Microchip Debugger/Programmer.

Fehlersuche: Wenn die LED nicht blinkt (oder komisch blinkt)

Bei einem Blink-Projekt lassen sich Fehler oft sehr schnell lokalisieren, wenn Sie systematisch vorgehen. Die häufigsten Ursachen sind erstaunlich banal – aber genau deshalb sollten Sie sie als Checkliste kennen.

  • LED falsch gepolt: LED leuchtet nur in einer Richtung. Drehen Sie sie testweise um.
  • Vorwiderstand vergessen: Ohne Widerstand riskieren Sie LED und Pin. Mit zu großem Widerstand sehen Sie ggf. kaum Licht.
  • Falscher Pin: RB0 ist nicht gleich RA0. Prüfen Sie, ob Sie wirklich den programmierten Pin verdrahtet haben.
  • TRIS nicht gesetzt: Pin bleibt Eingang, PORT-Schreiben hat keine Wirkung am Ausgang.
  • MCLR unstabil: Controller bleibt im Reset oder resettet sporadisch. Pull-up und saubere Verdrahtung prüfen.
  • Takt falsch: Quarz/Resonator nicht korrekt angeschlossen oder falscher Oszillator-Modus in den Konfigurationsbits.
  • Watchdog aktiv: Programm resettet ständig, wenn der WDT nicht bedient wird. Für den Start besser deaktivieren.
  • Versorgung instabil: Fehlender 100-nF-Kondensator oder zu lange Leitungen führen zu Störungen.

Nächste sinnvolle Erweiterungen nach dem Blink: Lernen mit System

Wenn Blink zuverlässig läuft, haben Sie die Basis: Hardware funktioniert, Toolchain arbeitet, Programmierweg ist klar. Der PIC16F84 ist ideal, um im nächsten Schritt genau die Themen zu lernen, die Embedded-Entwicklung langfristig prägen: Zeitmanagement, Interrupts und robuste Eingaben.

  • Taster hinzufügen: LED nur blinken lassen, wenn ein Taster gedrückt ist (inklusive Entprellung).
  • Timer statt Delay-Schleife: Blinkfrequenz über TMR0 erzeugen, CPU bleibt frei für andere Aufgaben.
  • Zustandsautomat: Zwei Blinkmuster (langsam/schnell) per Taster umschalten.
  • Strom und Stabilität: Unterschied zwischen „läuft auf dem Tisch“ und „läuft zuverlässig“ durch saubere Verdrahtung lernen.

Projektpflege von Anfang an: Dateistruktur, Versionen und reproduzierbare Builds

Gerade bei älteren Controllern wie dem PIC16F84 ist es hilfreich, die Projektparameter sauber zu dokumentieren, weil kleine Abweichungen (Taktfrequenz, Config Bits, Delay-Schleifen) das Verhalten direkt verändern. Legen Sie deshalb von Beginn an eine einfache Disziplin an: Welche Taktquelle nutzen Sie, welche Oszillator-Konfiguration ist gesetzt, welche Blinkperiode erwarten Sie und welche Toolchain-Version wurde verwendet. Das ist kein „Overengineering“, sondern erleichtert den nächsten Lernschritt und verhindert, dass ein späteres Projekt „anders blinkt“ und Sie nicht wissen, warum.

  • Takt dokumentieren: z. B. 4 MHz Quarz und Oszillator-Modus passend dazu.
  • Config Bits notieren: WDT an/aus, Power-up Timer, Code Protection.
  • Verdrahtung festhalten: Welcher Pin treibt die LED, wie ist sie angeschlossen (gegen VDD oder gegen GND).
  • Buildkette festhalten: MPLAB X Version und verwendeter Assembler/Compiler.

IoT-PCB-Design, Mikrocontroller-Programmierung & Firmware-Entwicklung

PCB Design • Arduino • Embedded Systems • Firmware

Ich biete professionelle Entwicklung von IoT-Hardware, einschließlich PCB-Design, Arduino- und Mikrocontroller-Programmierung sowie Firmware-Entwicklung. Die Lösungen werden zuverlässig, effizient und anwendungsorientiert umgesetzt – von der Konzeptphase bis zum funktionsfähigen Prototyp.

Diese Dienstleistung richtet sich an Unternehmen, Start-ups, Entwickler und Produktteams, die maßgeschneiderte Embedded- und IoT-Lösungen benötigen. Finden Sie mich auf Fiverr.

Leistungsumfang:

  • IoT-PCB-Design & Schaltplanerstellung

  • Leiterplattenlayout (mehrlagig, produktionstauglich)

  • Arduino- & Mikrocontroller-Programmierung (z. B. ESP32, STM32, ATmega)

  • Firmware-Entwicklung für Embedded Systems

  • Sensor- & Aktor-Integration

  • Kommunikation: Wi-Fi, Bluetooth, MQTT, I²C, SPI, UART

  • Optimierung für Leistung, Stabilität & Energieeffizienz

Lieferumfang:

  • Schaltpläne & PCB-Layouts

  • Gerber- & Produktionsdaten

  • Quellcode & Firmware

  • Dokumentation & Support zur Integration

Arbeitsweise:Strukturiert • Zuverlässig • Hardware-nah • Produktorientiert

CTA:
Planen Sie ein IoT- oder Embedded-System-Projekt?
Kontaktieren Sie mich gerne für eine technische Abstimmung oder ein unverbindliches Angebot. Finden Sie mich auf Fiverr.

 

Related Articles