Webserver ATmega32/644DIP ENC28J60

OP Persönliche Seite #686453
Lesenswert?

Hallo,

Hier mal noch ein Webserver auf der Basis von dem ENC28J60 Chip und 
einem ATmega32 oder ATmega644 als Prozessor. Software zum Testen des 
Webservers ist auch schon dabei, sowie Bilder wie er fertig aussieht. 
Warum das ganze? Der Webserver hat eine einseitige Platine und kommt 
ohne SMD aus.

Gruss
Ulrich
Angehängte Dateien:
Gast #686691
Lesenswert?

Prima! Ich habe jetzt zwar schon einen funktionstüchtigen Webserver nach 
der ISA-CTRL-Platine und RTL8019AS als Ethernetcontroller, aber das hier 
ist mechanisch kleiner aufzubauen und auch von den Bauelementen her 
besser
zu löten.
Frage: Hast Du dort eine SD-Karten-Unterstützung mit drin?

MfG Paul
#687187
Lesenswert?

Hallo!
Gibt es irgendwie eine "einfache" Möglichkeit, wie bei USB-Hosts, einen 
virtuellen COM-Port zu erzeugen, der dann die serielle Schnittstelle 
deines Webservers ansteuert?
So was ähnliches wie die CDC oder HID-Treiber bei USB wäre super. Ich 
hab aber noch nichts dergleichen gefunden.

MfG
Matthias
Gast #687254
Lesenswert?

Danke danke danke danke danke danke danke Ulrich!!!

Auf genau so einen Webserver habe ich von dir schon gewartet :-)
ENC, AVR, einseitige Platine, kein SMD, funktionierende Software zum 
dran weiterprogrammieren.

Einfach Perfekt!

Stefan
Gast #688059
Lesenswert?

Hallo,

ich nehme an, dass bewusst keine Quelldokumente für den Schaltplan und 
das Layout herausgegeben wurden. Ist beabsichtigt, dies noch zu tun?

Ich könnte mir vorstellen, dass auf der Basis deiner Arbeit noch sehr 
einfach Änderungen vollzogen werden könnten. Beispielsweise könnten die 
bereits angesprochenen Restringe größer gemacht werden (oder durch 
"lange" Kupferflächen ersetzt werden) oder gleich Bauelemente statt der 
Lochraster eingesetzt werden (z. B. Motortreiber, HC595 um die Anzahl 
der Ports zu erhöhen, Stecker für Sensoren oder sonst was, Relaistreiber 
für die (12V-)Lampensteuerung per WLAN :-).

Begeisterter Gruß von einem
Gast.
Gast #688128
Lesenswert?

Sehr gute Arbeit respekt !

Ich werde ihn demnächst aufbauen.

Aber darf ich mal fragen, was ich überhaupt mit so einem Webserver 
machen kann? Ist nicht böse gemeint, würde nur gerne einen 
Verwendungszweck wissen.


Danke!
OP Persönliche Seite #688154
Lesenswert?

Hallo,

Die Quelldateien gibt es auf meiner HP. Anwendungszweck: Der aktuelle 
Source Code schaltet über den Webserver den Port A. Dieses erfolgt sogar 
bei mir übers Internet. Also kann ich bei mir zu Hause das Licht an- und 
ausschalten :-)

Gruss
Ulrich

PS: Den aktuellen Source Code werde ich immer nur auf meiner HP 
vorstellen. Ich will diesen Server nicht unnötig mit Dateien belasten.
Gast #688348
Lesenswert?

Wie sieht es mit dem Übertrager aus? Wo bekomme ich diesen Typ? Oder 
sind die auf den Netzwerkkarten alle ähnlich, do dass ich jeden 
verwenden kann (bis auf die Pinbelegung natürlich). Kann mir das jemand 
kurz erläutern?

Danke

Gruß

Thomas
Gast #688492
Lesenswert?

>>Wie sieht es mit dem Übertrager aus? Wo bekomme ich diesen Typ?

Den kannst du auch von csd-electronics bekommen. Ich habe schon mehrere 
PC-Karten ausgeschlachtet und die Übertrager hatten eigentlich immer 
funktioniert.
Gast #688572
Lesenswert?

> Also kann ich bei mir zu Hause das Licht an- und
> ausschalten :-)

Link bitte veröffentlichen, das will ich auch mal ausprobieren ;-)))

an, aus, an, aus, an, aus, an, aus ... (Welcher Blödmann fummelt da 
ständig an meinem Licht herum ...)
Gast #688688
Lesenswert?

Hi!

So, Teile sind bestellt :)

Allerdings habe ich den Ferrit nicht gefunden, ist der
unbedingt notwendig?

Ich werde den 644 erst mal auf dem STK500 aufbauen und eine
kleine Platine mit dem Netzwerkkram basteln.

Mal sehn, ob das klappt...

Gruss,
Micha
#689086
Lesenswert?

>Allerdings habe ich den Ferrit nicht gefunden, ist der
>unbedingt notwendig?

Der Ferrite Bead oder auch Ferritperle zwischen dem Übertrager und der
Versorgungsspannung dient zum Filtern von hochfrequenten Signalen auf 
der
Versorgungsspannung und sollte eine 60 Ohm Impedanz bei 100 MHz 
besitzen. Zu Testzwcken kann man diesen weglassen. Es ist allerdings 
sehr zu empfehlen diesen mit zu verlöten...gibts bei Segor. Da gibt es 
auch RJ45 Buchsen mit integrierten Übertrager von HALO electronics also 
nochmal platzsparend!
OP Persönliche Seite #689127
Lesenswert?

Hallo,

RJ45 Buchsen mit integrierten Übertrager wollte ich nicht benutzen. Auch 
wenn diese ein Platzvorteil haben. So kann fast jede alte Netzwerkkarte 
vom Schrott wieder verwertet werden. Auf diesen findet man fast immer 
einen passenden Übertrager, Netzwerkbuchse und LEDs. Und wenn nicht 
bekomme ich die Teile zumindest auch bei Reichelt.

Gruß
Ulrich
Gast #689628
Lesenswert?

