Forum: Mikrocontroller und Digitale Elektronik kleiner Webserver mit LAN8720 oder ENC28J60?


von Matthias W. (matt007)


Lesenswert?

ich möchte etwas lernen zum Thema Webserver. Ein Arduino nano3 ist da. 
Eine SD-Karte hängt dran und arbeitet. Dazu soll ein einfaches 
Ethernet-Modul das billig ist und wenig Probleme macht. Im Internet 
findet sich preisgünstig LAN8720. Älter und verbreiteter ist wohl der 
ENC28J60.

Welches Modul ist für einen Anfänger zum Thema Webserver der etwas 
lernen will hier zu empfehlen?

von c-hater (Gast)


Lesenswert?

Matthias W. schrieb:
> ich möchte etwas lernen zum Thema Webserver. Ein Arduino nano3 ist da.
> Eine SD-Karte hängt dran und arbeitet. Dazu soll ein einfaches
> Ethernet-Modul das billig ist und wenig Probleme macht. Im Internet
> findet sich preisgünstig LAN8720. Älter und verbreiteter ist wohl der
> ENC28J60.
>
> Welches Modul ist für einen Anfänger zum Thema Webserver der etwas
> lernen will hier zu empfehlen?

Auf die Arduino-Softwareumgebung zu verzichten. Erst dann lernst du 
wirklich etwas. Der erklärte Ziel dieser Umgebung ist nämlich: Auch 
komplett Lernresistenten Erfolgserlebnisse zu ermöglichen...

von Matthias W. (matt007)


Lesenswert?

c-hater schrieb:
> Auf die Arduino-Softwareumgebung zu verzichten.

das habe ich ja längst getan. Ich arbeite ohne C++ mit der alten WinAVR. 
Übersetzt wird per "Eingabeaufforderungsfenster". Als "Debugger" mache 
ich USART-Ausgaben. Angesehen wird das über HTERM.

von Matthias W. (matt007)


Lesenswert?

C möchte ich allerdings schon nutzen !
In Assembler habe ich schon genug Erfahrung gesammelt. Das wäre hier 
nicht mein Ding das ohne Not viel weiter auszudehnen.

von Torsten S. (tse)


Lesenswert?

Der LAN8720 hat ein RMII-Interface. Das ist etwas für die ARM-Sparte.

Nimm den ENC so wie alle die den AVR als Webserver am Start haben.

Allerdings wirst Du bald merken, das man aufgrund der geringen Resourcen 
des Mega168 im Nano gerade für Netzwerksachen viele Kompromisse eingehen 
muss.

von Udo N. (weinbauer73)


Lesenswert?

Der v3 hat einen 328, die Vorgänger waren die 168.

von dunno.. (Gast)


Lesenswert?

Ich schätze, auch wenn man auf den selbstbau vom ethernet-stack, tcp ip 
etc verzichtet, lernt man schon genug. Nimm einen W5500, oder W550io..

Das wird schneller klappen..

von Johannes S. (Gast)


Lesenswert?

Der LAN8720 ist ein PHY, die untere Hardware Schicht. Der braucht einen 
uC mit Ethernet Controller.

von c-hater (Gast)


Lesenswert?

Matthias W. schrieb:

> Ich arbeite ohne C++ mit der alten WinAVR.
> Übersetzt wird per "Eingabeaufforderungsfenster". Als "Debugger" mache
> ich USART-Ausgaben. Angesehen wird das über HTERM.

Hmm...

Wieviel von dem beteiligten Code hast du selbst geschrieben?
Wieviel von dem Code verstehst du?
Hast du überhaupt schon irgendwelche Anstrengungen unternommen, 
irgendwas von dem ganzen geklauten Code zu verstehen?
Mir scheint, da hast du mehr als genug Lernpotential, ganz unabhängig 
von der konkreten NIC-Hardware...

von Noch einer (Gast)


Lesenswert?

Ist dir www.ethersex.de schon aufgefallen?

Dort findest du die benötigte Software für die AtMega in C geschrieben.

