Forum: Mikrocontroller und Digitale Elektronik Netzwerk mit ATtiny13 oder ATMega32


von Dürk (Gast)


Lesenswert?

Hallo,

ich beschäftige mich hobbymäßig mit µC, besitze jedoch fundierte 
Kenntnisse über TCP / IP (soll heißen, ich weiß wie die Kommunikation 
abläuft und kann mit Netzwerkbegriffen was anfangen).

Bisher habe ich einige Kleinigkeiten mit den Controllern gemacht (alles 
in C), wie
- LEDs blinken
- Tasterabfragen
- ADC (intern)
- Displays ansteuern (HD44780)
- UART Kommunikation (Text an den PC senden via Tastendruck)
- alles Kombiniert und mit sinnvollem Hintergrund (Temperaturauswertung)

Gerne würde ich jetzt mit Netzwerktechnik weitermachen.

HTML, CSS und PHP beherrsche ich sehr gut und somit kann ich meine 
Steuerseite selbst schreiben.

Was ich vor habe: Ich würde gerne die im Betreff genannten Controller 
via Netzwerk steuern, also Signale vom PC (Windows!!) zum µC und vom µC 
zum PC übertragen.
Dafür habe ich mir ein "ENC28J60 Ethernet LAN Netzwerk Modul" gekauft 
(bestehend aus ENC28J60 und rj45 Buchse).

Ich möchte damit beginnen LEDs über eine Webseite ein- und auszuschalten 
(das ganze soll dann über LAN und µC angesteuert werden).

Hat jemand damit Erfahrung?
Die Projekte von Ullrich Radig sind mit bekannt (Webserver) - jedoch 
übersteigen diese meine Erfahrungen und ich möchte nicht nachbauen, 
sondern selber lernen.

Meine Fragen:
- Ich benötige, um das zu realisieren zwanghaft einen Webserver, 
richtig?
- Wie binde ich die Webseite in mein C-Programm ein, sodass Ausgänge 
gesetzt werden, je nach Eingabe auf der Website?
- Gibt es !deutsche! Tutorials zu Netzwerktechnik mit AVRs (selbst keine 
gefunden)?
- Ist das Ziel eurer Meinung nach zu ehrgeizig oder bin ich Aufgrund 
beschriebner Vorkenntnisse bereit dafür?

Danke, Dürk

von Paule H. (stk500-besitzer)


Lesenswert?

Dürk schrieb:
> - Ich benötige, um das zu realisieren zwanghaft einen Webserver,
> richtig?
Ja.

> - Wie binde ich die Webseite in mein C-Programm ein, sodass Ausgänge
> gesetzt werden, je nach Eingabe auf der Website?
Die Seite wird "dynamisch" gestaltet, indem im HTML-Quellcode die 
variablen Daten markiert werden und beim Ausgaben durch den 
Mikrcontroller durch die anzuzeigenden Werte ersetzt werden.
Eingaben erfolgen wahlweise per POST- oder GET-Methode.

> - Gibt es !deutsche! Tutorials zu Netzwerktechnik mit AVRs (selbst keine
> gefunden)?
Der Quellcode von Ulrich Radig ist gut kommentiert.

> - Ist das Ziel eurer Meinung nach zu ehrgeizig oder bin ich Aufgrund
> beschriebner Vorkenntnisse bereit dafür?
Lade dir ein funktionierenden Quellcode herunter, bring ihn zum Laufen 
und analysiere ihn.

von c-hater (Gast)


Lesenswert?

Dürk schrieb:

> Was ich vor habe: Ich würde gerne die im Betreff genannten Controller
> via Netzwerk steuern, also Signale vom PC (Windows!!) zum µC und vom µC
> zum PC übertragen.

[...]

> Meine Fragen:
> - Ich benötige, um das zu realisieren zwanghaft einen Webserver,
> richtig?

Nein, natürlich nicht. Den benötigst du nur dann, wenn du zwanghaft als 
Client einen Webbrowser verwenden möchtest.