An Stelle der Ferrite Bead kann man auch "Festinduktivität 1 µH 0,7 A" 
von CSD nehmen.
Ist ja in erster Linie dazu, um Störungen aus der Versorgung zu filtern 
und nicht noch verstärkt ans Netz abzugeben.
Sind auch gut zum filtern der Analog-Referenspannung am AtMega u.ä.
Gast #689647
Lesenswert?

@Ulrich

Hmm, Reichelt ist diesem Zusamenhang wohl (noch)nicht die Quelle erster 
Wahl.
Die muss man wohl noch überzeugen bezüglich des ENC28J60 und des 
Übertragers.
Haben sie beides nicht.

Und alte Hardware zu fleddern, geht so lange bis das die Sollbruchstelle 
wird.
Ich weiss das aus leidvoller Erfahrung, stundenlanges Messen hätte ich 
mir sparen können, wenn "weniger Geiz, noch geiler" gewesen wäre.
Ich denke schon, dass der MagJack zum genannten Preis(CSD) nicht 
schlechter als eine Einzellösung ist.

Ich hoffe, Du hast hier ne Lawine losgetreten und man kann bald div. 
Webserverlösungen und deren Software bewundern.
Gast #689940
Lesenswert?

hmm, tja so ist das...

verweisen wollte ich eigentlich hier her:

Beitrag "Internet-Stream Radio"

aber ich denke dann wird man wohl einfacher bedient sein, es zu kaufen.

klar - wie so oft, die herausforderung treibt einen ja dazu, dinge 
selber zu machen, anstatt sie zu kaufen, doch das ziel ist mir allein zu 
fern und zeitintensiv....

-schnittstelle
-protokolle
-datenstromdecodierung
-senderauswahl
-und was weiß ich noch alles....

m.
#690222
Lesenswert?

maddin
@Torsten Enkelmann

"Internet-Stream Radio"

Hi

Falls das Interesse am Thema "Internetradio" immer noch vorhanden sein 
sollte, kann ich folgende Informationen über ein Projekt (A low cost 
portable wireless Internet radio receiver) zur Verfügung stellen. Dieses 
WLAN Radio arbeitet mit dem Shoutcast Stream Protokoll und besteht aus 
folgenden Komponenten:

AVR Microcontroller
Hardware MP3 Decoder
PCMCIA WLAN Card (Prism 2.5 chipset)
128 x 64 SED LCD-Display

Lithium Battary ----
PWM Drive for battery recharging
Battery Voltage & Current Sensor
Supply Voltage Regulator

C Code for the IAR AVR Compiler


Voy
#690576
Lesenswert?

Da noch ein Display dran zu hängen ist nicht weiter schwer.
Ich hab eine ähnliche Platine (allerdings mit einem Mega128 und nahezu 
nur SMD) mit einem DOGLCD bei mir zu hause liegen.

Leider nicht die Software noch nicht so weit wie die von Ulrich und 
irgnedwie komme ich nicht mehr so richitg zum weiterentwickeln.
Gast #690808
Lesenswert?

Hallo Uli, Respekt zu deinem Projekt!

Wie gross wäre deiner Meinung nach der Aufwand um deinen Server als 
"Ethernet-RS232 Gateway" laufen zu lassen?
Es braucht eine "Benutzer-Oberfläche" auf die man per Ethernet und 
Browser in einem Netzwerk auf deinen Server zugreifen kann und dann kann 
man Ports am uC schalten...

Leider habe ich im Moment noch wenig Ahnung von Ethernet, ich kann 
deinen aktuellen Stand noch nicht nachvollziehen.

Gruss, erik
Gast #690880
Lesenswert?

Hallo,

also das mit dem Display sehe ich rein Hardwaretechnisch nicht als 
großes Problem. Stand alone habe ich so ein KS1080(?) Display mit 128x64 
Pixeln schon mit der Bib von Ape (glaube ich) zum laufen bekommen. Ich 
sehe eher das Problem die Bib mit der Software von Ulrich zu 
verstricken, und dann vielleicht noch auf http-Anfragen eine Textmeldung 
zu erzeugen.

Leider habe ich privat kaum Zeit für sowas, und auf Arbeit kann ich das 
meinem Chef auch nur schwierig als dienstlich sinnvoll verkaufen.

Gast.
Gast #691639
Lesenswert?

Vielen Dank Uli!

Das tönt alles ausgezeichnet... Schreibst du es irgendwo hin, wenn es 
implementiert ist? Dann werde ich Anfangen, mich mit deinem Code 
internsiv zu beschäftigen, resp. versuchen es zu nachvollziehen.
Gast #691736
Lesenswert?

Servus Ulli,

was ich nicht ganz nachvollziehen kann, ist die HTTPD.

Mir ist klar, wie Du die entsprechende Funktion im HTTPD Thread auslöst; 
jedoch ist mir nicht klar wieso Du das so machst.
Wie kann ich nur meine Fraqe in Worte fassen?

Warum springst Du bei "app_status == 1" ausgerechnet in die Funktion, 
warum "app_status == 2" ausgerechnet in eine andere? Prinzipiell kann 
man doch stets Daten senden, z.B. den html-File-Inhalt sobald ein PSH 
und ACK Flag vom Clienten kommt, oder nicht?

Vielleicht kannst Du das noch ein wenig verdeutlichen.

Danke
OP Persönliche Seite #691843
Lesenswert?

Hallo Thomas,

Nach einer eingabe im Browser wird zuerst der Port in Server geöffnet.

Client: SYN
Server: SYN,ACK
Client: ACK

Hierbei wird die App. nicht gestartet. Erst jetzt erfolgt vom Client 
Browser ein GET HTTP also PSH Flag gesetzt app_counter = 1.

Das Packet wird nun Stückchenweise zum Client gesendet. Bei jedem 
Stückchen empfange ich ein ACK. app_counter++ damit ich weiss welches 
Stückchen ich gesendet habe und als nächstes drann kommt. Wenn ich kein 
Ack vom Client empfange erfolgt irgendwann ein Timeout und Packet wird 
nochmal gesendet.
Ist das Packet komplett gesendet wird der Port geschlossen.

Gruß
Ulrich
Gast #691913
Lesenswert?

Hallo Ulrich,

wiedermal ein sehr schönes projekt.

nun habe ich leider schon 2 deiner vorherigen webserver...;-)

