Timer-Module im Detail: Zeitmessung und PWM mit dem PIC gehört zu den wichtigsten Grundlagen, wenn Sie mit PIC-Mikrocontrollern mehr bauen möchten als nur „LED an, LED aus“. Timer sind die interne Zeitbasis Ihres Systems: Sie erzeugen periodische Interrupts, messen Pulsbreiten, zählen externe Ereignisse, takten Protokolle und bilden die Grundlage für PWM (Pulse Width Modulation) – etwa für Motorsteuerung, LED-Dimmung, Servos, Heizregelungen oder Audio-Signale. Gleichzeitig sind Timer eine typische Fehlerquelle: Eine falsche Taktannahme führt zu falschen Perioden, Prescaler werden verwechselt, Overflow-Flags werden nicht korrekt behandelt oder PWM-Ausgänge zeigen Jitter. Besonders tückisch ist, dass Timer je nach PIC-Familie unterschiedlich heißen, verschieden breit sind (8/16 Bit), unterschiedliche Prescaler besitzen und manchmal eng mit Capture/Compare/PWM-Modulen (CCP/ECCP) verknüpft sind. Dieser Artikel erklärt Timer-Module praxisnah und detailliert: Sie lernen, wie Zeitmessung auf PICs grundsätzlich funktioniert, wie Sie Timer für präzise Intervalle konfigurieren und wie PWM technisch entsteht. Ziel ist, dass Sie Timer nicht mehr „irgendwie einstellen“, sondern zuverlässig berechnen, messen und stabil in Echtzeit-Firmware einsetzen.
Warum Timer das Herzstück vieler PIC-Projekte sind
Ohne Timer sind viele Embedded-Aufgaben unnötig kompliziert. Delays per Warteschleife blockieren die CPU, verschlechtern Reaktionszeiten und sind bei Taktänderungen sofort falsch. Ein Timer dagegen läuft unabhängig in Hardware und kann die Firmware ereignisgesteuert takten. Das wirkt sich direkt auf Robustheit und Skalierbarkeit aus.
- Deterministische Zeitbasis: Ein 1-ms-Tick für Scheduler, Entprellung, Sensorzyklen.
- Genaues Messen: Perioden- und Pulsbreitenmessung (z. B. Drehzahl, Ultraschall, RC-Signale).
- PWM-Ausgabe: Helligkeit, Leistung, Drehzahl, Servo, Ton.
- Low-Power: Wake-up per Timer statt Polling, besonders bei Batteriebetrieb.
Für die Toolchain (IDE, Compiler, Konfiguration) sind MPLAB X IDE und MPLAB XC8 die Standardbasis.
Grundlagen: Takt, Instruktionszyklus und Timer-Tick
Jede Timerberechnung hängt von der Taktbasis ab. Bei vielen klassischen PIC-Architekturen gilt als Faustregel: Der Instruktionszyklus ist ein Viertel der Oszillatorfrequenz. Timer können jedoch je nach Modul direkt mit Fosc, Fosc/4 oder einem separaten Takt laufen. Deshalb ist das Datenblatt maßgeblich. Als Denkmodell hilft diese Beziehung:
f_cy = f_osc 4
Wenn ein Timer mit dem Instruktionszyklus läuft, ist die Tickdauer:
T_tick = 1 f_cy
In der Praxis kommt häufig ein Prescaler hinzu, der die Tickrate reduziert. Dann gilt:
T_tick = Prescaler f_base
f_base ist die Timer-Basisfrequenz (je nach Timer/Familie). Diese Klarheit ist entscheidend: Wer hier falsch startet, bekommt falsche Perioden, falsche PWM-Frequenzen und „komische“ UART-Timings.
Timer-Typen in PICs: 8 Bit, 16 Bit und Spezialtimer
Viele PICs bieten mehrere Timer mit unterschiedlichen Eigenschaften. Typisch sind:
- 8-Bit-Timer: Schnell, wenig Register, kurze Overflows – ideal für kleine Zeitbasen, PWM-Basis oder kurze Zählfenster.
- 16-Bit-Timer: Größerer Zählbereich, besser für längere Perioden und präzise Messungen.
- Timer mit externem Takteingang: Können Impulse zählen (z. B. Drehzahlsensor), unabhängig vom CPU-Takt.
- Timer mit Capture/Compare/PWM-Anbindung: Häufig als Zeitbasis für PWM-Module genutzt.
Welche Timer existieren und wie sie verschaltet sind, unterscheidet sich je nach PIC. Verlässliche Informationen finden Sie im Datenblatt und in den Reference Manuals; Einstieg über die Microchip Dokumentensuche.
Prescaler und Postscaler: Zeitauflösung versus maximaler Zeitraum
Prescaler teilen die Eingangsfrequenz des Timers, Postscaler werden häufig bei Interruptauslösung genutzt (nicht bei jedem Timer gleich). Das Kernprinzip: Je höher der Prescaler, desto länger kann ein Timer zählen, aber desto gröber wird die Auflösung.
- Hohe Auflösung: kleiner Prescaler (z. B. 1:1, 1:2) – gut für präzise Messungen, kurze PWM-Zyklen.
- Lange Intervalle: großer Prescaler (z. B. 1:64, 1:256) – gut für längere Timerperioden ohne Overflows.
- Praxisziel: Prescaler so wählen, dass Sie mit minimalen Overflows das gewünschte Zeitfenster erreichen.
Overflow, Periodenregister und Compare: Drei Wege zur Zeitsteuerung
Je nach Timerarchitektur gibt es unterschiedliche Mechanismen, um „Zeitpunkte“ zu erzeugen:
- Overflow-basiert: Timer zählt bis Maximalwert und läuft über; Overflow-Flag löst Interrupt aus.
- Periodenregister: Timer zählt bis zu einem einstellbaren Wert (Top/PR), setzt zurück und erzeugt ein Event.
- Compare-Match: Timer läuft frei, Compare löst bei Übereinstimmung ein Event/Interrupt aus.
Für PWM ist das Periodenregister (oder ein definierter „Top“-Wert) besonders wichtig, weil es die PWM-Frequenz bestimmt.
Intervalltimer sauber berechnen: Von „Zielzeit“ zum Registerwert
Eine robuste Timer-Konfiguration beginnt mit einer klaren Zielgröße: „Ich brauche 1 ms“ oder „Ich brauche 20 kHz PWM“. Dann berechnen Sie, wie viele Timer-Ticks dafür nötig sind.
Allgemeines Modell für Tick-Anzahl
Wenn ein Timer mit Basisfrequenz f_base und Prescaler P läuft, ist die Tickfrequenz f_tick = f_base / P. Für eine gewünschte Zeit T gilt:
N = T ⋅ f_base P
Der Registerwert hängt davon ab, ob Sie bis Overflow zählen oder ein Periodenregister nutzen. Bei einem Periodenregister ist PR häufig näherungsweise:
PR ≈ N – 1
Bei Overflow-Logik können Sie den Startwert „vorladen“, damit der Overflow nach N Ticks kommt. Dann gilt:
Preload = Max – N
Max ist 256 bei 8-Bit oder 65536 bei 16-Bit (je nach Timerbreite). Damit können Sie präzise Intervalle erzeugen, ohne dass jede ISR den Timer manuell „nachstellt“.
Timer-Interrupt als Systemtick: Eine bewährte Echtzeit-Architektur
Viele stabile PIC-Projekte nutzen einen periodischen Timer-Interrupt als Systemtick (z. B. 1 ms). In der ISR wird nur ein Zähler inkrementiert oder ein Flag gesetzt. Die Hauptschleife arbeitet dann Aufgaben zeitgesteuert ab. Dadurch vermeiden Sie blockierende Delays und behalten Echtzeitkontrolle.
- ISR: tick++ und ggf. Flags für 10 ms / 100 ms setzen.
- Main Loop: Entprellung, Sensorzyklen, Kommunikation, Zustandsmaschine.
- Vorteil: weniger Jitter, bessere Wartbarkeit, klare Zeitstruktur.
PWM-Grundlagen: Frequenz, Tastgrad und Auflösung
PWM (Pulse Width Modulation) ist ein Rechtecksignal mit variabler Ein-Zeit innerhalb einer festen Periodendauer. Die drei wichtigsten Kenngrößen sind:
- PWM-Frequenz: Wie oft pro Sekunde die Periode wiederholt wird.
- Tastgrad (Duty Cycle): Anteil der Ein-Zeit an der Gesamtperiode (0–100 %).
- Auflösung: Wie fein Sie den Tastgrad einstellen können (z. B. 8 Bit = 256 Stufen).
Die mathematische Definition des Tastgrads:
D = T_on T_period
In Prozent:
D% = D ⋅ 100
PWM im PIC: Timer als Zeitbasis und CCP/ECCP als Ausgabe
In vielen PICs wird PWM über CCP/ECCP-Module realisiert, die auf einem Timer basieren (häufig einem 8-Bit-Timer mit Periodenregister). Der Timer bestimmt die PWM-Periode (Frequenz), während ein Duty-Register festlegt, wie lange der Ausgang innerhalb jeder Periode aktiv ist.
- Timer-Periode: bestimmt die PWM-Frequenz.
- Duty-Wert: bestimmt den Tastgrad.
- Pin-Mapping: PWM-Ausgang muss auf den richtigen Pin geroutet und als Ausgang konfiguriert sein.
Da die genaue Implementierung je nach PIC variiert, ist das Datenblatt entscheidend. Als Startpunkt: Microchip Dokumentensuche.
PWM-Frequenz berechnen: Ein praxistaugliches Modell
Bei PWM-Architekturen mit Periodenregister gilt häufig ein Modell der Form:
f_pwm ≈ f_base P⋅(PR+1)
f_base ist die Timer-Basisfrequenz, P der Prescaler und PR der Periodenregisterwert. Daraus folgt: Wenn Sie die Frequenz erhöhen wollen, reduzieren Sie Prescaler oder PR. Wenn Sie die Auflösung erhöhen wollen, erhöhen Sie PR – was die Frequenz senkt. PWM ist daher immer ein Kompromiss aus Frequenz und Auflösung.
LED-Dimmung, Motor und Servo: Unterschiedliche PWM-Anforderungen
PWM ist nicht gleich PWM. Je nach Last und Anwendung sind Frequenz und Auflösung unterschiedlich wichtig.
- LED-Dimmung: Häufig einige hundert Hz bis mehrere kHz, um Flimmern zu vermeiden. Auflösung ist für weiche Übergänge wichtig.
- DC-Motorsteuerung: Oft im kHz-Bereich, um hörbare Geräusche zu reduzieren. Zusätzlich sind Treiber und EMV-Themen relevant.
- Servo-Signale: Typisch etwa 50 Hz mit Pulsen im Millisekundenbereich; hier ist die absolute Pulsbreite entscheidend, nicht der „klassische“ PWM-Duty im kHz-Bereich.
Capture und Zeitmessung: Pulsbreite und Perioden messen statt schätzen
Viele PICs bieten Capture-Funktionen, bei denen ein Timerwert bei einer Flanke „eingefroren“ wird. Damit können Sie sehr präzise Zeiten messen – ideal für Frequenzmessung, Pulsbreitenmessung oder Protokollanalyse.
- Periodenmessung: Zeit zwischen zwei gleichen Flanken (z. B. Rising-to-Rising).
- Pulsbreite: Zeit zwischen Rising und Falling.
- Vorteil: Messung erfolgt hardwaregestützt und ist weniger jitteranfällig als Software-Polling.
Timer-Kaskadierung und Software-Erweiterung: Wenn 16 Bit nicht reichen
Manchmal brauchen Sie sehr lange Zeitintervalle (Sekunden bis Minuten) oder sehr große Zähler. Dafür gibt es zwei typische Strategien:
- Software-Zähler: Timer-ISR erhöht einen 32-Bit-Zähler; damit erhalten Sie lange Zeiten.
- Timer-Kaskadierung: Manche PICs erlauben, Timer zu koppeln oder externe Takte zu nutzen.
Wichtig ist dabei, dass Sie Mehrbyte-Zugriffe sicher gestalten (volatile und kurze kritische Sektionen), damit keine Race Conditions zwischen ISR und Main Loop entstehen.
Typische Timer-Stolperfallen beim PIC und wie Sie sie vermeiden
Timer sind zuverlässig, wenn man sie korrekt behandelt. Die folgenden Fehler sind besonders verbreitet:
- Falscher Systemtakt: Fuses/Clock-Setup passt nicht zur angenommenen Frequenz, alle Timerwerte sind falsch.
- Prescaler verwechselt: „1:8“ statt „1:64“ führt zu massiven Abweichungen.
- Overflow-Flag nicht gelöscht: ISR feuert sofort wieder oder „hängt“ scheinbar.
- Timer-Register nicht atomar gelesen: 16-Bit-Timerwert wird während des Lesens verändert.
- PWM-Pin falsch konfiguriert: Pin ist noch analog oder nicht als Ausgang gesetzt; PWM läuft intern, aber am Pin kommt nichts an.
- Zu lange ISR: Jitter, verpasste Ereignisse und instabile PWM-Updates.
Messbarkeit: Timer- und PWM-Signale mit einfachen Mitteln überprüfen
Gerade bei Timing-Themen ist „Messen statt glauben“ entscheidend. Selbst ohne teures Equipment können Sie viel verifizieren:
- GPIO-Toggle: In ISR oder vor/nach kritischen Abschnitten Pins toggeln und mit Oszilloskop/Logic Analyzer messen.
- UART-Logging: Nicht in der ISR, sondern in der Main Loop, um Timing nicht zu zerstören.
- Frequenzzähler/Multimeter: Für grobe PWM-Frequenzprüfungen oft ausreichend.
Timer-Setup schneller konfigurieren: MCC als Abkürzung mit Kontrolle
Der MPLAB Code Configurator (MCC) kann Timer und PWM schnell konfigurierbar machen und Code generieren. Das spart Zeit, ersetzt aber nicht das Verständnis der Parameter. Prüfen Sie stets:
- Welche Timerbasis genutzt wird: f_base, Prescaler, Periodenwert.
- Welche ISR-Struktur erzeugt wird: Flags, Callbacks, Clear-Mechanismen.
- Welche Pins betroffen sind: PWM-Ausgang, Capture-Eingang, ggf. Pin-Mapping.
Weiterführende Ressourcen: Offizielle Grundlagen und Dokumentation
- MPLAB X IDE: MPLAB X IDE
- XC8 Compiler: MPLAB XC8
- MCC (Timer/PWM konfigurieren): MPLAB Code Configurator
- Debugger/Programmer (Messbarkeit und Debug): Microchip Debugger & Programmer
- Datenblätter und Reference Manuals finden: Microchip Dokumentensuche
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.

