Forum: Mikrocontroller und Digitale Elektronik Tcp mit AVR ATMega (eine Light Version in AVRASM)


von Ingo N. (docingo)


Lesenswert?

Hallo Technik Freunde.

Seit kurzem lasse ich mein Hobby - Elektronik und insbesondere Embedded 
Control wieder aufleben. Ein wenig Erfahrung habe ich mit den PIC's und 
C-Control I + II. Desweiteren noch aus "frühen Tagen" in Assembler 
Programmierung auf dem guten alten Amiga.

Vor wenigen Wochen habe ich bei Pollin das Evulation / Addon, sowie das 
AVR Net-IO Board gekauft. (- Warum meckern eigentlich alle über Pollin ? 
Auspacken - zusammenbraten - läuft! -)

Programmieren ist ja leicht (dachte ich) und musste mit erschrecken 
feststellen das es schlicht ZU VIELE Informationen im Internet gibt.

Und die "umkehrung" Mathematischer Grundlagen seitens Atmel ist nun 
wirklich gewöhnungsbedürftig - mov r1,r2 ist meiner Denkweise nach r2 
das Zielregister. Aber in England fährt mann ja auch auf der falschen 
Strasseneite - nichts für ungut.    ;-)

Aber zum Problem selbst:  Eigentlich wollte ich relativ simple Dinge mit 
dem Controler machen - Netzwerküberwachungen und daraus resultierende 
Schaltvorgänge. (230V~)

Also Ausgegoogled und nur C - Codes und viel zu grosse TCP Stacks 
gefunden.

C ist nun gar nicht mein Ding und nur um einen Source Code zu verstehen 
wollte ich nicht unbedingt noch ne Programmiersprache dazulernen.

Könnte mann in diesem Forum nicht einen Workshop für TCP Anwendungen mit 
den ATMegas einrichten - für Anfänger - ? Viele Modellbauer haben 
nämlich genau das gleiche Problem wie ich - Super Hardware zum 
vernünftigen Preis aber keiner weiss wie sie zu verwenden ist. (Modell 
Eisenbahn ganz vorran)

Die geposteten Threds sind einfach viel zu komplex und für Anfänger 
"Böhmische Dörfer" - "Der Laie muss nicht wissen wie es funktioniert - 
ihm reicht es zu wissen dass es funktioniert"

Für Buch Tipps währe ich auch dankbar.

Vielen Dank im Vorraus.

von Dirk B. (sharandac)


Lesenswert?

Hallo,

suchst du jetzt eigentlich einen TCP-Stack der in AVRASM geschrieben ist 
und klein ist oder eine gute Dokumantation wie man einen implemenieren 
könnte? Ich denke mal das es um einiges schwerer ist einen TCP-Stack in 
ASM zu bauen als in einer Hochsprache, nicht umsonst sind die meisten 
für den AVR in C geschreiben, weil die in einer maschinennahen Sprache 
doch recht schwer und unübersichtlich umzusetzen sind.

CA Dirk

von Ingo N. (docingo)


Lesenswert?

Hallo Dirk

Es währe schon schön wenn sich bereits jemand die mühe gemacht hätte das 
Ding in Assembler zu schreiben - nach mehrstündiger Suche habe ich da 
aber wenig Hoffnung! Dachte hier jemanden zu finden der mehr Erfolg bei 
der Suche hatte.

Also werde ich wohl nicht umhin kommen selber einen zu programmieren. 
Dazu fehlt mir aber eine Deutschsprachige Dokumentation des Protokolls. 
(nicht oder kaum zu finden) Und Bücher darüber sind so sau teuer dass 
meine Frau mir den Kopf abbeissen würde wenn ich eines bestellen würde.

Das das ganze in Assembler sehr aufwendig ist weiss ich aus leidvoller 
Erfahrung. - Habe soetwas ähnliches schon mal auf dem Amiga umgesetzt 
(Netzwerk)

cu Ingo

von Dirk B. (sharandac)


Lesenswert?

Hallo,