aber nicht das die platine ein problem darstellen würde.
aber da ginge mir eher eine doppelseitige platine durch den kopf.
die mann sich auch über
http://www.haka-lp.de/html/zwillingsangebot.html
fertigen lassen könnte.
und da währe ökonomisch die grösse von 100mm x max 79mm
das würde dann dort 4-stück ergeben.

schick  ;-)  und würde dann in 1/2 eurogehäuse-1 reinpasen.

ich gehe nicht davon aus,
das du selber platinen in umlauf bringen willst ?

;-) ich allerdings auch nicht!
(höchstens die eagle.brd, falls ich die habe)

Jürgen
Gast #691914
Lesenswert?

Danke; das  hab ich dann soweit.

Also wäre es auch möglich, das Paket in eine Variable zu packen und in 
der create_tcp_paket Funktion aufzuteilen und somit ACK-Abhängig die 
Teil-Pakete auf den Weg zu schicken.
Gast #692090
Lesenswert?

Hallo,

schon klar; war nur so ein Gedanke von mir.

Hast Du eigentlich noch Literaturverweise? Ich arbeite an meinem Stack 
meistens nur mit Wikipedia und Wireshark; aber so ein paar 
"Protokoll-Ablauf für Dummies" Referenzen täten manchmal schon gut.

Thomas
Persönliche Seite #692111
Lesenswert?

Hallo alle zusammen,

ich habe die cmd.c /cmd.h mal erweitert damit man sich über 3 neue 
Befehle jederzeit die eigene IP, MAC und ENC Version ausgeben lassen 
kann.

Befehle:
IP = zeigt eigene IP-Adresse
MAC = zeigt eigene MAC-Adresse
VER = zeigt Version des ENC28J60 an

@Ulrich
Wäre es möglich die beiden cmd.c / cmd.h in deine Version zu übernehmen?

Ich  hatte dir auch vor ein paar Tagen eine Mail geschrieben weil ich 
gerne deinen Haftungsauschluss-Text nutzen würde, habe aber leider nie 
eine Antwort erhalten :(

Wäre es nicht besser in der main.c die Anzeige der eigenen IP-Adresse
so zu realisieren damit die IP auch optisch korrekt angezeigt wird?

usart_write("My IP: 
%1i.%1i.%1i.%1i\r\n\r\n",myip[0],myip[1],myip[2],myip[3]);

Übrigens lerne ich an deinem Code eine Menge hatte nur Bascom benutzt 
bisher aber jetzt arbeite ich mich in C ein und da hilft dein Code 
ungemein!
Angehängte Dateien:
Persönliche Seite #692765
Lesenswert?

@Ulrich

Habe mal eine Verständnisfrage, es ist ja nirgendwo ein Gateway 
eintragbar, ist es korrekt da ja nur Anfragen von extern an den Server 
kommen und er deshalb keinen Gateway im Netz braucht um die Anfragen zu 
beantworten?

Ich möchte vom Internet aus über eine Portweiterleitung auf einer 
Fritz!Box auf den Server zugreifen, das sollte doch gehen, oder?
Gast #692778
Lesenswert?

>Ich möchte vom Internet aus über eine Portweiterleitung auf einer
>Fritz!Box auf den Server zugreifen, das sollte doch gehen, oder?

Ob eine Portweiterleitung ausreichend ist, ist fraglich.
Ich hatte mal einen Server auf einem PC aufgesetzt, dabei musste der 
Router(war keine Fritzbox gewesen) so eingestellt werden, dass er dem 
Serverpc die externe IP zuweist, da die Anfragen ja auch an diese 
gestellt werden. Es gab zwar die Möglichkeit unter den 
Portweiterleitungen eine für Http-Server (Port 80) einzurichten, dies 
hat jedoch nicht funktioniert. Kann natürlich auch ein Problem dieses 
speziellen Routers gewesen sein.

>ist es korrekt da ja nur Anfragen von extern an den Server
>kommen und er deshalb keinen Gateway im Netz braucht um die Anfragen zu
>beantworten?

Was du hier beschreibst ist die NAT:
http://de.wikipedia.org/wiki/Network_Address_Translation

Wenn die Portweiterleitung so funktionier, leitet der Router die 
externen Anfragen auf Port 80 an den Webserver weiter, der bekommt die 
so, als wären die vom Router gestellt, gibt seine Antwort dann an den 
Router, der trägt die  IP des Anfragestellers ein und schickt das 
Päckchen auf seine Reise.
#692794
Lesenswert?

@Thomas Heldt:
Ja mit der Fritz!Box ist das möglich - die NAT ist praktisch integriert. 
Einfach bei Internet->Portfreigaben eine neue Portfreigabe erstellen. 
Dort muss bei "von Port" 80, an Port die IP des Servers im LAN und "an 
Port" wieder eine 80 stehen. Die Pakete werden dann automatisch 
umgeleitet.

Einen AVR-Webserver hab ich so zwar noch nicht betrieben, aber mit dem 
PC als Webserver hat es einwandfrei geklappt. Und der AVR-Webserver ist 
bereits in Arbeit :-).
Persönliche Seite #692799
Lesenswert?

@jemand und Randy N.

Das die Portweiterleitung funktioniert ist mir klar, sorry da ist meine 
Frage wohl falsch verstanden worden, es geht mir darum zu verstehen wie 
der AVR-Webserver die Seite ohne einen Gateway zu kennen an den 
anfragenden Client ausliefern kann.

Ich betreibe mehrere Server (Dienste) hinter der Fritz!Box und das NAT 
funktioniert super, aber alle Server haben halt auch die Fritz!Box als 
Gateway eingetragen, das ist in der Software für den AVR-Webserver aber 
nicht vorhanden, daher meine Frage.
#692804
Lesenswert?

Ups hab garnicht die Frage, sondern nur die Antwort meines Vorgängers 
gelesen, um dann zu sagen, es geht doch :-)

Also ohne es jetzt genau zu wissen, würde ich sagen, dass dem Webserver 
der Gateway, um Anfragen von Clients aus dem Internet beantworten zu 
können, nicht bekannt sein muss. Wenn der Webserver allerdings selbst 
von anderen Servern im Internet Daten abrufen muss, muss er dies über 
den Gateway erledigen - und DANN braucht der dessen IP. Aber da das ja 
bis jetzt noch nicht in der Firmware implementiert ist, muss diese auch 
den Gateway nicht kennen - somit kann man den auch nirgends angeben.
Gast #693007
Lesenswert?

Hi!
Super wäre jetzt noch die Möglichkeit, die aktuelle html-Seite
bei Abruf mit aktuellen Infos, wie zB dem Zustand von Input-Ports,
zu versehen.

Aber das hast Du wahrscheinlich in Version 0.992 eh schon drin ;)

gruss,
Michael

PS: Bin leider noch nicht zum testen gekommen, Controller
ist noch nicht da :(
Persönliche Seite #693083
Lesenswert?

@Sven

Ja aber genau das verstehe ich nicht wie HTTP an Port 80 gebunden wird, 
ich sehe keine 80 oder so:
1
//Trägt Anwendung in Anwendungsliste ein
2
void add_tcp_app (unsigned int port, void(*fp1)(unsigned char))
3
{
4
  unsigned char port_index = 0;
5
  //Freien Eintrag in der Anwendungliste suchen
6
  while (PORT_TABLE[port_index].port && PORT_TABLE[port_index].port!=0)
7
  { 
8
    port_index++;
9
  }
10
  if (port_index >= MAX_APP_ENTRY)
11
  {
12
    DEBUG("Zuviele Anwendungen wurden gestartet\r\n");
13
    return;
14
  }
15
  DEBUG("Anwendung wird in Liste eingetragen: Eintrag %i\r\n",port_index);
16
  PORT_TABLE[port_index].port = port;
17
  PORT_TABLE[port_index].fp = *fp1;
18
  return;
19
}

Auch sehe ich nur die leere Tabelle:
1
PORT_ITEM PORT_TABLE[MAX_APP_ENTRY] = // Port-Tabelle
2
{
3
  {0,0},
4
  {0,0},
5
  {0,0},
6
  {0,0},
7
  {0,0} 
8
};

Ich würde es gerne verstehen denn ich steige von Bascom aus um und
deshalb frage ich wenn ich etwas nicht verstehe/finde.
#693148
Lesenswert?

Hallo Ulrich,

habe das Wochenende genutzt und den Webserver mit Hilfe deiner 
Eagle-Dateien nachgebaut. Funktioniert prima!

Allerdings bin ich mir nicht sicher, ob du nicht den falschen 
Spannungsregler kühlst, wenn ich mir deine Bilder ansehe ;-). Der 
ENC28j60 ist ja ein kleiner Stromfresser (Imax = 250mA lt. Datenblatt) 
und damit wird der LM317 ganz schön heiß. Bei mir nimmt die komplette 
Schaltung max. 220mA bei 8VDC auf.

Vielen Dank für die Bereitstellung der Sourcen, Layouts und Pläne. Habe 
auch bei deinem Programm dazu gelernt.
Grüße Gerd G.
Gast #693543
Lesenswert?

Hallo

@Ulli kannst du sagen, wieviel "Reserve"der "Stack" übrig läßt, um zum 
beispiel so 1-Wire Sensoren  (DS18S20)anzuschließen? Oder via die 1-Wire 
Master DS2482-100 bzw. DS2482-800 mit I2C....ist das möglich? Kann man 
von dir so Platinen bekommen oder gibtst du sie in einen 
(Fertiguns)-Pool...dann müßten natürlich für dich kostenlose Platinen 
rausspringen.. bei so einer SUPER Arbeit.

Danke
Achim
Persönliche Seite #693731
Lesenswert?

@Ulrich

Ich habe jetzt die Möglichkeit integriert einen SHT11 Sensor abzufragen, 
wie kann ich die Werte Temperatur und Luftfeuchte jetzt aus der Webseite 
anzeigen lassen?

Die cmd.c habe ich schon erweitert so das ich die Werte über die 
serielle angezeigt bekomme.

Ich möchte aber die beiden Werte halt auf der Webseite sehen, die 
Möglichkeit die Ports zu schalten ist für meine Anwendung nicht so 
interessant ;)

Bin für jedem Tipp dankbar.

Gruß
Thomas
OP Persönliche Seite #693733
Lesenswert?

Hallo,

Der Prozessor hat noch genügend Reserven für sowas!! I2C uvm. will ich 
auch noch anbinden. Über eine Sammelbestellung bzw. der Verkauf der 
Platine bin ich noch am überlegen.

Der aktuelle SourceCode 1.0.2 funktioniert nun auch mit dem RTL8019 AVR 
Webserver von Holger Buss.

Das Anzeigen von Werten über das Webinterface ist schon in arbeit! Bis 
zum WE ist es dann fertig.

Gruss
Ulrich
#693761
Lesenswert?

Hallo Ulrich,

>Es stimmt der ENC28J60 nimmt recht viel Strom auf. Ich habe deshalb auch
>selbst den LM317 gekühlt, und nicht den LM78S05.

Mache ich auch. Aber auf dem Foto ist es anders herum. Da war der 
Kühlkörper am 7805, oder sehe ich das falsch?

Ansonsten ist der Aufbau sehr einfach. Ich habe mir allerdings die Pads 
und teilweise die Leiterbahnen vergrößert, damit ich es einfacher habe.

>Der aktuelle SourceCode 1.0.2 funktioniert nun auch mit dem RTL8019 AVR
>Webserver von Holger Buss.

Mal sehen, ob ich das am Wochenende mit dem M128-Server zum Laufen 
bringe.Ich habe da noch einen, der nicht im Dauereinsatz ist...

Momentan bastle ich an der Anzeige der geschalteten Ausgänge. Aber ich 
bin mit meiner Version schon wieder veraltet. Mann, bist du schnell!

Gruß Gerd
#694285
Lesenswert?

Hallo,

ich hatte das Projekt von Nik Bamert ja schonma aufgebaut, so brauchte 
ich nur die Software auszutauschen. So schnell wurde aus Device mit UDP 
Support ein Webserver :-)
Ich hab ein Kleinigkeit festgestellt, kommt jemand auf den Webserver 
wenn die Subnetzmaske nicht 255.255.255.0 sondern 255.255.0.0 ist ?
Ansonsten sehr nette implementation.

Gruß

Lars
Gast #694479
Lesenswert?