Und lass dich nicht verwirren. Das Rad nochmal neu erfinden ist 
absoluter Unfug. Mehr lernen kann man, wenn man bestehende gute Konzepte 
durcharbeitet und weiterentwickelt.

von c-hater (Gast)


Lesenswert?

Matthias W. schrieb:

> C möchte ich allerdings schon nutzen !
> In Assembler habe ich schon genug Erfahrung gesammelt. Das wäre hier
> nicht mein Ding das ohne Not viel weiter auszudehnen.

Du hast weder in C noch in Assembler auch nur den Hauch einer Andeutung 
einer Ahnung, was der ganze von dir einfach mal so includierte oder 
hinzugelinkte Code tut.

Genau daran musst du etwas ändern. Meinetwegen darfst du gern damit 
anfangen, das erst einmal auf C-Ebene zu erschließen. Ist immerhin schon 
sehr viel besser als ein reiner Arduino-Nasenpopler. Vorrangig geht es 
dabei auch sowieso eher um Protokolle, nicht um die Sprache...

In der letzten Konsequenz allerdings (wenn tatsächlich ein vollständiges 
Verständnis angestrebt wird) wirst du aber in vielen Fällen auch nicht 
darum herum kommen, auf Asm-Ebene herabzusteigen.

Das liegt schlicht in der Natur der Sache begründet. Je weiter du in dem 
ganzen C-Syntax-Geschwalle abtauchst, desto wahrscheinlicher triffst du 
einfach mal auf Inline-Asm. Weil C selber halt einfach nicht alles kann, 
was nötig ist. Asm hingegen schon...

von Torsten S. (tse)


Lesenswert?

Befremdlich finde ich was c-hater da von sich läßt.

Meiner Meinung nach reicht ASM für einfache Projekte. Wenn es aber an 
SD, FAT, Netzwerk geht, führt kein Weg an C vorbei.

von ./. (Gast)


Lesenswert?

> Meiner Meinung nach reicht ASM für einfache Projekte.

Selbst einfache Sachen lassen sich in C besser strukturieren
und auf die "eingebaute" Arithmetik wuerde ich auch nicht
verzichten wollen.

Aber: Wenn die Ressourchen wirklich knapp sind, nimmt Mann
halt eine Nummer groesser.

Das ist dann statt 30 Ct fuer den Controller, 45 Ct auszugeben.

Und: Zeitkritische Dinge wie ISRs schreibe auch gern in
Assembler, oder Berechnungen die Mann in C nicht so richtig
formulieren kann (Und selbst die LIBs dafuer auch nur mit
Assembler kochen :-)

von Matthias W. (matt007)


Lesenswert?

Torsten S. schrieb:
> Nimm den ENC so wie alle die den AVR als Webserver am Start haben.

Danke für den Hinweis Torsten !

von Matthias W. (matt007)


Lesenswert?

Udo N. schrieb:
> Der v3 hat einen 328

Ja. Es ist ein 328. Noch der alte mit dem FTDI-Baustein.

von Matthias W. (matt007)


Lesenswert?

c-hater schrieb:
> Wieviel von dem beteiligten Code hast du selbst geschrieben?

den GCC-Compiler habe ich nicht selbst geschrieben.
also den weitaus größten Teil nicht - so wie wohl die meisten.

> Wieviel von dem Code verstehst du?

natürlich verstehe ich vieles nicht. So wie viele andere auch. Wie viel 
verstehst Du von Deinem Auto? Und doch fährst Du damit herum?

> Hast du überhaupt schon irgendwelche Anstrengungen unternommen,
> irgendwas von dem ganzen geklauten Code zu verstehen?

durchaus. Den "geklauten" C-Code für die 1302-RealTimeClock habe ich 
genau angesehen, kommentiert, mit dem Datenblatt verglichen und 
schrittweise abgeändert so wie mir das sinnvoll erschien. Nun bin ich 
damit zufrieden.