> - Ist das Ziel eurer Meinung nach zu ehrgeizig oder bin ich Aufgrund
> beschriebner Vorkenntnisse bereit dafür?

Bist du nicht.

1) Wärest du es, würdest du hier nicht fragen müssen, ob du es bist, 
sondern wüßtest selber, DASS du es bist.

2) Hast du eigentlich bereits selber erkannt, daß du es nicht bist, als 
du festgestellt hast, daß du den Code von Herrn Radig nicht zu deuten 
vermagst. Der ist nämlich recht ordentlich geschrieben und 
dementsprechend einfach nachzuvollziehen, insbesondere, wenn man die 
Netzwerkgrundlagen bereits beherrscht!
Sogar für Leute wie mich, die ein eher gespanntes Verhältnis zur von 
Herrn Radig verwendeten Programmiersprache haben...

von Mark R. (stevestrong)


Lesenswert?

Ist zwar nicht auf deutsch, aber für Anfänger sehr hilfreich:
http://www.lucadentella.it/en/category/enc28j60-arduino/page/2/
Am besten mit der Lektion 1 anfangen...
Und natürlich geht es auch wireless (z.B. nach HLK-RM04 suchen).

von Karol B. (johnpatcher)


Lesenswert?

Dürk schrieb:
> HTML, CSS und PHP beherrsche ich sehr gut und somit kann ich meine
> Steuerseite selbst schreiben.

PHP wirst du auf einem AVR aber kaum zu laufen bekommen.

Ich persönlich halte viele der Netzwerkprojekte auf Basis von AVRs für 
einen Griff ins Klo bzw. schlichtweg für ein Proof-of-Concept mit dem 
man in der Praxis nicht viel anfangen kann. Arduino-Netzwerk Shields 
z.B. kosten im Endeffekt so viel wie einfache Linux Boards (Raspberry 
Pi) und auch das Netzwerk Board von Pollin ist nicht viel billiger.

Daher ist meine Empfehlung ganz klar: Setzte auf einen Raspberry Pi 
(oder etwas ähnliches): Dort läuft ein vollwertiger Netzwerkstack, der 
getestet ist und viel flexibler ist als irgendetwas das man mal eben 
selbst machen könnte (bzw. die Hardware für einen übernimmt). Des 
Weiteren hat man auch viel mehr Möglichkeiten in Bezug auf die 
eingesetzten Technologien. PHP wäre hier überhaupt kein Problem. 
Andererseits eignet sich ein Raspberry Pi natürlich nicht für alles, 
insofern könnte es Sinn machen noch einen echten Mikrocontroller nach zu 
schalten, der dann die eigentlichen Steueraufgaben übernimmt. Das 
Beaglebone Black (BBB) z.B. hätte auch diese gleich an Board.

Mit freundlichen Grüßen,
Karol Babioch

von Georg G. (df2au)


Lesenswert?

Der ATtiny ist mit Sicherheit zu klein für dein Projekt. Auch den 
ATMega32 würde ich nicht verwenden. Nimm den ATMega1284. Der passt in 
die gleiche Fassung wie der ATMega32 und bietet hinreichend RAM. Und das 
brauchst du.

Ansonsten kann ich dir auch nur empfehlen, einen der vorhandenen 
Webserver (Radig, Ethersex und viele mehr) zu nehmen und zu 
modifizieren.

von Uwe (de0508)


Lesenswert?

Hallo,

Hannes hat ein *SPI-Netzwerkadapter Wiznet W5500* entwickelt und 
lauffähige Beispiele auf seine Webseite.

http://www.ehajo.de/baus%C3%A4tze/bedrahtete-baus%C3%A4tze/spi-netzwerkadapter-wiznet-w5500.html

Die Vorteile eines W5500 gegenüber dem ENC28J60 ergeben sich schnell.

: Bearbeitet durch User
von Dürk (Gast)


Lesenswert?

hallo nochmals,

danke euch für die Antworten.