Ja, ich finde auch, dass es eine sehr schnelle Reaktion ist. Hast du 
spezielle Optimierungen auf Geschwindigkeit vorgenommen? Mega läuft mit 
16MHz??

Wie viele Prozente nimmt eigentlich der Text für die Website für sich in 
Anspruch?
Persönliche Seite #694496
Lesenswert?

@Gast

Ich betreibe alles mit dem Takt vom ENC28J60, bei mir 12,5MHz, also wäre 
da sogar noch etwas Luft nach oben. Ich arbeite hier bei mir aber mit 
sehr guten Switches, aber dafür hängt der "Kleine" jetzt hinter ca. 50m 
Kabel und  2 Switches.

Die Seite hat nur wenig Text, allerdings werden ja die Daten des SHT11 
noch on time eingefügt.

@Alle

Wer hat schon einmal ein Bild in die Software von tuxgraphics.org 
eingefügt, ich finde da keinen Anfang :(
Gast #694616
Lesenswert?

Hi!
Ich denke dass 1wire, SD-Card etc. noch kommen wird.
Bedenkt bitte, dass Uli das in seiner Freizeit macht und
wir alle wissen, dass man eigentlich immer zuwenig Freizeit hat :D

Danke an Uli und weiter so!

Gruss,
Micha
Gast #694811
Lesenswert?

Hier mal Ulrichs Webserver 1.0.3 mit FAT12/16/32 und MMC/SD.
Statt raket.gif wird image1.jpg von MMC/SD geladen wenn
eine Karte erkannt wird. Ist noch starr reinprogrammiert.

Achtung: Ich hab da massiv an httpd.c, stack.c, main.c
und enc28j60.c/.h rumgebastelt ! Also bitte nicht Ulrich fragen
wenn was schief geht ;)

Was ist bei mir anders ?
Mein Board benutzt INT0 statt INT2. Und der Reset Pin vom
ENC28J60 wird auch vom uC gesteuert. CS der MMC/SD wird
vom SS Pin angesteuert.

Das mit dem Resetpin in enc28j60.c klappt leider
nicht immer (nach ISP prommen). Da ist noch was faul.
RESET im Terminal eingeben reicht dann oft. Sonst
ausschalten und wieder einschalten.

Ob das alles so richtig ist ? Bis jetzt geht es.
Angehängte Dateien:
Gast #694981
Lesenswert?

>Was erreichst du insgesamt für eine Übertragungsgeschwindigkeit mit
>deiner SD Kartenanbindung?

Das hängt extrem von der Karte ab.
Inklusive FAT Dateisystem geht das bei mir
so von 27kB/s bis 400kB/s bei 8MHz SPI Speed.
Mittelwerte versteht sich. Ohne die Daten wirklich zu
verarbeiten. Also RAW Read/Write ohne Webserver.

Der Webserver bremst das natürlich gewaltig aus.
Ein 67kB JPG Bild braucht so ca. 18 Sekunden.
Unter Windows 98/XP. Linux ist doppelt so schnell ;)
#694992
Lesenswert?

Das ist der Grund warum ich mir eine Dataflash von Atmel auf mein 
Webserver-Board gemacht habe.
Da merkt mein den Unterschied. Ein Bild ist schnell geladen. Eigentlich 
merkt man keinen unterschied zum "richtigen" Server.

Die sind auch nicht teuer und für eine Webseite werden meistens nicht >2 
MB benötigt.

Ich habe jetzt einen 4 Mbit Flash und komme damit mehr als aus.
Gast #695012
Lesenswert?

Hallo Ulrich!

Ich hab gesehen das du über Telnet einen virtuellen Comport eingebunden 
hast.
Warum muss PC-seitig ein virtueller Com-Port erzeugt werden und dieser 
mit dem TCP-verlinkten verknüpft werden? Ist das nicht irgendwie doppelt 
gemoppelt, oder wie hab ich das zu verstehen?
MfG
Tom
Persönliche Seite #695027
Lesenswert?

@Ulrich

Wie kann man es machen das man die Webseite des Server über eine längere 
URL, z.B. http://10.0.0.10/password/ statt http://10.0.0.10/ erreichen 
kann?

Irgendwie sollte man einen kleinen Schutz einbauen können damit später 
nicht jeder Ports umschalten kann ;)

Es wäre auch gut den Zustand der Ports im EEPROM zu speichern, nach 
einem Reset wäre dann der Zustand wieder herstellbar der vor dem Reset 
da war.
Gast #695052
Lesenswert?

@Mr pcexperte!

Bitte nicht nur auf den Wissen anderer aufbauen. Es ist super, dass Du 
hier was dazu lernen willst; aber die Art und Weise ist etwas daneben! 
Bitte, zerfetzt mich jetzt für diesen Beitrag! Ich warte.
#695074
Lesenswert?

@Thomas P.
Soll heißen, im Internet gibt es sooo viele Quellen, wie man eine 
Webseite schützen kann - erstmal dort suchen und selber versuchen, es 
hinzubekommen. Beispielsweise hier: 
http://de.wikipedia.org/wiki/Hypertext_Transfer_Protocol#HTTP-Authentifizierung

Aber jaja ich kenn das - irgendwie ist es einfacher was ins Forum zu 
schreiben, als selbst nachzudenken. Hab ich auch schon paarmal gemacht 
und...danke dass ihr mir trotzdem geholfen habt :-D :-D :-D
Gast #695098
Lesenswert?

Hallo!
Ich sag gleich das ich von Programmierung kein großen Plan habe, aber 
mich interessiert eine Sache. Und zwar nachbau einer IP 
Camera/Videoserver...
Es soll so aussehen:
(CCD Modul 420Linien = Analog)>(A/D 
Wandler=?)>(Mikrocontroller=?)>(Ethernet Interface=ENC28J60)
Dieses teil sollte über eine IP ansprechbar sein?!
Ähnlich wie das hier:
http://avr.auctionant.de/avr-ip-webcam/avr-webserver-hardware.html
Gast #695303
Lesenswert?

Hi!
ich habe es so gemacht:
1
void command_help (void)
2
{
3
  unsigned char index = 0;
4
  for (index = 0;index<8;index++)
5
  {
6
    usart_write_str(CMD_TABLE[index].cmd);
7
    usart_write(" - ");    
8
    usart_write_str(CMD_TABLE[index].help);
9
    usart_write("\r\n");
10
  }
11
}