Ähnliches habe ich bei der Ansteuerung der SD-Karte mit FAT gemacht. Das 
war sehr mühsam bis es so lief wie ich wollte. Gelernt habe ich sehr 
viel dabei. Tagelang hatte ich diverse Datenblätter durchgearbeitet zu 
SD- und SPI-Betrieb. Natürlich verstehe ich auch da viel noch nicht.

> Mir scheint, da hast du mehr als genug Lernpotential, ganz unabhängig
> von der konkreten NIC-Hardware...

jeder hat Lernpotential. Früher hatte ich mit 8085, Z80, 68000 
gearbeitet und dazu teilweise auch Platinen gemacht. Das war die Zeit 
als man DA-Wandler noch parallel an den Bus solcher Prozessoren 
anschloss. Das waren Gräber mit Fädeldraht. Und doch lief es am Ende 
prima !

Ich denke daß ich Lauf meines Lebens schon recht viel gemacht habe um zu 
lernen. Der Arduino nano3 ist nicht mein Startprojekt gewesen. Bereits 
Anfang der 80er Jahre war ich ziemlich aktiv.

von Matthias W. (matt007)


Lesenswert?

c-hater schrieb:
> Du hast weder in C noch in Assembler auch nur den Hauch einer Andeutung
> einer Ahnung, was der ganze von dir einfach mal so includierte oder
> hinzugelinkte Code tut.

so ist es in meinem Fall sicher nicht. Ich hatte selbst um 2002 einen 
80535 ziemlich ausführlich in Assembler programmiert. Das was ich da 
includierte kannte ich sehr wohl - denn es war alles selbst von mir 
geschrieben.

Ich erkannte jedoch daß bestimmte Aufgaben in Assembler für mich zäh 
sind. Beispielsweise ein simpler Vergleich ob eine Spannung in 2 
Registern größer ist als ein Schwellwert erscheint mir in C viel 
einfacher und verständlicher als in Assembler.

> Genau daran musst du etwas ändern. Meinetwegen darfst du gern damit
> anfangen, das erst einmal auf C-Ebene zu erschließen.

ich denke Du weißt nicht genug von meinen Projekten. Trotzdem hast Du 
allgemein gesehen natürlich recht.

> In der letzten Konsequenz allerdings (wenn tatsächlich ein vollständiges
> Verständnis angestrebt wird) wirst du aber in vielen Fällen auch nicht
> darum herum kommen, auf Asm-Ebene herabzusteigen.

den Code zu FatFS von Chan habe ich näher angesehen. Da sind für mehr 
Performance auch Assembler-Teile dabei. Das hat mir sehr gefallen. Ich 
gebe jedoch zu daß es mir teilweise schwer fällt den Asm-Code zu 
verstehen. Damals beim 8085 konnte ich das noch besser. Das ist lange 
her.

> Das liegt schlicht in der Natur der Sache begründet. Je weiter du in dem
> ganzen C-Syntax-Geschwalle abtauchst, desto wahrscheinlicher triffst du
> einfach mal auf Inline-Asm. Weil C selber halt einfach nicht alles kann,
> was nötig ist. Asm hingegen schon...

Ja. Assembler hat schon seine Vorteile. Inline-Assembler finde ich prima 
von der Idee her. Nur fand ich schrecklich wie kompliziert da die Syntax 
bisweilen ist im Vergleich zum normalen Makro-Assembler.

Assembler kann prima sein wenn man einen hardwarenahen Treiber schreibt 
und dies besonders performant machen möchte.

Mit einer Mischung aus Assembler und C-Code kann man sich herantasten. 
Das wollte ich vor Jahren bei meinem Frequenzgenerator-Projekt machen. 
Erst war das alles in Assembler.

Die Fehlersuche war bisweilen schwer. Bis ich da einen Fehler mit Push 
und Pop fand in einem großen Listing. Mit dem AVR-Studio kam ich da 
nicht weiter.

von Matthias W. (matt007)


Lesenswert?

