kleiner Webserver mit LAN8720 oder ENC28J60?

OP #4739176
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?
Gast #4739191
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...
Gast #4739262
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...
Gast #4739273
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.
Gast #4739280
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...
Gast #4739340
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 :-)
OP #4739745
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.
OP #4739753
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.
OP #4739763
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.
OP #4739785
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.
#4739822
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
#4739876
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.
OP #4740254
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.
#4740577
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.
OP #4740941
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren