Forum: Projekte & Code Smart WebServer (AVR-NET-IO)


von Trax X. (trax)


Angehängte Dateien:

Lesenswert?

Hi,
Mein Smart WebServer für das AVR-NET-IO Board ist endlich fertig.
Als Grundlage habe ich den Code von dem uWebSrv genommen.

Der neue Server kann jetzt DHCP, die Netzwerk Einstellungen kannman über 
die serielle Schnittstelle konfigurieren.
Das web Interface ist komplett überarbeitet worden, man kann komplexe 
regeln erstellen um die Ausgänge zu steuern, es gibt ein Support für ein 
LCD man kann nicht nur statischen text sondern auch die port Zustände 
ausgeben, mit 2 Buttons zwischen den einzelnen LCD Inhalten (seiten) 
umschalten und auch pro Seite einen der Output Ports umschalten, ...

PS: Wobei ich etwas Hilfe bräuchte wäre das ganze zu optimieren, 
momentan passt es nur auf einen Atmega 644 und nicht auf den 
standardmäßig verbauten Atmega 32, wen sich das wer anschauen würde der 
das kann, wäre ich echt dankbar ;)

Viel Spass damit
Trax

von Harry S. (littlegonzo)


Lesenswert?

Hi,
leider fehlt in den Paket 'Hardware/Gpio.c' es läßt sich erstmal nicht 
kompilieren.....

Gruß Harry

von Trax X. (trax)


Lesenswert?

Also bei mir gehts ohne, wird auch nirgends benutzt, könnte daran liegen 
das ich eclypse benutze ich denke das macht immer ein neues eigenes 
makefile.

von Trax X. (trax)


Lesenswert?

Schon weit über 50 downloads, wie wäre es mit etwas feadback zu den 
funktionen usw?

von Trax X. (trax)


Angehängte Dateien:

Lesenswert?

Update:
Telnet Server eingebaut.
RAM bedarf etwas reduziert.
Seiten aufbau stark beschleunigt.
das aktuellste makefile von eclypse beigelegt und das aktuellste fertige 
*.hex File

Bitte um viel Feedback ;)

von Uwe N. (ulegan)


Lesenswert?

Wie hast du die Fuses beim mega644 gesetzt? Ich habe deine erste Version 
ausprobiert, musste mir aber für WinAVR ein Makefile basteln.
Ergebnis: serielle Schnittstelle bleibt stumm, der Router hat aber eine 
IP-Adresse zugewiesen. Anpingen geht nicht, ein Webserver meldet sich 
auch nicht. Ein LCD hab ich nicht angeschlossen, auch keine Tasten. Wo 
müssen die Tasten eigentlich dran? Da du die R/W-Leitung vom LCD nicht 
verwendest, denke ich nicht, dass das fehlende LCD ein Problem ist.
Na dann flashe ich mal die neue Version...

von Trax X. (trax)


Lesenswert?

EESAVE = 0
BOOTSZ1=0
BOOTSZ0=0
BOOTRST=0
SPIEN=0
der rest =1 (unprogrammed)
mir fällt grade ein das ich da noch diesen lan bootloader benutze, fals 
es bei dir nicht geht mach aud der main.c den watchdog raus, der müste 
eigentlich vom bootloader ausgemacht werden und dan das teil für par sec 
vom strom damit der aus geht.

PS: Die tasten gehen an die B0 und b3 pins des ext steckers, das wird im 
web gui angezeigt und kan auch umbelegt werden, du kanst den LCD support 
auch aus machen und den pins des ext steckers beliebige andere 
funktionen zuweisen
Input/output/PWM(letzteres nur 4 der pins )

von Trax X. (trax)


Lesenswert?

feadback please ;)

von Simon K. (simon) Benutzerseite


Lesenswert?

Ich freue mich, dass meine Software Anklang auch in anderen Projekten 
findet. Bald bekommt der uWebSrv SD Karten u. FAT Unterstützung.
Ich überlege für den uWebSrv (und ggf. Ableger davon) ein 
halböffentliches SVN anzulegen.

In Sachen Feedback kann ich dir aber nicht helfen, ich besitze kein AVR 
Webserver von Pollin.

von Gast (Gast)


Lesenswert?

Hi,

vorweg schonmal große Anerkennung für Deine Arbeit und die Portierung 
des MicroWebServers auf das Pollin NetIO Board!