Soweit ich das verstanden habe ist Arduino eigentlich ein auf avr 
besierendes System, oder nicht? Also müsst alles was ein Arduino kann, 
doch auch (mit viel Aufwand, mir geht es nur ums Prinzip) mit einem avr 
realisiert werden können?!

Raspberry Pi ist für mich schon zu umfangreich und ich will kein Linux 
als Kernel.

Ich weiß, ich habe spezielles vor, aber bei einer Lösung von der Stange 
wäre ich nicht hier.

Der Pi ist wie gesagt wegen Linux keine Option für mich.

Wegen dem Code von Radig - ihr meint schon diesen hier oder?:
http://www.ulrichradig.de/home/uploads/File/ETH_M32_EX/ETH_M32_EX_SOFT.zip
(bzw. sehe ich die Sache vieleicht zu komplex? - welche Files davon muss 
ich betrachten?)

Dürk

von Karol B. (johnpatcher)


Lesenswert?

Dürk schrieb:
> Also müsst alles was ein Arduino kann,
> doch auch (mit viel Aufwand, mir geht es nur ums Prinzip) mit einem avr
> realisiert werden können?!

Ja, und so viel Aufwand ist das i.d.R. gar nicht.

Dürk schrieb:
> Der Pi ist wie gesagt wegen Linux keine Option für mich.

Und was genau spricht gegen Linux? Ich sehe einen wesentlichen Vorteil: 
Ein ausgereifter Netzwerkstack mit einer Menge an mächtigen Programmen, 
die sich im Handumdrehen installieren und einrichten lassen. AVRs (oder 
andere Mikrocontroller) sind in Bezug auf Netzwerk immer Murks und 
stoßen viel zu schnell auf ihre Grenzen.

Mit freundlichen Grüßen,
Karol Babioch

von c-hater (Gast)


Lesenswert?

Georg G. schrieb:

> Der ATtiny ist mit Sicherheit zu klein für dein Projekt.

So wie er es angeht: Sicher. Ein kleiner Webserver auf einem Tiny ist 
zwar nicht unmöglich, aber trotzdem einfach mal nur Quatsch. Und auf 
jeden Fall absolut kein Projekt für einen Anfänger.

Aber ein kleiner UDP-Client, der seine paar Meßwerte per Broadcast in's 
LAN plärrt, ist wirklich sehr einfach umsetzbar. Der braucht nämlich 
keinen Netzwerkstack im eigentlichen Sinne, sondern nur vor seinem 
Meßwert-Geraffel ein paar konstante Header in den Sendepuffer des 
Netzwerkchips schreiben.

von Karol B. (johnpatcher)


Lesenswert?

c-hater schrieb:
> Der braucht nämlich
> keinen Netzwerkstack im eigentlichen Sinne, sondern nur vor seinem
> Meßwert-Geraffel ein paar konstante Header in den Sendepuffer des
> Netzwerkchips schreiben.

Und, sofern das Ganze halbwegs flexibel und robust sein soll auch noch 
DNS, DHCP und NTP. Darüber hinaus gibt es noch einige RFCs, die man 
lieber einhalten sollte, wenn man netzwerkfähige Geräte/Applikationen 
baut.

Mit freundlichen Grüßen,
Karol Babioch

von Christian (Gast)


Lesenswert?

Hallo Dürk,

Ich will sowas ähnliches machen. Allerdings würde ich gerne Analogwerte 
in eine Datenbank schreiben. Vielleicht könnte man sich austauschen.

Viele Grüße

von holger (Gast)


Lesenswert?

> Vielleicht könnte man sich austauschen.

Mit wem? Mit Dürk der das auch nicht kann;)

von c-hater (Gast)


Lesenswert?

Karol Babioch schrieb:

> Und, sofern das Ganze halbwegs flexibel und robust sein soll auch noch
> DNS, DHCP und NTP.

Um per UDP-Broadcast was in's LAN zu plärren, braucht man exakt keines 
der genannten Protokolle.

DNS?
Es gibt keinen Server, dessen IP zu ermitteln wäre.

DHCP?
Dat Teil kriegt einfach eine konstante IP außerhalb des DHCP-Bereichs. 
Genauso, wie man das auch für Server im LAN handhabt.

NTP?
Was soll der Tiny mit der Zeit? Der plärrt seine Meßwerte raus und gut 
ist. Die Meßwerte einer Zeit zuzuordnen kann der geneigte Empfänger 
selbst erledigen. Er weiß mit Sicherheit, daß das Datenpaket nicht älter 
als einige wenige ms sein kann, wenn er es empfängt. Das dürfte für die 
allermeisten, für einen Tiny sinnvollen Anwendungen mehr als ausreichend 
genau sein.

von Frank K. (fchk)


Lesenswert?

Dürk schrieb:

> Ich weiß, ich habe spezielles vor, aber bei einer Lösung von der Stange
> wäre ich nicht hier.

Du hast nichts spezielles vor. Das Rad ist schon n-mal erfunden worden, 
und es gibt fertige Bausteinlösungen, die genau das machen, was Du vor 
hast, und letztendlich aus nur einem einzigen Chip für 3.50€ bestehen.

Sieht dann so aus:
Beitrag "Re: Günstigstes Web I/O"

Schau hier im Forum, das ist schon n-mal durchdiskutiert worden.

Und ja, C und Englisch sind unverzichtbare Grundlagen. Die müssen 
einfach sitzen, sonst wird das nix.

fchk

von Georg G. (df2au)


Lesenswert?

Wenn du wirklich etwas eigenes entwickeln möchtest oder einen 
vorhandenen Stack modifizieren möchtest, solltest du dir darüber im 
Klaren sein, dass das Debugging nicht mit drei printf erledigt ist. Der 
Umgang mit Wireshark sollte dir geläufig sein. Und gute Kenntnisse der 
niederen Netzwerkebenen sollten auch vorhanden sein. In der Ecke gibt es 
viele tiefe Schlammpfützen.

von Stephan J. (Gast)


Lesenswert?

Das Thema klingt sehr interessant für mich.
Wie genau plärre ich denn etwas per UDP? Wie stellst du dir das 
Verfahren denn vor? Ich benötige dennoch ein TCP/IP Protokoll.

c-hater schrieb:
> Um per UDP-Broadcast was in's LAN zu plärren, braucht man exakt keines
> der genannten Protokolle.

Ich möchte selbst folgende Anwendung versuchen:
Controller mit dem ENC28J60 soll mit Treiber und Relais ein Licht 
schalten. Steuerung habe ich mir auch über ein Browserbasiertes 
Webformular vorgestellt. Gibt es hierfür fertige header? Projekt oder 
vergleichbares?

von holger (Gast)


Lesenswert?

>Gibt es hierfür fertige header? Projekt oder
>vergleichbares?

Solche Fragen können nur komplett Ahnungslose stellen.
Es gibt kein Ethernet für Dummies. Das ist harte Arbeit.
Der Code von Ulrich ist der einfachste den du finden wirst.
Versteh ihn oder vergiss es.

von Karol B. (johnpatcher)


Lesenswert?

Stephan J. schrieb:
> Wie genau plärre ich denn etwas per UDP?

Broadcast sind meiner Meinung nach eine ziemlich doofe Idee für diesen 
Anwendungsfall und werden - je nach Firewalleinstellungen - auch direkt 
verworfen.

Stephan J. schrieb:
> Steuerung habe ich mir auch über ein Browserbasiertes
> Webformular vorgestellt.

Das setzt dann also schon einmal HTTP voraus. HTTP wiederum setzt auf 
TCP und damit hat sich die Sache mit UDP erledigt. Sinnvoll wären dann 
sicherlich auch dynamische Skriptsprachen wie PHP, python & Co. Alles 
nicht möglich mit einem Mikrocontroller.

Idealerweise würde es auch noch Sinn machen das Ganze zu verschlüsseln 
(bzw. eine authentische Verbindung mittels SSL/TLS aufbauen), und auch 
das macht mit einem Mikrocontroller keinen Spaß. Spätestens dann ist 
auch DNS und NTP sinnvoll ;).