Torsten S. schrieb:
> Meiner Meinung nach reicht ASM für einfache Projekte. Wenn es aber an
> SD, FAT, Netzwerk geht, führt kein Weg an C vorbei.

das sehe ich auch so. Ich habe momentan genügend Probleme damit einen 
TM7705 zum Laufen zu bekommen. Hilfe dabei sind Testausgaben über die 
serielle Schnittstelle, Programmieren von Testschleifen und Oszi. So 
sieht man meist recht gut was los ist. Natürlich wäre ein 
Digitaloszilloskop mit tiefem Speicher und/oder ein Logikanalysator der 
nur Änderungen abspeichert als Hilfe sinnvoll.

Es ist ziemlich egal ob man Assembler oder C-Code auf diese Weise 
überprüft. Man kann prüfen wenn man muss.

von Matthias W. (matt007)


Lesenswert?

./. schrieb:
> auf die "eingebaute" Arithmetik wuerde ich auch nicht
> verzichten wollen.

ja. Da sehe ich große Vorteile. Da hatte ich mit Assembler nie so gute 
Karten.

von Matthias W. (matt007)


Lesenswert?

./. schrieb:
> Wenn die Ressourchen wirklich knapp sind, nimmt Mann
> halt eine Nummer groesser.

im Prinzip ja.

> Das ist dann statt 30 Ct fuer den Controller, 45 Ct auszugeben.

das ist nicht immer so einfach mit dem Umsteigen auf ein größeres 
Modell. Der Arduino nano3 ist recht handlich. Die Platine kostet nur um 
die 2.5EUR mittlerweile.

Dafür kann man 5V-Teile anschließen. Der LAN8720 hat jedoch lt. 
Datenblatt 3.3V. Das geht so wohl nicht. Keine Ahnung ob der ENC28J60 da 
günstiger ist.

Größere Controller auf Platine scheinen deutlich mehr als 15cent teurer 
zu sein. Wo gibt es einen Atmega128 für 2.65 auf Platine?

Auch der 328PB mit der zweiten SPI ist eher nicht so günstig zu 
bekommen.

von Matthias W. (matt007)


Lesenswert?

Noch einer schrieb:
> Ist dir www.ethersex.de schon aufgefallen?

bisher nicht. Vielen Dank für den Hinweis !

> Das Rad nochmal neu erfinden ist
> absoluter Unfug. Mehr lernen kann man, wenn man bestehende gute Konzepte
> durcharbeitet und weiterentwickelt.

das sehe ich auch so.

von Georg G. (df2au)


Lesenswert?

Matthias W. schrieb:
> Der LAN8720 hat jedoch lt.
> Datenblatt 3.3V. Das geht so wohl nicht. Keine Ahnung ob der ENC28J60 da
> günstiger ist.

Der ENC möchte auch mit 3V versorgt werden. Sein IO passt aber zu einem 
5V AVR.

von Frank K. (fchk)


Lesenswert?

Matthias W. schrieb:

> das ist nicht immer so einfach mit dem Umsteigen auf ein größeres
> Modell. Der Arduino nano3 ist recht handlich. Die Platine kostet nur um
> die 2.5EUR mittlerweile.
>
> Dafür kann man 5V-Teile anschließen. Der LAN8720 hat jedoch lt.
> Datenblatt 3.3V. Das geht so wohl nicht. Keine Ahnung ob der ENC28J60 da
> günstiger ist.

Der LAN8720 ist ein PHY. Der braucht einen MAC, um zu funktionieren. 
Schon alleine deswegen geht der nicht.

Der ENC28J60 beinhaltet MAC und PHY. Verbesserte Versionen sind der 
ENC424J600 und der ENC624J600. Für eine optimale Anbindung solltest Du 
hier aber einen Prozessor mit externem Adress/Datenbus haben, zB 
Mega1281/1280/2561/2560.

Oder Micrel KSZ8851. Kommt inzwischen auch von Microchip (wie AVR auch). 
Der ist zudem noch deutlich stromsparender als der ENC28J60, möchte aber 
am liebsten auch einen externen Adress/Datenbus haben.