Ich habe den SmartWebServer auf mein NetIO Board geflashed. Die grüne 
(Link? LED) leuchtet und die gelbe (Traffic? LED) blinkt. Mit einem 
Terminalprogramm kann ich über die serielle Schnittstele mit dem Board 
reden, aber die Befehle zum konfigurieren durchschaue ich noch nicht so 
ganz. Ich bekomme zwar mit "Setup" eine Ausgabe, das der DHCP "On" ist 
aber die IP Adresse, Netzmaske und das Gateway sind nicht richtig. 
(7.255.255.255 ; 255.255.255.255 ; 255.255.255.255) Auch ein "DHCP 
Renew" brachte keine Veränderung. Eine kurze Übersicht über die Befehle 
(Was wird wie und mit welchen Parametern konfiguriert) wäre toll. Ich 
habe auch schon die Shell.c durchgesehen, werde aber nicht ganz schlau 
daraus und ob ich alles richtig mache...
An dem Switch, an dem das NetIO hängt sind noch andere Rechner, die die 
IP-Adresse korrekt zugewiesen bekommen.

Viele Grüße

von Zdenek R. (zdenek)


Lesenswert?

Hallo,
sieht das sehr schoen aus, jetzt potriere ich dieses Projekt nach main 
Bastelboard mit MEGA128. Muss ich nur makefile ueberschreiben (fuer 
WinAVR).
uWebServer lauft jetzt mit MEGA16, aber 98% Speicher... Spaeter schreibe 
ich Erfahrungen.

PS: Entschulsige ob ich etwas schlecht deutsch schreibe, ich bin 
Aulslaender (Tschechien)

von Trax X. (trax)


Lesenswert?

@Gast
Der befehl Setup zeigt die die Voreinstellungen an, also die IP/NM/GW 
die da wäre wen DHCP aus wäre, ein fallback zu den wen das DHCP nicht 
geht muss noch rein, um sich die aktuellen Netzwerk Einstellungen 
anzeigen zu lassen gibt es den befehl "Config",
Für das Netzwerk gibts folgende commands
SetIP=a.b.c.d   setzt die IP
SetNM=a.b.c.d   setzt dte netwerk maske
SetGW=a.b.c.d   setzt das lokale gateway/router
DHCP=On
DHCP=Off
DHCP=Renew
das "=" zeichen kannman auch mit  " "(space) ersätzen,
beides ist gültig da ich die selbe funktion für fas parsen der Post 
parameter vom webserver benutze da sind es halt immer "="
Du kanst also über das shell alles was über das web gui geht, außer die 
die regeln auflisten zu lassen, also es ist etwas unübersichtlich das zu 
benutzen.

PS: die portierung auf das NetIO-Board hat wer anderer gemacht die 
portierten src habe ich hier: 
http://www.mikrocontroller.net/articles/AVR_Net-IO_Bausatz_von_Pollin 
gefunden, mein Beitrag ist nur das neue WebGui, und die telnet und dhcp 
Funktionalität die beiden letztern basieren aber auf sample gode des uIP 
stacks basiert.

@Simon K.
Ich habe ein kleines Problem und zwar wen ich die Netzwerk Sachen in der 
main schleife 10man/Sec ausführe, bekomme ich nen relativ langsamen 
seiten aufbau, bit 100mal/Sec gehts ganz flott aber es gibt viele 
retransmitts, (ein wert zwischen 10 und 100 würde das wohl beheben, aber 
unschön) weist Du vielleicht ob man den uIP stack irgendwie anweisen 
kann länger auf die acks zu warten ohne das man seine sende speed 
heruntersetzt?

LG
Trax

von Gast (Gast)


Lesenswert?

Hallo

@Trax
Vielen Dank für die Infos.
Mit einer manuell zugewiesenen IP-Adresse klappt es! DHCP geht noch 
immer nicht, jetzt bekomme ich immer 0.0.0.0  0.0.0.0  0.0.0.0 mit 
"Config" angezeigt. Vielleich noch ein Problem mit der MAC-Adresse und 
der Fritz-Box. Aber das werde ich mal ergründen, irgendwie wird das 
machbar sein.

Durch die Einstellungen und die Portfunktionen muss ich mich noch 
durcharbeiten, aber auf den ersten Blick solltest Du Control Panel mit 
einem "l" und einem "n" schreiben ;).

Viele Grüße

von Uwe N. (ulegan)


Lesenswert?