Und klar kann man feste IP Adresse vergeben, nur ist das halt nicht 
wirklich flexibel, vor allem, wenn es am Mikrocontroller selbst keine 
Einstellungsmöglichkeiten gibt, und man damit zum Neuprogrammieren des 
Flash- bzw. EEPROM-Speichers gezwungen ist.

Alles in Allem: Netzwerk mit 8-bit Mikrocontrollern ist ein Krampf. Ja, 
es mag funktionieren, aber man kann sich das Leben auch deutlich 
einfacher machen, zumal "echte" Netzwerklösungen wie eben der Raspberry 
Pi ungefähr genauso viel kosten wie irgendwelche Netzwerkshields für 
Arduinos.

Mit freundlichen Grüßen,
Karol Babioch

: Bearbeitet durch User
von spess53 (Gast)


Lesenswert?

Hi

>Es gibt kein Ethernet für Dummies. Das ist harte Arbeit.

Gibt es. Wurde doch schon angesprochen:

Beitrag "Re: Netzwerk mit ATtiny13 oder ATMega32"

Andere Module von WIZNET gibt es hier:

http://www.watterott.com/de/Schnittstellen/Ethernet

MfG Spess

von spess53 (Gast)


Lesenswert?

Hi

>Alles in Allem: Netzwerk mit 8-bit Mikrocontrollern ist ein Krampf.

Geht mit den WIZNET-Teilen problemlos sogar unter Assembler.

MfG Spess

von der_Dicke82 (Gast)


Lesenswert?

Ich finde die kleinen MikroController für solche Aufgaben gar nicht 
geeignet. vor allem wenn man da etwas "Sinnvolles" aufbauen will. Klar 
geht es irgendwie einen Webserver auf einem AVR zum laufen zu bekommen, 
aber das alles nur um einen etwas per Browser steuern zu können.

Ich denke es ist in den meisten Fällen das beste, einen Pi oder in 
einigen Fällen kann auch ein OpenWRT-Router reichen. Dadurch hat man 
seine Weboberfläche und von dort aus, geht es mit einem simpleren BUS 
weiter zu den MikroControllern.

Eine skriptgestützete Website, so sie denn zum laufen bekommen wird auf 
einem kleinen AVR zu hosten, wird ja bei der Benutzung keine 
Freudensprünge auslösen :-D

Gruß, Stefan

von Karol B. (johnpatcher)


Lesenswert?

spess53 schrieb:
> Geht mit den WIZNET-Teilen problemlos sogar unter Assembler.

Dann hast du die Quintessenz meines Textes nicht verstanden. Ich habe 
nie bestritten, dass das geht. Für jemanden, der an Konzepten bzw. der 
Materie an sich interessiert ist, mag das auch eine schöne Übung sein. 
In allen anderen Fällen gibt es deutlich mächtigere Lösungen für 
deutlich weniger Geld.

Ansonsten warte ich einfach bis jemand einen vernünftigen Webserver mit 
Unterstützung für dynamische Skriptsprachen (PHP, Python, etc.) samt 
SSL/TLS in einem 8 kB Mikrocontroller unterbringt.

Mir scheint es fast so, dass jeder der mal mit einem Mikrocontroller ein 
"ping" abgesetzt ist, sich als Netzwerkprofi ansieht und der Meinung 
ist, dass irgendwelche Netzwerk-Stacks in Hardware (Wiznet) auch nur im 
Ansatz vergleichbar wären mit einem vollwertigen Linux-Netzwerkstack - 
und das nicht Vorhandensein von "vernünftigen" Dämonen (SSH, NTP, 
Webserver, etc. pp.) wird auch schlichtweg unterschlagen.

Mit freundlichen Grüßen,
Karol Babioch

von c-hater (Gast)


Lesenswert?

Stephan J. schrieb:

