Forum: Mikrocontroller und Digitale Elektronik AVR + ENC28J60 + amFORTH


von Ralf J. (hennes007)


Lesenswert?

Hallo,

für ein neues Projekt versuche ich gerade das Pollin NET-IO Board derart 
zu "vergewaltigen", dass auf dem ATmega das amForth läuft. Allerdings 
soll das FORTH nicht über die RS232 Leitung anzusprechen sein, sondern 
über Telnet und über das Ethernet.
Das amForth bereitet mir da keine Sorgen, wohl aber das 
Netzwerk-Interface, da ich nirgends eine Implementierung in Assembler, 
sondern nur in C gefunden habe. Und jene, die ich gefunden habe, sind 
für diesen Zweck eigentlich schon viel zu aufwändig. Ich scheue auch 
keineswegs davor zurück, diese Implementierung selbst in die Hand zu 
nehmen, nur finde ich vergleichsweise wenig im Netz, was mir dabei hilft 
einen wirklich rudimentären TCP/IP "Stack" zu schreiben.
Da ich hier nichts in den Foren gefunden habe, will ich doch erst einmal 
fragen, ob so etwas schon fertig existiert.
Eine andere denkbare Möglichkeit wäre natürlich auch, einen kleinen 
TCP/IP Stack in FORTH zu schreiben, denn auf Geschwindigkeit auf dem 
Netz kommt es bei der zeichenweisen Ein- und Ausgabe nicht an. Es 
brauchen hier auch keine x parallelen Verbindungen gleichzeitig möglich 
zu sein, eine einzige reicht völlig aus.
Was mir in der Tat vorschwebt ist ein minimaler Telnet-Server, der seine 
Ein- und Ausgaben dem amForth zur Verfügung stellt, sodass der ATmega 
über das Netz in FORTH programmierbar ist. Ich denke, mit dieser 
Basisprogrammierung ließen sich beliebig viele weitere Projekte 
realisieren, sodass der Aufwand schon die Mühe wert ist.

Meine Fragen also:
a) Gibt es so etwas schon?
b) Wenn nein, wo finde ich detaillierte Informationen, wie ein wirklich 
primitiver TCP-Telnet Server gerade eben aussehen muss, wobei mir der 
uIP eigentlich schon zu gross ist.

Viele Grüße
Ralf

von Matthias Trute (Gast)


Lesenswert?

Eine (frei zugängliche oder gar GPL) Implementation von
TCP/IP in irgendeinem Forth ist mir nicht bekannt. Entweder
wird das Thema ignoriert oder von einem zugrundeliegenden OS
bearbeitet.

Derzeit bin ich ebenfalls dabei, mich mit dem TCP/IP und genau diesem
Board zu beschäftigen. Mit genau der gleichen Zielsetzung, wir
könnten also zusammen "leiden"

Matthias

von Ralf J. (hennes008)


Lesenswert?

Hallo Matthias,

die letzten paar Monate war ich ziemlich mit dem Hausausbau beschäftigt 
und obendrein habe ich auch noch mein Passwort hier vergessen. Jetzt 
also mit neuem Benutzernamen frisch ans Werk.

Ich habe mich leidlich intensiv mit dem Byteverkehr auf dem 
Ethernet-Netzwerk beschäftigt und bin zum Schluss gekommen, dass ein 
reiner Telnet-Server auf dem ATmega auch in FORTH möglich sein muss. 
Alles, was zu implementieren ist, ist die Beantwortung eines 
ARP-Requests, sowie eine reine TCP/IP Datenleitung. Ein Ping 
(ICMP-Paket) wäre nett, muss aber nicht. Auf Geschwindigkeit kommt es 
mir hier nicht an, da ich den ATmega über diese Schnittstelle einfach 
nur remote programmieren können möchte, und keinen WebServer aufbauen 
will. Auch brauche ich hier kein Gewese um mehrere Verbindungen zu 
machen, da ich genau nur eine einzige Verbindung zulasse. Damit sind 
meine Anforderungen schon einmal gut eingedampft.