schau mal unter 
http://wiki.neo-guerillaz.de/mediawiki/index.php/Microwebserver in den 
Abschnitt Software. Dort hatte ich mal einige Sachen zusammengetragen zu 
diesen Thema. Vielleicht bringt das einige Ansatzpunkte zu 
programmieren. Was ich auch sehr empfehlen kann ist Wikipedia, und als 
unterstützung natürlich Wireshark (Netzwerksniffer). Mit genau diesen 
Mitteln als Grundlage habe ich auch angefangen. Wenn duch noch Sachen 
wissen willst kann ich dich gerne unterstützen.

CA Dirk

von Ingo N. (docingo)


Lesenswert?

Hallo

Also das waren sehr gute Tipps!

Das TCP Protokoll ist zumindest schon mal so aufgebaut wie ich es mir in 
etwa dachte. Dein Link war da sehr hilfreich.

Was den Wireshark betrifft wird mir jedoch etwas schwindelig - alleine 
mein Printserver verursacht im Netzwerk ja einen Datenmüll, der den doch 
recht "behäbigen" ATMega, arg ins schwitzen bringen wird. Von den drei 
Festplatten, Laserdrucker, den Rechnern und der Fritz Box mal gar nicht 
zu reden. Zumal der in meinem Vorhaben ja den ganzen Datenstrom 
überwachen muss und sich nicht als Eigenständige Netzwerkkomponente 
einklinken sollte. Wollte Waitstates im Netzwerk möglichst verhindern. 
Da muss ich wohl mal über andere Möglichkeiten nachdenken. 2 AtMega oder 
so - einen zum überwachen und einen via irq zur Ereignissbehandlung. 
Wird doch Komplexer als ich dachte.

Werde mich aber erstmal um den "Mini TCP Stack" in AVRASM kümmern -
der Rest hat ja noch zeit.

Vielen Dank!

cu Ingo

von Dirk B. (sharandac)


Lesenswert?

Hallo,

der ATmega muss nicht den ganzen Netzwerkverkehr auswerten oder 
überwachen, der ENC28j60 der z.B. auf dem Pollin-board verbaut ist, 
filtert Broadcast- und Netzwerk-packete die an Ihn gerichtet sind schon 
raus, sprich er hat eigentlich nicht so viel zu tun, sonst würden ja die 
ganzen anderen Stacks nicht laufen :-). Es sei denn das du wirklich den 
ganzen Netzwerkverkehr überwachen willst. Du kannst ja mal in etwas 
genau beschreiben was du eigentlich machen willst.

CA Dirk.

von Roland R. (roland) Benutzerseite


Lesenswert?

Hallo Ingo,

So wie ich Dich verstanden habe willst Du also den Netzwerkverkehr 
passiv mitschneiden, analysieren und bei einer passenden Bedingung wie 
z.B. "Host X baut zu Host Y eine Verbindung auf" eine Aktion auslösen.

Mit einem gewöhnlichen Stack kannst Du da nichts anfangen, denn die sind 
dazu gedacht, selbst Verbindungen aufzubauen oder eingehende 
Verbindungen anzunehmen. Diese Stacks verwerfen Packete, die nicht an 
sie selbst adressiert sind, bzw. erledigt dies meist schon der 
Interface-Controller (wie der ENC28J60).

Ich denke, ob Dein Vorhaben realisierbar ist oder nicht hängt von der 
Komplexität Deiner Triggerbedingungen ab, die Du auf dem Netzverkehr 
analysierst. Etwas einfaches wie oben sollte da schon möglich sein. Doch 
sobald es komplexer wird und Verbindungen verfolgt oder der Inhalt der 
Pakete untersucht werden soll reicht ein AVR nicht mehr aus, schon 
allein aufgrund von Einschränkungen beim Pufferspeicher.

Wenn es konzeptionell irgendwie geht, solltest Du dem AVR aktiv über 
TCP-Verbindungen mitteilen, was er wie zu schalten hat. Das wäre absolut 
problemlos. Auch solltest Du Dir überlegen, ob es nicht ein einfacheres 
Protokoll wie UDP auch tut, zumal Du wohl in Assembler programmieren 
willst. Für mich wäre das bei Dingen wie Netzwerk-Protokollen ein 
ziemlicher Alptraum...