Ich habe die Kommando-Tabelle auch noch mit einem Hilfetext versehen.

Mein 4-zeiliges LCD lässt sich fernsteuern :)
http://mikrocontroller.homedns.org

inkl. Webcam zur Kontrolle (allerdings nicht über den Controller)

Gruss,
Micha
Gast #695305
Lesenswert?

@ Thomas
>Was mache ich falsch?

usart_write() ist eigentlich ein usart_write_P().
Das heisst es schreibt nur Strings aus dem Flash.
Für Strings aus dem RAM musst du wie Michael
usart_write_str() nehmen.
#695370
Lesenswert?

Ich hab den Webserver mal aufm Steckbrett getestet.
Sieht echt gut aus.
Was mir aufgefallen ist: Die drei Ausgangsports toggeln wenn man im 
Browser auf aktualisieren drückt.
Es scheint als würde das passieren, wenn man mal einen Haken gesetzt 
hatte.
Kann man das irgentwie machen, dass die Haken gesetzt bleiben, wenn der 
Port an ist?
Oder ist da noch ein Bug?
Gast #695562
Lesenswert?

Mir fällt gerade auf, dass bei den Servern die online sind, dass 
Impressum fehlt :-) Zum Glück sollten sich hierher nur 
Techniker/Ings/u.ä. verirren. Anwälte verstehen hier wahrscheinlich 
(hoffentlich) nur Bahnhof.

Aber ansonsten ist das eine super Ding. Einfach, preiswert und viel zu 
sehen.
#695584
Lesenswert?

>inkl. Webcam zur Kontrolle (allerdings nicht über den Controller)
>
>Gruss,
>Micha

Hallo,

hatte ich zuerst überlesen und mich dann gewundert, dass die Bilder so 
schnell laden. Aber eine schöne Idee mit der Cam und dem LCD. Ich suche 
gerade einen Schaltregler für die 3,3V in SMD um den LM317 zu ersetzen. 
Ich habe noch ein paar ENCs in SMD und überlege eine SMD-Version zu 
machen. Viel kleiner soll es eigentlich nicht werden. Mal sehen.

Zur Zeit streite ich immer noch mit den DS18S20. Sie bremsen einfach 
meine Anwendung aus. Oder ich lass es einen Tiny machen und verwende den 
als Slave.

Gruß Gerd
Gast #695658
Lesenswert?

Hallo,

ich bin kein auch Fachanwalt, und wollte das eigentlich nur ein wenig 
witzig meinen - mir ist klar, dass hier keiner ein Impressum 
implementiert/implementieren muss.

Soweit ich weiß, ist das bei rein privaten Seiten (was hier wohl 
unterstellt werden kann) wirklich nicht notwendig. Die kleinen Server 
sind ja auch über eine veränderliche Adresse ansprechbar, von 
dauerhafter Anwendung (so wird es wohl gefordert für die 
Impressumspflicht) kann also auch keine Rede sein.

Wäre aber witzig, falls es doch jemand implementiert, natürlich mit 
einem breiten ":-)" an unsere Justiz.

Gast.
#695701
Lesenswert?

Thomas Heldt wrote:
> @Gerd G.
>
> Nimm doch einen SHT11 von Sensirion (evtl. als Sample) und du hast auch
> die Luftfeuchtigkeit, Code dafür habe ich schon eingebunden und läuft
> stabil.

Ist schon richtig. Das Teil ist nicht schlecht. Leider habe ich noch 
keinen. Die Dallas verwende ich, weil ich vier Meßstellen habe und nur 
die Temparatur brauche.

Aber eine Wetterstation mit Innen- und Außenmeßwerten wird auf meiner 
Liste sein. Funkübertragung natürlich über RFM12, die bieten sich zur 
Zeit an. Die Werte sollen auf einer Website dargestellt werden und alle 
halbe Stunde auf SD-Karte gespeichert werden. Wäre natürlich toll, wenn 
ich die Werte dann als Diagramm anzeigen könnte (Tageswerte).
Persönliche Seite #695729
Lesenswert?

@Ulrich

Funktioniert super, vielleicht kannst Du die base64.c und base64.h von 
dieser Seite http://www.episec.com/people/edelkind/c.html oder dieser 
Seite http://www.adp-gmbh.ch/cpp/common/base64.html gebrauchen um den 
base64 kodierten String aus Name/Passwort in der http.c zu erzeugen. 
Dann könnte man in der config.h die beiden Werte im Klartext ablegen.

Gruß
Thomas
#695800
Lesenswert?

Hallo,

alle Sonderzeichen werden vom Browser codiert in %nnn
dieses müsste der AVR-Server erst wieder zurückwandeln damit die 
entsprechenden Zeichen rauskommen.

Kannst dir ja mal die Adresszeile anschauen, was da rauskommt beim 
senden.

@Michael:
Die Seite wird bei mir jetzt nicht mehr richtig geladen, hats da was 
zerbröselt, oder wird grad optimiert ?!

mfG
#695832
Lesenswert?

@Michael
ich gehe per Proxy ins Inet, kann den aber auch deaktivieren, zum Test, 
dann gehts. Heute Nachmittag, vom Büro aus, hats auch geklappt, da gehts 
nur per Proxy ins Inet.

Evtl. kannst Du mal probeweise diese Zeile in den Header der Seite 
einbauen :
1
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
dann sollte die Seite nicht in 'nem Cache landen.



Mir würde nur der richtige Quarz für den ENC abgehen, dann könnte ich 
auch so einen Server zusammenbauen.
Gast #695968
Lesenswert?

Hallo,

ich hatte bisher alles mit einem älteren WinAVR gemacht. Bis v4 ging es 
auch. Jetzt hab ich halt die neue WinAVR drauf :-)

Ich habe nun schon ne Weile auf den Code geschaut, mir ist aber noch 
nicht ganz klar, wie die httpd.c genau funktioniert. Es gibt ja die zwei 
großen if-Abfragen: Einmal mit tcp_entry[...].app_status == 1 und einmal 
mit .app_status > 1 und < 0xfffe.