> Wie genau plärre ich denn etwas per UDP? Wie stellst du dir das
> Verfahren denn vor? Ich benötige dennoch ein TCP/IP Protokoll.

Nein. Du benötigst genau drei Protokolle: MAC, IP und UDP. Und die 
bestehen einfach nur darin, daß jeweils ein kleiner Header vor die 
eigentlichen Nutzdaten geschrieben wird. Der prinzipielle Aufbau einer 
Nachricht ist also:

|MAC-Header|IP-Header|UDP-Header|Payload|

Und da bei Broadcasts sowohl auf MAC-Level als auch auf IP-Level sowohl 
Absender- als auch Empfängeradresse konstant sind und auch deine 
Meßwert-Records sinnvollerweise eine konstante Länge besitzen, sind auch 
diese Header (weitgehend) konstant. Ausnahmen sind die Prüfsummenfelder 
in den Headern, die vom Payload abhängen, die müssen natürlich berechnet 
werden. Viele NIC-Chips helfen aber dabei auch noch.

> Controller mit dem ENC28J60 soll mit Treiber und Relais ein Licht
> schalten. Steuerung habe ich mir auch über ein Browserbasiertes
> Webformular vorgestellt.

Das ist was völlig anderes. Die oben dargestellte Minimallösung ist 
dafür nicht geeignet, aber sie ist dafür geeignet, die Sensoren eines im 
LAN verteilten Sensornetzes zu betreiben und ermöglicht es deshalb, den 
Aufwend für die Sensoren so gering zu halten, daß auch ein kleiner Tiny 
geht.

Natürlich muß es dann irgendwo im gleichen LAN eine Instanz geben, die 
die Meßwerte empfängt und speichert. Dafür braucht man ohnehin mehr 
Power, und dort könnte dann auch ein richtiger Stack laufen, der den 
Betrieb eines Webservers ermöglicht.

von Grundschüler (Gast)


Lesenswert?

ass den Überbau ganz weg und beschränk dich auf den low_level-Teil z.B. 
vom Radig-Webserver. Du hast dann gerade zwei Funktionen: buffer_read 
und buffer_write. In den buffer schreibst du deine Header. per udp 
kannst du mit diesen beiden Funktionen ganz elementar Daten austauschen. 
Wenn das funktioniert, kannst du das ganze nach und nach erweitern.

von PittyJ (Gast)


Lesenswert?

Ich habe mit einem Arduino und einem Wiznet-Shield eine einfache IP 
Kommunikation aufgebaut. Dadurch, dass der Wiznet-Chip fast alles selber 
macht, war es kein Problem. Nach einer Stunde hatte ich etwas 
lauffähiges.

Allerdings habe ich schon jahrelang Netzwerkprogrammierung auf 
verschiedensten Ebenen gemacht, kenne also die Details schon.

Dem Dürk würde ich vorschlagen, erst einmal alles mit 2 PCs zu machen. 
Darauf kleine Programme schreiben, die sich unterhalten. Den erzeugte 
Verkehr sich dann auch einmal mit Wireshark anschauen. Dann bekommt man 
ein Gefühl, was alles notwendig ist, und wie das funktioniert.

von Mark R. (stevestrong)


Lesenswert?

Eine sehr einfache Einführung gut erklärt findest du hier:
http://www.lucadentella.it/en/2012/08/10/enc28j60-e-arduino-7/
Ich, als absoluter "newbie", hab das dort angegebene Beispiel in einer 
Stunde mit Arduino Uno Mini und dem ENC-Chip implementieren können...

von Cyblord -. (cyblord)


Lesenswert?

spess53 schrieb:
> Hi
>
>>Alles in Allem: Netzwerk mit 8-bit Mikrocontrollern ist ein Krampf.
>
> Geht mit den WIZNET-Teilen problemlos sogar unter Assembler.

Widerlegt ja nun die Aussage NICHT. Das Wiznet Modul ist wohl kein 
8-Bitter und wenn doch kanns einem egal sein, weil schon fertig. Da 
haben sich halt andere den Krampf gegegeben.

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.