Für Bücher würde ich in diesem Zusammenhang eher kein Geld ausgeben, da 
alles was Du brauchst in offenen Standards dokumentiert ist. Das wären 
insbesondere
- RFC826 (ARP)
- RFC791 (IP)
- RFC761 (TCP)
- RFC768 (UDP)
Wenn Du mit dem Englischen Probleme hast kannst Du entweder, wie Dirk 
schon angemerkt hast, auf Wikipedia gucken (eher für den groben 
Überblick), oder auch in den Folien von Uni-Vorlesungen, wie z.B. von 
der TU München hier:
  http://www.net.in.tum.de/en/teaching/ws0809/lectures/masterkurs-rechnernetze/

Gruß,
Roland

von Ingo N. (docingo)


Lesenswert?

Hallo Dirk, Hallo Roland

Also das "Ding" soll soetwas wie die eierlegende Wollmilchsau werden.

Als z.B.: Intelligente Steckdosenleiste (IP der Festplatte oder Drucker 
wird angefragt = Gerät an und Gegenstelle vertrösten bis bereit).
Aktives low Level IP Filter (habe 5 Kinder).
Home Automation - Fritz Media einschalten = Fernseher, Computer und 
Festplatte an - Licht aus.
Und das ganze am besten noch über Funk.   ;-)   So soll der Endzustand 
mal aussehen. (einige Jahre Später?!?) Mal sehen in wie weit das 
umzusetzen ist.

Alleine das Programm sollte wohl so gross werden das ich über kurz oder 
lang über eine Bootloader SD-Karten Kombination nicht herrum kommen 
werde.
Aber ein Schritt nach dem anderen. (bis dahin ist wahrscheinlich schon 
nen ATMega 2048 auf dem Markt ;-) )

Deshalb aber auch AVRASM. Um erstmal möglichst viel "unterzukriegen" und 
meine besagte Abneigung gegen C.

@ Roland: Auf die Idee mit den Unis's bin ich noch nicht gekommen. Werde 
heute abend mal etwas stöbern und mir glaube ich nochmal das Datenblatt 
des ENC28J60 genauer zu gemüte führen.

Vielen Dank euch beiden für die Tipps.

Cu Ingo

von Andreas V. (tico)


Lesenswert?

Ingo Negenborn wrote:
> Also das "Ding" soll soetwas wie die eierlegende Wollmilchsau werden.
Sowas ist immer praktisch, allerdings möchte ich, bevor Du Dich ins 
Getümmel stürzt, zwei Dinge zu bedenken geben:
1) Der ENC28J60 ist ein toller Baustein, macht aber nur 10MBit/s. Falls 
Dein Heimnetzwerk mit 100MBit/s oder gar schon mit 1GBit/s läuft, kannst 
Du die Idee gleich wieder einstampfen - entweder kriegt der ENC28J60 nur 
ein Bruchteil des Netzwerkverkehrs mit, oder er bremst die restlichen 
Netzteilnehmer so stark, dass Du beim Drucken, Kopieren, etc. übers Netz 
Weinkrämpfe kriegst.

2) Damit der ENC28J60 überhaupt allen Netzwerkverkehr mitbekommen kann, 
müssen entweder alle Netzteilnehmer über einen Hub angeschlossen sein 
(die ich schon lange nicht mehr gesehen habe und die man auch kaum noch 
kaufen kann), oder über einen Switch mit entsprechendem Monitor Port. 
Die Teile sind aber teuer...

Gruss
Andreas

von holger (Gast)


Lesenswert?

>Alleine das Programm sollte wohl so gross werden das ich über kurz oder
>lang über eine Bootloader SD-Karten Kombination nicht herrum kommen
>werde.

SD-Karten können nicht als Programmspeichererweiterung
für ATMega benutzt werden. Wenn dein Programm zu groß
für den ATMega ist, dann ist es zu groß. Basta.
Stückchenweise nachladen kann man da nichts.
Dafür müsstest du einen uC nehmen der auch Code
aus externem RAM ausführen kann. Z.B. einen ARM?

von Henry (Gast)


Lesenswert?

Ich sollte wohl die Klappe halten aber irgendwie klingt die geplante 
Ausführung des Projekts wie bei einem Fahrradmechaniker der mit dem 
Werkzeug aus nem Satteltäschchen und einem alten Dynamo den Anlasser 
eines LKW ersetzen will.

Controller 10 Nummern zu klein, falsche Sprache, …

von Roland R. (roland) Benutzerseite


Lesenswert?

Hallo Ingo,

> Also das "Ding" soll soetwas wie die eierlegende Wollmilchsau werden.