Ich habe die erste Version jetzt auch zum laufen gebracht. Hatte die 
Fuse CLKDIV8 gesetzt. DHCP schien mit gesetzter Fuse zu gehen, 
jedenfalls fand sich die MAC in der Liste der bekannten Geräte meiner 
Fritzbox. Jetzt geht es nicht, alles auf 255. Manuell konfigurieren 
geht. Irgendwie habe ich den Eindruck, dass die Platine die Fritzbox zum 
abstürzen bringt! Während ich experimentiert habe hat die Kiste immer 
wieder Neustarts gemacht. Nachdem ich das Board wieder abgeklemmt habe, 
läuft sie wieder ungestört...
Von der zweiten Version habe ich nur das mitgelieferte Hex-File 
geflasht, Konsole geht, allerdings kommt keine Hilfe mehr. DHCP geht 
nicht, und per Netzwerk war die Platine auch nach manueller 
Konfiguration nicht zu erreichen. Werde es mal selbst übersetzen.

von Simon K. (simon) Benutzerseite


Lesenswert?

Trax Xavier wrote:
> @Simon K.
> Ich habe ein kleines Problem und zwar wen ich die Netzwerk Sachen in der
> main schleife 10man/Sec ausführe, bekomme ich nen relativ langsamen
> seiten aufbau, bit 100mal/Sec gehts ganz flott aber es gibt viele
> retransmitts, (ein wert zwischen 10 und 100 würde das wohl beheben, aber
> unschön) weist Du vielleicht ob man den uIP stack irgendwie anweisen
> kann länger auf die acks zu warten ohne das man seine sende speed
> heruntersetzt?

Über welchen uIP Aufruf redest du? Der, der für die Retransmissions 
verantwortlich ist, oder der ganz normale, der eingehende Pakete 
bearbeitet?
Du hast wahrscheinlich von ersterem die Aufruffrequenz um 10 erhöht, das 
bedeutet, dass er 10 mal so schnell Retransmissions schickt, weil der 
Stack im Prinzip eine Retransmission schickt, wenn nach x Aufrufen der 
Retransmission Funktion kein ACK angekommen ist.
Das kann man in der uip_conf.h ändern, irgendwas mit "RETRANSMISSION" 
und "TCP" halt.

*Aber*: Die von dir beobachtete Geschwindigkeitssteigerung ist GENAU 
deswegen (wegen den Retransmissions). Der Delayed Ack Algorithmus vom 
Windows Stack wird bei zwei hintereinander hereinkommenden 
noch-nicht-bestätigten Paketen übergangen und es wird sofort ein ACK vom 
Windows Stack herausgeschickt.
Also würde das genau nichts bringen, leider.

von Trax X. (trax)


Lesenswert?

ich meine das hier
1
        int i = UIP_CONNS;
2
        while (i)
3
        {
4
          i--;
5
          uip_periodic(i);
6
          if (uip_len> 0)
7
          {
8
            uip_arp_out();
9
            Enc28j60CopyPacket(uip_buf, uip_len);
10
            Enc28j60Send();
11
          }
12
        }

von Simon K. (simon) Benutzerseite


Lesenswert?

Trax Xavier wrote:
> ich meine das hier
> ...

Ja genau. Die Stelle sorgt einzig und allein für Retransmissions, mehr 
nicht. Und die Geschwindigkeitssteigerung ist aus obigem Grund 
beobachtet worden.

von Trax X. (trax)


Lesenswert?

Schade, werde es dann bei den 10mal/sec belassen,
irgendwie anderst den speed erhöhen geht nicht, oder doch?

von Simon K. (simon) Benutzerseite


Lesenswert?

Es gibt noch ein Throughput Boost Hack von dem uip Autor. Ich werde mal 
sehen wie ich das in die nächste Version von uWebSrv reinbekomme.

von Trax X. (trax)


Angehängte Dateien:

Lesenswert?

Update, habe einpaar fehler behoben.

@Simon K.
Dieser hack benötigt die uip-split.c
aber was soll die funktion uip_split_output aufrufen?
zudem wird da die funktion tcpip_output benutzt die ich nirgens sonst 
bei uip finden konnte :/

von Simon K. (simon) Benutzerseite


Lesenswert?

Trax Xavier wrote:
> Update, habe einpaar fehler behoben.
>
> @Simon K.
> Dieser hack benötigt die uip-split.c
> aber was soll die funktion uip_split_output aufrufen?
> zudem wird da die funktion tcpip_output benutzt die ich nirgens sonst
> bei uip finden konnte :/

Hab letztens auch mal lose drübergeschaut und mich auch gewundert. Kann 
dir aber im Moment (noch) nicht helfen. Da werde ich mich 
schätzungsweise nächste oder übernächste Woche mit beschäftigen.

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.