Forum: Projekte & Code Webserver Ethernet ENC28j60 ATmega1284p TCP ARP Assembler


von Bernhard S. (bernhard)



Lesenswert?

Ein kleines Beispiel eines HTML Webservers und ein großes Dankeschön an 
Michael, er ermöglichte mir erst dieses Projekt.

Hardware: AVR-NET-IO BOARD, diverse LEDs, bei Bedarf ein LCD und ein 
BEEP.

Bei Programstart sendet der Host ein ARP-Request an den Router und 
meldet sich somit an.

Auf ein PING (ICMP) und ein ARP-Request antwortet der Webserver.

Im Sekundentakt wird die Ethernet-Verbindung zwischen dem Webserver und 
dem Router geprüft, wenn ok, dann erfreut uns die grüne LED.

Permanent überprüft der µC einige Registerinhalte des ENC28j60, ein 
"heimlicher" Absturz des ENC wird somit erkannt.

Bitte bei Bedarf die IP-Adressen des Routers und des Webservers 
anpassen, ggf. auch die MAC.

In einem Browser wird die HTML-Seite aufgerufen.

U.a. wird der ARP-Cache aufgelistet und eine Übersicht aller Vorhandenen 
MAC und IP-Adressen im Netzwerk. der komlette Scan dauert allerdings 
einige Minuten, denn im Sekundentakt wird nach einer neuen IP-Adresse 
gesucht.

LED gelb1 leuchtet bei RX/TX ENCj60, gelb2 wenn ein TCP(SYN) empfangen 
wurde.

Eine weitere Liste zeigt die Historie der Aufrufe und die IP-Adressen 
an.

TWI/I2C oder 1Wire kann problemlos mit eingebunden werden.

Der Assembler-Programmcode ist nicht sehr optimal, es besteht noch 
Verbesserungsbedarf.

Für Hinweise bin ich sehr dankbar.

Bernhard

: Bearbeitet durch User
von Herbert (Gast)


Lesenswert?

Bernhard S. schrieb:
> Der Assembler-Programmcode ist nicht sehr optimal, es besteht noch
> Verbesserungsbedarf.

Respekt, dass du dir sowas in Assembler antust.

von Bernhard S. (bernhard)


Lesenswert?

>... dass du dir sowas in Assembler antust.

War auch eine schwere Geburt, zumal ich mich erst mit der 
Ethernet-Materie anfreunden musste und den Problemen mit dem ENC.


Nachtrag:

Bei diversen Fehlern z.B. WDR-Zeitüberschreitungen wird die Modulnummer 
und die Registerinhalte angezeigt, um die Ursachenforschung zu 
erleichtern.

Ein USART/RS232 Debugger kann aktiviert werden.

Im späteren (fehlerfreien) Betrieb würde ich auf die Error-Anzeige 
verzichten, stattdessen sollte der Webserver einen Software-Reset des µC 
durchführen.

Und einen Harrware-Reset des ENC über den Reset-PIN.
U.U. ist der ENC über SPI nicht mehr ansprechbar.

: Bearbeitet durch User
von Steve (Gast)


Lesenswert?

Interessant, danke.

Ich meine mich zu erinnern, dass mein ENC Interrupts meldete, die ich 
gar nicht enabled hatte (Senden erfolgreich o. ä.). War Dir solches 
Verhalten auch begegnet?

von Michael U. (amiga)


Lesenswert?

Hallo,

Bernhard S. schrieb:
> Ein kleines Beispiel eines HTML Webservers und ein großes Dankeschön an
> Michael, er ermöglichte mir erst dieses Projekt.
>
> Hardware: AVR-NET-IO BOARD, diverse LEDs, bei Bedarf ein LCD und ein
> BEEP.

Du machst wirklich vor nichts halt, Gratuliere!!!

Ich habe lange nichts mehr wirklich in ASM gemacht, wegen des ESP8266 
mehr C/C++ geübt/gelernt/... wie auch immer...

Gruß aus Berlin
Michael

von Bernhard S. (bernhard)


Angehängte Dateien:

Lesenswert?

Eine 1wire - Anbindung ist relativ unproblematisch. PIN CHANGE (
PCMSK0 PCICR) ermöglicht eine nahezu freie PIN-Wahl.

Die 1wire-Routine hat den Nachteil bzw. Vorteil, wenn der Bus zu lange 
Low ist, dann beißt WDR zu und das System startet neu.

Mich beschäftigt schon eine längere Zeit die Frage, wie kann ich die IP 
meines Routers ermitteln?

Ping, Tracert bzw. ICMP brachte keine Lösung.

Momentan würde ich per TCP diese einfache Webseite einlesen

http://eces.t-online.de/hotline/ip/

Und anschließend die IP-Adresse herausfiltern, gibt es bessere und 
einfache Möglichkeiten?

Die Fuses des ATmega1284p stelle ich Euch noch mit zur Verfügung,
JTAG-Interface war bei mir noch aktiviert und PORTC ließ sich nicht auf 
Ausgang schalten.... lange gesucht und µC vergeblich gewechselt.



>Ich meine mich zu erinnern, dass mein ENC Interrupts meldete, die ich
>gar nicht enabled hatte (Senden erfolgreich o. ä.). War Dir solches
>Verhalten auch begegnet?

Ich habe absichtlich die Interrupt-Methode verzichtet, permanent wird 
EPKTCNT abgefragt.


@Michael

>Du machst wirklich vor nichts halt, Gratuliere!!!

Danke, aber Du bist nicht ganz unschuldig, Deine Vorlage half mir in 
schwierigen Situationen

Beitrag "ENC28J60 Initialisierung ATmega1284P AVR Assembler Beispiele"

>Ich habe lange nichts mehr wirklich in ASM gemacht, wegen des ESP8266
>mehr C/C++ geübt/gelernt/... wie auch immer...

Mir gefällt der ESP8266, wo kann man ihn günstig beziehen?


Bernhard

von Tr (Gast)


Lesenswert?

Bernhard S. schrieb:
> wie kann ich die IP meines Routers ermitteln?

Meinst du die externe am WAN Port?
Da bist du mit der externen Seite schon auf dem richtigen Weg, im 
internen Netz kommst du da nicht dran. Außer dein Router hat eine 
Statusseite und du liest sie von dort aus.
Statt whatismyip.com usw. könntest du auch mal ins STUN Protokoll 
schauen, das verwenden VoIP Geräte um die NAT des Routers zu erkennen 
bzw. überwinden. IMHO steht da deine externe IP mit in der Antwort.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.