Meiner Erfahrung nach sind solche Ansätze meist zum Scheitern 
verurteilt...

> Als z.B.: Intelligente Steckdosenleiste (IP der Festplatte oder Drucker
> wird angefragt = Gerät an und Gegenstelle vertrösten bis bereit).

Halte ich für schwer machbar. Im lokalen Netz musst Du da auf 
ARP-Anfragen und/oder TCP-SYN-Pakete lauschen. Doch wie willst Du dem 
Gegenüber sagen, dass er noch zu warten hat? Du kannst höchstens hoffen, 
dass der Client seine Anfrage später nochmals wiederholt wenn das 
Zielgerät bereit ist (TCP Retransmission Timeout).

> Aktives low Level IP Filter (habe 5 Kinder).

Wie willst Du mit einem einzelnen Interface filtern? Du kannst höchstens 
versuchen, eine bestehende TCP-Verbindung mit einem gefälschten 
RST-Paket abzubrechen.

> Home Automation - Fritz Media einschalten = Fernseher, Computer und
> Festplatte an - Licht aus.

Ok. Das klingt als wäre es gut realisierbar.

> Alleine das Programm sollte wohl so gross werden das ich über kurz oder
> lang über eine Bootloader SD-Karten Kombination nicht herrum kommen
> werde.

Wie holger schon angemerkt hat, brauchst Du dafür einen Controller mit 
von-Neumann-Architektur, der Code auch aus dem RAM ausführen kann (ARM, 
MSP430, ...).

> Deshalb aber auch AVRASM. Um erstmal möglichst viel "unterzukriegen" und
> meine besagte Abneigung gegen C.

Ich denke Deine "Abneigung" ist hier eher in mangelnden C-Kenntnissen 
oder auch in Vorurteilen begründet. Aber das ist Deine Entscheidung.

Viele Grüße,
Roland

von Simon K. (simon) Benutzerseite


Lesenswert?

Ganz ehrlich: Ich finde es schade, dass so viele Leute denken, dass es 
relativ einfach machbar ist "mal eben" ein paar über TCP schaltbare 
Ausgänge zu basteln. Meiner Meinung nach ist der Aufwand für so etwas 
immens. Und oft verzweifelt man auch an einer bestimmten Sache.
Vielleicht sehe ich das ganze ja auch nur viel zu eng (was ich 
allerdings nicht glaube) und ich mache mir alles nur viel zu schwer ;)

Bevor du hier Unterstützung in irgendeiner Form suchst, würde ich mal 
versuchen alle nötigen Informationen zu dem gesamten Projekt 
zusammenzusuchen. Da hast du schon genug zu tun.
Einen eigenen Stack zu schreiben würde ich in Assembler ganz sein 
lassen. Da kommst du auf keinen grünen Zweig.

Der Knackpunkt ist meiner Meinung nach, dass nicht unbedingt TCP/IP, ARP 
oder die ganzen anderen Protokolle unbedingt sooo schwer zu verstehen 
sind, sondern, dass du diese ziemlich fetten Protokolle (besonders TCP) 
auf kleine Prozessoren implementieren musst. Das ist noch mal ne ganz 
andere Liga.

von Jacob R. (jaykopf)


Lesenswert?

Hm, wenn Du wirklich das alles irgendwann gerne realisieren willst, dann 
wird das mit nem ATMEGA wirklich eng (meiner Meinung nach nicht 
möglich).
Gerade wenn Du ein "Aktives low Level IP Filter" realisieren willst 
kannst Du Dir vielleicht das NGW100 [1] anschauen, wenn Du das als 
Gateway zwischen den Internetanschluss und einem HUB bzw. ein Switch mit 
Monitoring (wurde ja beides schon erwähnt) hängst, dann wird es 
vielleicht möglich sein wirklich alles zu realisieren.
Wenn Du das alles dann (alleine) per ASM programmieren willst, dann bin 
ich mal gespannt wann Du fertig bist.

[1] 
http://www.avrfreaks.net/wiki/index.php/Documentation:NGW/NGW100_Hardware_reference

von Peter D. (peda)


Lesenswert?

Ingo Negenborn wrote:

> Erfahrung. - Habe soetwas ähnliches schon mal auf dem Amiga umgesetzt
> (Netzwerk)

