Ethernet läuft ..... nun geht es mit der eigentlichen Steuerung weiter
Hallo zusammen,
nachdem ich heute meine Arbeiten / Einarbeitung in die Ethernetprogrammierung mit dem ENC28J60 unter Zuhilfenahme der bereits vorgestellten Links, und Tutorials abschließe möchte ich Euch hier ein kurzer Statusreport mit dem GANZEN Spaghetticode
abgeben.
Alsooooo.....
Zur Geschichte mit dem Ethernet und der "Von-Hand-Programmierung" habe ich ka schon in Thread
#31 ein wenig was geschrieben. Aktuell habe ich folgenden Stand erreicht:
- Der ENC28J60 lässt sich initialisieren und antwortet schön brav.
- Es können Ethernetpakete / Ethernetdaten versendet und empfangen sowie entsprechend verarbeitet werden.
- Der Atmega reagiert auf einen ARP mit ARP reply und kann auch einen ARP request absenden.
- PING (ICMP Pakettype) funktioniert mit einer Responsetime von 2ms zuverlässig.
- Die Datenübertragung mit UDP habe ich mit einigen Tools (in Ben's Tutorial beschrieben) ausprobiert und es funktioniert.
- Die TCP Datenübertragung ist sowohl mit HTTP und kleiner Mini-Webpage als auch mit einer einfachen Telnet-Implementierung ausprobiert.
- Mittels UDP-Timeprotokoll-Implementierung organisiert sich der kleine Käfer die aktuelle Zeit.
- Mit einer einfache DNS-Funktion wollte ich mal ausprobieren wie DNS funktioniert und es tut wirklich ....
- Mittels DHCP-Funktionen kann der ATmega sich auch neben einer statischen Konfiguration vom Router eine dynamische IP-Adresse organisieren.
- Eine Funktionen zum Registerdump geht die Innenseite des ENC28J60 nach aussen.
Zugegeben, eine ganze Menge Zeug und eine ganze Menge Code. Zum Code muss ich aber prinzipiell etwas sagen .... in diesem Fall spreche ich selber von Spaghetti-Code denn....
Der Code zur Inbetriebnahme des ENC28J60 und zum Ausprobieren der einzenen Funktionen ist über viele Woche hinweg generisch gewachsen.
Ich habe versucht Schritt für Schritt das Tutorial von Ben durchzuarbeiten und alles in einem großen monolitischen Block "aufzubewaren". Daher sind manche Funktionen V1, V2 usw. vorhanden oder es gibt Funktionen mit OLD. Angaben wie V1 und V2 bauen der Reihe nach aufeinander auf und vollziehen die Schritte im Tutorial. Bei OLD handelt es sich um ursprüngliche Versionen die später im Tutorial durch eine andere oder bessere Implementierung ersetzt werden. Ich selbst wollte die Teile aber alle beisammen halten um einen Überblick über den Fortschritt und die Annährung an eine Problemlösung zu haben.
Die Steuerung welche Funktion nun letztlich verwendet wird und ob eine Funktion überhaupt verwendet wird habe ich durch entsprechende Compilerschalter #if/#endif gekapselt und gesteuert.
Auch die Ausgaben von Traces werden über Compilerschalter gesteuert.
Im Code finden sich an sehr vielen Stellen Notizen von mir zu Grundlegenden Protokollen oder auch Dumps aus dem Empfangs- und Sendespeicher wie auch kommentierte Ausgaben von WireShark die hoffentlich zum Verständnis beitragen. Mir haben sie jedenfalls geholfen.
Ich habe den ganzen originalen Code Schritt für Schritt übernommen und abgeändert so dass er funktioniert bzw. komplett kommentiert aber auch in einem Code vervollständig. So haben zum Beispiel Restimplementierungen für DHCP gefehlt.
An einigen Stellen war ich mit der originalen Implementierung im Tutorial nicht einverstanden und habe den Code entsprechen angepasst/geändert oder überflüssiges Zeug entfernt. Auch das ist kommentiert bzw. mit ##MaFu## gekennzeichnet.
Weiter habe ich mich wie schon beschrieben durch das komplette Datenblatt des ENC28J60 gepflügt und auch das ErrataSheet zum Chip aufgearbeitet. Die notwendigen Änderungen sind im Code eingebaut und gekennzeichnet bzw. beschrieben.
Ich glaube das wars ....
Den Sourcecode inkl. Include-Datei findet Ihr im ZIP-Anhang. Ich erhebe keinen Anspruch auf das Copyright zu diesem Code da ich mich wie schon gesagt Ben's Tutorial und auch Codeteilen von Paul aus dem MCS-Forum bedient habe.
Ein Bildle meiner Mini-Webpage findet Ihr auch hier:
Sooo....
Wie geht es nun bei mir weiter? Ganz einfach .... Ich wende mich nun meiner Zielplattform zu und werde in den nächsten Tagen/Wochen die Steuerung für den Nistkasten programmieren. Zentraler Bestandteil wird hier sicher auch das Ethernet spielen denn darüber will ich das ganze ja steuern.
Die Zentralsteuerung soll mittels Ethernet ...
- via TCP-Protokoll mit meinem PC kommunizieren so dass ich darüber Einstellung und Bedienung machen kann.
- via NTP soll die Steuerung sich die Zeit organisieren
- die Steuerung soll sowohl feste IP als auch DHCP unterstützen
- ich will PINGen können
- ARP soll auch funktionieren
Der Rest ist Kleinkram wie Einstellungen usw. im EEPROM des ATmegas ablegen und die tatsachliche Steuerung entweder im Automatik-Betrieb oder Manuell durchführen.
Damit starte ich jetzt mit den Implementierung für BirdView. Und los gehts.....
Viele Grüße,
Markus
Anhänge:
Anhang anzeigen AVR_goes_Internet.zip