Oder Du nimmst von Microchip gleich das Komplettpaket. PIC18F67J60 bzw 
PIC18F97J60. Da ist neben Ethernet MAC und PHY auch noch gleich der 
komplette Prozessor mit Flash, RAM, UARTs, SPI, I2C,... enthalten, also 
eine 1-Chip Lösung. Das ist die einfachste, billigste und kleinste 
Möglichkeit, einen Ethernet-Knoten aufzubauen. Spart auch einen Quarz 
(kostet auch Geld) und Leiterplattenfläche. Plus: das eingebaute 
Ethernet ist doppelt so schnell wie der über den SPI-Flaschenhals 
angebundene ENC28J60.

> Größere Controller auf Platine scheinen deutlich mehr als 15cent teurer
> zu sein. Wo gibt es einen Atmega128 für 2.65 auf Platine?

Wie hoch sind die benötigten Stückzahlen? 100? 1000? 10000? Bei 
Einzelstücken sind die Materialkosten eher nebensächlich.

fchk

: Bearbeitet durch User
von Matthias W. (matt007)


Lesenswert?

Georg G. schrieb:
> Der ENC möchte auch mit 3V versorgt werden. Sein IO passt aber zu einem
> 5V AVR.

Danke Georg. Also ein 3.3V-Spannungsregler dran. Die Ein- und Ausgänge 
sind soweit tolerant? Normalerweise darf doch die Spannung bei chips nur 
maximal 0.3-0.5V höher liegen als die (3.3V-)Versorgung?

von Matthias W. (matt007)


Lesenswert?

Frank K. schrieb:
> Der LAN8720 ist ein PHY. Der braucht einen MAC, um zu funktionieren.
> Schon alleine deswegen geht der nicht.

Vielen Dank Frank !

von Matthias W. (matt007)


Lesenswert?

Frank K. schrieb:
> Oder Du nimmst von Microchip gleich das Komplettpaket.

Danke für den Hinweis. Das ist recht interessant auch wenn ich mich 
momentan nicht in die PIC-Welt einarbeiten möchte.

von Matthias W. (matt007)


Lesenswert?

Frank K. schrieb:
> Wie hoch sind die benötigten Stückzahlen?

da hast Du natürlich recht. Bei mir sind es Einzelstücke auf dem 
Labortisch. Da ich keinen Auftrag habe so etwas zu entwickeln wird auch 
keine Stückzahl folgen. Ich muss also mit dem lernen was am Markt leicht 
zu bekommen ist.

von Georg G. (df2au)


Lesenswert?

Aus dem Datenblatt:

• Six interrupt sources and one interrupt output pin
• 25 MHz clock input requirement
• Clock out pin with programmable prescaler
• Operating voltage of 3.1V to 3.6V (3.3V typical)
• 5V tolerant inputs

Du solltest dir auch einmal den Radig Webserver ansehen. Der Code ist 
nicht ohne Ecken und Kanten, aber imho recht verständlich geschrieben. 
Und es gibt viele Leute, die den erfolgreich einsetzen.

von Matthias W. (matt007)


Lesenswert?

Georg G. schrieb:
> • 25 MHz clock input requirement
> • Clock out pin with programmable prescaler
> • Operating voltage of 3.1V to 3.6V (3.3V typical)
> • 5V tolerant inputs

vielen Dank Georg.

> Du solltest dir auch einmal den Radig Webserver ansehen. Der Code ist
> nicht ohne Ecken und Kanten, aber imho recht verständlich geschrieben.
> Und es gibt viele Leute, die den erfolgreich einsetzen.

Danke. Der Atmega32 ist wohl vergleichbar mit dem Atmega328 des nano3. 
Das müsste also gehen.

http://www.ulrichradig.de/home/index.php/software/avr-webserver-software
Brown-out detection level at VCC=4.3V [BODLEVEL=100] wird dabei wohl 
Probleme machen, weil durch die USB-Versorgung vom Laptop und die Diode 
in Serie die Spannung an dieser Grenze liegt.

