Hallöchen,
Ich habe es doch noch geschafft behelfsmäßig einen uWebSrv
zusammenzubauen. Zumindest hat der Behelf gereicht um den Webserver zu
reparieren.
Auf meiner Seite ist ein neues ZIP Archiv online:
http://klinkerstein.m-faq.de/Download.php?content=MikroWebServer&dl=uWebSrv.zip
Ich habe die Struktur des HTTP Dienst etwas verändert. Unter anderem
auch das Parsing.
Rückmeldung ob es funktioniert wäre nett :-) Und falls es das nicht tut,
am liebsten wieder Wireshark-Berichte.
Hallöchen zurück :-)
So, das scheint jetzt zu funktionieren. Im Original mit geänderter IP
auf gleichem Port.
Kein Absturz (WLAN muss ich noch probieren), beim refresh die Frage nach
dem wiederholten sende dürfte bei POST normal sein. Prima Sache...
Ich glaube aber jetzt, das ich mit einem Persönlichen Problem komme.
In der alten Source habe ich mir das Webinterface angepasst, und damit
klappt es nun nicht auf anhieb...
Nach "Modify" kommt nix mehr, erst nach einem Refresh.
Da ich HTML Neuling bin, habe ich evtl. was übersehen.
Im Anhang mal mein Wireshark...
...und hier im Anhang mal meine veränderte Source...
Ich habe das einfach von der alten HttpD rüber kopiert zur neuen...
OK, ehrlich gesagt, bin ich bei den Variablen noch nicht so
durchgestiegen und witziger weise, klappt meine Menüveränderung jetzt
auch nicht mehr mit Firefox...:-(
Die funktion wird übertragen und ausgeführt, aber die Seite nicht
automatisch upgedated...
Aber wie gesagt, das Original vom Simon macht jetzt im IE bei mir keine
Probleme mehr!
Vielen Dank,
Gruß
Clyde
Super, dass der Originalcode erstmal funktioniert. Deine Probleme können
durchaus davon kommen, dass ich ein bisschen an der Struktur gebastelt
habe.
Die Warnung, bei einem Refresh nach einem POST ist völlig normal (je
nach Browser).
Ich schaue mir deine Dateien mal bei Gelegenheit an :-)
Frage untergegangen:
Wie kann ich bidirektional Daten austauschen,
würde die 8+6 Bit gerne zur Datenübertragung nutzen.
Die Webserverfunktionalität ist dafür wahrscheinlich nicht geeignet,
oder ?
Ja, der uip Stack unterstützt auch UDP. Für UDP ist auch ein
"Application Hub" vorhanden im uip Ordner, wo du eine UDP Applikation
einbauen kannst. Du kannst auch den Webserver herausnehmen dann um den
Speicher freizukriegen.
Hallo,
ich versuche es mal in Worten zu fassen.
Die ersten 10 GPIOs möchte ich nur zum Schalten nehmen, also DDR = 1 und
dann mit den Radio-Buttons An oder Aus schalten, mit Statusmeldung.
Und die letzten 4 möchte ich als Eingänge zur Statusmeldung nutzen.
Da ich noch nicht durchgestiegen bin, wo die Variablen herkommen und
hingehen, habe ich das versucht in HTML zu lösen.
Mit Hilfen von Google und entsprechenden HTML Kursen ;-)
Aber da stehe ich halt auch noch am Anfang, deswegen ist es für leute
mit kenntnissen sicher recht *** ;-)
Ist halt "learning by doing" im "Try and Error" Format :-)
Mehr bei bedarf nach Feierabend...
Gruß
Clyde
Clyde wrote:
> Hallo,>> ich versuche es mal in Worten zu fassen.> Die ersten 10 GPIOs möchte ich nur zum Schalten nehmen, also DDR = 1 und> dann mit den Radio-Buttons An oder Aus schalten, mit Statusmeldung.> Und die letzten 4 möchte ich als Eingänge zur Statusmeldung nutzen.>> Da ich noch nicht durchgestiegen bin, wo die Variablen herkommen und> hingehen, habe ich das versucht in HTML zu lösen.> Mit Hilfen von Google und entsprechenden HTML Kursen ;-)> Aber da stehe ich halt auch noch am Anfang, deswegen ist es für leute> mit kenntnissen sicher recht *** ;-)> Ist halt "learning by doing" im "Try and Error" Format :-)
Ah, Okay. Naja, das große Problem ist halt, dass du für die Sache nicht
nur HTML brauchst, sondern auch nen Gefühl dafür haben musst, wie du
HTML Quelltext mit den (dynamischen) Variablen ausm Code verbindest.
Bisher läuft das so, dass "%i<nn>" im HTML-Quellcode durch den Wert (0,
1) von GpioGetPin(<nn>) ersetzt wird. "%d<nn>" durch GpioGetDdr(<nn>)
und "%o<nn>" durch GpioGetPort(<nn>). Dafür sorgt die CopyHtmlData (oder
so ähnlich) Funktion.
Das ist die eine Richtung.
Die andere Richtung geht über das POST Interface. Alle Elemente im
HTML-<form> haben einen Namen und einen Wert, der per POST (also im HTTP
Header des Browsers) in Form von "Name1=Wert1&Name2=Wert2..." an den
uWebSrv zurückgeschickt wird, der dies wiederum wieder parst und
"%d<nn>" in GpioSetDdr(<nn>) und "%o<nn>" in GpioSetPort(<nn>) umsetzt.
Zu beachten ist hierbei aber, dass der POST-Parser nach einer bestimmten
(zur Kompilierzeit festgelegten) Anzahl von Zeichen aufhört. Damit spare
ich mir das weitere Parsen von dem HTTP Header des Browsers. (Das
#define dazu steht in HttpD.c ganz oben irgendwo). Falls du also
Änderungen vornimmst, musst du auch den Parameter anpassen. Die Länge
des POST Headers kannst du mit Wireshark oder Firefox+Live HTTP Headers
Addon herausfinden und dort eintragen.
Ha, dann wird das vermutlich der punkt sein, mit dem Parser :-)
Werde ich nachher mal ausprobieren.
Danke auch für die weitere Erklärung, das hilft mir sicher sehr, denn
ich habe mich schon gefragt, wo da die Schnittstelle ist :-)
Prima! Danke!
Ich hoffe das klappt dann, dann habt ihr ruhe vor mir ;-)
Danke!
Gruß
Clyde
Hallo wieder :)
Der neue Sourcecode funktioniert auch bei IE6 auf W2K über WLAN.
Super Sache!!!
Bei meinem Persönlichem Menü hängt es zwar noch, aber die aktuelle
Version von Simon läuft prima!!!
Wenn meine Version klappt, stelle ich sie gerne hier rein.
Falls jemand schon eine abgewandelte Vrsion hat, würde ich mich
natürlich auch drüber freuen ;-)
Gruß
Clyde
Clyde wrote:
> Hallo wieder :)> Der neue Sourcecode funktioniert auch bei IE6 auf W2K über WLAN.> Super Sache!!!
Super.
> Wenn meine Version klappt, stelle ich sie gerne hier rein.> Falls jemand schon eine abgewandelte Vrsion hat, würde ich mich> natürlich auch drüber freuen ;-)
Wenn du nicht weiter kommst, stell deinen bisherigen Quelltext mal rein
;)
Ja, das ist wirklich super! ;-)
Vielen Dank für die Hilfe, aber ich hänge derzeit ja nur im HTML Code
und versuche es darüber passend zu machen.
Ich hoffe mal, das es mit Google machbar ist...
Nur etwas über HTML in verbindung mit MC´s zu finden ist schwierig ;-)
> Nur etwas über HTML in verbindung mit MC´s zu finden ist schwierig ;-)
Kleine Info - das was der WebServer sendet ist HTML-Code - sprich eine
ganz "normale" Seite, wie die Billionen von Seiten des Netzes, die Du
Dir mit (vermutlich) jedem Brauser angucken kannst (typisch: Quelltext
anzeigen).
Das Beispiel printf("Hello World") könntest Du vermutlich kennen.
Du mußt also nix anderes tun, als ein printinsnetz(Html_Code); machen.
Und eine gute Info über HTML-Code findest Du hier:
http://de.selfhtml.org/
Für ein zentriertes "Hello World" mußt Du also nix anders machen als
folgenden Text Richtung Internet schreiben:
printinsnetz("<html><body><center>Hello World</center></body></html>");
Am einfachsten baust Du Dir also erstmal eine Seite in normalem
HTML-Code und überträgst das dann in die
Textausgabe_Richtung_Internet(t).
Das nur so als Konzept/Idee/grundlegende Info - ist wirklich easy!
Viel Erfolg :-)
Vajk
Anmerkung des Verfassers:
"Brauser" ist (m)ein Scherz
printinsnetz ist eine Funktion, die den Text eben aus dem uC raussendet
Zur Verwirrung: php macht auch nix anderes, als eben programmgesteuert
HTML-Code zu erzeugen ... mit php, könnte man auch einen
uWebServer-Emulator schreiben ....
Guten Morgen,
vielen Dank für die Ausführung.
Sowohl "Hello World" und auch Selfhtml kenne ich schon;-)
Selfhtml ist meine derzeitige Lektüre.
Mein Problem ist die einbindung der Variablen des uWeb im HTML ;-)
Und da finde ich nicht viel drüber, mal beschreibungen, die sich nicht
umsetzen lassen und dann mal wieder aussagen, das Variablen in HTML
nicht vorkommen sondern Javascript benötigen.
an JS will ich erstmal noch nicht, eins nach dem anderen halt.
Meine letzten Programmiertversuche sind schon fast 20Jahre her und waren
auf nem C64 ;-) HD44780 am Userport.... lang lang ists her :-D
Gruß
Clyde
> Mein Problem ist die einbindung der Variablen des uWeb im HTML ;-)
Was das Problem?
int uWebCounter = 7;
printf("<html><body><center>Hello World Nr. %d</center></body></html>",
uWebCounter);
und schwupps, steht eine Variable im HTML-Code.
Oder anders gesagt, beschreibe Dein Problem ganz genau, dann kann man(n
oder frau) auch ganz genau antworten oder Tipps geben ;-)
Im Prinzip stimmt das, was Vajk sagt, aber das mit printf ist natürlich
nicht so ganz richtig ;)
Das "Verfahren" was beim uWebSrv angewandt wird, ist kein bestimmtes
Verfahren, was man irgendwo nachlesen kann, sondern das ist von mir dort
eingebaut worden.
Sprich: Der uWebSrv ist von mir darauf limitiert worden nur Seiten aus
dem PROGMEM heraus zu laden. Das heißt, dass die komplette Webseite als
Quelltext im ROM des Mikroprozessors stehen muss.
So, jetzt habe ich noch dieses besagte Verfahren eingebaut, was
automatisch beim kopieren des Quelltextes in den uip-Buffer nach
%-Zeichen sucht und an der Stelle das Ergebnis von den Gpio Funktionen
einsetzt.
Das ist händisch von mir so eingebaut worden und diente mehr oder
weniger auch nur der Demonstration als einem höheren Zweck. Was aber
nicht daran hindern soll, den uWebSrv-HttpDaemon weiter auszubauen.
Und eben weil das Innere des Http-Daemons nur eine Demonstration für den
uWebSrv (der nach meiner Definition nicht unbedingt einen Http-Daemon
haben muss ;)) relativ schlecht dokumentiert ist, habe ich hier ja schon
meine Hilfe angeboten bzgl. wie du dynamische Variablen in den Code
einbauen willst.
Dazu wirst du nämlich nichts im Internet finden :D
Hallo,
selfhtml hilft ja schon gut weiter @vajk.
Aber der uWeb mag meine
"<input type='radio' name='o00' value='1'>Ein <input type='radio'
name='o00' value='0'>Aus"
Zeile nicht mehr(lädt nicht fertig), nach dem die Funktionierende Source
kam. Vorher klappte es, mit der nicht richtig funktionierende Version.
Das verstehe ich halt nicht ganz.
Da ich Variablenzuweisungen bisher nur als "Q=1" kenne und dies
natürlich nicht geht, habe ich bei der Zuweisung des DDR-Wertes einfach
"<input type='hidden' name='d00' value='1'>%d00"
So wurde DDR nach dem ersten modify eingestellt und gleichzeitig durch
das CSS markiert. Das Funktioniert auch in dem neuen Source.
Was den Parser angeht, es wird ja jetzt nicht mehr übertragen, daher
half ein verändern des Wertes auch nicht, so meine
erkenntnis/vermutung...
Eine Funktion mit "IP:Port:DDR:Pin" zum schalten ist sicher auch nett,
aber da wird es mit der Statusabfrage sicher schwierig.
Wie auch immer, Deine Demonstration ist im Prinzip das, was ich brauch,
nur halt mit Buttons, damit ich es mit einem Touchscreen einfacher habe
;-)
halt mit Rückmeldung, was an ist und was aus ist.
Im C Code möchte ich noch nicht rumwühlen, da fehlt mir einfach die
Ahnung. HTML sehe ich da als Leichter und für mich als Mittel zum Zweck.
Also, um es einfach fürs Verständnis zu machen :-)
Ich stelle mir ein Eingabefenster vor, wie jetzt, aber wo ich per
"Knopf" die auf Ausgang gestellten Ports ein bzw. aus schalte und die
auf Eingang geschalteten Ports den Zustand erkenne. Es reicht mir ja,
wenn ich 1 und 0 mit Rot und Grün sehe :-) und die definition des DDR
möchte ich im HTML festlegen...
So far so good...:-)
Gruß
Clyde
Hallo,
könnte jemand mal die Input-Zeile mit den Radio-Buttons ausprobieren?
Ich glaube, das der " " nicht gemocht wird, ohne klappt es
scheinbar...
Gruß
Clyde
Ich glaube du wirst nicht um das Ändern des Codes drumherumkommen, wenn
du die Ausgänge einzeln schalten willst, übrigens.
Aber aus deinem letzten Post werde ich auch nicht so wirklich schlau :-)
" " ist übrigens einfach nur ein Html-Spezialzeichen für ein
Non-Breaking-Space. Also ein nicht umbrechbares Leerzeichen.
Hallo nochmal...
könnte jemand mal die Source im Anhang ausprobieren und mir schildern,
was bei ihm passiert.
Das   scheint es nicht (nur) zu sein.
So, wie es jetzt ist, muss ich nach dem schalten nochmal refreshen.
Auch den Parser auf 177 zu setzen( o(nn) ist ja 2mal aufgeführt obwohl
es ja dieselbe Variable ist) hat nichts verändert.
Evtl. den Parser noch weiter herauf setzen?
Gruß
Clyde
Hat sich wohl überschnitten :-)
Ja, das   sollte jau auch ein Space in der Zeile sein ;-)
Ich hatte zu diesem Zeitpunkt nur die GPIO 00 geändert mit den
Radio-Buttons und dann mal mit und dann ohne   probiert. Da war ich
aber zu voreilig...
Nachdem ich die ersten 10 GPIO´s mit dem Radio-Button versehen hatte,
stehe ich vor o.g. Problem...
Es läuft sonst, mit meinen verönderungen 100%, nur die Radio-Buttons
werden nicht gemocht. Vermutlich, weil ich ja einmal die Input-Abfrage
mit 1 und dann nochmal mit 0 mache um die Wahl zu haben...
Komisch das ist ;-)
Gruß
Clyde
Clyde, schau dir mal die HttpD.c im Anhang an. Das sollte so ziemlich
das sein, was du willst. Einziger Nachteil: Für den Status der
Checkbuttons beim Laden der Seite musste ich Javascript einsetzen.
Wow!!!
Danke!!!
So habe ich mir das gedacht :-D
Ich wollt Dich jetzt nicht mit der Umsetzung belästigen oder
auffordern!, aber Danke!, das Du es gemacht hast
Mein Weg wäre wohl noch sehr weit gewesen...auch wenn er für
Spezialisten wie Dich kein Problem ist ;-)
Javascript ist kein Problem, nur ICH hätte mich da jetzt noch nicht ran
gewagt, weil ich erstmal HTML lernen möchte und ebenso auch C.
Das mit den "vormarkierten" Buttons war sogar eine Wunschvorstellung von
mir;-)
Mal gucken, ob ich verstehen lerne, was Du gemacht hast. Eine
Javascript-Seite habe ich schon aufgetan, die einiges beschreibt.
Mann, sie lädt sogar schnell!!!
DANKE!!! nochmals!
Prima Sache, auch wenn ich, scheinbar, recht "anspruchslos" in der
Nutzung des uWebservers bin :-)
Gruß
Clyde
Kein Problem, war ja nur eine Fingerübung für mich ;) Wie gesagt benutzt
die Seite ein wenig Javascript. Das heißt u.a. dass der Start-Wert der
Optionbuttons erst eingestellt wird, wenn die Seite komplett fertig
geladen ist. Außerdem darf im Browser das Javascript nicht deaktiviert
sein.
Trotzdem Danke!
Ist ja nicht selbstverständlich, das sich jemand die Zeit nimmt:-)
Ich werde sicher jetzt OT, möchte aber gerne wissen, ob ich das richtig
interpretiere und meine Leserei wirklich weiterhilft :-)
Wenn ich das richtig sehe, dann werden erst alle 10 Werte durch die
Schleife eingelesen wenn die Seite geladen wird(onload) was Du ja im
Prinzip oben geschrieben hast und dann verglichen in der "If Else".
Die zu lesenden Variablen sind mit var definiert, das heisst, wenn ich
jetzt aller 14GPIOS zum schalten nehmen will, müsste ich diese in die
var output setzen und die Schleife von 0 bis 13 zählen lassen, richtig?
Und natürlich die Tabelle entsprechend ändern.
Was mich etwas stutzig macht, ist die IF-Sache...
Wenn i ==1 dann o0+i gleich 0 aber ansonsten(else) o0+i gleich 1?
Ich hätte jetzt eher gedacht, 1=1 und 0=0 und dementsprechend dann die
Buttons "ge"checked...
OK, mit Javascript hatte ich noch nix am Hut aber das wäre jetzt mein
Verständnis gewesen :-) und mit document.irgendwas kann ich auch noch
nix anfangen...
Gruß
Clyde
Clyde wrote:
> Was mich etwas stutzig macht, ist die IF-Sache...> Wenn i ==1 dann o0+i gleich 0 aber ansonsten(else) o0+i gleich 1?> Ich hätte jetzt eher gedacht, 1=1 und 0=0 und dementsprechend dann die> Buttons "ge"checked...
Nene, so einfach geht das nicht. mit "o0+i" bastele ich den namen der
Checkboxen zusammen und hol mir eine Javascript Referenz per
document.getElementsByTagName(...). Diese Funktion wiederum liefer ein
Array (Es kann mehrere Elemente mit dem gleichen Namen geben).. Und dann
wird entweder das erste Element mit dem Namen (On Check) oder das zweite
(Off Check) entsprechend gesetzt.
Simon K. wrote:
> AVR ISP mkII
tnx ... wieso verkauft Tanter Reichelt den für 280 Euro, wenns den bei
embedit für 45 Euro gibbet - der ist doch identisch, oder?
Und der "USBprog - Open-Source" würde mir besser gefallen, aber geht
wohl nicht ohne Adapter ...
Oder?
Simon K. wrote:
> Der ist das.
...
> 280€ kostet vermutlich das JTAG ICE mkII
Ah, Danke - wow Tante R hat eine "nichtverfügbarkeitsinformation" - wow
LG
Vajk
@Clyde - könntest DU Dich hier mal anmelden, damit man Dir auch ein PN
schicken kann.
Du hast den CrispAVR-USB - funktioniert der auch mit Spannungserkennung,
wenn VCC auf der ISP nicht beschaltet ist?
@Simon K - sie selbe Frage, was wenn VCC nicht beschaltet ist?
VCC am ISP Stecker ist beim AVR ISP mkII (und eigentlich allen anderen
Atmel Programmiergeräten) unbedingt nötig, da diese einen
Spannungswandler beinhalten und diese VCC-Spannung die Spannung der
Zielschaltung vorgibt in der programmiert werden soll.
Billige(re) Programmiergeräte haben meistens keinen Pegelwandler drin
und programmieren fest mit 5V oder 3,3V
Hallo,
nun bin ich auch angemeldet. Hätte ich eh gemacht, hier gefällts mir ;-)
Ich kann Die leider nicht sagen, ob er auch ohne VCC auf dem ISP
funktionier...ist mein Erster Atmel mit dem 6pol. ISP
Bei meinem Ersten "Projekt" hatte ich noch nen 5pol. Parallel adapter,
passte auch da 5Volt.
Gruß
Clyde
Ich warte noch auf den mega328 ;) Bei Digikey ist er gelistet, wird aber
nur auf Anfrage geordert (lagerbestand 0). Ist der dann schon verfügbar
oder einfach nur schon mal privisorisch gelistet?
Tja, ich habe bei unserem Großhändler auch mal angefragt, die sagten mir
was vom 3ten Quartal, wo der 328 kommen soll...
Evtl. würde ich mir nämlich nen 2ten uWeb zulegen und dann mit dem 328
ausstatten :-D
Clyde H. wrote:
> Tja, ich habe bei unserem Großhändler auch mal angefragt, die sagten mir> was vom 3ten Quartal, wo der 328 kommen soll...> Evtl. würde ich mir nämlich nen 2ten uWeb zulegen und dann mit dem 328> ausstatten :-D
Hoffen wir es :D Ich warte auch noch auf den Mega328. Eventuell gibt es
dann eine SD-Kartenerweiterung. Versprechen kann ich aber nichts ;)
Hey, SD-Karte hört sich gut an, vor allem, wenn die Website dort
abspeicherbar ist:-) Dann flashe ich den Speicher vom ATM168 nicht noch
kaputt bei meinen versuchen :-D
Ich hab heute ein wenig mit WANem herumgespielt und mal den Webserver
auf verlorene Pakete und doppelte Pakete getestet.
Dabei ist jetzt die Version 1.2 entstanden, wo die HTTP Applikation in
Sachen Retransmit verbessert wurde. Der Webserver ist nun also komplett
TCP konform.
http://de.klinkerstein.m-faq.de/index.php/MicroWebServer
Ok, ich mal wieder :-)
Was verstehe ich jetzt unter TCP konform?
Und, was mir wichtig ist ;-) kann ich die abgewandelte HttpD.c von Dir
einfach in 1.2 übernehmen?
Gruß
Clyde
PS: Habe momentan kein Programmierkabel da...
Clyde H. wrote:
> Ok, ich mal wieder :-)> Was verstehe ich jetzt unter TCP konform?
Das heißt prinzipiell, dass der uWebSrv jetzt ein vollkommen konformer
TCP Server ist. Genau so, als würdest du einen Apache Webserver
ansprechen, wie der, der mikrocontroller.net hostet. Nur langsamer.
> Und, was mir wichtig ist ;-) kann ich die abgewandelte HttpD.c von Dir> einfach in 1.2 übernehmen?
Die HttpD._c musst du in HttpD.c umbenennen (und die alte HttpD.c
löschen oder so). Dann hast du die Webapplikation mit den 10 Ausgängen
und 4 Eingängen wieder.
Ich hab uip_rexmit() implementiert. Da stand vorher nur uip_abort() drin
;) Jetzt wird korrekterweise das zuletzt ausgegebene Paket erneut
gesendet. (So wie der uip-Stack es verlangt)
moin Simon,
hast du schon deinen 328 schon bekommen ? Hab meine schon 5 Monate
zuhause liegen und noch nicht dazugekommen was zu machen :/. Tja
beruflich geht einfach vor g
Aber wenn du die SD Karte einbindest .. muss ich es dann doch auch
wieder mal Angehen gg
hehe ;) hab zwar 10 stück aber zuviele kann man nie haben gg (sry) ^^
die hab ich direkt von atmel bekommen ;) musst auch noch unterschreiben
und blah (hatten irgendwie vertriebsprobleme damals gg) aber naja hab
se bekommen gehabt so garnoch recht günstig.
Manuel Kauf wrote:
> moin Simon,>> hast du schon deinen 328 schon bekommen ? Hab meine schon 5 Monate> zuhause liegen und noch nicht dazugekommen was zu machen :/. Tja> beruflich geht einfach vor *g*
Woher hast du die denn, wenn man fragen darf? ;)
EDIT: Grad gelesen. Wie hast du die denn bei Atmel bestellt? per EMail?
Hm..
hehe ne ich hab 2 leute bei atmel einen in vertrieb deutschland und
einen in norwegen (hab beruflich mit denen zu tun) und ja g.
Brauchst einen Simon ?
Manuel Kauf wrote:
> hehe ne ich hab 2 leute bei atmel einen in vertrieb deutschland und> einen in norwegen (hab beruflich mit denen zu tun) und ja g.>> Brauchst einen Simon ?
Auf kurz oder lang habe ich mir den schon ausgesucht. Die nächste
Version des uWebSrvs soll mit dem Mega328 bestückt werden. Aber was
nützt mir ein Mega328 wenn der Rest den noch nicht bekommen kann ;)
Manuel Kauf wrote:
> wie rest noch nicht bekommen kann ? *gg*>> was fehlt den zum glück ?
Na im Laden ist er noch nicht erhältlich. Und ich glaub nicht jeder hat
so einen Draht zu Atmel wie du ;)
noch nicht ? g
öhm umguck *gg*
naja wie gesagt könnte dir einen zur Verfügung stellen wenn du magst ;)
wie gesagt .. hab die teile schon 5monate rumliegen hab ma kurz getestet
soweit fein aber halt keine zeit :/ deswegen wenn du da etwas zeit
hättest und weiter basteln würdest könntest da schon einen ham ;)
Huhu,
ich wieder mit meinen Problemen...:-(
Ich hänge wohl wieder am Parser...
Ich möchte gerade 9 Outputs und 5 Inputs generieren.
Die Tabellenänderung inkl. der abänderung der var output sowie
document.elements... und der //set input/output war soweit kein Problem
und der neue Input funktioniert auch.
Aber nun bleibt die Seite beim laden wieder hängen... Anderungen im
define PARSEBYTES bringen nix... die Daten, die mir wireshark ausgibt
helfen nicht weiter...
Übersehe ich da was, was ich noch mit ändern muss?
Ich versuche zwar en Weg im Code nachzuvollziehen, aber das klappt
nicht...
Über Hilfe wäre ich wie immer sehr Dankbar!
Ich will ja nicht immer nerven, wenn ich mal was ändere...aber leider
komme ich gerade nicht drum rum...
Gruß
Clyde
Hallo,
hier mal im Anhang.
Die Parse Bayes habe ich mal auf 59 stehen lassen, probierte Werte
anhand Wireshark waren 54, 60, 62(das waren die kleinsten Werte die er
anzeigte) habe ich probiert, ohne Erfolg.
Der neue Eingang (GPIO09) funktioniert, bei aktivierung eines Ausgangs
erfolgt auch eine, aber die Seite bleibt im Ladevorgang hängen.
Was übersehen ich?
Danke und Gruß
Clyde
Im Anhang siehst du, wo du den Wert für die Anzahl POST-Request Daten
ablesen musst.
Im "richtigen Leben" parst der Server diese Angabe ("Content-Length")
und weiß dann bescheid, wie lange er parsen muss. Aber einen weiteren
Parser für das Parsen der HTTP-Header Daten habe ich noch nicht
eingebaut. Eventuell später mal.
Trägst du oben folgendes ein:
Et funzt :-D
Danke!
zuerstmal habe ich nach den falschen Werten geguckt in Wireshark und
hatte meinen Port nicht bei HTTP mit angegeben
(Du nutzt ja den 8080, ich nutze ja nen anderen...)
und somit kam bei mir natürlich auch keine entsprechende Meldung... :o)
Meine Versuche, am Anfang immer 1 Byte weniger bei Parsebytes, habe ich
bei 54Bytes aufgegeben und bin dann erst zu wireshark :-) ein Byte
weniger und es hätte funktioniert ;-)
Das mit dem Parsen habe ich noch nicht begriffen, aber das wird sicher
noch...
Was anderes zwischendurch, warum hast Du eigentlich jetzt überall im
HTML-Code einen Backslash?
Gruß
Clyde
Clyde H. wrote:
> Das mit dem Parsen habe ich noch nicht begriffen, aber das wird sicher> noch...
Ganz einfach. Bei dem POST-Request (wo die Eingabemaske an den uWebSrv
übertragen wird) gibts eine bestimmte Syntax (auch zu sehen oben im
Screenshot) wie die Ausgangseinstellungen übertragen werden. Diese muss
einfach nur durchlaufen werden. Allerdings lässt sich (ohne das parsen
der Content-length im HTTP Header) die Länge der vom Browser
übertragenen Daten nicht bestimmen, sodass man diese Fix angeben muss.
Sprich nach x Byte hört der Parser auf die Daten vom Browser
durchzugehen.
> Was anderes zwischendurch, warum hast Du eigentlich jetzt überall im> HTML-Code einen Backslash?
Das sind C-Escape Sequenzen. Wenn man ein Anführungszeichen in einem
String verwenden möchte (der ja wiederum wieder in Anführungszeichen
eingebettet ist), dann muss man diesen escapen. Und das geht mit einem \
davor.
http://de.wikipedia.org/wiki/Escape-Sequenz
Ahja, jetzt Ja...:-)
Vielen Dank!
Also entspricht 1 GPIO = 6 Byte bei der Übertragung wegen "&o08=0"=6
Zeichen á 1 Byte...logisch, wenn man es weiß :o)
Das mit dem Escape ist mir zwar noch nicht begegnet, aber ich stehe ja
am Anfang. Vielen Dank für den Link!
Gruß
Cylde
Hallo zusammen,
ich wollte mich auch mal zu Wort melden und über meine Erfahrungen mit
dem MicroWebServer von Simon berichten. Da ich mich schon länger
hobbymäßig mit den AVR's beschäftige, fand ich die Möglichkeit
faszinierend, endlich über Ethernet mit dem Mikrocontroller Daten
austauschen zu können. Ich beobachte dieses Projekt hier im Forum schon
einige Zeit, bin aber erst jetzt dazu gekommen den Webserver selbst
aufzubauen. Die Platine und die meisten Bauteile habe ich von IT-WNS,
sprich Thomas Heldt (Lob übrigens, an Samstag bestellt, am Dienstag war
alles im Briefkasten, Preise sind auch gut).
Also bei mir hat der Webserver auf Anhieb funktioniert (Fast jedenfalls,
beim ersten Mal hatte ich vergessen die IP-Adresse an mein Netzwerk
anzupassen). Wenn man das AVR-Studio 4 mit installiertem WinAVR benutzt,
kann man die Sourcen von Simon Kueppers ohne Anpassungen sofort
fehlerfrei übersetzen. Jetzt muß ich mal sehen, was ich damit anfangen
kann. Vielleicht berichte ich später noch mal über meine Anwendungen
(Viel Platz ist ja im Speicher nicht mehr frei, da muß man wohl irgendwo
kürzen).
Ein paar Worte muß ich noch zu den dauernden Anfragen hier wegen dem
passenden Programmiergerät loswerden. Ich nehme an, daß es allgemein
bekannt ist, aber weil es hier noch nie gesagt wurde, möcht ich noch
erwähnen, daß es auch eine kostenlose Möglichkeit gibt um das Hex-File
in den AVR zu bekommen. Einige Neulinge wissen es vielleicht noch nicht
und die Kosten für das Programmiergerät schrecken dann ab.
Ich benutze von Anfang an PonyProg2000 von Claudio Lanconelli zum
programmieren der AVR's (http://ponyprog.sourceforge.net). Als Adapter
benutze ich die Einfachstversion, bestehend aus 3 Wiederständen und 6
Dioden, an der Seriellen Schnittstelle des PCs. Das funktioniert auch
mit dem MicroWebServer bei einer Versorgungsspannung von 3,3 Volt (die
Spannung der Seriellen PC-Schnittstelle wird mit den Dioden auf die
Versorgungsspannung der Schaltung begrenzt).
Das war's erst mal,
Friedo
@Friedo "Jetzt muß ich mal sehen, was ich damit anfangen kann."
Also z.B. Steckdose übers Netz steuern von PC und Co, Klingesignale aufn
PC umleiten, Rasensprenger, Ideen gibts viele. ...
Hallo zusammen,
vor kurzem habe ich mir den uWebServer von Simon Küppers besorgt.
Nach dem Zusammenbau hat alles sofort funktioniert.
Simon hat in seiner Beschreibung die folgende MAC-Adresse
verwendet: 00:03:6F:55:1C:C2
Meine Fragen hierzu:
Wie kommt man zu der MAC-Adresse?
Gibt es für private Aktivitäten einen freien Adressbereich?
Für zahlreiche Infos wäre ich dankbar!
Gruß
Dieter
Dieter Otterbach wrote:
> Hallo zusammen,>> vor kurzem habe ich mir den uWebServer von Simon Küppers besorgt.> Nach dem Zusammenbau hat alles sofort funktioniert.
Freut mich, schön!
> Simon hat in seiner Beschreibung die folgende MAC-Adresse> verwendet: 00:03:6F:55:1C:C2>> Meine Fragen hierzu:> Wie kommt man zu der MAC-Adresse?> Gibt es für private Aktivitäten einen freien Adressbereich?
Die MAC-Adresse ist (weitgehend) zufällig gewählt. Einen offiziellen
privaten Adressbereich gibt es nicht, da es aber diese MAC Adresse in
meinem Netzwerk noch nicht gibt und das Netzwerk stark örtlich begrenzt
ist (nur bei mir Zuhause), sollte es da (rechtlich als auch technisch)
keine Probleme geben.
Es gibt aber ein wenig zu beachten, bei der MAC Adresse:
http://de.wikipedia.org/wiki/MAC-Adresse#Aufbau
Hallo zusammen,
ich habe auch so einen kleinen Webserver von Simon, nun wollte ich eine
UDP Application einbauen und dafür den ganzen TCP-Kram ausbauen, nur
irgendwie blicke ich noch nicht so ganz durch den Code durch. Daher
meine Frage, gibt es schon irgendwen, der erfolgreich eine
UDP-Application eingebaut hat, bzw. gibt es ein einfaches Programm,
welches eine UDP-Application laufen lässt. Einegntlich brauche ich auch
keinen Application Hub oder so, da ich nur UDP-Pakete empfangen will.
Ach so, nur falls die Frage aufkommt, warum ich das machen möchte, ich
würde gerne den Webserver in einen Artnet-node umfunktionieren, d.h. die
Ausgänge per Netzwerk-DMX zu steuern.
Mit freundlichen Grüßen
Jochen
Hallo und Guten Morgen,
nach einer kleinen Pause, will ich nun auch weiter machen.
Im Gegensatz zu Jochen, möchte ich allerdings den ganzen UDP-"Kram"
rauswerfen und nur TCP/IP nutzen inkl. Webinterface.
In der Hoffnung doch einiges an Speicher frei zu räumen, da ich schon
bei knapp 95% bin :-)
Ich konnte es noch nicht probieren und einfach die Dateien rauswerfen um
zu sehen ob der uWeb dann noch läuft...
Da ich mit dem ATM18 Projekt von Elektor jetzt ein wenig am lernen bin,
möchte ich versuchen gewisse Dine in den uWebServer einzubinden,
zum Beispiel die 2-Draht-Ansteuerung von 8 Relais. Würde Ports sparen
für andere Dinge.
Gruß
Swen
Jochen S. wrote:
> [UDP Applikation bauen]
Hallo Jochen, entschuldige die späte Antwort. Die TCP Applikation kannst
du im Prinzip relativ einfach ausbauen.
-In Net/uip/uip_TcpAppHub.h die folgenden Zeile löschen:
1
#include"../TcpApps/HttpD.h"
2
...
3
structtHttpDHttpDSocket;
4
...
-In Net/uip/uip_TcpAppHub.c die folgenden Zeilen löschen:
-HttpD.* aus dem Projekt entfernen. Nun sollte keine TCP Applikation
mehr mitkompiliert werden
Um UDP Applikationen einzubauen kannst du am besten die
uip-Dokumentation konsultieren. Da steht, was für Funktionen gebraucht
werden um ankommende Pakete entgegenzunehmen. Diese Funktion müsste dann
im Application Hub aufgerufen werden (nachdem der Zielport als passend
ermittelt wurde).
Clyde H. wrote:
> Hallo und Guten Morgen,>> nach einer kleinen Pause, will ich nun auch weiter machen.> Im Gegensatz zu Jochen, möchte ich allerdings den ganzen UDP-"Kram"> rauswerfen und nur TCP/IP nutzen inkl. Webinterface.> In der Hoffnung doch einiges an Speicher frei zu räumen, da ich schon> bei knapp 95% bin :-)
Was heißt "ganzer UDP Kram"?
Das wird nicht viel bringen, da der UDP Kram aus einer leeren Funktion
besteht.
Wie auch immer: Du kannst in uip/uipopt.h UDP ausschalten und alle
Referenzen (#includes usw) auf den uip_UdpAppHub löschen und diese
Dateien aus dem Projekt entfernen.
Ich wollte mir einen Webserver basteln habe aber keinen Übertrager.
Könnt ihr mir helfen.
Welchen Impulsübetrager nehmt ihr ?
Gibt es Alternativen?
Gibt es so etwas bei Farnell(de.farnell.com)?
Hallo,
habe den (Web-)Server ohne HTTP am Laufen, d.h. nur die TCP/IP-Schicht.
Ich glaube, dass ich so bei 65% liege, habe also Luft. Die ganze
html-Beschreibung ist wohl sehr speicherhungrig.
Eigentlich wollte ich vielleicht noch weitere Bausätze bestellen.
Aber in dem Shop ist dieser aber ausverkauft.
- Gibt es bald wieder den Bausatz?
- Vielleicht mit dem 328?
Gruß
Jörg
Jörg wrote:
> Hallo,> habe den (Web-)Server ohne HTTP am Laufen, d.h. nur die TCP/IP-Schicht.> Ich glaube, dass ich so bei 65% liege, habe also Luft. Die ganze> html-Beschreibung ist wohl sehr speicherhungrig.>> Eigentlich wollte ich vielleicht noch weitere Bausätze bestellen.> Aber in dem Shop ist dieser aber ausverkauft.> - Gibt es bald wieder den Bausatz?> - Vielleicht mit dem 328?>> Gruß> Jörg
Hallo Jörg, danke für den Hinweis. Ich werde mich mal mit dem Thomas in
Verbindung setzen.
Der 328 ist zum Glück Pinkompatibel zum 168. Also müsste nur dem Bausatz
der Mega328 hinzugefügt werden. Ich werde das sofort veranlassen, wenn
er verfügbar ist :D
Wenn ich einen Bausatz mit dem 328 besitze, werde ich auch meine kleine
Erweiterungsplatine vorstellen mit Micro-SD-Kartenslot und FT232 USB
Adapter.
Hallo Simon
> Wenn ich einen Bausatz mit dem 328 besitze, werde ich auch meine kleine> Erweiterungsplatine vorstellen mit Micro-SD-Kartenslot und FT232 USB> Adapter.
die Variante mit uSD-SLot würde mich schon jetzt sehr interessieren, da
ich bis heute z.B. den Webserver mit Karte nicht zum Laufen gebracht
habe ... wie geht das zuverlässig?
LG
Vajk
Vajk .v.i. wrote:
> die Variante mit uSD-SLot würde mich schon jetzt sehr interessieren, da> ich bis heute z.B. den Webserver mit Karte nicht zum Laufen gebracht> habe ... wie geht das zuverlässig?
Wie meinst du das? Welcher Webserver? Bisher habe ich die SD Karte noch
nicht angesprochen, da mir etwas Programmspeicher für einen
SD-Kartentreiber und eine FAT-Implementierung fehlt. Wenn das
funktioniert, soll der Webserver Dateien von der Micro-SD Karte öffnen
können.
Das sollte eigentlich sehr zuverlässig arbeiten. Siehe Webserver von
Ulrich Radig und diversen anderen, die hier mit SD Karten arbeiten.
Zum Thema *Verfügbarkeit*: Ich habe soeben erfahren, dass Thomas zur
Zeit körperlich angeschlagen ist und deswegen diese Woche noch nicht zu
erreichen ist. Hoffen wir alles gute :-)
> Wie meinst du das? Welcher Webserver? Bisher habe ich die SD Karte noch> nicht angesprochen, ...
na ich meinte genau das Teil (die mit der ISA-Netzwerkkarte-Variante)
von U.R. ich hab das mal versucht nachzubauen, mit einer SD-Karte hat es
bei mir nicht geklappt. Hatte mir sogar dann extra die Kontaktiereinheit
gekauft, un Kontaktschwierigkeiten auszuschließen.
Vajk .v.i. wrote:
>> Wie meinst du das? Welcher Webserver? Bisher habe ich die SD Karte noch>> nicht angesprochen, ...> na ich meinte genau das Teil (die mit der ISA-Netzwerkkarte-Variante)> von U.R. ich hab das mal versucht nachzubauen, mit einer SD-Karte hat es> bei mir nicht geklappt. Hatte mir sogar dann extra die Kontaktiereinheit> gekauft, un Kontaktschwierigkeiten auszuschließen.
Das wird dann entweder am Pegelwandler oder an der Software liegen.
Roland Riegel hat ein paar Sources für SD Karte und FAT parat.
Jupp ist heute ja mal wieder ganz gut drauf ^^
Das ganze war als Information für jedermann den es interessiert gedacht,
für mich allein wird CSD garantiert keine 500+ controller bestellen wenn
ich nur einen benötige, wenn jedoch größeres Interesse besteht (was ich
vermute) dann wird CSD wohl mal ne Ladung bestellen.
Und: Ich werde bei zeiten auch mal nachfragen, nur ist fahr ich morgen
früh für etwa ne Woche weg, also wirds bei mir wohl etwas später ;)
Hallo alle zusammen,
leider lag ich ein paar Wochen im Krankenhaus und konnte daher nicht
reagieren, die Bausätze wird es in ca. 3 Wochen, sobald die RJ45 Buchsen
wieder lieferbar sind, wieder geben. Aktuell noch mit ATMEGA168 weil
nirgendwo anständige kleine Mengen des 328P verfügbar sind.
Auch für uns sind 500 Stück (Digikey) oder 1000 Stück (Distributor in D)
nicht sinnvoll sich auf Lager zu legen.
Sollte es in D den ATMEGA328P irgendwann und irgendwo mal in kleinen
Stückzahlen geben wird es den Bausatz mit diesem MC geben.
Aktuell bin ich noch dran hier alles aufzuarbeiten, auch kann ich leider
noch nicht so wie ich will daher dauert alles etwas länger :(
Auf jeden Fall wird es die Bausätze wieder bei IT-WNS geben, versprochen
;)
Gruß
Thomas
Simon K. wrote:
> Roland Riegel hat ein paar Sources für SD Karte und FAT parat.
Wenn ich hier schon genannt werde, darf ich vielleicht kurz auf mein
anderes Projekt hinweisen: mega-eth. Dort habe ich einen Webserver
implementiert, der auf eine SD-Karte zugreift und relativ einfach
erweiterbar ist, auch für Steueranwendungen über HTTP/HTML. Allerdings
ist die Hardware deutlich aufwändiger und hat in der Folge größere
Abmessungen als der hier diskutierte Mikro-Server von Simon.
Beitrag "Erweiterbares Ethernetboard mit MMC/SD-Slot und USB"
Gruß,
Roland
Hallo alle zusammen,
der Bausatz kann jetzt wieder bei IT-WNS bestellt werden, die
Auslieferung erfolgt in ca. 3 Wochen wenn die neuen Platinen da sind.
Aktuell wird der Bausatz noch mit dem ATMEGA168 ausgeliefert, also
passend zur aktuellen Software.
Hallo zusammen,
ich habe jetzt endlich mal zeit gefunden um mich etwas in UDP mit dem
uIP hineinzufinden. Allerdings will der nicht so wie ich :-(
Ich will einfach nur UDP Pakete senden, das Empfangen brauche ich im
Moment nicht. Nur wenn ich direkt in der Hauptschleife meine Funktion
aufrufe kommt irgendwie nichts an.
Hier zur Verdeutlichung noch etwas Code.
main.c
1
while(1)
2
3
{
4
udp_out();
5
uip_len=0;
6
uip_len=Enc28j60Receive(uip_buf);
wobei udp_out meine function ist und so aussieht:
1
voidudp_out(){
2
staticstructuip_udp_conn*sub_conn=NULL;
3
char*subdata;
4
uip_ipaddr_tipaddr;
5
uip_ipaddr(ipaddr,192,168,0,100);// Server
6
sub_conn=uip_udp_new(ipaddr,124);// new connection
Hallo zusammen,
ich muss mich mal wieder melden. nach längerer Ruhezeit, will ich
weitermachen.
Leider habe ich, obwohl ich lange Zeit nichts gemacht habe, mit
folgender arnung zu tun...
../Net/uip/uip_arp.c: In function 'uip_arp_update':
../Net/uip/uip_arp.c:160: warning: 'tabptr' may be used uninitialized in
this function
../Net/uip/uip_arp.c: In function 'uip_arp_out':
../Net/uip/uip_arp.c:356: warning: 'tabptr' may be used uninitialized in
this function
Ich habe im moment keine Ahnung, warum diese kommt und wie schwerwiegend
diese ist..
Kann mir bitte jemand was dazu sagen?
Gruß
Clyde
Clyde H. wrote:
> ../Net/uip/uip_arp.c:356: warning: 'tabptr' may be used uninitialized in> this function> Kann mir bitte jemand was dazu sagen?
Die Warnung ist in diesem Falle gefahrenlos, auch wenn nicht wirklich
schön. Sie ist Teil des uip Stacks.
Vielen Dank für die prompte Antwort!
Dann will ich mal hoffen, das es keine weiteren Probleme macht.
Eine weitere Frage hätte ich noch :-)
Ich habe vor, den uWebServer als Webinterface über Uart zu verwenden.
Wie stehen meine Chancen bezgl. Flashspeicher und
realisierungsmöglichkeit?
Mein Vorhaben ist, das der uWebServer über den UART einen String mit
Zeit und Temperaturwerten empfängt und im Webinterface ausgibt und
umgekehrt auch ein paar Steuersignale über den Uart sendet.
Der Sender/Empfänger ist ein Mega88(die Sache funktioniert schon prima
mit dem T6963 Code von Dir Simon) und soll nun als weitere Schnittstelle
den uWebServer bekommen.
So läuft es bis jetzt:
Mega88 nutzt Hardware UART und der Mega168 die Software-UART von
Roboternetz.
Mega88 -> Daten -> Mega168 mit T6963
Mega168 -> Steuerbefehle -> Mega88
(Die Kommunikation läuft bisher einwandfrei inkl. 1Wire DS1820 und
DCF77)
Der uWebServer soll im Prinzip parallel zum Mega168 (und seinem T6963)
geschaltet werden, so das der uWebServer alles Anzeigen kann(Nur die
Werte, die Formatierung der Anzeige wird HTTP-entsprechend sein) was das
Display(T6963) anzeigt und umgekehrt soll er das Steuern(Buttons) was
ich über die Tasten am Display steuern kann.
Ok, meine Frage ist, ob es realistisch ist, das der Mega168-uWebServer
dafür ausreichend Platz(Flash)hat und der Grundlegende Code des
uWebServers dafür passt?
Vielen Dank schonmal und sorry für den ausschweifenden OT.
Gruß
Clyde
Clyde H. wrote:
> Ich habe vor, den uWebServer als Webinterface über Uart zu verwenden.> Wie stehen meine Chancen bezgl. Flashspeicher und> realisierungsmöglichkeit?
Du willst den Webserver über den UART ansteuern? Oder willst du den UART
über den Webserver ansteuern?
> Mein Vorhaben ist, das der uWebServer über den UART einen String mit> Zeit und Temperaturwerten empfängt und im Webinterface ausgibt und> umgekehrt auch ein paar Steuersignale über den Uart sendet.
Sollte machbar sein.
> Ok, meine Frage ist, ob es realistisch ist, das der Mega168-uWebServer> dafür ausreichend Platz(Flash)hat und der Grundlegende Code des> uWebServers dafür passt?
Hm, schwer zu sagen. Hängt stark davon ab, wie groß die statischen Daten
zu der Seite sind, die auf dem Prozessor im Flash gespeichert werden
müssen. Eventuell müsstest du die Seite als gzip komprimiert in den
Flash ablegen und die Parameter, die du anzeigen willst per
Ajax/Javascript separat holen.
Oder einfach noch ein Weilchen auf den Mega328 warten :-)
Hallo Simon,
was will ich...
Steuern möchte ich den Uart über das Webinterface, das heisst Klick(x)
im Webinterface sendet Zeichen(y) über den Uart und im Gegenzug möchte
ich im Webinterface Temeraturen und Schaltzustände anzeigen, die er über
den Uart empfängt.
Also im Prinzip ist der Webserver ein LCD-Display mit ein paar Tasten
zum bedienen ;-)
Ich weiß nicht, wie ich das besser beschreiben kann...
OK, da ich nix von gzip weiß und Ajax auch nicht und mein Javascript
sehr!!! beschränkt ist, muss ich wohl auf den 328 warten... wie so viele
andere auch :-D
Ist aber auch Mist :-) zumal ich bei dem GPIO noch nicht ganz
durchgestiegen bin, aber der Winter fängt ja gerade erst an :-)
Danke Dir aber trotzdem!
Gruß
Clyde
Simon K. wrote:
> Clyde, schau dir mal die HttpD.c im Anhang an. Das sollte so ziemlich> das sein, was du willst. Einziger Nachteil: Für den Status der> Checkbuttons beim Laden der Seite musste ich Javascript einsetzen.
Ich wollte alle Ports als Ausgänge konfigurieren, aber das funktioniert
nicht so wie ich mir das dachte. GPIO 10 - 13 funktionieren einfach
nicht. Ich weiß nicht was ich noch ändern muß. Wenn da mal jemand drüber
schauen könnte.
danke Apollo
Gpio.h ??
in der Gpio.c habe ich die Porttabelle angepasst. (hab momentan das
AVR-NetIO von Pollin in gebrauch)
Am PARSEBYTES hab ich nichts geändert.
Bei GPIO 10 - 13 ist im Browser weder ON noch OFF aktiviert und ein
aktivierter Button verschwindet nach "Modify" auch wieder.
Ich hab mal alles angehängt.
Apollo X. wrote:
> Gpio.h ??> in der Gpio.c habe ich die Porttabelle angepasst. (hab momentan das> AVR-NetIO von Pollin in gebrauch)
Ups, ja Gpio.c meinte ich natürlich auch.
> Am PARSEBYTES hab ich nichts geändert.> Bei GPIO 10 - 13 ist im Browser weder ON noch OFF aktiviert und ein> aktivierter Button verschwindet nach "Modify" auch wieder.> Ich hab mal alles angehängt.
Du musst PARSEBYTES aber verändern. Das define gibt an, wie viele
Zeichen gelesen werden sollen, bei einem POST-Request. (Also genau dann,
wenn du den neuen Portstatus über "Modify" schreibst).
Die besagten Ports werden aber schon beim Aufruf nicht korrekt
angezeigt.
Wenn ich den Wert für PARSEBYTES ändere, habe ich nach "Modify" die
Sanduhr im Browser. Da dies mit dem Originalwert nicht ist, dachte ich
der Wert ist so richtig.
Wie bekomme ich den richtigen Wert raus? Betriebssystem Suse.
Probier mal, pro GPIO-Port den Parsebytes wert um 4 zu erhöhen.
Du Willst 4 Ports mehr als im Original, dann versuch mal 75 als
Parsebytes.
Ich bin mir nicht sicher, meine aber das es 4 Bytes(Zeichen) waren.
Gruß
Clyde
PS: Ich habe mir Dein Zip noch nicht angesehen...
EDIT, versuche mal 6 Bytes pro GPIO-Port dazurechnen.Das müsste es
sein...
Ne, das scheint nicht zu gehen. hab 83 versucht (4*6+59), danach einfach
mal die Werte davor und danach versucht, aber immer kommt die Sanduhr im
Browser.
Die neuen Ports werden jetzt aber geschaltet. Allerdings sind nach dem
Aufruf des Webinterfaces im Browser immer noch weder on noch off bei den
besagten GPIOs aktiviert.
Wie komme ich denn jetzt an den richtigen Wert für PARSEBYTES?
Danke. Ich hatte das oben schon gesehen, aber hatte nicht damit
gerechnet, dass es auch ne Linuxversion davon gibt.
So aber nun wirds doch verwirrend. Ich hatte schon, bevor ich das mit
Wireshark herausgefunden hatte, alle Werte von 100 bis 60 durchprobiert.
ab 65 gehen die GPIO 10-13 zu ändern, aber die Webseite bleibt nach
"Modify" immer im Ladevorgang, außer bei 59.
Die Kontrolle mit Wireshark gibt mir auch genau diesen Wert.
Was nun? Jetzt verstehe ich garnichts mehr.
Ok, das Problem ist, dass die GPIOs 10-13 nicht selektiert sind, dadurch
werden für diese Ports auch keine Daten gesendet. Klicke ich allerdings
einen an und gehe auf "Modify", dann werden auch die besagten 6 Bytes
mehr übertragen. Der Stadus dieser GPIOs (rot/grün) wird aber richtig
angezeigt.
Wie kann ich das nun machen, das die ON/OFF Boxen richtig selektiert
werden beim Ladevorgang.
Apollo X. wrote:
> Ok, das Problem ist, dass die GPIOs 10-13 nicht selektiert sind, dadurch> werden für diese Ports auch keine Daten gesendet. Klicke ich allerdings> einen an und gehe auf "Modify", dann werden auch die besagten 6 Bytes> mehr übertragen. Der Stadus dieser GPIOs (rot/grün) wird aber richtig> angezeigt.> Wie kann ich das nun machen, das die ON/OFF Boxen richtig selektiert> werden beim Ladevorgang.
Ah super, das hängt dann höchst wahrscheinlich mit dem Javascript
zusammen. Hast du den Webserver irgendwo im Netz, sodass ich die Seite
mal aufrufen kann? Kannst ja den Link auch per PM schicken.
Ne, leider nicht. Da ich nur Internet über UMTS habe (gibt hier kein DSL
wegen Glasfasernetz) kommt man von außen nicht drauf.
Javascript, ich glaube auch. Ich denke hier ist das Problem.
"document.getElementsByName(((i<14) ? \"o0\" : \"o\") + i)[0].checked =
\"true\";\n"
Ich kenn mich mit Javascript leider nicht aus, aber im Original war
i<10, somit einstellig.
Edit: Ok, das war etwas dumm von mir, den Wert zu ändern. Hab die Zeile
jetzt verstanden und die 10 wieder eingetragen.
Als PARSEBYTES hab ich jetzt 83 eingetragen und nun läuft es alles
richtig.
Apollo X. wrote:
> Ne, leider nicht. Da ich nur Internet über UMTS habe (gibt hier kein DSL> wegen Glasfasernetz) kommt man von außen nicht drauf.> Javascript, ich glaube auch. Ich denke hier ist das Problem.> "document.getElementsByName(((i<14) ? \"o0\" : \"o\") + i)[0].checked => \"true\";\n"> Ich kenn mich mit Javascript leider nicht aus, aber im Original war> i<10, somit einstellig.>> Edit: Ok, das war etwas dumm von mir, den Wert zu ändern. Hab die Zeile> jetzt verstanden und die 10 wieder eingetragen.> Als PARSEBYTES hab ich jetzt 83 eingetragen und nun läuft es alles> richtig.
Ja, da muss natürlich 10 stehen bleiben. Super :-)
Danke noch mal an Simon und Clyde.
Hab jetzt noch die anderen belegbaren Ports des AVR-NET-IO-Boards von
Pollin erfolgreich mit eingebunden (siehe Bild). Wenn man erst mal weiß,
wie es geht, dann ist es ja recht einfach.
Nach meinem Umstieg von Windows auf Linux will ich mich jetzt auch
Programmiertechnisch etwas mehr mit c beschäftigen. Vorher arbeitete ich
mit Bascom. Der Webserver ist da gleich nen harter Brocken, aber der hat
mich halt gereizt.
bis dann Apollo
Sieht doch schon gut aus.
Wieviel Flashspeicher hast Du denn noch frei beim Pollin-Board 8-)
Gruß
Clyde
PS: Und das mit dem harten Brocken kann ich sehr gut nachvollziehen ;-)
Siehe diesen Thread...
@Clyde
Das kann ich so spontan gar nicht sagen, hab mich mit der flash-Größe
seit dem ich mit Linux arbeite noch nicht befasst. Bascom hatte das beim
Kompilieren immer schön in % angezeigt.
@Challanger
jo, kann ich.
Edit: ich hab allerdings "ON" und "OFF" getauscht, da ich zum Testen
LEDs gegen +5V hatte. Somit ist also "OFF"=high=1
Ja, so ein Webserver ist auf jeden Fall ein großer Brocken. Es ist ja
nicht nur ein einfacher Peer, der auf Anfrage Daten herausschickt,
sondern ein Server, der auf HTML Requests antworten muss und diese auch
interpretieren muss. Da aber auf der anderen Seite der Speicher (in
jeder Hinsicht) sehr knapp ist bei so einem AVR muss man da teilweise
schon ganz schön tricksen, was die ganze Sache noch einmal um ein nicht
unerhebliches Maß verkompliziert.
Trotzdem habe ich den Webserver insgesamt so programmiert, dass er sich
leicht portieren lässt, wie man hier im Falle des AVR-NET IOs sehen
kann. Dass das Konzept so gut aufgeht freut mich sehr, muss ich zugeben
:D
Das AVR NET IO hat meines Wissens nach einen Mega32 (und geht bis
maximal Mega644, was 64kiB Flash wären). Der Speicher wird also zwischen
50% und 25% voll sein (Mega32/644) :D
Ich freu mich schon mal Mega328s in die Hand zu kriegen. Dann habe ich
vor eine kleine SD Karten Unterstützung zu basteln.
Einen Port hab ich ja noch vergessen, ist mir gerade aufgefallen. PB3
ist noch frei. Ich mach das nach meinem Urlaub dann noch mal fertig.
Auch "ON" und "OFF" trage ich dann wieder richtig ein.
Hallo Forum,
hat eigentlich irgendwer schonmal die Software von Ulrich Radig, bzw.
deren Abwandlungen auf diese kleine Hardware portiert? Ich verzweifle
gerade daran.
Der Grund, warum ich das machen will ist folgender, es gibt für den
Source von Ulrich Radig mehr Erweiterungen, wie z.B. Temperatursensoren
und so weiter. Ich würde gerne die Funktionalität von Ulrich's Software
mit der Größe von Simon's Hardware kombinieren.
MfG
Jochen
Hallo alle zusammen,
wer noch Interesse hat ich habe noch einen fertigen Webserver abzugeben,
war ein Test und ich brauche den jetzt nicht mehr. Ist mit ATMEGA168 und
SI-60024-F.
Wer also nicht löten will einfach melden thomas [at] heldt [punkt] eu
Gruß
Thomas
@Jochen S.
Also jetzt wo es den ATMEGA328P-20AU gibt wird Simon den Webserver
darauf portieren und er wird dann auch erweitert werden.
Ich selber mache aktuell ein Addon-Board das dann einen µSD-Slot bietet
z.B.
Bin mir fast sicher das dann auch Erweiterungen für 1-Wire etc. kommen
werden ;)
@Alle
Der fertige Webserver von mir ist weg.
Gruß
Thomas
Hallo zusammen,
ich habe gerade eine IO-Erweiterungskarte mit einem I²C Port-Expander
auf Lochraster testweise am Laufen. Der µServer steckt praktisch mit der
Stiftleiste (von unten aufgelötet) auf der Karte. Z.Zt. ist es nur eine
Out-Karte, also mit ULN2803 Leistungstreibern die 8 Relais ansteuern.
Die nächsten Schritte: 1) Erweiterungskarte layouten und ätzen 2)
Erweiterungskarte mit Optokoppler (also IN).
Gruß
Jörg
Jörg T. wrote:
> Hallo zusammen,>> ich habe gerade eine IO-Erweiterungskarte mit einem I²C Port-Expander> auf Lochraster testweise am Laufen. Der µServer steckt praktisch mit der> Stiftleiste (von unten aufgelötet) auf der Karte. Z.Zt. ist es nur eine> Out-Karte, also mit ULN2803 Leistungstreibern die 8 Relais ansteuern.> Die nächsten Schritte: 1) Erweiterungskarte layouten und ätzen 2)> Erweiterungskarte mit Optokoppler (also IN).
Cool, dass mal jemand was damit macht :-)
Wie Thomas schon sagt ist 1Wire auch ziemlich interessant. Besonders im
Hinblick auf zum Beispiel Temperatursensoren. Die könnte man dann auf
der Webseite anzeigen lassen.
Mit den 32 kiB Flash werde ich auch mal den Webserver etwas verschönern.
Damit es hoffentlich leichter ist, diesen zu erweitern und an seine
Bedürfnisse anzupassen.
Hallo,
ich habe den µWebServer zu einem µServer kastriert, d.h. ich verwende
nur noch TCP/IP. Er ist die Zentrale meiner Haussteuerung. Bisher hängen
dort 3 Relaiskarten dran für eine Rollosteuerung. Gesteuert und
überwacht wird er mit einer kleinen WinXP/GTK Applikation (also
wahlweise Windows oder Linux , theoretisch auch Mac, Windows Mobile,
...)
Aber ich habe noch sehr viel mehr mit dem µServer vor, da ich ja jede
Menge Platz habe (kein HTML-Server) :-)
Gruß
Jörg
Genau. Das Protokoll ist noch sehr einfach. Da bastel ich noch dran
herum. Aber so habe ich mehr Platz auf dem ATmega168. Nachteil ist, dass
ich nicht mit einem Browser darauf zugreifen kann, aber das gibt mir ja
auch ein bisschen Schutz - ich will ja nicht, dass der Nachbar unserer
Rollos hoch- und runterfährt :-)
Hallo Jörg,
stellst Du Deinen Code zur Verfügung ?
Ich bin auch grad dran, eine Erweiterungsplatine zu machen. Relais für 6
x 220 V und 2 x Niederspannung mit LEDs zur Schaltanzeige und Taster für
mauelle Auslösung ...
LG
Vajk
Hallo
@Jörg, stellst Du Deine "erprobten" Schaltungen hier ins Forum? Schön
wäre der Webserver als Kern. Dann noch ne Relaiskarte und ne
Temperaturerfassung mit 1 Wire...
MfG
Achim
So, es gibt was neues.
1. Den uWebSrv werde ich ab nun nur noch bugfixen und nicht mehr
erweitern.
2. Die angehängte uWebSrv Version wird dann also wahrscheinlich erst mal
die letzte sein.
Ich habe dort einen Throughput Boost Hack implementiert. Die Seite
sollte nun wesentlich schneller bei Windows clients laden (Sie lädt
innerhalb von etwa 400ms). Ich wäre euch dankbar, wenn ihr das mal
durchtesten könntet.
3. Der uWebSrv328P kommt so langsam ins rollen. µSD und ein verbesserter
Webserver (flexibler in Sachen dynamische Webseites) sind nur zwei der
geplanten Features. Mal schauen was mir noch so einfällt.
Gast wrote:
> der mega328P-AU ist bei CSD erhältlich.
Danke für den Hinweis. Thomas Heldt wird den Chip im IT-WNS auch bald im
Bausatz für den uWebSrv328P anbieten können. Habe schon eine Version zum
Entwickeln hier liegen.
Das sind ja gute Nachrichten.
Nur, dass ich damals ca. 24€ bezahlt hatte... :-(
Sind eigentlich bei IT-WNS noch Restbestände vorhanden?
Aber selbst der Bausatz mit 168 war ja vor kurzem schon bei 30€...
Gruß
Jörg T. wrote:
> Das sind ja gute Nachrichten.> Nur, dass ich damals ca. 24€ bezahlt hatte... :-(> Sind eigentlich bei IT-WNS noch Restbestände vorhanden?> Aber selbst der Bausatz mit 168 war ja vor kurzem schon bei 30€...
Für Eigenentwicklungen ist es ja durchaus auch noch brauchbar, aber
mangels Flash (was ja vor dem Kauf auch kein Geheimnis war) gibt es bei
dem Dingen einfach nichts mehr zu machen.
Gast wrote:
> bei Verwendung des 328P und Eclipse müssen die Pin-Defines geändert> werden. z.B. PB3 in PINB3
Ja, das ist korrekt. Das ist aber ein "Bug" von der avr Library. Ein
Workaround ist schon eingereicht.
Ich habe nun schon angefangen ein wenig Software zu schreiben für das
AddOn und den mega328P.
(https://www.it-wns.de/themes/kategorie/detail.php?artikelid=735&source=2)
Falls jemand das AddOn schon hat, kann er mal mit mir Kontakt aufnehmen,
damit ich ein paar Tester bekomme.
Hallo,
ich habe diese Frage zwar schon in einem anderen Thread gestellt aber
bis jetzt noch keine Anwort erhalten.
Es ist eine Verständnisfrage zum uWebSrv-AVR-NET-IO-Pollin Code, und
zwar wird in der Dokumentation vom
uIP Stack im Beispieltreiber:
http://www.sics.se/~adam/uip/uip-1.0-refman/a00150...
immer uip_buf gesendet und wenn uip_len größer ist als UIP_LLH_LEN +
UIP_TCPIP_HLEN auch noch uip_appdata.
In diesem Quellcode wird aber immer nur uip_buf gesendet:
1
Enc28j60CopyPacket(uip_buf,uip_len);
2
Enc28j60Send();
Warum braucht man hier den Inhalt von uip_appdata nicht zu senden?
MFG, GR
Der Unterschied hat irgendwas damit zu tun, ob man einen LinkLevelHeader
hat oder nicht, soweit ich das weiß. Ist aber für Ethernet nicht
relevant.
Mal was neues: Da das AddOn1 ja schon verfügbar ist habe ich mal die
v1.0 online gestellt. Es sind alle herzlich zum Testen eingeladen:
http://de.klinkerstein.m-faq.de/index.php/MicroWebServer/Downloads
Features sind u.a.:
MicroSD Slot für non-SDHC Karten mit FAT16(!). Die beigelegte index.html
dient als Test und sollte den im beigelegten Screenshot zu sehenden
Output erzeugen.
Weiterhin ist jetzt auch der TCP Boost Hack für Windows implementiert,
sodass die Seite in deutlich weniger als 1 Sekunden vollständig geladen
ist.
Bei Fragen, einfach fragen!
Hallo
@Simon zunächst mal vielen Dank für Deinen Webserver, den ich schon
lange im problemlosen Einsatz habe.
Gibt es für das Addon-Board auch einen Schaltplan bzw. Eagle Files wie
für den Server selbst?
MfG
Achim
Hallo zusammen,
sorry, aber irgendwie komme ich in letzter Zeit nicht mehr dazu das
Projekt voranzubringen. Anbei der Schaltplan für mein IOBoard. Zur
Erinnerung. Es ist eine Testplatine mit der ich 8x 24V-Relais anspreche.
Diese Steuern dann 4 Rollomotoren (jeweils 2 Relais für einen Motor: auf
und ab). Dies ist aber prinzipiell unerheblich. Die Kommunikation
geschieht über I2C zum Port-Expander PCF8574. Der µServer sitzt auf der
Testplatine mittels einer Buchsenleiste etwas wackelig, da ja das
LAN-Kabel etwas dran "zieht". So ist es aber nun seit einem halben Jahr
im Einsatz. Eine kleine Windows-Applikation erledigt eine Zeitsteuerung
der Rollos.
Grüße
Jörg
Hallo
ich muß mal wieder dies Thread ausgraben. Ich habe den schon lange im
Einsatz und kann auch mit Firefox die I/Os problemlos steuern.
Ich wollte jetz mit einem einfachen C# Programm einen Webclient
erstellen, aber das Paket, welches ich an den Microwebserver schicke
wird nicht erkannt.
Ich bin der Meinung, dass der Paketaufbau stimmt. Der einzige
Unterschied, den man mit Wireshark erkennen kann.
Seltsamerweise ist wenn mann nur auf den Poseintrag geht vor der
eigentlichen Nutzlast 2xCRLF beim Firefox aber beim Webclient nicht.
Geht man aber >> Line-based text data:
application/x-www-form-urlencoded<< wird
Kann mir da jemand weiterhelfen?
MfG
Achim
Hallo
irgendwie ist das oben verstümmelt angekommen. Die 2x CRLF sind erst
sichtbar (kleines Fenster) , wenn man auf den Line Base Text klickt.
Baut der Stack die Pakete nicht richtig zusammen. So wie ich aus dem
Programm rausgelesen habe, wird gescannt, bis 2xCRLF kommt und dann
werden die nachfolgenden 167 Byte zur Steuerung ausgewertet. Irgendwie
erkennt der beim Webclient diese Trennung nicht, ich bin aber kein C
Kenner.
MfG
Achim
Kleine Zwischenmeldung: Das Problem taucht anscheinend auf, wenn der
POST Header (abgeschlossen mit \r\n\r\n) in einem anderen Paket kommt
als die POST Daten. Das ist so natürlich nicht gewollt.
Muss ich den Bug nur noch ausfindig machen.
Hallo
den letzen Beitrag von Simon kann ich nur bestätigen. Er hat mir ne
neue Version geschickt. Mit dieser geht das problemlos.
Herzlichen Dank an Simon!!!
Viele Grüsse
Achim
Hallo
beim kompilieren kommt bei mir dieser fehler.
Build started 9.4.2010 at 18:46:22
avr-gcc -mmcu=atmega128 -Wall -gdwarf-2 -Os -std=gnu99 -funsigned-char
-funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT Main.o -MF
dep/Main.o.d -c ../Main.c
../Main.c: In function 'main':
../Main.c:39: error: 'TIMSK1' undeclared (first use in this function)
../Main.c:39: error: (Each undeclared identifier is reported only once
../Main.c:39: error: for each function it appears in.)
make: *** [Main.o] Error 1
Build failed with 3 errors and 0 warnings...
Hab nix geändert außer in der main.c die IP und die Host adresse.
...hmmm...aber es ist doch ein ATmega128
7.Fuses des AVR modifizieren (LFuse: E0h, HFuse: DDh)
1.Taktquelle auf Ext. Clock stellen (Startup Time 65ms)
2.Brown Out Detector auf 2,7V einstellen
mit Fuses setzen hab ich noch gar keine Erfahrung
Matze .. schrieb:> ...hmmm...aber es ist doch ein ATmega128
Die Software ist aber eigentlich für die originale MikroWebServer
Hardware gedacht, da ist ein ATmega328P drauf (oder ATmega168 bei alten
Versionen).
> 7.Fuses des AVR modifizieren (LFuse: E0h, HFuse: DDh)> 1.Taktquelle auf Ext. Clock stellen (Startup Time 65ms)> 2.Brown Out Detector auf 2,7V einstellen>> mit Fuses setzen hab ich noch gar keine Erfahrung
Welches Programmiertool benutzt du denn? Da musst du die entsprechenden
Fuse Settings vornehmen, damit der richtige Prozessortakt verwendet
wird.
...und ich komme nicht in den programming mode...freuqenz steht auf
125kHz und der mega128 ist ausgewählt. Zum Programmieren, nehme ich den
AVRISP mkII mit USB. Die LED zeigt grün, also müsste er doch Verbindung
zum ATmega haben. Achso, den ENC28 ist noch nicht auf der Platine
angelötet. Das sollte doch aber dem Programmieren vom mega128 nicht im
Wege stehn...oder?
Doch der ENC28J60 muss drauf, da der Prozessor mit den Fuse Settings den
Takt vom ENC28J60 bezieht.
Stecker falsch drauf? Hast du die angegebenen Fusebytes schon mal
programmiert, und danach funktionierte er nicht mehr? Dann liegt das am
nichtbestückten ENC28J60.
Bin mir jetzt aber erst mal einen "Löten", bis später ;) ;)
...die Fuse's habe ich nur mal im AVR Programmer eingestellt, aber noch
nicht geflasht...geht ja auch nicht @ programming mode...FAILED.
Na dann löt ich auch mal eine^^ und danach den ENC drauf.
Ich hoffe mal ich mab den MC beim Löten nicht thermisch beschädigt bzw
es sind alle kontakte richtig gelötet und auch nicht verbunden. Na
schauen wir mal.
Da hab ich gleich noch me Frage vorweg. Kannst du mir bei meiner Idee
helfen. Ich möchte einen der Ausgänge per MagicPaket ansteuern.
MagicPaket aktiveiert Ausgang => Ausgang steuert Reederrelais an =>
Relais schaltet Verbraucher...so meine Idee
Beitrag "AVR-NET-IO per WoL Steuern"
Da gehts jetzt um den AVR von Pollin. Aber es müsste ja auch mit Deinem
gehen.
Matze .. schrieb:> ...die Fuse's habe ich nur mal im AVR Programmer eingestellt, aber noch> nicht geflasht...geht ja auch nicht @ programming mode...FAILED.> Na dann löt ich auch mal eine^^ und danach den ENC drauf.
Du musst aber einen Schreibvorgang ausgeführt haben, da sonst
"Programming Mode FAILED" nicht auftauchen würde.
Bist du sicher, dass der ISP Stecker richtig herum steckt? Welchen
Programmer benutzt du? Lass dir doch nicht alles aus der Nase ziehen ;)
Kannst du die Target Spannung auslesen? Hast du überhaupt eine
Spannungsversorgung angeschlossen?
> Ich hoffe mal ich mab den MC beim Löten nicht thermisch beschädigt bzw> es sind alle kontakte richtig gelötet und auch nicht verbunden. Na> schauen wir mal.
Ersteres ist eher unwahrscheinlich. Zweiteres könnte sein. Eventuell mal
bei abgeschaltetem Board mal die Programmierleitungen durchpiepsen.
> Da hab ich gleich noch me Frage vorweg. Kannst du mir bei meiner Idee> helfen. Ich möchte einen der Ausgänge per MagicPaket ansteuern.
Hm, da müsstest du Veränderungen vornehmen am uip Stack, bzw. deinen
eigenen (sehr einfachen) "Stack" programmieren. Der würde nur aus einer
MAC Ebene bestehen (Ebene2), da MagicPacket direkt auf Ethernet läuft,
soweit ich weiß.
> MagicPaket aktiveiert Ausgang => Ausgang steuert Reederrelais an =>> Relais schaltet Verbraucher...so meine Idee>> Beitrag "AVR-NET-IO per WoL Steuern">> Da gehts jetzt um den AVR von Pollin. Aber es müsste ja auch mit Deinem> gehen.
Ja, müsste man dann übernehmen das Prinzip.
ISP steckt richtig rum dran. AVRISP mkII zeigt grün, also hat er auch
Spannung von der Schaltung.
MC scheint in Ordung. Wie komm ich dann wieder drauf wenn ich
ausversehen die Fuses "verstellt" habe?
Im AVR Studio Programmierdialog kannst du auch die Spannung auslesen
(Einer der hinteren Reiter).
Vermutlich hast du die externe Taktquelle ausgewählt (Was ja auch
gewollt ist). Das heißt, du musst den ENC28J60 drauflöten. Der stellt
dann 6MHz bereit und der Chip ist wieder ansprechbar. Die ISP Frequenz
darf dabei 1,25MHz nicht überschreiten.
ich wollte gerade den ENC auflöten...ich weiß nur nicht mehr wie. Hab
keine Anleitung mehr und mein ENC hat einen Ausrichtungspunkt. Ist der
gleich mit dem Strich auf dem Layer? Also muss der Punkt zum MagJack
zeigen oder zum ISP?
Danke für die schnelle Antwort. Auf dendem Bestückungsplan auf der
Shopseite sieht man das auch nicht. Vielleicht könnets du das Bild mit
zu dem anderen packen bzw auf dem Layouts die Punkt eintragen..oder hab
ich ihn übersehn...naja egal
ok ist drauf. Bei Fuses hab ich jetzt bei Spien einen Haken mit roten
Fragezeichen. ist das normal?
die anderen beiden hab ich geändert und geschrieben. beim kompilieren
kommt aber immer noch der selbe fehler.
Mal ne "dumme" Frage. Wie bekomme ich überhaupt die MAC vom ENC raus?
Matze .. schrieb:> ok ist drauf. Bei Fuses hab ich jetzt bei Spien einen Haken mit roten> Fragezeichen. ist das normal?
Ja, kannst du sie denn jetzt lesen und schreiben?
> die anderen beiden hab ich geändert und geschrieben. beim kompilieren> kommt aber immer noch der selbe fehler.
Welchen Fehler?
> Mal ne "dumme" Frage. Wie bekomme ich überhaupt die MAC vom ENC raus?
Die MAC wird beim Starten des Programmes gesetzt. Der hat von "Natur
aus" keine.
ja ich kann lesen und schreiben. Ich habe mal die uWebSrv168.hex drauf
geflasht. er macht aber nix...keine LED am MagJack. Ich glaube ich hab
das vergessen, find es im AVR Studio aber nicht:
(LFuse: E0h, HFuse: DDh)
Fehler beim kompilieren mit AVR Studo 4:
rm -rf Main.o HttpD.o uip.o uip_arp.o uip_split.o uip_TcpAppHub.o
uip_UdpAppHub.o webserver.elf dep/* webserver.hex webserver.eep
webserver.lss webserver.map
Build succeeded with 0 Warnings...
avr-gcc -mmcu=atmega128 -Wall -gdwarf-2 -Os -std=gnu99 -funsigned-char
-funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT Main.o -MF
dep/Main.o.d -c ../Main.c
../Main.c: In function 'main':
../Main.c:39: error: 'TIMSK1' undeclared (first use in this function)
../Main.c:39: error: (Each undeclared identifier is reported only once
../Main.c:39: error: for each function it appears in.)
make: *** [Main.o] Error 1
Build failed with 3 errors and 0 warnings...
Also kann ich eine X beliebige nehmen? Zum Bsp von einer alten
Netzwerkkarte.
Matze .. schrieb:> ja ich kann lesen und schreiben. Ich habe mal die uWebSrv168.hex drauf> geflasht. er macht aber nix...keine LED am MagJack. Ich glaube ich hab> das vergessen, find es im AVR Studio aber nicht:>> (LFuse: E0h, HFuse: DDh)
Gut.
> Fehler beim kompilieren mit AVR Studo 4:>> rm -rf Main.o HttpD.o uip.o uip_arp.o uip_split.o uip_TcpAppHub.o> uip_UdpAppHub.o webserver.elf dep/* webserver.hex webserver.eep> webserver.lss webserver.map> Build succeeded with 0 Warnings...> avr-gcc -mmcu=atmega128 -Wall -gdwarf-2 -Os -std=gnu99 -funsigned-char> -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT Main.o -MF> dep/Main.o.d -c ../Main.c> ../Main.c: In function 'main':> ../Main.c:39: error: 'TIMSK1' undeclared (first use in this function)> ../Main.c:39: error: (Each undeclared identifier is reported only once> ../Main.c:39: error: for each function it appears in.)> make: *** [Main.o] Error 1> Build failed with 3 errors and 0 warnings...
Du hast auch wieder einen ATmega128 als Zielprozessor genommen. Der Code
ist nach wie vor aber nur für ATmega168/328 garantiert kompilierbar,
weil diese beiden Prozessoren mit dem uWebSrv ausgeliefert werden.
> Also kann ich eine X beliebige nehmen? Zum Bsp von einer alten> Netzwerkkarte.
Für dein eigenes LAN geht das.
passt alles...meine Fritzbox hatte gerade einen reset.
Mal so nebenbei ich hoffe ich nerve nicht zu sehr. Gerade die
offensichtlichen fehler sind ja echt peinlich.
Jetzt muss ich nochmal wegen der MAC fragen. Die MAC von der alte
defekte Netzwerkkarte ich doch so gesehn frei...ich weiß die ist auf
den Hersteller zugelassen...aber das stört doch nicht.
Wie muss ich jetzt eigentlich mein Reedrelais anschließen?
Matze .. schrieb:> passt alles...meine Fritzbox hatte gerade einen reset.> Mal so nebenbei ich hoffe ich nerve nicht zu sehr. Gerade die> offensichtlichen fehler sind ja echt peinlich.>> Jetzt muss ich nochmal wegen der MAC fragen. Die MAC von der alte> defekte Netzwerkkarte ich doch so gesehn frei...ich weiß die ist auf> den Hersteller zugelassen...aber das stört doch nicht.
Das dürfte genau so wenig erlaubt sein, wie sich eine MAC Adresse
auszudenken. Aber, das Teil hängt sowieso nur in deinem LAN und nicht
bzw. über IP-Router am Internet. Von daher wird es niemanden
interessieren, welche MAC Adressen du in deinem Netzwerk benutzt.
> Wie muss ich jetzt eigentlich mein Reedrelais anschließen?
Ich würde an die Stiftleiste eine Emitterschaltung hängen und die Relais
(mit Freilaufdiode) an die entsprechende Spannung hängen.
Welche Relais hast du denn da?
Du darfst aber eine "Locally Administered Address" verwenden.
Siehe: http://de.wikipedia.org/wiki/Locally_Administered_Address
oder http://netzikon.net/lexikon/l/laa-mac-adresse.html
Was ein MAC zu einer "Locally Administered Address" macht ist das
gesetzte U/L-Bit (U/L=1) in der MAC-Adresse.
Genaueres bei http://en.wikipedia.org/wiki/MAC_address (Steht in der
Deutschen leider nicht beschrieben welches Bit das ist).
Auszug:
-------------------------------------------------------------------
A locally administered address is assigned to a device by a network
administrator, overriding the burned-in address. Locally administered
addresses do not contain OUIs.
Universally administered and locally administered addresses are
distinguished by setting the second least significant bit of the most
significant byte of the address. If the bit is 0, the address is
universally administered. If it is 1, the address is locally
administered. In the example address 02-00-00-00-00-01 the most
significant byte is 02 (hex). The binary is 00000010 and the second
least significant bit is 1. Therefore, it is a locally administered
address.[4] The bit is 0 in all OUIs.
If the least significant bit of the most significant byte is set to a 0,
the packet is meant to reach only one receiving NIC. This is called
unicast. If the least significant bit of the most significant byte is
set to a 1, the packet is meant to be sent only once but still reach
several NICs. This is called multicast.
-------------------------------------------------------------------
Einfach gesagt: alle MAC Adressen deren erstes Byte
(in der xx:xx:xx:xx:xx:xx - Darstellng) das zweite Bit gesetzt haben.
z.B. 02, 03, 06, 07, 0A, ...
...ah OK...aber da es eh nur im LAN existiert sollte das kein Problem
sein...
...hat eienr Ahnung wie ich das MagicPaket auslesen und verarbeiten
kann?
Das Relais hast eine Nennspannung von 24V an der Spule. Das heißt du
brauchst auf jeden Fall einen NPN Transistor gegen Masse und am
Kollektor das Relais gegen 24V.
...das Relais ist eh das falsche. ich hatte noch 2 Stück da. Ich habe
aber nur 5 Volt Betriebspannung vefügbar. das die nur für 24 Volt sind
hab ich glatt übersehn.
Aber wie gesagt...ich benötige gar kein Relais, da ich nur einen kurzen
Impuls brauche. Da fließt nur ein ganz geringer Strom, wieviel genau
muss ich noch messen.
In welche Datei(en) muss ich eigentlich die Anweisungen(en) schreiben
damit der AVR das MagicPaket ausliest und umsetzt?
Ich tippe jetzt mal auf Enc28J60.h, uip.h und main.c, oder?
Matze .. schrieb:> ...das Relais ist eh das falsche. ich hatte noch 2 Stück da. Ich habe> aber nur 5 Volt Betriebspannung vefügbar. das die nur für 24 Volt sind> hab ich glatt übersehn.> Aber wie gesagt...ich benötige gar kein Relais, da ich nur einen kurzen> Impuls brauche. Da fließt nur ein ganz geringer Strom, wieviel genau> muss ich noch messen.
Und welche Spannung? Prinzipiell kann man die Emitterschaltung auch mit
einem Pull Up benutzen (Widerstand statt Relais) und die Spannung am
Kollektor abgreifen.
> In welche Datei(en) muss ich eigentlich die Anweisungen(en) schreiben> damit der AVR das MagicPaket ausliest und umsetzt?> Ich tippe jetzt mal auf Enc28J60.h, uip.h und main.c, oder?
Das weiß ich nicht, da ich noch nichts mit MagicPacket geschrieben habe.
Ich vermute aber mal, du wirst den Ethernet-Teil des UIP Stacks
modifizieren müssen. Das geht nicht von außerhalb.
Oder du schmeißt den uip Stack komplett raus (Wenn du nur MagicPacket
brauchst) und schreibst dir ein kleines Programm selber, was die Pakete
vom ENC28J60 dekodiert.
> Und welche Spannung? Prinzipiell kann man die Emitterschaltung auch mit> einem Pull Up benutzen (Widerstand statt Relais) und die Spannung am> Kollektor abgreifen.
Also Betriebspannung und Schaltspannung sind je 5 Volt.
> Das weiß ich nicht, da ich noch nichts mit MagicPacket geschrieben habe.> Ich vermute aber mal, du wirst den Ethernet-Teil des UIP Stacks> modifizieren müssen. Das geht nicht von außerhalb.>> Oder du schmeißt den uip Stack komplett raus (Wenn du nur MagicPacket> brauchst) und schreibst dir ein kleines Programm selber, was die Pakete> vom ENC28J60 dekodiert.
Das habe ich befürchtet...ich hab davon leider noch weniger Ahnung als
Du. :)
Hallo, klasse Projekt!
Ich hab es heute nachgebaut, und der Beispielcode klappt super.
Nur komme ich gerade nicht weiter.
Ich versuche anstatt der standart HTML-Seite (g_HtmlPageDefault) ein
Char-Array mit "Hallo Welt" auszugeben.
Mir ist nicht ganz klar wo ich dies einbinden kann - Hat es etwas mit
"pSocket->pData" zu tun? Ich seh leider vor lauter structs und pointern
den Wald nicht mehr...
MfG
Stefan
Hi Matze ,
das ist gar nicht so schwer. Wenn Du den Client (PC) selber baust,
kannst Du ja auch überfliegen, wie der µServer auf Dich reagiert und
brauchst den HTTP-Kram (POST, etc.) nicht mehr. Das ist m.E. halt die
TCP/IP Schiene.
Grüße
Jörg
Hallo Brause...
das Prinzip von WoL / MagicPaket ist mir schon klar. Nur leider nicht
wie ich das auf den AVR adaptiere.
Ich habe zwar Mikrocontrollerprogrammierung am Xmega mal in der Uni
gehört...nur leider keine Grundlagen, sondern wir haben nur im Quelltext
vom Dozenten rumgeschrieben. Dieser war mir seinem eigenen Stil
programmiert, also konnte man so gut wie keine Rückschlüsse ziehen.
Den Webserver brauch ich im Grunde nicht wirklich. Ich würde ihn aber
gerne drauf lassen..."nur" eben um die Funktion das er WoL verarbeiten
kann.
Für den Anfang würde ja ein kleines Programm reichen das nur das
MagigPaket empfängt verarbeitet und damit einen Port/Pin ansteuert...wo
dann meinet wegen einen Transistor durchgeschaltet wird.
Wenn sich da jemand die Zeit nehmen würde mich ein wenig an die Hand zu
nehmen, wäre das super.
Hallo Matze,
auch so, Du meinst DAS MagicPacket für Wake On LAN. Wouh!
Also bei mir habe ich das so gelöst.
Es gibt ja die Aufruf-Routine HttpDCall() in HttpD.c, die die
empfangenen Bytes auswertet. Ich habe mir ein entsprechendes Modul
TcpIpD.c gebaut. Wenn man weiß, wie die Daten kommen (also wie ein
Magische Paket aussieht), so kann man das in der Aufruf-Routine
abarbeiten und "erkennen". So mache ich das auch. Ich habe mir ein
einfaches Protokoll ausgedacht, wobei die ersten 2 Bytes angeben,
wieviele Daten folgen.
Damit steuere ich dann Relais-Karten für eine Rollosteuerung an...
Wenn Du willst, kann ich Dir mal das .c schicken.
Grüße
Jörg
Könnte mir bitte jemand sagen wie man die HttpD.c abändern muss, damit
ein Char-Array aus dem RAM im Browser angezeigt wird?
Das ganze Parsing usw. soll komplett raus.
Ich tu mich leider extrem schwer bei den ganzen structs und pointern und
verstehe den Source nicht so ganz.
char text[] = "Hallo Welt";
So sollte es dann im Browser stehen (ohne HTML). Mehr brauch ich nicht
:-)
Vielen Dank schonmal für jegliche Hilfe.
Ja das ist mir klar :-)
Ich möchte aber während der Laufzeit den Ausgabetext ändern.
Konkret:
Bei HTTP-Abruf wird per UART ein neuer Text von woanders abgeholt und
dann zum Browser geschickt.
Ich hab das als quick&dirty Variante schon in der CopyHttpData()
Funktion eingebaut - allerdings gibts da mehrere Probleme mit der Länge
des Strings und mit dem nachträglichen "parsing".
Deshalb wär es sehr hilfreich wenn mir jemand sagen könnte wie man das
sauber hinbekommt.
Könnte mir jemand helfen?
Ich möchte eine UDP-UART Bridge bauen (Befehl per UDP an die Platine
senden, sie schickt den Befehl dann über UART raus, wartet auf eine
Antwort und schickt diese Antwort dann per UDP zurück zum Anfragenden)
Bei mir hagelt es leider schon compiler-Fehler wenn ich in der uipopt.h
"#define UIP_UDP" auf 1 setze. (Da fehlt anscheinend die Definition
einer Variablen und es fehlt eine Sprungmarke.)
Habe da mal reingeschaut, anscheinend muss man UIP_ACTIVE_OPEN ebenfalls
auf 1 setzen. Komische Sache das.
Dann geht es aber.
Wenn du nur eine UDP Anwendung benötigst, kannst du den uip_UdpAppHub
raus"operieren". Der ist nur nötig, wenn man mehrere (UDP) Anwendungen
laufen lassen möchte.
Hat jemand von Euch zufällig bereits einen NTP-Client, basierend auf
Simons UDP-Hub, für diesen Stack geschrieben?
Ich bin zwar zur Zeit dabei, einen zu schreiben, aber leider wird aus
irgendeinem Grund der UdpAppHubCall bei mir nicht aufgerufen (UDP ist
natürlich aktiviert).
Ich habe den Source von Peter Bünger
(Beitrag "Re: Webserver mit UIP Stack und NTP-Client") verwendet und
entsprechend modifiziert.
Den Code findet Ihr in der Anlage.
Die Initialisierung findet definitiv statt, allerdings wird wie gesagt
NtpCall nicht von uIP aufgerufen, und auch wenn ich manuell die
NTP-Anfrage versende, wird nie das new_data-flag gesetzt.
Ich habe schon vieles durchprobiert, aber leider ohne Erfolg.
Ich hoffe, Ihr könnt mir dabei weiterhelfen.