In der oberen (app_status==1) wird ja (nach der authentifizierung) 
entweder eines der bilder gesendet, die Ausgänge gesetzt oder die 
index-Seite gesendet.

In der unteren if-Abfrage (app_status > 1) ist dann allerdings noch eine 
schleife von 0 bis 290. In dieser werden auch die Variablen gesetzt. Mir 
ist jetzt der Zusammenhang nohc nicht ganz klar. Wo werden die Variablen 
beim ersten Senden der "page1" gesetzt? Die Kommentare haben mir leider 
noch nicht ganz geholfen.

Danke und Gruß
Steffen.
#696019
Lesenswert?

Simon K. wrote:
> Lars Kessner wrote:
>> Ich hab ein Kleinigkeit festgestellt, kommt jemand auf den Webserver
>> wenn die Subnetzmaske nicht 255.255.255.0 sondern 255.255.0.0 ist ?
>> Ansonsten sehr nette implementation.
>
> Das hängt von der IP/Subnetzkombination deines PCs ab. Ich empfehle eine
> Netzwerklektüre.

Hallo Simon,

ich glaube nicht das ich eine Netzwerklektüre benötige, dass ist mein 
tägliches Geschäft und ich habe halt ein Netzwerk laufen was nicht 
255.255.255.0 als Subnetzmaske besitzt. Und das Netzwerk funktioniert.

Gruß

Lars
Gast #696069
Lesenswert?

Hallo Thomas,

ja, nachdem ich dann mit meinem Notebook abends im Bett den Quelltext 
noch mal durchgeschaut habe (man wie krank hört sich das jetzt an ;-) 
denke ich genauso wie du.

In der ersten Abfrage wird für die Indexseite bspw. nur der Header 
gesendet und der Zeiger auf die zu sendenden Werte gesetzt. Erst wenn 
dann die Bestätigung vom Client kommt, wird dann die ganze Seite 
gesendet.

Eine Frage noch: Warum wird die Schleife 290 mal durchlaufen? Ist das 
ein maximaler Wert für irgendetwas, oder korrespondiert der mit der 
Anzahl der Zeichen in der Indexseite? oder... oder... oder...???

Könnte der Wert auch über ein strlen o.ä. aus Page1 ermittelt werden?

Gruß
Steffen.
Persönliche Seite #696078
Lesenswert?

@Steffen

Warum es genau diese 290 Zeichen sind kann ich auch nicht sagen, bin ich 
noch nicht hinter gestiegen da müsste Ulrich was zu sagen.


@Ulrich

Ich habe ein komisches Verhalten bzgl. Browser und Authentifizierung 
festgestellt:

MTU-Wert: 1100-1500 versucht

Zugriff per IP-Adresse im Browser oder per Domainnamen (Dyndns)

Klappt mit Firefox unter Linux SuSE 10.3, mit dem IE 6 unter Win2000 
aber nicht korrekt mit dem Firefox unter Win2000.

Zugriff per Domainnamen über Dyndns klappt immer mit allen Browsern.

Beim Zugriff über die IP-Adresse kann man sich beim ersten mal anmelden 
und auch einen Schaltvorgang durchführen (Firefox) wenn man dann noch 
mal direkt schalten will kommt wieder die Authentifizierung und nichts 
geht mehr. Refreshed man die Seite aber nach dem ersten Schaltvorgang 
(Also Datenübergabe in der Url) und schaltet dann wieder geht es auch.

Dieses Verhalten tritt bei mir mit verschiedenen MTU-Werten auf und 
immer mit dem Firefox.

Steckt da eine Logik hinter?
Gast #696145
Lesenswert?

Hallo,

nochmal eine Frage zum Verständnis des Codes: Ich habe im Anhang eine 
einfache, schnell erzeugte Grafik zum Programmfluss:

Habe ich das richtig verstanden, dass, nachdem der eine neue Anfrage 
gestartet wurde (z.B. Aufruf der Seite oder Anfrage des Clients nach 
einem Bild) eine neue TCP-Session aufgemacht wird mit 
tcp_entry[index].app_status==1 (sonst =0)?

Wenn diese Nachricht empfangen wurde, wird noch kontrolliert, ob es eine 
Anfrage nach einem Bild oder der Html-Seite war. Je nachdem, ob die 
Anfrage ein Bild oder Html war, wird der entsprechende Header sofort! 
gesendet und der Pointer für die nächsten Daten auf die entsprechende 
Quelle gelegt (die Html-Seite ist Page1 und die Bilder Page2 bzw. 
Page3). Das Unterprogramm wird dann beendet.

Beim Senden des Headers wird der Statuszähler um eins erhöht (in der 
Routine tcp_socket_process in der Datei stack.c).

Wenn der Client nun die Bestätigung für den Empfang des Headers sendet, 
wird erneut der Httpd aufgerufen. Nun ist der app_status aber höher 
(min. 2) und es wird in die zweite if-Abfrage gesprungen. In dieser wird 
nun auf Basis des gesetzten Pointers die entsprechende Page gesendet. 
Egal welche Page ausgewählt wird, wird der Inhalt nach den Variablen 
durchsucht und durch entsprechende Werte ersetzt. Diese werden nun 
gesendet.

Kann es vorkommen, dass die Variablenzeichenkette (VA@xx) auch in 
Bildern vorhanden ist und dann durch Werte erstetzt wird???

wenn keine Daten mehr vorhanden sind, wird die Session beendet.

Bitte um Bestätigung ;-) (oder Korrektur)

Gruß
Steffen.
Angehängte Dateien:
Persönliche Seite #696168
Lesenswert?

@Steffen

Meinem Verständnis nach ist es genauso wie du es beschrieben hast, ob 
die Variablenplatzhalter so in Bilddaten vorkommen kann ich aber nicht 
sagen, theoretisch dürfte es aber möglich sein was dann wohl zu 
"Pixelfehlern" führen würde. Aber ich glaube das es passiert ist sehr 
unwahrscheinlich.

Man könnte je nach Headerart die Variablen evtl. nur bei nicht Bilddaten 
ersetzen lassen, mal sehen was Ulrich sagt.
Gast #696437
Lesenswert?

Hallo

Zur Info.
Ich benutze die letzte Version von Ulrich Radig (Danke für den 
Sourcecode) newStack_1_0_4 und habe bis auf den RJ45 Stecker die 
gleichen Komponenten. Also ENC28J60 und einen Atmega32.