Siehst Du, weil Du es in Assembler geschrieben hast, ist es für den AVR 
nutzlos.

Hättest Du es aber in C geschrieben, könntest Du es ohne großen Aufwand 
auf den AVR portieren.

Den Leuten, die in C programmieren, ist einfach nur ihre Zeit zu schade.


Peter

von Ingo N. (docingo)


Lesenswert?

Hallo

Entschuldigt die späte Antwort. (meine grosse hatte geburtstag)

Was habe ich denn hier jetzt losgetreten? Errinnert ihr euch an meine 
eigentliche Frage?

Verzeiht mir wenn ich nicht jedem einzelnem antworte, da sich das ein 
oder andere ohnehin dann von selbst erklärt.

@ Andreas: Leider musste ich das mit den 10 MBit beim Studium des 
Datenblattes auch lesen. Nun gut für nicht alle, aber einige Dinge 
schnell genug. Sollte denke ich auch bald ne 100 MBit verfügbar sein.

@ Holger: Wie oben. War der Meinung das die Kombi SDkarte/ATMega mit 
ausfühbarem Code möglich währe. - Falsch gedacht!

@ Henry: Also mein "Werkzeug aus dem Satteltäschchen" ist das AVR Studio 
4.
Das sollte wohl ein üppig ausgestatteter Werkzeugschrank sein!!! Glaube 
mal das ich so einen lächerlichen LKW Anlasser in ner halben Stunde 
gewechselt habe! Und ich bin nichtmal Fahradmechaniker! (CNC-Dreher)

Mal generell zu c: Diese "Glaubensfrage" hat sich anscheinnend seit 
meiner Amiga Zeit nicht geändert. Was ist denn C? - Eine Ansammlung 
jeder Menge Assembler Routinen die vom Compiler anhand des Quelltextes 
zusammengestellt und mit Variablen bestückt wird. - Mehr nicht! Mir 
einfach zu unflexiebel und der Code wird Prinzip bedingt grundsätzlich 
grösser als er sein müsste. Wiedersprüche?

@ Jacob: Dein Link macht mir schon grosse Augen - Meine Frau hat aber 
ein grösseres auf unseren Geldbeutel.   ;-)   Denke nicht dass solch ein 
Board in meinen finanziellen möglichkeiten liegt. Danke aber trozdem. 
Wie lange das dauert? Ein Beispiel: Ein Freund von mir hat sich vor fünf 
oder sechs Jahren ne C-Control II gekauft und schon viel mit gemacht in 
Sachen Haus Automation (Licht, Rolläden, Klima, Heizung etc) --- Der ist 
bis heute nicht fertig!!! Das ist der Vorteil wenn mann soetwas nicht 
kommerziell vermarkten will! Mann muss nicht komplett fertig werden - 
immer ein bisschen was neues.

Grüsse an alle: Ingo

von B e r n d W. (smiley46)


Lesenswert?

Hallo Ingo

Dann fang doch erstmal mit der Haus Automation an. Dabei lernst Du den 
ATmega kennen und kannst besser einschätzen, was geht und was nicht.

Als zweites Projekt kommt dann die EWMS. Du könntest ein Board mit 
Embedded Linux und zwei Ethernet Schnittstellen verwenden. Der 
Datenstrom wird komplett von einer Schnittstelle zur anderen 
durchgeleitet und kann dabei kontrolliert werden.

Nimm den RTL8019 falls du 100 Mbit brauchst. Durch die parallele 
Ansteuerung ist auch der Durchsatz besser. Größere ATmegas haben 
teilweise einen externen
Daten und Adressbus.

An Deiner Stelle würde ich trotzdem mit einer Hochsprache liebeugeln. Es 
muss ja nicht unbedingt C sein. Aber wie wärs mit Pascal oder Basic 
(Bascom). Meist sind schon viele umfangreiche Bibliotheken dabei. Warum 
das Rad neu erfinden, wenn man sich sofort der eigentlichen Aufgabe 
widmen könnte?

Das Ergebnis mit Assembler ist zwar nur halb so gross und in der 
Ausführung schneller, aber Du brauchst auch 5 mal so lange zum 
Schreiben. Stell Dir vor, Deine Kinder sind schon aus dem Haus, bevor 
...

Mfg. Bernd

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.