"Boot Flash section size=4096". Das bedeutet wohl daß ein anderer 
Bootloader drauf soll? Das hätte ich gerne vermieden.

Vermutlich muss ich da noch eine ganze Menge lesen um besser zu 
verstehen was genau da gemacht wurde und warum und wie ich das ggf. 
anpassen kann.

Bei Radig werden 3 Hardware-Optionen angegeben:
+ ETH_M32_EX
+ AVR Webmodule
+ Pollin Net-IO

Ist die Frage was da günstig ist. Die Arduino-nano3 sollte ja auch gehen 
wenn ich da den Netzwerkbaustein anhänge. Eine SD-Karte hängt momentan 
an der SPI. Das AD-Wandler-Modul TM7705 an der SPI spinnt leider noch.

Es wäre ggf. auch möglich die CPU auf der nano3-Platine durch einen 
328PB zu ersetzen. Dann wäre mehr Peripherie da wie 2. SPI etc.

von Georg G. (df2au)


Lesenswert?

Matthias W. schrieb:
> Brown-out detection level at VCC=4.3V

Das ist ein Vorschlag von UR und fällt - wie du richtig gesehen hast - 
unter "Ecken und Kanten". Stell den Wert niedriger ein, wenn du aus dem 
USB versorgst.

> "Boot Flash section size=4096"
Niemand zwingt dich, einen Bootlader zu verwenden.

Du wirst die Software nur als Grundlage für deine eigene Entwicklung 
nehmen können, wenn du nicht exakt die gleiche Hardware wie UR 
verwendest.

Mit 32k Flash kommst du gerade so hin, 64k entspannen die Lage 
erheblich. Die 2k RAM sind auch ein Flaschenhals. Wenn deine Platine es 
zulässt, nimm einen Prozessor mit mehr RAM.

von Matthias W. (matt007)


Lesenswert?

Georg G. schrieb:
> Das ist ein Vorschlag von UR und fällt - wie du richtig gesehen hast -
> unter "Ecken und Kanten". Stell den Wert niedriger ein, wenn du aus dem
> USB versorgst.

vielen Dank Georg. Warum wird denn der BrownOut überhaupt verwendet?
Bei meinem Frequenzgenerator hatte ich ohne BrownOut kein Problem. 
Probleme fingen an als ich das interne EEPROM nutzte. Da half Brown out 
und ein externer Reset-Baustein um unsinnige Werte zu vermeiden. 
Offenbar wurde ungewollt Unsinn hineingeschrieben.

>> "Boot Flash section size=4096"
> Niemand zwingt dich, einen Bootlader zu verwenden.

ok. Prima !

> Du wirst die Software nur als Grundlage für deine eigene Entwicklung
> nehmen können, wenn du nicht exakt die gleiche Hardware wie UR
> verwendest.

das ist mir schon klar. Eine Grundlage zu haben ist prima. Ändern kann 
man ja.

> Mit 32k Flash kommst du gerade so hin, 64k entspannen die Lage
> erheblich. Die 2k RAM sind auch ein Flaschenhals. Wenn deine Platine es
> zulässt, nimm einen Prozessor mit mehr RAM.

leider ist diese Arduino-nano3-Platine nicht so einfach aufzubohren. Ich 
müsste eine andere Platine nehmen - nur sind die wohl deutlich teurer 
und größer.

Es ist mir schon klar daß der Speicher knapp werden kann. Mein Beispiel 
mit FatFS, SD-Karte, USART-Ausgaben, RTC braucht knapp 18kB 
Flash-Speicher.

Ich bestelle mal so ein ENC28J60-Modul.

von Georg G. (df2au)


Lesenswert?

Matthias W. schrieb:
> Warum wird denn der BrownOut überhaupt verwendet?

Warum hat ein Auto ABS, ESP, Airbag? Man staunt immer wieder, was ein 
freilaufender Prozessor bei Unterspannung alles anstellen kann.

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.