Eine digitale Uhr mit PIC und 7-Segment-Anzeige selber bauen ist ein ideales Projekt, um Grundlagen der Mikrocontrollertechnik, saubere Hardware-Planung und „echtes“ Embedded-Programmieren in einem greifbaren Ergebnis zu verbinden. Sie lernen dabei nicht nur, wie man eine Anzeige ansteuert, sondern auch, wie Zeit zuverlässig gemessen und gespeichert wird, wie Interrupts und Timer zusammenarbeiten und warum Strombegrenzung sowie Treiberstufen in der Praxis unverzichtbar sind. Der Reiz liegt darin, dass das Projekt skalierbar ist: Als Einsteiger starten Sie mit einer einfachen Stunden-Minuten-Anzeige und wenigen Tastern. Mit etwas mehr Erfahrung erweitern Sie um Sekunden, Alarmfunktion, Helligkeitsregelung oder eine batteriegepufferte Echtzeituhr (RTC). Technisch besonders lehrreich ist die Multiplex-Ansteuerung, bei der mehrere Ziffern mit wenigen Pins betrieben werden, ohne dass die Anzeige flackert. In diesem Leitfaden erhalten Sie einen praxisnahen Bauplan: von der Bauteilauswahl über Schaltungsprinzipien bis zu einer robusten Firmwarestruktur in C (XC8/XC16) oder alternativ in Assembler. Sie bekommen außerdem konkrete Faustregeln für Timer-Konfiguration, Entprellung und die Dimensionierung der Vorwiderstände, sodass Ihre Uhr nicht nur „irgendwie“ leuchtet, sondern zuverlässig und sauber läuft.
Projektüberblick: Was soll die Uhr können?
Bevor Sie Bauteile bestellen, definieren Sie die Zielanforderungen. Eine klare Funktionsliste verhindert späteres „Nachverdrahten“ und spart Debugging-Zeit.
- Anzeige: 4-stellige 7-Segment-Anzeige (HH:MM) oder 6-stellig (HH:MM:SS)
- Bedienung: mindestens 2 Taster (Stunden/Minuten), optional Mode/Set/Alarm
- Zeithaltung: intern über Timer (einfach) oder extern über RTC (präziser, batteriegepuffert)
- Helligkeit: fest oder per PWM/Tag-Nacht-Modus (optional)
- Versorgung: 5 V oder 3,3 V, je nach Anzeige und RTC-Modul
Welche PIC-Familie eignet sich?
Für eine 7-Segment-Uhr genügt bereits ein günstiger 8-Bit-PIC. Entscheidend sind Anzahl der I/O-Pins, Timer, Interrupts und ggf. I²C (für eine RTC). Für Anfänger ist ein PIC mit guter Tool-Unterstützung und ausreichend Flash/RAM sinnvoll.
- PIC16F-Serie (8-Bit): sehr verbreitet, gute Eignung für Anzeige + Taster + I²C (bei passenden Modellen)
- PIC18F-Serie (8-Bit): mehr Performance/Features, komfortabler bei zusätzlichen Funktionen
- PIC24/PIC32: für dieses Projekt meist „overkill“, aber interessant bei RTOS/erweiterten UI-Features
Für den Einstieg reicht oft ein PIC16 mit MSSP/I²C und ausreichend Pins. Als Entwicklungsumgebung sind MPLAB X und die jeweiligen XC-Compiler üblich: MPLAB X IDE und XC-Compiler (XC8/XC16/XC32).
7-Segment-Anzeige verstehen: Common Anode vs. Common Cathode
7-Segment-Anzeigen bestehen aus 7 LED-Segmenten (a–g) plus optionalem Dezimalpunkt (dp). Es gibt zwei Grundtypen:
- Gemeinsame Kathode (Common Cathode): gemeinsame Leitung an GND, Segmente leuchten bei High an Segmentpins
- Gemeinsame Anode (Common Anode): gemeinsame Leitung an VCC, Segmente leuchten bei Low an Segmentpins
Wichtig ist das Datenblatt Ihrer Anzeige, weil sich die Treiberlogik (High-Side/Low-Side) danach richtet. Für Multiplexing ist beides möglich; häufig ist die Wahl durch verfügbare Module oder Treiber-ICs vorgegeben.
Direktansteuerung oder Treiber-IC?
Sie können eine 7-Segment-Uhr auf zwei Arten bauen: klassisch mit PIC-Pins + Transistoren oder mit einem Treiber-IC. Beide Wege sind legitim – die Wahl hängt davon ab, ob Sie mehr „Elektronik lernen“ oder schneller zum Ergebnis kommen möchten.
Variante A: Multiplexing mit PIC + Transistoren
Bei einer 4-stelligen Anzeige teilen sich alle Ziffern die Segmentleitungen a–g (und dp). Die Ziffern werden nacheinander aktiviert (Ziffer1, Ziffer2, Ziffer3, Ziffer4), während der PIC jeweils das passende Segmentmuster ausgibt. Durch die hohe Umschaltfrequenz wirkt das für das Auge stabil.
- Vorteile: wenige Bauteile, günstige Stückliste, sehr lehrreich
- Nachteile: Sie brauchen Treiberstufen, weil PIC-Pins nicht beliebig viel Strom liefern sollen
Variante B: Treiber-IC (z. B. MAX7219 oder TM1637-Modul)
Treiber-ICs übernehmen Multiplexing, Stromregelung und oft auch Helligkeitssteuerung. Der PIC sendet nur Daten (SPI/ähnlich), die Anzeige arbeitet stabil und gleichmäßig.
- Vorteile: sehr schnell aufgebaut, geringe Firmwarekomplexität
- Nachteile: weniger Lerneffekt bei Multiplexing/Timerlogik, zusätzliche Kosten/Abhängigkeit vom Modul
Wenn Sie das Projekt als Lernprojekt betrachten, ist Variante A besonders wertvoll. Wenn Sie schnell eine funktionierende Uhr möchten, ist Variante B praktisch.
Zeithaltung: Interner Timer oder RTC-Modul?
Für eine Uhr ist die Genauigkeit entscheidend. Ein interner PIC-Timer kann Sekunden zählen, aber die Genauigkeit hängt stark von der Taktquelle (intern/extern) und Temperatur ab. Eine RTC ist in der Regel präziser und batteriepuffert.
Interne Zeithaltung über Timer-Interrupt
Sie konfigurieren einen Timer so, dass er periodisch (z. B. alle 1 ms) einen Interrupt auslöst. Aus den „Ticks“ bauen Sie eine Sekundenbasis (1000 Ticks = 1 s). Das ist gut, um Timer/Interrupts zu lernen, aber nicht die beste Wahl für eine „richtig gehende“ Uhr.
RTC-Modul (z. B. DS3231) über I²C
Eine RTC wie der DS3231 ist temperaturkompensiert und typischerweise deutlich genauer. Außerdem bleibt die Uhrzeit bei Stromausfall durch eine Knopfzelle erhalten. Als Startpunkt eignet sich das DS3231-Datenblatt: DS3231 Datenblatt.
- Vorteile: hohe Genauigkeit, Zeit bleibt gespeichert, Firmware einfacher bei langfristiger Stabilität
- Nachteile: I²C-Kommunikation nötig, zusätzliches Modul/Chip
Hardwareaufbau: Minimal-Schaltung für eine 4-stellige Uhr
Ein praxistauglicher Aufbau für Multiplexing (4-stellig) besteht aus:
- PIC-Mikrocontroller (z. B. PIC16/PIC18 mit ausreichenden Pins)
- 4-stellige 7-Segment-Anzeige (CA oder CC)
- Vorwiderstände für Segmente (typisch 8 Stück für a–g + dp)
- 4 Transistoren für die Ziffernaktivierung (je nach Typ NPN/PNP oder MOSFET)
- 2–3 Taster + Pull-up/Pull-down (intern oder extern)
- 5-V- oder 3,3-V-Versorgung (Regler, wenn nötig)
- Optional: RTC-Modul DS3231 + I²C-Pull-ups
Ein wichtiger Punkt: Viele 4-stellige Anzeigen ziehen im Multiplexbetrieb pro aktivierter Ziffer relativ hohe Ströme (weil Sie nur 1/4 der Zeit leuchtet). Das ist genau der Grund, warum Sie Treiberstufen und saubere Strombegrenzung brauchen.
Vorwiderstände berechnen: Damit die Segmente nicht sterben
LED-Segmente benötigen Vorwiderstände. Die Grundformel für den Widerstand
Dabei ist
Multiplex-Duty-Cycle berücksichtigen
Bei 4 Ziffern ist der Tastgrad pro Ziffer idealisiert etwa 1/4. Der Zusammenhang:
Mit
Treiberstufen: Warum PIC-Pins nicht „alles“ treiben sollten
PIC-I/O-Pins sind nicht dafür gedacht, mehrere Segmente mit hohen Spitzenströmen direkt zu treiben. Nutzen Sie Transistoren oder MOSFETs für die Ziffernleitungen (Digit Enable) und optional auch für die Segmentleitungen, wenn Ihre Anzeige stromhungrig ist.
- Ziffern aktivieren: je Ziffer ein Transistor (bei Common Cathode oft NPN low-side, bei Common Anode oft PNP/P-MOS high-side)
- Segmente schalten: meist direkt über PIC + Vorwiderstände möglich, solange der Strom im Rahmen bleibt
- Saubere Masseführung: Multiplexing erzeugt pulsierende Ströme; Entkopplung (100 nF nahe am PIC) ist Pflicht
Firmware-Konzept: Anzeige-Refresh und Zeitlogik sauber trennen
Eine stabile Uhr-Firmware trennt zwei Kernbereiche: (1) Anzeige-Refresh mit fester Frequenz und (2) Zeitlogik/Bedienung. Das verhindert Flackern und macht das Projekt leichter erweiterbar.
Anzeige-Refresh per Timer-Interrupt
Setzen Sie einen Timer so, dass er z. B. alle 1 ms oder 2 ms auslöst. In dieser ISR schalten Sie zur nächsten Ziffer weiter und geben das Segmentmuster aus. Damit erreichen Sie bei 4 Ziffern etwa 125–250 Hz pro Ziffer (je nach Tick), was für flimmerfreie Anzeige in der Regel ausreichend ist.
- ISR kurz halten: nur Ziffer umschalten, Segmentbyte ausgeben, Index inkrementieren
- Keine I²C-Kommunikation in der ISR: Buszugriffe gehören in den Hauptloop oder in eine Task/State-Machine
- Segmentdaten vorberechnen: Ein Display-Buffer (Array) enthält bereits die Muster für jede Ziffer
Zeitlogik im Hauptprogramm oder in einem „Sekunden-Tick“
Wenn Sie ohne RTC arbeiten, erzeugen Sie aus dem 1-ms-Tick einen Sekunden-Tick (Zähler bis 1000) und erhöhen dann Sekunden/Minuten/Stunden. Mit RTC lesen Sie zyklisch (z. B. 1× pro Sekunde) die Uhrzeit über I²C und aktualisieren den Display-Buffer.
Bedienung mit Tastern: Entprellung richtig machen
Taster prellen mechanisch: Beim Drücken entsteht für wenige Millisekunden ein Flattern. Ohne Entprellung bekommen Sie Mehrfachauslösungen. Eine robuste Methode ist die zeitbasierte Entprellung:
- Sampling: Tasterzustand alle 5–10 ms prüfen (z. B. per Software-Timer)
- Stabilitätsfenster: Zustand erst übernehmen, wenn er N-mal hintereinander gleich ist
- Edge-Erkennung: Ereignis nur bei Flanke (z. B. „gerade gedrückt“) auslösen
So erhalten Sie zuverlässige „Ein-Klick“-Ereignisse. Für Uhrstellen ist zusätzlich eine Wiederholfunktion sinnvoll (Taste halten = schneller verstellen), aber das ist eine optionale Erweiterung.
RTC per I²C anbinden: Praktische Hinweise
Wenn Sie eine RTC nutzen, achten Sie auf korrekte I²C-Pull-ups. Viele DS3231-Module bringen Pull-ups bereits mit; andernfalls benötigen Sie sie an SDA/SCL. Lesen Sie die Uhrzeit als BCD-Werte und wandeln Sie in Dezimal um, bevor Sie die Ziffern in den Display-Buffer schreiben. Eine gute Grundregel: I²C-Zugriffe in einer State-Machine abarbeiten, damit Sie keine langen Blockierungen erzeugen, die das Anzeige-Refresh beeinträchtigen.
Segmentcodierung: Ziffern 0–9 als Lookup-Tabelle
Für 7-Segment ist eine Lookup-Tabelle der einfachste Weg. Sie definieren für jede Ziffer (0–9) ein Bitmuster für a–g (und dp). Je nach Anzeige (CA/CC) müssen Sie das Muster ggf. invertieren. Halten Sie die Tabelle als const im Flash, und füllen Sie daraus Ihren Display-Buffer.
- Buffer-Ansatz: display[4] enthält Segmentmuster für jede Stelle
- Doppelpunkte: viele 4-stellige Module haben einen separaten Doppelpunkt; alternativ nutzen Sie dp
- Leading Zeros: optional ausblenden (z. B. „ 9:05“ statt „09:05“)
Helligkeit und Flimmerfreiheit: PWM und Refresh-Frequenz
Wenn die Anzeige zu hell ist oder nachts stört, können Sie Helligkeit über PWM regeln. Zwei praxistaugliche Wege:
- Global PWM über Digit Enable: Sie modulieren die Aktivierungszeit pro Ziffer (zusätzlicher Duty-Cycle)
- Software-Dimming über Skip-Zyklen: Bei geringer Helligkeit lassen Sie einzelne Refresh-Zyklen aus
Wichtig ist, dass die effektive Frequenz pro Ziffer hoch genug bleibt. Zu starkes Dimmen bei niedriger Refresh-Frequenz führt zu sichtbarem Flackern. Als Faustregel: lieber die Refresh-Frequenz insgesamt erhöhen und dann dimmen.
Stromversorgung und Entkopplung: Kleine Details, großer Effekt
Multiplexing erzeugt Stromspitzen. Eine saubere Versorgung verhindert Reset-Probleme und Anzeige-Artefakte:
- 100 nF am PIC: so nah wie möglich an VDD/VSS
- Zusätzliche Bulk-Kapazität: z. B. 10–47 µF in der Nähe der Anzeige
- Gemeinsame Masseführung: kurze, dicke Rückstrompfade, keine „dünnen“ Massebrücken
- Brown-out Reset aktivieren: damit der PIC bei Unterspannung sauber neu startet
Typische Fehlerbilder und schnelle Diagnose
- Anzeige flackert: Refresh zu langsam, ISR zu lang, Blockierungen im Hauptloop (z. B. I²C in ISR)
- Falsche Segmente leuchten: Segmentbelegung vertauscht, Invertierung CA/CC nicht berücksichtigt
- Uhr geht falsch: Taktquelle ungenau, Timer falsch gerechnet, RTC falsch ausgelesen (BCD-Umwandlung)
- Resets bei Helligkeit: Versorgungseinbruch durch Stromspitzen, fehlende Entkopplung, Treiber falsch dimensioniert
- Taster löst mehrfach aus: Entprellung fehlt oder Sampling zu schnell ohne Stabilitätsfenster
Erweiterungen: Von der einfachen Uhr zum „fertigen“ Produkt
Wenn die Basis funktioniert, bieten sich Erweiterungen an, die den Lerneffekt stark erhöhen:
- Alarmfunktion: zusätzliche Zustände, akustischer Buzzer, Snooze-Logik
- 12/24-Stunden-Modus: Anzeigeformat umschalten, AM/PM-Indikator
- Helligkeitssensor: LDR über ADC einlesen, Helligkeit automatisch regeln
- Datenspeicherung: Einstellungen in EEPROM sichern (Alarmzeit, Helligkeit)
- Gehäuse und EMV: saubere Kabelführung, Schutz gegen ESD an Tastern
Nützliche Referenzen für Datenblätter und Tooling
- MPLAB X IDE (Microchip)
- XC-Compiler (XC8/XC16/XC32)
- DS3231 Datenblatt (RTC)
- PIC-Mikrocontroller Übersicht (Microchip)
Praxis-Checkliste: Material und Aufbau in einem Durchgang prüfen
- Anzeige-Typ (Common Anode/Cathode) ist bekannt und im Code berücksichtigt
- Vorwiderstände korrekt dimensioniert und pro Segment vorhanden
- Ziffern-Treiber (Transistor/MOSFET) passend zur Anzeige gewählt
- Entkopplung (100 nF + Bulk) nahe PIC und Anzeige installiert
- Refresh-Timer läuft stabil, ISR ist kurz und blockiert nicht
- Taster sind entprellt, Flankenerkennung implementiert
- Zeitbasis ist plausibel (Timer gerechnet oder RTC korrekt ausgelesen)
- Projekt ist so strukturiert, dass Erweiterungen (Alarm, Dimming) sauber integrierbar bleiben
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.