Habe ein Problem mit der MAC Adresse. Wenn ich diese in den ENC schreibe 
gibt es keinen Fehler. Schaue ich die Einträge im Register an mit

usart_write("MAC 0: 0x%1x\r\n", enc28j60Read(MAADR1));
usart_write("MAC 1: 0x%1x\r\n", enc28j60Read(MAADR2));
usart_write("MAC 2: 0x%1x\r\n", enc28j60Read(MAADR3));
usart_write("MAC 3: 0x%1x\r\n", enc28j60Read(MAADR4));
usart_write("MAC 4: 0x%1x\r\n", enc28j60Read(MAADR5));
usart_write("MAC 5: 0x%1x\r\n", enc28j60Read(MAADR6));

ergibt dies als Ausgabe:

MAC 0: 0x0
MAC 1: 0x0
MAC 2: 0x0
MAC 3: 0x0
MAC 4: 0x5f
MAC 5: 0x0

Dass heisst: Nur der letzte Eintrag wurde im Speicher abgelegt und zwar 
an der ersten Stelle. Alle anderen Einträge sind 0x00. Es sieht so aus, 
als würde sich die Adresse nicht ändern und dauernd der neue Eintrag den 
vorhergehenden löscht. Mache ich einen Überlegungsfehler, stimmt etwas 
im Quellcode nicht oder könnte es sein, dass mein ENC den Geist 
aufgegeben hat(Wahrscheinlich nicht, da ich den letzten Wert auslesen 
kann).

Ein anderes Problem ist mit der ARP Tabelle. Diese ist immer 0. Die 
sollte doch automatisch gefüllt werden oder liege ich da falsch???

Vielen Dank für die Hilfe

Gruss
Persönliche Seite #696523
Lesenswert?

@Ulrich

Entweder habe ich nicht alle Änderungen aus der 1.07 in die 1.06 
übernommen oder es tritt ein neues Problem mit dem Firefox auf:

Wenn ich per IP-Adresse zugreife lädt der Browser unter Win2000 endlos 
obwohl die Seite komplett ist. Mit IE und wenn ich auf den Dyndns 
Domainnamen zugreife funktioniert es. Unter Linux ist die Seite total 
kaputt :(

Kann da mit den Variablen zu tun haben, ich nutze andere als du, z.B. 
%LED1 und ersetze diese mit folgendem Code:
1
      if (strncasecmp_P("%LED1",http_entry[index].new_page_pointer,5)==0)
2
      {
3
        if((PORTB & (1<<PB1))!=0)
4
        {
5
          memmove(&eth_buffer[TCP_DATA_START+a],"<b><font color=\"#FF0000\">AUS</font></b>",39);
6
          a = a + 38;
7
          http_entry[index].new_page_pointer=http_entry[index].new_page_pointer+5;
8
        }
9
        else
10
        {
11
          memmove(&eth_buffer[TCP_DATA_START+a],"<b><font color=\"#00C000\">AN</font></b>",38);
12
          a = a + 37;
13
          http_entry[index].new_page_pointer=http_entry[index].new_page_pointer+5;
14
        }
15
      }
Persönliche Seite #696536
Lesenswert?

@Ulrich

Alles klar habe es gelöst ;) ARP Cache geleert und MTU-Wert angepasst.

Jetzt klappt es mit allen Browsern unter Linux und Windows.

Noch eine Frage, ich habe FTP soweit das ich mich mit WS-FTP am Server 
anmelden kann, alle Anfragen vom Client werden beantwortet.

Aber jetzt will der Client ja einen Port <>21 haben für die 
Datenkommunikation, wie kann ich jetzt einen neuen Port für die aktuelle 
Sitzung öffnen und z.B. ein Dummy Directory Listing an den FTP-Client 
senden?

Im RFC ist die Antwort auf LIST nicht deklariert und wie ich das mit den 
beiden Ports mache verstehe ich leider noch nicht.

Ich war schon froh das ich es hinbekommen habe das der Server auf die 
FTP Anfragen antwortet und die Verbindung auf- und abbauen kann.
Persönliche Seite #696691
Lesenswert?

@Werner B.

Danke, habe ich schon gelesen, werden aber auch zwei Ports genutzt. Aber 
ich muß hier erstmal die aktuelle Version stabil zum laufen bekommen 
bevor ich weiter um FTP kümmern kann.

@Ulrich

Kann es sein das die V1.07 extrem abhängig von der URL, Länge der 
Webseite etc. ist. Mal lädt die Seite mit einem MTU-Wert, dann wertet 
sie aber die Parameter der GET Anweisung nicht korrekt aus, dann wieder 
klappt alles mit der Auswertung dafür lädt die Seite im Browser endlos.

Egal ob mit deiner Originalversion als auch mit meiner bisher eigentlich 
stabilen Version.

Hast Du da noch einen Tipp?
Persönliche Seite #696736
Lesenswert?

@Ulrich

Läuft wie geölt auf Win2000 mit IE6 und Firefox und auf SuSE 10.3 mit 
Firefox auch ;)

Kannst Du mir vielleicht noch einen Tipp geben wie ich aus meiner ftpd.c 
heraus einen zweiten Port (z.B. 999) gebunden an die gleiche MAC/IP 
öffnen kann als Datenport für FTP?

Müsste das dann eine eigene Anwendung mit eigenem Port darstellen, 
glaube doch schon das ich beim Start den Port als Anwenung eintragen und 
nach der Verbindung wieder aus der Anwendungsliste löschen muss, korrekt 
gedacht?
Gast #696792
Lesenswert?

@ Ulrich

Mach aus den
const char http_header1[]={"HTTP/1.0 .....

doch mal ein

PROGMEM char http_header1[]={"HTTP/1.0 .....

Dann ersetzt du

memmove(start_data,http_header...

durch

memcpy_P(start_data,http_header....

Schon hat man fast 300 Byte RAM mehr zur Verfügung.

Und schmeiß Page2 aus httpd.c raus in eine Headerdatei.
Ist ja lästig da dauernd über ein 1000 Zeilen Hex Listing
scrollen zu müssen wenn man mal zwei Zeilen ändern möchte.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren