Hallo,
in welcher Kategorie µC bewegt man sich, wenn man einen Webserver
erstellen möchte mit HTTP, FTP, TELNET und SNMTP wowie Ping; ein
LCD-Display extern angeschlossen werden soll und Daten über eine in den
µC integrierte Ethernet-Schnittstelle kommen? Welche Datenrate kann man
max. dabei erzielen - ich bräuchte ca. 10-12 MBit.
Diese Daten vom Ethernet werden ausgewertet und in einer anderen
Reihenfolge in einem externen speicher untergebracht.
Der Webserver soll die komplette Steuerung des Gerätes integriert haben
(z.B. sollte man sehen was an Datenpakete über Ethernet reinkommt und
rausgeht (wie bei Windows halt auch etc.)
Bei dem LCD würde es sich um ein graphisches Farbdisplay handeln mit
einer auflösung von 640x480 (oder tft)... Nimmt man hier besser einen
LCD controller mit externen speicherinterface oder holt man sich die
Daten über einen externen an den µC angeschlossenen RAM und schiebt die
Daten dann über den DAtenbus an den LCD Controller weiter? Was ist hier
sinnvoller?
Josef
Die geforderte Ethernet Funktionalität habe ich in 8kByte Flash
untergebracht. Beim LCD wirds natürlich richtig derbe knapp werden.
Atmel >=ATmega32 evtl.
Aufgrund des LCD's würde ich einen Controller mit rausgeführten BUS
empfehlen, 8051 oder irgendein derivat...
Was hältst du von der Idee einen Single Board Computer oÄ zu verwenden
und daran einen uC anzuschließen um dort die wenigen Dinge die du mit
einer Pc Plattform nicht machen kannst zu realisieren, also Ein/Ausgänge
usw..
Vorteile: Hardware getestet und erprobt. Alle Protokolle verfügbar und
getestet, per VGA ist der anschluss an "normale" Displays möglich, usw
...
dann z.B. per RS232 zu einem kleinen uC und fertig.
lg Stefan
@Thomas:
Welchen Ethernet-Controller hast du denn dafür verwendet?
Die die ich mir bisher angeschaut habe waren entweder deutlich langsamer
(Statt 12MBit/sek eher so 30Kbit/sek) oder waren dank PCI Interface
nicht mehr wirklich zum µC Anschluss geeignet...
/Ernst
Ein 8 bitter bringt die 1MByte/sec nicht. Zuden ist deren Adressraum
etwas klein. Ich wuerd im 16 und 32 bit Bereich schauen. Wenn die
Entwicklungszeit der software wesentlich ist, sogar einen embedded PC
nehmen. zB einen VIA EPIA.
>Aufgrund des LCD's würde ich einen Controller mit rausgeführten BUS>empfehlen, 8051 oder irgendein derivat...
was verstehst du genau mit rausgeführten Bus? Address- und Datenbus zum
µC oder den Address- und Datenbus zu einem exteren Speicher SDRAM oder
ähnliches am LCD Controller?
>Single Board Computer
die idee klingt auch gut... muss ich mir mal anschauen welche computer
was beinhalten und welche sachen dann der µC noch machen muss außer Ein-
und Ausgänge.... aber der Webserver und LCD könnte darüberlaufen..
Josef
Josef wrote:
> Bei dem LCD würde es sich um ein graphisches Farbdisplay handeln mit> einer auflösung von 640x480 (oder tft)... Nimmt man hier besser einen> LCD controller mit externen speicherinterface oder holt man sich die> Daten über einen externen an den µC angeschlossenen RAM und schiebt die> Daten dann über den DAtenbus an den LCD Controller weiter? Was ist hier> sinnvoller?
Hmmmm... Wie wär's denn mit einem AT32AP7000? Sind noch nicht so
wirklich bekannt. Aber Entwicklungskits gibt es schon.
Möglicherweise (?) etwas overpowered, aber das tolle an den Chips: Sie
haben einen LCD-Controller (2048*2048 px. maximum), sowie ein externes
RAM Interface (bis 128MB DRAM soweit ich mich erinnere) und ein On-Chip
MAC-Interface für Ethernet, das dank DMA und gemultiplextem Bus auch
schon beachtlichen Durchsatz schafft.
Wenn das etwas zu "nah" für dich ist: Standardmäßig ist auf dem STK1000
(das AP7000 Entwicklungskit) ein Linux installiert. Da kannst du dann
sogar "ganz normale PC-Programme" schreiben. Außerdem brauchst du dich
dann nicht mehr um die Hardware kümmern - steckt ja alles hinter
Treibern.
Weiß' nicht ob du für sowas zu haben bist. Immerhin ist der Chip echt
neu ;) Soll auch nur eine Anregung sein - Alternativen gibt es
sicherlich genug!
EDIT an Poster unter mir: Jup, das NGW100 soll wirklich gut sein. (VIEL
billiger als das STK1000, was ich vorgeschlagen habe). Bei
httP://avrfreaks.net gibts da schön was zu lesen.
Wie wärs mit dem NWG100 (AT32AP7000 drauf). Das board ist sehr klein,
billig, hat zwei netzwerkschnittstellen. Linux ist drauf sogar schon mit
webserver und telnet, ftp,... und hast sogar n anschluss für ein TFT
Panel oder anderes Display :)
Der Datendurchsatz dürfte kein Problem dastellen. Hast sogar nen
SD-Kartenslot drauf=)
Jedoch wird das Programmieren evt schwerer (ists es aber bei deinem
Projekt sowieso schon) und das Board ist ziemlich neu (aber damit
bechäftigen sich schon etliche Profis)
http://www.wiki.elektronik-projekt.de/w/index.php/NGW100_First_Steps
Da haste mal ne Seite über das Board
>Jedoch wird das Programmieren
wieso wird das schwerer? Du meinst vom Umfang? Angedacht hatte ich alles
in c++ zu schreiben, um mit Klassen alles aufteilen zu können und eine
übersichtlichkeit zu erhalten.
- die boards werd ich mir anschauen... klingen sehr interessant.
Josef
Das C++ ist nicht wirklich die grosse Hilfe, wenn man alles schreiben
muss. Die grosse hilfe waere zb einen embedded PC zu nehmen, dort ist
ein LCD kein Problem, die Ethernet Schnittstelle ist auch gemacht, man
muesst die Software nur noch zusammenclicken und linken.
Das hab ich geschrieben weil ich net weiß wiegut du programmieren
kannst...
(Soll welche geben die mit sowas Programmieren anfangen wollen)
Ich glaub aber mit dem AVR32 bist du gut beraten. Da hast du auch schon
ein Linux indem sämtliche Funktionen schon integriert sind. Die müsstest
du dann nur noch anpassen und deine Funktionen hinzufügen.
@Nullpointer
da hast du natürlich recht; das einzige was mich an einem embedded pc
stört aber vielleicht geht es einfach auch nict anders ist, dass booten
zu beginn. Wie lange dauert sowas denn ungefähr?
Das Gerät soll später halt auch in Live-Situationen auf der Bühen zum
einsatz kommen und wenn da mal aus irgendeinem grund der strom nicht
mehr da ist für kurze zeit, ist es halt blöd, wenn man 5min warten muss
bis das gerät wieder bereit ist die daten übers ethernet anzunehmen und
verarbeiten kann...
Josef
>(Soll welche geben die mit sowas Programmieren anfangen wollen)
programmieren in c++ tu ich schon relativ lange... das einzige und
deshalb frage ich hier ist, dass ich nicht genau weiß welche Hardware /
Performance-mäßig am besten passt... die hardware-ICs in eine schaltung
zu integrieren (ist einfach) - aber die Dimensionierung des ganzes ist
das schwere...
bis jetzt hab ich halt stets kleinere produkte mit µC erarbeitet und
umgesetzt... aber mit webserver und display (auch noch so groß) muss ich
mich halt erstmla informieren mit welchen komponenten sowas überhaupt zu
realisieren wäre... vielleicht ist es auch besser auf das display zu
verzichten und nur die konfig über den webserver zu machen.. da muss man
halt dann sehen, wie es am besten ist und was 100%ig wie die datenrate
vom ethnernet und eine konfig-möglichkeit gegeben sein muss...
Josef
Ein WinXP embedded ist frei konfiguerierbar. Braucht auch keine Platte.
Abhaengig von der Stueckzahl koennte sowas Sinn machen. Ich hab's leider
noch nie probiert, kann daher keine Aussagen zum Bootprozess machen.
diese embedded WinXP brauchen tierisch lange... abhängig natürlich von
dem Content und der Hardware-Konfiguration zu beginn (also
initialisierung etc.)... ca. 1min..
was mir grad einfällt - so einen webserver haben doch viele teurere
switches etc. integriert... weiß jmd. mit welchen ICs die arbeiten?
z.B. Netgear oder 3Com?
Josef
Embedded Windows XP für sowas? .... In dem Forum fehlt der der Smily,
der die Geste mit dem drehenden Finger an der Schläfe darstellt... ("Du
hast doch nen Vogel")
Simon,
du hast schon mal einen VGA Controller angesteuert ? Register bis zum
Abwinken, Und mit dem VGA Controller hat man moch keine
Benutzeroberflaeche, noch keine Menues, keine Graphen, nichts. Da ist
man schon mal beschaeftigt bis man was hat. Wenn's was
Selbstgestricktes ist, dem Benutzer gegen das Training, gegen deren
Intuition geht, hat man Gemecker, Supportanfragen, muss ein dickes
Benutzermanual schreiben (das niemand liest), ich weiss nicht ob sich
das lohnt. Um wieviele Stueck geht's denn ?
Hallo Josef
Ich habe hier einen LPC2124 der intern mit 60MHz läuft. Daran
angeschlossen ist ein CP2200 (ein 10MBit Ethernet Baustein).
> Welche Datenrate kann man> max. dabei erzielen - ich bräuchte ca. 10-12 MBit.
Die maximale Transferrate liegt mit meinem TCP/IP Stack knapp über
500kByte pro Sekunde. Viel mehr wirst du aus einem 10MBit Netzwerk nicht
mehr herausbringen (Durchschnitt liegt aber bei 330KByte/s). Dazu kommt,
dass wenn der Buffer des Empfängercomputers fast voll ist, nur schon
dadurch die Geschwindigkeit massiv sinkt.
Damit du eine effektive Datenrate von 10-12MBit hast, brauchst du einen
Mikrocontroller der 100MBit unterstützt. Und auch dann wirst du etwa nur
15 Prozent des Netzwerkes mit einer Socketverbindung auslasten können.
Das schafft definitiv kein Mikrocontroller mehr. Ein ping im normalen
Betrieb (also in Betrieb mit der gewünschten Applikation die auch
Rechenpower benötigt) des LCP2124 hat eine Antwortzeit von 0.6ms.
Die einzige Möglichkeit das Netzwerk besser auszulasten liegt darin,
mehrere Sockets zu verwenden. Während der eine Socket auf das ACK
wartet, braucht ein anderer Socket die Bandbreite. Die Programmierung
der Empfangseite ist sehr kompliziert, und die Daten kommen überhaupt
nicht geordnet an (da ja mit mehreren Socket gearbeitet wird). Die
Geschwindigkeit die man damit erreichen kann ist gewaltig. Die Software
die ich dazu geschrieben habe (auf einem x86 mit Linux) war mal
Probeweise um das Verhalten des Netzwerkes zu studieren und ob dies
meine Bandbreiten Probleme lösen könnte. Das senden von Dummydaten ergab
eine Geschwindigkeit von knapp 11MByte pro Sekunde bei einem 100MBit
Netzwerk. Unter normalen Bedingungen (sprich zu Hause), erreichte ich
mit dieser Methode ca. 8MByte/s mit zwei Computern à 400MHz Celeron
Prozessor und zwischen diesen beiden Computern war ein Netgear WGT624
(Router).
> Bei dem LCD würde es sich um ein graphisches Farbdisplay handeln mit> einer auflösung von 640x480 (oder tft)... Nimmt man hier besser einen> LCD controller mit externen speicherinterface oder holt man sich die> Daten über einen externen an den µC angeschlossenen RAM und schiebt die> Daten dann über den DAtenbus an den LCD Controller weiter? Was ist hier> sinnvoller?
Kein Mikrocontroller zu verwenden.
Gruss, Daniel
Daniel Schwab wrote:
> Damit du eine effektive Datenrate von 10-12MBit hast, brauchst du einen> Mikrocontroller der 100MBit unterstützt. Und auch dann wirst du etwa nur> 15 Prozent des Netzwerkes mit einer Socketverbindung auslasten können.> Das schafft definitiv kein Mikrocontroller mehr.
Hm? Versteh ich nicht. Die Aussage, dass es mit einem Mikrocontroller
nicht geht halte ich mal für sehr vage.
Weiterhin denke ich, dass der Threadopener schon damit rechnet, den
100MBit Ethernet-Standard verwenden zu müssen.
> Ein ping im normalen> Betrieb (also in Betrieb mit der gewünschten Applikation die auch> Rechenpower benötigt) des LCP2124 hat eine Antwortzeit von 0.6ms.
Ahja, die Aussage finde ich ebenfalls sehr vage. Man kann einen Ping mit
einem Byte Daten senden, als auch einen mit zum Beispiel 1400 Bytes
Daten. Und beide dauern gleich?
> Während der eine Socket auf das ACK> wartet, braucht ein anderer Socket die Bandbreite.> und zwischen diesen beiden Computern war ein Netgear WGT624> (Router).
Man braucht nicht auf ein ACK zu warten. Es gibt sowas wie delayed-ACK.
Da werden dann erstmal ein paar Pakete geschickt und nach ein paar
(Milli)Sekunden "Funkstille" wird dann ein Ack über alle Pakete
geschickt.
>> Bei dem LCD würde es sich um ein graphisches Farbdisplay handeln mit>> einer auflösung von 640x480 (oder tft)... Nimmt man hier besser einen>> LCD controller mit externen speicherinterface oder holt man sich die>> Daten über einen externen an den µC angeschlossenen RAM und schiebt die>> Daten dann über den DAtenbus an den LCD Controller weiter? Was ist hier>> sinnvoller?>> Kein Mikrocontroller zu verwenden.
Toller Kommentar.... ?!
Mal eine ganz andere Idee:
Einen kleinen Fonera umwurschteln. Da ist alles drin was an
Netzwerkprotokoll benötigt wird, hat ein offenes System (OpenWRT) und du
hast sogar noch einen GPIO zur Verfügung. Alles eine Frage des
Linux-könnens (Ich z.B. kanns net G)
Wäre das nicht alles in allem eine einfachere Lösung als sich von Grund
auf ein neues System aufzubauen?
Grüße Ben
>> Man braucht nicht auf ein ACK zu warten. Es gibt sowas wie delayed-ACK.>> Da werden dann erstmal ein paar Pakete geschickt und nach ein paar>> (Milli)Sekunden "Funkstille" wird dann ein Ack über alle Pakete>> geschickt.
Sehr gut beobachtet, in den Spec's gibts ne Menge "should do" und einige
"must's", in dem Zusammenhang meint "should", du kannst es lassen. Auf
diese Art und Weise wirds Netwerktechnisch richtig schnell.
Mein Webserver rennt mit nem AT89C51ED2, es geht also auch mit einem 8
Bitter ganz gut. Allerdings habe ich kein aufwendiges Farbdisplay am
Start und Geschwindigkeit ist bei mir eher sekundär.
Die Kernfrage ist, was das Ganze wirklich können soll, kosten soll.
Technisch gehts jedenfalls mit nem simplen Controller bis hin zum
embedded Linux Board.
> Ahja, die Aussage finde ich ebenfalls sehr vage. Man kann einen Ping mit> einem Byte Daten senden, als auch einen mit zum Beispiel 1400 Bytes> Daten. Und beide dauern gleich?
Welche Antwortzeiten bekommst du so "ungefähr" bei deinem
Mikrocontroller und welchen benutzt du? Wenn du willst, kannst du ja die
Laufzeit deines Routers, falls du einen hast, mit aufführen. Dann wäre
es nicht so vage ;-)
> Man braucht nicht auf ein ACK zu warten. Es gibt sowas wie delayed-ACK.> Da werden dann erstmal ein paar Pakete geschickt und nach ein paar> (Milli)Sekunden "Funkstille" wird dann ein Ack über alle Pakete> geschickt.
Mit dem delayed-ACK hast du ja recht, hast du's schon mal ausprobiert
wie gut das Funktioniert? Bin ziemlich neugierig, wo du das schon
angewendet hast.
>> Kein Mikrocontroller zu verwenden.> Toller Kommentar.... ?!
Er ist sehr treffend.
Ich habe hier noch ein LPC2378 (72MHz). Der hat einen eingebauten
Ethernet Baustein mit DMA. Der schafft die 10MBit auch nicht voll
auszunutzen (mit TCP), obwohl er 100MBit hat.
Gruss, Daniel
Daniel Schwab wrote:
>> Ahja, die Aussage finde ich ebenfalls sehr vage. Man kann einen Ping mit>> einem Byte Daten senden, als auch einen mit zum Beispiel 1400 Bytes>> Daten. Und beide dauern gleich?>> Welche Antwortzeiten bekommst du so "ungefähr" bei deinem> Mikrocontroller und welchen benutzt du? Wenn du willst, kannst du ja die> Laufzeit deines Routers, falls du einen hast, mit aufführen. Dann wäre> es nicht so vage ;-)
Hm? Ich meinte eigentlich eher, dass man ohne weitere Angabe über die
Ping-Paketgröße keine pauschale Auskunft über Reaktionszeiten geben
kann. Auch ist das von der Implementierung des ICMP/IP bzw. generell
Ethernet abhängig.
>> Man braucht nicht auf ein ACK zu warten. Es gibt sowas wie delayed-ACK.>> Da werden dann erstmal ein paar Pakete geschickt und nach ein paar>> (Milli)Sekunden "Funkstille" wird dann ein Ack über alle Pakete>> geschickt.>> Mit dem delayed-ACK hast du ja recht, hast du's schon mal ausprobiert> wie gut das Funktioniert? Bin ziemlich neugierig, wo du das schon> angewendet hast.
Ich bin nicht ganz sicher, aber der uIP Stack hat dafür eine
Einstellung.
http://www.sics.se/~adam/uip/>>> Kein Mikrocontroller zu verwenden.>> Toller Kommentar.... ?!>> Er ist sehr treffend.
Ach, findest du? Direkt nen ganzen Personal-Computer?
> Ich habe hier noch ein LPC2378 (72MHz). Der hat einen eingebauten> Ethernet Baustein mit DMA. Der schafft die 10MBit auch nicht voll> auszunutzen (mit TCP), obwohl er 100MBit hat.
Es gibt aber durchaus noch leistungsfähigere Mikrocontroller. Und die
Leistungsfähigkeit hängt nicht zwangsläufig von der Frequenz des
Systemtakts ab, sondern eher von der Software-Implementierung des
Netzwerk-teils, davon, was der Controller noch nebenbei tun muss, von
der Hardware, und und und...
Torben wrote:
> wielange dauert denn so ein Bootvorgang bei einem embedded linux?
Äh, ich nehme mal stark an, dass das auf die Linuxversion, Kernel,
aktivierte Treiber, zu ladende Dienste und die Hardware ankommt.
Mein NWG100 braucht so schätzungsweiße 30 sec mit dem Linux wo drauf
war. Die Sachen wo er lädt kannst du ja mal im Internet suchen.
Wenn du dein Linux richtig optimierst und wirklich nur das läuft was er
braucht kommst du bestimmt auf 5 - 10 sec runter.
Hallo
Wenn man schnell mal ein paar Linux erfahrungen machen möchte zu einem
Gerät das gut beschrieben ist, wäre dies evtl. etwas:
http://www.nslu2-linux.org
Das Gerät würde jedenfalls den Anforderungen von Josef entsprechen.
Hab schon damit gearbeitet und zeigt eine gute Performance. Da er ein
LCD Display möchte, wäre es gut eines zu nehmen das mit I2C angesteuert
wird. Oder benutzt gleich ein X-Server und der kann mit einer USB-VGA
Karte betrieben werden. Das übertakten von 133MHz auf 266MHz überlebt er
auch unbeschadet ohne abstürze und der Speed braucht er, wenn er die
Grafikausgabe einigermassen flüssig haben möchte.
Das Gerät ist zu haben (ohne USB-Grafikkarte) für etwa 100 Euro.
Gruss, Daniel