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?
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...
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.
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.
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.
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..
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...
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.
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...
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.
> 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 :-)
Torsten S. schrieb: > Nimm den ENC so wie alle die den AVR als Webserver am Start haben. Danke für den Hinweis Torsten !
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.
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.
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.
./. 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.
./. 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.
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.
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.
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
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?
Frank K. schrieb: > Der LAN8720 ist ein PHY. Der braucht einen MAC, um zu funktionieren. > Schon alleine deswegen geht der nicht. Vielen Dank Frank !
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.
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.
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.
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.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.