Worüber ich auch schon nachgedacht habe, ist, anstatt dem ATmega einen 
RS-232 Anschluss zu geben, ihm einen 12 MHz Takt zu geben, sowie ein 
paar Widerstände und einen USB-Anschluss (das geht ja auch ohne den 
FT232R). Dies hätte zum einen den Vorteil, dass heutige PCs kaum noch 
über eine RS232-Schnittstelle verfügen und zum anderen die ATmega-RSR232 
während der Programmierung frei für andere Anwendungen bleibt. 
Vielleicht könnte man bei kleinen Systemen während der Programmierphase 
auch gleich die Spannungsversorgung per USB realisieren.

Was mich ebenfalls beschäftigt, ist der Anschluss einer SD-Karte. Auch 
hier kommt es mir auf Geschwindigkeit überhaupt nicht an, sodass man 
das 08/15 Universalprotokoll der Karten nehmen kann. Damit sollten alle 
SD-Karten Modelle klar kommen, egal, wie groß sie sind. Das amFORTH 
würde ich dann um die Block-IO Befehle (BLOCK, BUFFER, UPDATE, LOAD, 
etc.) aufbohren, sodass man nicht nur größere Turnkey-Applikationen auf 
und von der SD-Karte transferieren kann, sondern beispielsweise auch 
Daten (Funktion eines Datenloggers). Eventuell könnte man bei 
ausreichend Speicher dann auch eine SCREEN-Verwaltung inkl. Editor 
übernehmen. Ein Dateisystem muss ja auf der SD-Karte nicht vorhanden 
sein. Problematisch sind wohl eher die zwei FORTH-Standardbuffer zu je 
1kB RAM.

Ich denke, meine ersten Basteleien werden sich wohl auf das Ansprechen 
des Ethernet-Anschlusses von amFORTH aus sein, sowie das Erzeugen einer 
ARP- und einer Ping-Antwort.

Soweit erst einmal meine Gedanken zu dem Thema.

Viele Grüße
Ralf

von Jan K. (jeangonzales)


Lesenswert?

Eine rudimentäre IP Implementierung ist nicht all zu schwer und 
aufwändig. Nimm doch die, die du in C gefunden hast und streiche alles 
raus, was du nicht brauchst. Dann übersetzen und du hast Assembler Code 
:)

Ich frage mich allerdings, ob du das alles in die 32KB Flash des Mega32 
bekommst? Ich weiß ja nicht, wie groß amFORTH ist, aber du wirst schon 
einige Funktionen implementieren müssen - allein der ENC-Treiber belegt 
Einiges.

Gruß, Jan

von Ralf J. (hennes008)


Lesenswert?

Hallo Jan,

vielen Dank für deinen Beitrag. Uns ist bekannt, dass es eine 
Implementierung in C gibt, sie ist auch Basis unserer Überlegungen. Aber 
leider wäre sie für diesen Zweck genauso nutzbringend, stünde sie in 
FORTRAN oder LISP: Wenn sie nicht in Assembler (als Source) oder in 
FORTH erhältlich ist, muss man sie dennoch um- oder neu schreiben.

Davon ab: Ich glaube nicht, dass das Programmieren des ENC tatsächlich 
soviel Platz beansprucht. Das Ding ist doch ausreichend intelligent. Ich 
schätze grob, dass alles in etwa 3kB zu machen ist:

200 Byte Initialisierung
100 Byte ARP-Antwort
100 Byte Ping-Antwort
1,5 bis 2kB TCP/IP Telnet-Server für einen Caller.

Das Problem ist hier nur, dass bisherige Basteleien mit ENC und TCP/IP 
immer vom C-Quellcode ausgingen, der je nach Anwendungsfall erweitert 
worden ist.
Hier aber gehen wir von einer Assembler-Source aus, dem der 
Telnet-Server hinzuzufügen ist. XXX-Compiler (XXX=beliebige Sprache) 
würden beliebige Register verwenden, RAM-Zellen belegen, den Stack 
manipulieren, etc. und das amFORTH durcheinander bringen.

Also bleibt nur entweder das amFORTH um ENC-Treiber und TCP/IP "Stack" 
zu erweitern, oder aber das ganze in FORTH zu schreiben.

Viele Grüße
Ralf

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.