Ethernet am PIC: Webserver-Projekte mit dem ENC28J60 Modul

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:

Rbyte = 10×106 8

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

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