Ethernet am PIC wirkt auf den ersten Blick wie ein großes Thema, ist aber mit dem bewährten ENC28J60 Modul erstaunlich gut beherrschbar – selbst in kleineren Mikrocontroller-Projekten. Der ENC28J60 ist ein eigenständiger Ethernet-Controller mit integriertem MAC und PHY, der über SPI angebunden wird und Ihnen damit eine 10BASE-T-Netzwerkschnittstelle bereitstellt, ohne dass der PIC selbst einen Ethernet-MAC besitzen muss. Genau das macht ihn so beliebt für kompakte Webserver-Projekte: Statusseiten im lokalen Netz, einfache Schaltfunktionen (Relais/IO), Messwertanzeige, Konfiguration per Browser oder kleine REST-ähnliche Endpunkte. Gleichzeitig gilt: Ein „Webserver auf dem Mikrocontroller“ ist keine Kopie eines PC-Servers. Speicher, RAM-Puffer, Paketverwaltung, ARP/IP/TCP/UDP und Timing müssen bewusst geplant werden. Wer einfach nur ein Codebeispiel übernimmt, scheitert häufig an Kleinigkeiten wie instabiler SPI-Taktung, falscher Verdrahtung am Magnetics/Jack, falsch gesetzten Buffer-Pointern oder daran, dass die Netzwerkparameter (MAC/IP/Subnet/Gateway) nicht konsistent sind. Dieser Artikel zeigt Ihnen den professionellen Einstieg: Hardware korrekt aufbauen, ENC28J60 sauber initialisieren, einen schlanken TCP/IP-Stack wählen und anschließend einen stabilen Webserver implementieren – so, dass das Projekt im Alltag zuverlässig läuft.
Was ist der ENC28J60 – und warum eignet er sich für PIC-Projekte?
Der ENC28J60 ist ein Ethernet-Controller, der über SPI mit dem Mikrocontroller kommuniziert. Er übernimmt dabei zentrale Teile der Ethernet-Schicht (MAC) und stellt zusätzlich den PHY für 10BASE-T bereit. Der PIC sendet und empfängt Ethernet-Frames nicht „direkt auf der Leitung“, sondern schreibt und liest Daten in den internen Puffer des ENC28J60 und steuert die Abläufe über Registerzugriffe. Die wichtigsten Vorteile in der Praxis:
- SPI-Anbindung: funktioniert mit vielen PIC-Familien, auch ohne integrierten Ethernet-MAC.
- Integrierter MAC+PHY: reduziert externe Bauteile im Vergleich zu Lösungen mit getrennten Chips.
- Gute Dokumentation: Datenblatt, Registerbeschreibung und zahlreiche Community-Projekte.
- Typisch für Embedded-Webserver: ausreichend für Konfiguration und Statusseiten im LAN.
Als technische Grundlage dient das offizielle Datenblatt von Microchip, das Register, Buffer-Management und die PHY/MAC-Funktionen im Detail beschreibt: ENC28J60 Datenblatt (PDF).
Architekturüberblick: Ethernet, IP und der Weg zur Webseite
Ein Webserver-Projekt mit ENC28J60 besteht aus mehreren Schichten, die sauber zusammenspielen müssen:
- Ethernet (Layer 2): Frames, MAC-Adressen, Broadcast, ARP.
- IP (Layer 3): Adressierung im Netzwerk (IPv4), Routing über Gateway.
- TCP/UDP (Layer 4): TCP für HTTP, UDP für z. B. einfache Discovery/Status.
- HTTP (Layer 7): Anfragen (GET/POST), Antworten, Header, Payload.
Der ENC28J60 liefert Ihnen die Ethernet-Seite. Den Rest (ARP, IP, TCP, HTTP) übernimmt ein TCP/IP-Stack in Ihrer Firmware. Genau hier fällt die wichtigste Entscheidung: „Wie groß darf mein Stack sein, und wie viel RAM kann ich mir leisten?“ Für sehr kleine Systeme setzen viele Entwickler auf schlanke Stacks wie uIP/Contiki-NG, während bei größeren Controllern lwIP üblich ist. Für Microchip-Umfelder ist zudem die (historisch) verbreitete Microchip TCP/IP Stack-Linie in den Libraries (MLA) relevant, auch wenn Sie bei Toolchain-Versionen auf Kompatibilität achten müssen.
Hardware richtig aufbauen: Versorgung, Magnetics und RJ45
Viele Probleme entstehen nicht im Code, sondern im Schaltplan. Ethernet ist elektrisch anspruchsvoller als UART oder I²C, weil es um differenzielle Signale, saubere Versorgung und EMV geht. Wenn Sie ein fertiges ENC28J60-Modul verwenden, sind Magnetics und RJ45 oft bereits an Bord. Trotzdem sollten Sie die typischen Punkte prüfen:
- 3,3-V-Versorgung: Der ENC28J60 arbeitet typischerweise mit 3,3 V; viele Module haben einen Regler, andere nicht.
- Entkopplung: Kondensatoren nah an VDD-Pins (und am Regler) sind Pflicht, sonst drohen sporadische Link-Abbrüche.
- RJ45 mit Magnetics: Ohne passende Übertrager/Filter ist 10BASE-T nicht stabil.
- LED-Pins: Viele Module führen Link/Activity-LEDs heraus – nützlich für Debugging.
- Reset sauber: Ein definierter Reset-Pin und stabile Power-On-Reset-Bedingungen sparen später Zeit.
Wenn Sie nicht nur ein Modul nutzen, sondern selbst ein Board entwerfen, orientieren Sie sich an Referenzdesigns und den Layout-Empfehlungen im Datenblatt. Für Details zur Pinbelegung, zum PHY und zu den Magnetics ist das ENC28J60-Datenblatt die maßgebliche Quelle: ENC28J60 Datenblatt (PDF).
SPI-Anbindung: Verdrahtung, Pegel und Takt
Der ENC28J60 wird über SPI angesprochen. In der Praxis heißt das: SCK, MOSI, MISO und ein Chip-Select (CS) vom PIC zum Modul, plus optional ein Interrupt-Pin (INT) und ein Reset-Pin. Besonders wichtig sind zwei Aspekte: Pegel und Timing.
- Pegelkompatibilität: Viele PICs laufen mit 5 V, der ENC28J60 mit 3,3 V. Prüfen Sie, ob Ihr Modul Level-Shifter besitzt; andernfalls sind Pegelwandler oder geeignete Serien-/Teilerlösungen nötig.
- SPI-Mode: CPOL/CPHA müssen zum ENC28J60 passen (im Zweifel Datenblatt/Beispiele prüfen).
- Chip-Select stabil halten: CS nicht „flattern“ lassen, insbesondere nicht durch konkurrierende SPI-Teilnehmer.
- Takt schrittweise erhöhen: Erst stabil initialisieren, dann die SPI-Frequenz optimieren.
Ein häufiger Anfängerfehler ist, zu früh „maximale SPI-Frequenz“ zu wählen und dann sporadische Registerfehler zu sehen. Stabilität geht vor Geschwindigkeit – insbesondere, weil Ethernet selbst Puffer und Timing sauber erfordert.
ENC28J60-Pufferlogik: Der Kern, den viele unterschätzen
Der ENC28J60 besitzt einen internen RAM, der als Ringpuffer für RX und als Speicher für TX genutzt wird. Ihre Firmware muss Puffergrenzen setzen, Receive-Pointer korrekt weiterdrehen und Pakete sauber freigeben. Genau hier entstehen typische „läuft 5 Minuten, dann hängt’s“-Fehler: Der RX-Puffer läuft voll, weil Pakete nicht korrekt freigegeben werden, oder Pointer werden falsch gesetzt, wodurch das nächste Paket an der falschen Stelle gelesen wird.
Pragmatische Regeln für stabile Bufferverwaltung
- Feste RX/TX-Bereiche definieren: Trennen Sie RX- und TX-Region im ENC-RAM, damit sie sich nicht überschneiden.
- Pakete vollständig lesen: Erst Länge/Status auswerten, dann Payload lesen, dann RX-Pointer korrekt auf das nächste Paket setzen.
- Paketfreigabe konsequent: Nach dem Verarbeiten muss das Paket im Ringpuffer freigegeben werden.
- Fehlerpfade mitdenken: Auch bei CRC-/Längenfehlern darf der Puffer nicht „stehen bleiben“.
Die Register und der Ablauf (inklusive Next-Packet-Pointer und RX-Status-Vector) sind im Datenblatt detailliert dokumentiert und sollten beim Implementieren immer daneben liegen: ENC28J60 Datenblatt (PDF).
Netzwerkgrundlagen für Webserver: MAC, IP, Subnet, Gateway, DNS
Ein Embedded-Webserver ist meist im lokalen Netz unterwegs. Damit er zuverlässig erreichbar ist, müssen die Parameter sauber gesetzt sein:
- MAC-Adresse: eindeutig im Netzwerk (keine zufälligen Kollisionen). Ideal: aus einer verwalteten Quelle oder konfigurierbar.
- IP-Adresse: statisch oder per DHCP.
- Subnetzmaske: entscheidet, ob ein Gerät „lokal“ ist oder über ein Gateway erreicht werden muss.
- Gateway: nötig, wenn Sie außerhalb des lokalen Netzes kommunizieren (z. B. NTP, externe APIs).
- DNS: nur nötig, wenn Sie Namen statt IPs auflösen müssen.
Für viele Hobby- und Inhouse-Projekte ist eine feste IP im privaten Bereich (z. B. 192.168.x.x) die einfachste Lösung. Wenn Sie das Gerät aber in wechselnden Netzen betreiben, wird DHCP sinnvoll. Bedenken Sie: DHCP vereinfacht die Installation, erhöht aber die Komplexität im Stack.
HTTP klein halten: Was ein Mikrocontroller-Webserver wirklich braucht
Für viele Steuer- und Monitoring-Aufgaben reicht ein sehr schlankes HTTP-Subset. Statt komplexer Webseiten liefern Embedded-Webserver oft einfache HTML-Seiten oder JSON-Antworten. Ziel ist nicht „schön“, sondern deterministisch, schnell und speicherschonend.
- Nur GET/POST unterstützen: reicht für Status und Schaltbefehle.
- Kurze Header: Content-Type, Content-Length, Connection – mehr oft nicht nötig.
- Keine Keep-Alive-Pflicht: Für Einfachheit kann jede Anfrage eine neue TCP-Verbindung nutzen.
- Templates vermeiden: Seite aus festen Strings + Messwerten zusammensetzen.
Warum „Keep-Alive“ oft nicht der erste Schritt ist
HTTP Keep-Alive kann Performance verbessern, hält aber TCP-Verbindungen länger offen und erfordert saubere Zustandsverwaltung. Für kleine PIC-Projekte ist es meist stabiler, pro Request eine Verbindung zu bedienen und sie danach zu schließen. Wenn alles zuverlässig läuft, können Sie später optimieren.
TCP/IP-Stack auswählen: uIP, lwIP oder Microchip-Libraries?
Der Stack bestimmt Aufwand und Ressourcen. Für PIC-Projekte mit ENC28J60 begegnen Ihnen häufig folgende Optionen:
- uIP (Contiki/Minimalstacks): sehr RAM-sparsam, gut für einfache Webserver, aber mit Limitierungen bei gleichzeitigen Verbindungen.
- lwIP: leistungsfähiger, aber typischerweise RAM-hungriger – eher für größere Controller geeignet.
- Microchip Libraries/Stacks: historisch weit verbreitet; interessant, wenn Sie in Microchip-Ökosystemen bleiben und passende Toolchain-Versionen nutzen.
Wenn Sie nach einer bewährten Microchip-nahen Basis suchen, ist die Library- und Tool-Übersicht ein guter Einstieg, um sich im Microchip-Umfeld zu orientieren: Microchip Tools & Resources. Für das konkrete ENC28J60-Protokollverhalten bleibt jedoch das Datenblatt die verbindliche Quelle.
Performance realistisch einordnen: 10BASE-T, SPI und der echte Durchsatz
Der ENC28J60 arbeitet als 10BASE-T-PHY, also 10 Mbit/s auf der Leitung. Das klingt viel, aber Ihr PIC muss Daten über SPI bewegen und zusätzlich den TCP/IP-Stack bedienen. Der theoretische Leitungslimitwert lässt sich grob in Bytes pro Sekunde umrechnen:
Das ergibt idealisiert etwa 1,25 MB/s – in der Praxis deutlich weniger, weil Ethernet-Frames Overhead haben, TCP Handshakes benötigt und Ihr Mikrocontroller nicht permanent „streamen“ kann. Für typische Webserver-Seiten (einige KB) ist das jedoch völlig ausreichend. Wichtig ist eher Latenz und Stabilität: Antwort in unter einer Sekunde, keine Timeouts, keine sporadischen Verbindungsabbrüche.
Stabilität im Alltag: Timeouts, Retries und „keine Pakete verlieren“
Netzwerkkommunikation ist fehlertolerant, aber nur, wenn Ihre Firmware nicht in blockierenden Warteschleifen hängen bleibt. Drei Bausteine machen Projekte deutlich robuster:
- Timeouts: Für ARP, TCP-Handshake und HTTP-Parsing müssen klare Zeitlimits existieren.
- State Machines statt Blockieren: TCP-Verbindungen als Zustände behandeln (SYN, ESTABLISHED, FIN), statt auf Ereignisse „zu warten“.
- Interrupt- oder Polling-Strategie bewusst wählen: ENC28J60 kann Interrupts signalisieren; alternativ regelmäßiges Polling mit festen Zykluszeiten.
Gerade bei kleineren PICs ist ein ereignisgesteuerter Ansatz mit schlanken Zustandsautomaten häufig die beste Kombination aus Robustheit und Ressourcenverbrauch.
Typische Fehlerbilder und schnelle Ursachenanalyse
- Link-LED bleibt aus: falscher RJ45/Magnetics-Pfad (bei Eigenlayout), Versorgung/Regler instabil, Reset hängt.
- Link da, aber kein Ping: falsche IP/Subnet/Gateway, ARP wird nicht beantwortet, MAC falsch oder kollidiert.
- Ping geht, Browser lädt nicht: TCP/HTTP-Teil im Stack fehlerhaft, MSS/Window zu groß, Parsing hängt.
- Funktioniert kurz, dann nicht mehr: RX-Puffer wird nicht freigegeben, Pointer falsch, Leaks im Stack, keine Timeouts.
- Nur bei niedrigem SPI stabil: Pegelwandler/Signalqualität unzureichend, CS-Timing problematisch, SPI-Mode falsch.
Sicherheit und Netzwerkhygiene: Was Sie bei Embedded-Webservern beachten sollten
Ein PIC-Webserver mit ENC28J60 ist typischerweise nicht für das offene Internet gedacht. Das ist wichtig, weil klassische Embedded-HTTP-Server meist weder TLS noch komplexe Authentifizierung „einfach so“ bieten. Für professionelle Projekte gilt:
- Nur im LAN betreiben: Kein direktes Port-Forwarding ins Internet.
- Auth minimal, aber bewusst: zumindest PIN/Token für Schaltfunktionen (auch im LAN sinnvoll).
- Konfiguration schützen: keine „Default-Passwörter“ dauerhaft lassen, wenn überhaupt Passwörter genutzt werden.
- Firmware-Updates planen: Sicherheitsfixes müssen einspielbar sein (z. B. Bootloader/ICSP).
Wenn Sie später „wirklich Internet“ brauchen (TLS, Zertifikate), ist oft ein leistungsfähigerer Controller oder ein vorgeschaltetes Gateway (z. B. Linux-basiert) die realistischere Lösung.
Praxis-Checkliste: Webserver-Projekte mit ENC28J60 effizient umsetzen
- Hardware sauber: 3,3 V stabil, gute Entkopplung, Reset definiert, RJ45/Magnetics korrekt (oder Modulqualität geprüft).
- SPI stabil: Pegel kompatibel, CS sauber, SPI-Mode korrekt, Takt erst nach Stabilität erhöhen.
- Pufferverwaltung korrekt: RX-Pointer, Paketfreigabe, Fehlerpfade, keine Speicherüberlappung.
- Netzwerkparameter konsistent: MAC eindeutig, IP/Subnet/Gateway logisch, DHCP nur wenn nötig.
- HTTP minimal halten: kurze Antworten, klare Pfade, keine unnötigen Features.
- Timeouts und Zustände: State Machine statt blockierender Loops, definierte Timeouts.
- Debug-Strategie: Link-LED, Ping, ARP-Check, dann HTTP – Schritt für Schritt.
Weiterführende Ressourcen und verlässliche Dokumentation
- Microchip ENC28J60: Datenblatt und Registerreferenz (PDF)
- Microchip Tools & Resources: Überblick zu IDEs, Libraries und Dokumentation
- MPLAB X IDE: Entwicklungsumgebung für PIC-Projekte
- MPLAB XC8: C-Compiler für 8-bit PIC (XC8)
- MPLAB Code Configurator (MCC): Peripherie- und Projektkonfiguration
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.

