Hallo,
Hier mal wieder eine Betaversion habe nach den wünschen von Holger jetzt
mal nicht die ganze Stackverwaltung in den Interrupt gelegt. Mal sehen
wie die so läuft!
Gruß
Ulrich
Kann ich den LM317T mit 3 Kabeln verlängern, damit ich ihn auf einen
größeren externen Kühlkörper montieren kann? Oder könnte es dabei zu
Störungen durch die Verlängerung kommen?
Steffen S. wrote:
> Kann ich den LM317T mit 3 Kabeln verlängern, damit ich ihn auf einen> größeren externen Kühlkörper montieren kann? Oder könnte es dabei zu> Störungen durch die Verlängerung kommen?
10-20cm sollten gut funktionieren. Länger würde ich es nicht machen.
@ Ulrich
>Die Beta hat noch einen Bug bin gerade dieses am beheben!!
Danke für die Mühe. Aber ich finde es ziemlich gruselig
SPI einmal im INT2, im Timerinterrupt und dann noch in der
Mainloop zu benutzten. Dann doch lieber NUR Interruptbetrieb
oder eben Polling. Letzteres dürfte die einzige Lösung für mein
Problem sein. Oder INT2 und Timerint. verbieten wenn man SPI
ausserhalb der Ints benutzen möchte. Ich schau mal was passiert
wenn man auf Polling umstellt.
Hi Ulrich,
>Hier läuft der Stack nun im polling mode. Wie läuft der bei euch??
Sorry konnte ich mir noch nicht ansehen.
Da war noch was in arp_request() ! NTP antwortet jetzt viel öfter
positiv.
So sieht das bei mir im Moment aus:
//Nun ist das ARP-Packet fertig zum Senden !!!
//Sendet das erzeugte ARP Packet
ETH_PACKET_SEND(ARP_REQUEST_LEN, buffer);
//Warte auf eine Antwort !
for(unsigned char count = 0;count<20;count++)
{
for(unsigned long a=0;a<100000;a++){asm("nop");};
if(eth_data_present) { eth_get(); break; }
}
@ Ulrich
Der Dateiname des Anhanges meines letzten Postings ist
etwas irreführend. Es ist noch kein Polling ! Immer
noch mit Interrupts. Allerdings sehr kurze Interrupts.
Ich habe auch usart_write() noch etwas geändert.
usart_write() kann jetzt mit %s auch Strings aus dem RAM ausgeben.
usart_write("File found %s\r\n",http_entry[index].filename);
Altes usart.c einfach ersetzen.
Gruß
holger
Hallo,
Ich habe mir jetzt nochmal die debugausgaben genauer angeschaut.
Mein Problem ist ja, dass der webserver nicht immer richtig startet,
d.h. der ENC nicht immer beim ersten Mal richtig initialiesiert wird.
Nun ist mir aufgefallen, dass er zwar immer laut debugausgabe
Datenpackete empfängt, aber nichts sendet, er macht 5 Sendeversuche,
aber es kommt nichts an. Wenn ich ihn dann ein paar mal resette gehts
dann irgendwann wieder un er läuft stabil. Woran kann das liegen?
Könnte der 25 MHz Quarz vielleicht schlecht sein?
Hallo,
eine kurze Frage zur Schaltung: Ist das wirklich eine 12,6 Z-Diode oder
wie ist die Angabe 12V6 zu verstehen? Ich finde nur welche mit 12V
Durchlaßspannung. Ein 0,5W-Typ wird reichen, nehme ich an, oder?
Bernd
Mal ne Frage, ich hab nur mal flüchtig reingeschaut, aber es sieht
tatsächlich danach aus, als würden alle Stringkonstanten zur Laufzeit im
RAM gehalten werden bei deinem Sourcecode, Ulrich!
Mit PROGMEM bzw. PSTR() und den ganzen _P Funktionen (zB memcpy_P)
kannst du auch Daten im Flash-Speicher handlen und hättest mehr RAM für
zum Beispiel den Ethernet Buffer.
Btw, warum setzt ihr eigentlich den Ethernet-Buffer so niedrig? Selbst
bei 2kB RAM kann man locker die 1500Bytes mit Ethernet-Buffer belegen.
So müssen wenigstens keine Pakete fragmentiert ausgewertet werden.
Oder hast du noch RAM-Verbrauch durch andere Tabellen bei deinem Server?
Hallo @Simon K.,
Dann schaue dir den Code mal genauer an! Damit ich nicht zuviel RAM
verschwende, passt schon Holger immer auf.
Natürlich kann ich den Ethernet Buffer größer Dimensionieren! Aber wenn
der Webserver auch mit fragmentierten Packeten klar kommt, habe ich
keine Probleme mit unfragmentierten. Auch wenn ich den Buffer auf 1500
Bytes stellen würde, würde unter Suse10.3 mit Firefox z.B. die Anfrage
fragmentiert. Für Belastungsteste und zur Problemanalyse sind kleine
Packete besser. Jeder kann die MTU Size auch größer wählen wenn er
meint.
>Oder hast du noch RAM-Verbrauch durch andere Tabellen bei deinem Server?
Natürlich brauche ich Tabellen für den Stack ich muß ja mehrere offene TCP -
Verbindungen managen.
Gruß
Ulrich
@ Ulrich
Die 1.0.26 läuft bei mir nicht korrekt.
Als erstes musste tcp_timer_call() aus dem
Timerint raus. Sonst wurde das SPI Modul
in der Mainloop und im Timerint benutzt.
Dann knallt es :(
Aber auch dann läuft es nur schleppend.
Ich hab
tcp_socket_process();
udp_socket_process();
aus der Mainloop rausgenommen und wieder in check_packet() eingebaut.
Dann gehts richtig zur Sache :) Auch im Polling Mode.
@ Ulrich
Und da ist der Übeltäter. "while" muss ein "if" sein.
Dann kann man
tcp_socket_process();
udp_socket_process();
wieder in die Mainloop legen.
void poll_eth (void)
{
#if USE_ENC28J60
// while( (ENC28J60_INT_PIN & (1<<ENC28J60_INT_PIN_BIT)) == 0)
if( (ENC28J60_INT_PIN & (1<<ENC28J60_INT_PIN_BIT)) == 0)
{
#endif
Hallo @Holger,
hatte heute Nachmittag schon eine neue Version 1.0.27 online gestellt da
ich auch schon probleme hatte. Aber einfach tcp_timer_call() aus dem
timer rauswerfen ist auch nicht gut!
Gruß
Ulrich
@ Ulrich
>Aber einfach tcp_timer_call() aus dem>timer rauswerfen ist auch nicht gut!
Ich meinte ja nicht KOMPLETT entfernen ;)
Ab in die Mainloop damit:
while(1)
{
poll_eth();
tcp_socket_process();
udp_socket_process();
if(update_arp_tcp)
{
arp_timer_call();
tcp_timer_call();
update_arp_tcp=0;
}
Siehe Anhang.
Gruß
holger
@ Ulrich
>So habe ich es ja jetzt auch :-)
Sorry deinen neuen Code hatte ich noch nicht gesehen.
Der benutzt jetzt aber wieder einen INT.
Ich glaube wir überschneiden uns hier ein wenig :(
Ich rede von Polling. Also deine 1.0.26 Poll Version.
Vieleicht sollte ich einfach auf 1.0.30 warten.
Gruß
holger
Hallo,
Ich wollte eine kurzen kleinen INT drinnen lassen, habe sonst wieder
probleme mit RTL8019 Karten. ENC28J60 liefen aber im polling problemlos.
Aber eigentlich sollte dieser kleine Interrupt keine Probleme mehr
bereiten.
Gruß
Ulrich
@ Ulrich
>Aber eigentlich sollte dieser kleine Interrupt keine Probleme mehr>bereiten.
Tut er auch nicht. Man muss sich nur mal auf eine
Vorgehensweise einigen. Die gibst du natürlich vor.
Du brauchst den INT ? Kein Problem. Ich räum dann
einfach gelegentlich mal wieder hinter dir auf
wenn du es erlaubst ;)
Hallo @all,
bin gerade am überlegen wie ich ein Display anbinden soll. LCD direkt am
Port.A? Somit gehen die analogen Eingänge verloren, oder an einem
anderen Port? Oder evt. am I2C Bus (TWI) LCD Module von EA-DOG? Was
haltet ihr von einem NTP Server mit DCF77?? Über MMC/SD bin ich auch
noch am nachdenken. Mir persönlich würde auch ein 64k I2C EEPROM
reichen!
Was meint ihr?????
Gruß
Ulrich
Eine SD/MMC Anbindung mit FAT16 wäre meiner Meinung nach super! Ich weiß
zwar nicht was der Webserver dann für Übertragungsgeschwindigkeiten
erzielen kann aber so könnte man viel größere Webseiten abspeichern...
@ Maik
>Eine SD/MMC Anbindung mit FAT16 wäre meiner Meinung nach super! Ich weiß>zwar nicht was der Webserver dann für Übertragungsgeschwindigkeiten>erzielen kann aber so könnte man viel größere Webseiten abspeichern...Beitrag "Re: Webserver ATmega32/644DIP ENC28J60"
Ist doch schon vorhanden.
Ich lade meine Webseiten von MMC/SD.
Muss man nur richtig anschliessen.
Und bitte keine Dioden als Spannungsregler !
Hallo,
Also SD/MMC scheint mir nicht so wichtig. Es ist ja immer noch ein
embedded Webserver. Wer viele Seiten und Inhalt darstellen möchte nimmt
wohl eher einen "richtigen" Server ;-) Und die Ansteuerung bis hin zu
richtigem FAT kostet ja ne Menge Ressourcen.
Der Fokus sollte (meiner Meinung nach) bei Messung, Steuerung und
Überwachung liegen (Temperaturen/... einlesen, LEDs/Relais/...
ansteuern, Displays/... zur Anzeige verwenden) - obwohl vielleicht ein
weiterer Flash/EEPROM nicht schaden kann ;-)
i2c hätte den Vorteil, dass man noch weitere Peripherie anschließen
kann.
Steffen.
>Wie sind denn dann so die Übertragungsraten?>>Unter Linux dauert das laden einer Seite mit 10 Bildern>>bei 30-70kB pro Bild ca. 5s. Unter Windows 30s.
@Steffen
>Der Fokus sollte (meiner Meinung nach) bei Messung, Steuerung und>Überwachung liegen (Temperaturen/... einlesen, LEDs/Relais/...>ansteuern, Displays/... zur Anzeige verwenden) - obwohl vielleicht ein>weiterer Flash/EEPROM nicht schaden kann ;-)
Das ist auch mein Gedanke, und ich meine 64kBytes für Webseiten über I2C
reichen für einen embeddet Webserver aus. Somit könnte die interne Seite
aus dem Flash verschwinden, und es würde immernoch alles in einem
ATmega32 reinpassen.
Obwohl die MMC/SD Anbindung ist schon nicht schlecht vom Holger ;-)
Gruß
Ulrich
>An ein Dataflash von Atmel AT45DB041B-RC habe ich auch schon gedacht,
Gibts pinkompatibel auch mit 2MB !
Würde ich einem I2C EEPROM auf jeden Fall vorziehen.
>Obwohl die MMC/SD Anbindung ist schon nicht schlecht vom Holger ;-)
Danke, aber der Webserver passt dann nicht mehr in einen ATMega32.
ATMega644 ist da angesagt.
Zwecks Display; ein einfaches HD44780 für einfache Ausgabe? Einfach
einen 8 aus 3 Baustein verwenden; die lassen sich auch kaskadieren.
Somit hast Du z.B. 16 aus 4 (nur noch Ausgänge!).
Hmmm, Dataflash wäre was feines. Allerdings wo kauft den ein
Normalbürger? Segor scheint nur 4MB, 8Mb und 16MB zu haben.
>Zwecks Display; ein einfaches HD44780 für einfache Ausgabe? Einfach>einen 8 aus 3 Baustein verwenden; die lassen sich auch kaskadieren.>Somit hast Du z.B. 16 aus 4 (nur noch Ausgänge!).
So ein Display habe ich zu Hause. Gab es mal bei MIR (R.I.P.) in
München. Mir wäre aber ein Standard-Display lieber.
holger wrote:
> @ Maik>>>Eine SD/MMC Anbindung mit FAT16 wäre meiner Meinung nach super! Ich weiß>>zwar nicht was der Webserver dann für Übertragungsgeschwindigkeiten>>erzielen kann aber so könnte man viel größere Webseiten abspeichern...>>> Beitrag "Re: Webserver ATmega32/644DIP ENC28J60">> Ist doch schon vorhanden.> Ich lade meine Webseiten von MMC/SD.> Muss man nur richtig anschliessen.> Und bitte keine Dioden als Spannungsregler !
Klingt sehr interessant!!! Kannst du mir deinen Schaltplan mal
zuschicken?!
Gruß
Kornelius
>Klingt sehr interessant!!! Kannst du mir deinen Schaltplan mal>zuschicken?!
So sieht mein Board aus. Das hat mit Ulrichs Board nicht
wirklich viel gemeinsam. Glücklicherweise sind die meisten Anschlüsse
am ATMega identisch. So konnte ich mit seinem Code rumbasteln.
Ist auch ISP tauglich.
holger wrote:
>>Klingt sehr interessant!!! Kannst du mir deinen Schaltplan mal>>zuschicken?!>> So sieht mein Board aus. Das hat mit Ulrichs Board nicht> wirklich viel gemeinsam. Glücklicherweise sind die meisten Anschlüsse> am ATMega identisch. So konnte ich mit seinem Code rumbasteln.> Ist auch ISP tauglich.
Sehr schick! Hatte auch schon mal einen Microchip Webserver mit einem SD
Card Controller aufgebaut um den Flash zu entlasten aber der hatte eine
maximale Übertragungsrate von 5 KB/s... Und deine Sourcedateien weiter
oben im Forum sind aber auf dieses Board zugeschnitten?! D.h. der läuft
auf diesem Board?
>Und deine Sourcedateien weiter>oben im Forum sind aber auf dieses Board zugeschnitten?! D.h. der läuft>auf diesem Board?
Ja, musst natürlich noch nen ATMega644 dranfummeln ;)
Hallo
@Holger SD Karte ist auch super, wenn man den Webserver als Danelogger
einsetzen will! Gibs von Deinem Board auch Eagle Dateien? Oder ist das
zu unverschämt?
MfG
Achim
Hi!
Wegen Pins für zukünftige Funktionen:
ich habe das LCD-Display an Port D2-D5 für D0-D3 des Displays und an
Port C4-C7 die Steuerung.
An Port PB4 hängt ein Servo (Webcamsteuerung), PWM über Timer0.
An Port PC0+PC1 hängt über TWI ein Temp-Sensor DS1621.
Port A hat im Moment 8 LEDs, das ist aber natürlich variabel.
Gruss,
Micha
Hallo @all,
Habe hier mal eine kleine Schaltung für ein standart LCD-Display welches
nur 3 Anschlüsse am Webserver benötigt. (PC2,3 und 4)
Werde den Code im Webserver demnächst benutzen.
Gruß
Ulrich
Hi,
die Routinen "usart_write_P" und "lcd_print_P" unterscheiden sich im
Inhalt nur wenig. Läßt sich das nicht anders machen? So ähnlich like
"stdio", oder als zusätzliche Parameterübergabe? Sollte ich, anstatt
doof zu fragen, einfach mal selber loslegen? ;-)
mfg Lötlackl
Hi,
@Steffen
> was soll das Ziel der "stdio"-ähnlichen Sache sein?>> Willst du per define bestimmen können, ob du RAM oder FLASH nutzt?
Nöö, man kann der stdio mitteilen, wohin sie ausgeben soll (Stichworte
stdout, stderr).
@Ulrich
Da hast Du schon recht, ist mir eben nur aufgefallen.
mfg Lötlackl
Hi!
Zum testen die aktuelle Version von Uli samt meinen Änderungen:
LCD-Display
Temperatur-Sensor
Servo-Webcam
Gruss,
Micha
http://mikrocontroller.homedns.org/
hey,
cooler Server - und das auf einem AVR. Insbesondere der Http-Kram
gefällt mir. Sowas wie den IFRAME habe ich schon (in Gedanken - leider
nicht mit Google) gesucht.
Eine Frage dazu. Ist es möglich, eine Website zu "embedden" die einen
Refresh hat und dieser wird dann nur in diesem Bereich neu geladen?
Das würde mich interessieren, da ich momentan eine SVG-Datei erstelle,
die eine (Spannungs-, Temperatur-,...)History darstellen kann. Diese
(und nur diese) soll sich selbständig alle 2 Minuten reloaden können.
Gruß
Steffen.
Achja,
zum Thema Display wollte ich noch meinen Senf geben: Ich finde es eine
gute Idee das Display über wenige Pins anzuschließen. Somit kann es in
einer Vielzahl an Projekten (temporär) verwendet werden. Die paar Ports
hat man oft noch frei.
Den Ansatz könnte man ja fast noch einen Schritt weiter treiben und
vielleicht einen tiny2313 verwenden (1,30EUR) statt eines Logikchips.
Dann ein einfaches Protokoll hin zu dem Slave. Den Vorteil sehe ich
darin, dass für die Kommunikation eine Art Standard verwendet werden
kann und erst der tiny das konkrete Display ansteuert. So kann ein
Textdisplay genauso verwendet werden wie ein Grafikdisplay.
Beispiel: Hauptcontroller hat ein paar wenige Befehle, die eigentlich
komplett an den tiny gesendet werden (Routinen auf dem tiny sparen Flash
auf dem Hautpcontroller):
- disp_print()
- disp_clear
- disp_line, disp_circle,... (wird nur umgesetzt, wenn es unterstützt
wird)
...
Und dann wird der entsprechende Text auf dem (Text oder Grafik-) Display
angezeigt. Es könnte auch eine serielle Schnittstelle dahinter hängen,
oder ein CAN-Bus-Interface oder PAL-Encoder oder oder oder.
Leider habe ich momentan keine Zeit für solche Spielerein und freue
mich, dass Uli und andere ihre Programme offen legen. Damit kann man
sich auf die Anpassung konzentrieren und kommt in endlicher Zeit zu
einem Ergebnis - so macht das Basteln dann auch Spass :-)
Gruß in die Runde
Steffen.
Hallo,
Wofür brauche ich einen Fernseher? Warum lebe ich??
Diese Webserver ermöglicht mir das Schalten, Steuern und Überwachen von
jedem Ort auf dieser Welt.
Gruß
Ulrich
Ich habe den Thread mit Freude verfolgt, zum Thema
>für was brauch ich so ein Ding?
Ich bin dabei, mir eine Heizungssteuerung (Regelungen) für Blockspeicher
(Solar, elektrisch zugeheizt) und noch diversen Wärmetauschern
aufzubauen.
Mit freundlicher Genehmigung von Ulrich würde ich den Webserver dort
integrieren, um den Status (Temperaturen usw.) ansehen (mitloggen) zu
können und ggf. neu zu parametrieren. Falls machbar auch übers www.
Ist glaub' ich ein schöner Einsatzzweck.
;-)
@Steffen
Hi!
Danke für die Blumen, an dem html habe ich auch ne ganze Zeit gesessen.
Das mit dem automatischen refresh habe ich auch im Hinterkopf.
Das geht mit Ajax ganz gut, lass mir mal ein paar Minuten... :)
Gruss,
Micha
Kann mir jemand das Ethernet IC für den Server zu verkaufen?
Bei sontwo wollte ich das nicht bestellen wegen Versand->Ein
Bauteil=Lohnt sich nicht.
Ein gepolsterter Umschlag(unversichert) währe vollkommen i.O.
Danke schonmal
@Steffen
Hi!
Das obere, rechte Fenster mit der Temperaturanzeige
wird nun alle 5s aktualisiert, AJAX sei Dank.
Im Moment spielt DynDNS verrückt, deshalb hier die ip:
http://91.66.67.178
Gruss,
Micha
@Michael
Bei mir funktioniert es nicht. Es steht nur "Lade..." und dann passiert
nichts mehr in dem Fenster oben rechts. Ich habe hier XP und Firefox
2.0.0.9. Kann es vielleicht daran liegen, dass gerade zu viele darauf
zugreifen? (Der Rest der Seite funktioniert und wird angezeigt)
Aber ich habe mich gestern Nacht auch noch mal kurz in Ajax eingelesen.
Damit sollte es auf jeden Fall gehen.
Vielleicht komme ich am WE noch mal dazu, einen Blick auf den Server zu
werfen :-)
Steffen.
@ Ulrich
Der RAM Sparer ist mal wieder online ;)
if{ strcasestr((char*)ð_buffer[a],"LED1=1\0")!=0){PORTA ^= (1<<PA0);}
ersetzen durch
if{ strcasestr_P((char*)ð_buffer[a],PSTR("LED1=1"))!=0){PORTA ^=
(1<<PA0);}
Und
memmove(&var_conversion_buffer, "EIN\0", 4);
ersetzen durch
strcpy_P(var_conversion_buffer, PSTR("EIN"));
Gruß
holger
Hallo @Holger,
Danke!! Ist nun in der neuen Version geändert. Hinzu gekommen ist noch
die Anbindung des LCDs mit 3Port Pins.
Hallo @all,
also Version 1.0.29 steht nun online!!!
Gruß
Ulrich
Hallo,
dies ist wirklich ein tolles vielseitiges Projekt. Mich würde noch die
Anbindung einer Kamera interessieren. So wie beim Webserver vom Simon
mit der MCA 25 von Sony. Würde es Probleme geben wenn ich versuchen
würde diese zu implementieren? Hat sich schon einer daran gewagt?
Gruß
Martin
Hallo,
Die Implementation von einer MCA25 Kamera, Source geschrieben von Simon,
war auch schon bei meinem alten Stack vorhanden. Da ich hier auch noch
eine MCA25 liegen habe, wäre es super wenn ich diese auch anbinden
könnte. Also die Anbindung sollte eigentlich keine Probleme bereiten.
Ich habe leider nicht immer die nötige Zeit (Familie). Allerdings
Versuche ich mein bestes.
Gruß
Ulrich
Hallo Ulrich,
vielen Dank für die schnelle Antwort. Ich wollte weder meckern noch
Druck ausüben. Ich wollte mich nur vergewissern ob es grundsätzlich
möglich ist eine Kamera anzuschließen. Es wäre toll wenn Du diese mal
integrieren könntest. Ich wollte in Kürze das Projekt nachbauen. Dann
könnte ich auch versuchen den Kameracode einzubinden. Hast Du schon
einen Liefertermin für die Platine?
Gruß
Martin
@Uli
Hallo!
Ich glaube ich bin auf einen Fehler gestossen:
Ich nutze mehrere Variabeln wie time (von Dir für die aktuelle Zeit),
uptime und counter (von mir, auch in timer.h definiert).
Ich hatte mich gewundert, dass ab und zu im laufenden Betrieb
die Zeit, der Counter und Uptime auf 0 gesetzt werden.
Andere Variablen, wie zB die ARP-Tabellen, bleiben unberührt.
Es ist nachvollziehbar, wenn man eine Seite sehr oft, sehr
schnell hintereinander läd. Dann setzt er diese Variablen
unmotiviert auf 0.
Ein Reset scheint es nicht zu sein, da die Ready-Meldung über
seriell nicht kommt.
Ich habe das auch mit Deiner aktuellen Version 1.0.29,
ohne Veränderungen am Code, nachvollziehen können.
Dazu habe ich 5-10 mal die Seite schnell aktualisiert und dann per
Kommandozeile Time gecheckt.
Liegt das Problem evtl. bei mir oder könnte da im Code
was verwurschelt sein?
Gruss,
Micha
Hallo,
Jo, den Fehler konnte ich lokalisieren!! In Version 1.0.30 ist dieser
dann beseitigt. Diese Version kommt noch laufe der nächsten 2 Stunden.
Gruß
Ulrich
@Holger
Haben die RAM-Sparmaßnahmen eigentlich einen Einfluss auf die
Geschwindigkeit? Oder können die Zugriffe genauso Effizient wie
RAM-Zugriffe behandelt werden?
Gruß
Steffen.
Hallo,
erstmal vielen Dank Ulrich für diesen schönen Webserver.
Es läuft alles problemfrei bis auf die IP Einstellung per RS232. Mein
Nachbau übernimmt die einfach nicht. Die Zeichen werden einfach
ignoriert. Der Datenaustausch mit dem Telnetprogramm funktioniert, ich
denke es liegt also nicht an der Hardware. Was mache ich da falsch? Ich
nutze Hyperterminal 5.1 9600,8,n,1 kein handshake
Achja im Quellcode selber lässt sich die IP ändern.
Für eine Antwort bin ich sehr dankbar
Grusz Sebastian
@Uli
Danke! Der Fehler scheint behoben zu sein.
Selbst bei hohen Besucherzahlen und durch die automatische
Aktualisierung
erzeugter Traffic führen nicht mehr zu den gelöschten Variabeln.
Eins ist noch sonderbar:
Wenn er beim Start keinen Zeitserver findet, ist er sehr schwer
ansprechbar für normale Website-Abrufe.
Erst wenn er nach einem Reset den Zeitserver findet und die Uhr stellt,
läuft alles normal.
Vielleicht findet Deine magische Hand ja auch da ein falsches Bit.
Gruss,
Micha
Hallo zusammen!
So der Umbau meines PLatinenlaminieres ist fast abgeschlossen, jetz kann
ich dann auch mal einsteigen :-)
@Michael: Kann es sein, dass deine Webcam ab und zu aussetzt? hab grad
auf deinem Server gespielt und nach einer gewissen Zeit wird die
Webcamanzeige nicht mehr aktualisiert, die automatische Aktualisierung
funktioniert aber weiterhin...
MfG Simon
PS: Macht weiter so!!! Echt ein sehr lehrreiches Projekt :-)
Bis zu welcher Baudrate funktioniert der Datenaustausch zwischen RS323
und telnet? Habe da ein serielles Geräte, dass ich gerne übers Netzwerk
bedienen möchte, welches allerdings mit 38400 baud läuft. Ist das
möglich?
Hallo @all
habe nochmal eine neue Version olnine gestellt 1.0.31!
@Steffen S.
Sollte eigentlich möglich sein! Allerdings kann es sein das der
Ringbuffer vergrößert werden muß. Das erfolgt in der Zeile 15 von
usart.h wenn Du einen Mega644 benutzt kannst du den Buffer bis 500
einstellen einfach mal testen.
Gruß
Ulrich
@ Ulrich
Hier noch ein paar Stellen wo man noch RAM freimachen kann:
In stack.c
icmp_data[] braucht man nicht.
//Add ICMP Data
/*
for (unsigned char a = 0;a<32;a++)
{
eth_buffer[ICMP_DATA+a] = icmp_data[a];
}
*/
memcpy_P(ð_buffer[ICMP_DATA],
PSTR("abcdefghijklmnopqrstuvwabcdefghi"),32);
In telnetd.c
memcpy_P(ð_buffer[TCP_DATA_START],
PSTR("Start Telnet Server:\r\n"),22);
In http_get.c
memcpy_P(ð_buffer[TCP_DATA_START],
PSTR("GET /xampp/index.php HTTP/1.1\r\nHost:
192.168.0.99\r\nConnection: Keep-Alive\r\n\r\n"),77);
Ergibt zusammen einen schönen Batzen den man besser auf
die MTU_SIZE drauflegen kann :)
Gruß
Holger
Hallo Jungs,
ich habe ja vor einiger Zeit mal wegen "History"-Funktion angefragt.
Dabei habe ich mich dann für die Umsetzung per SVG-Datei entschieden.
Vorteil/Nachteil:
+ Vektorformat
+ XML-Basis --> Bilddaten können "einfach" per Text erstellt werden
+ recht sparsames Format für die Darstellung von Linien
- Browser muss SVG unterstützen
- auch so eine XML-Datei zu erstellen ist nicht ganz so einfach
- bei einem Reload wird im Firefox kein Bild angezeigt (nicht mal das
alte)
Hier kurz die Skizze meiner Umsetzung (der Code ist definitiv nicht
vorzeigefähig:
Erstellen des Bildes: Ich habe genauso wie bei Bilddateien oder Webpages
ein PROGMEM-Feld erstellt mit dem SVG-Bild (siehe Wikipedia):
1
PROGMEMcharpicHist_svg[]=
2
{
3
//"<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n" // Wird im Header mitgesendet...
An die Stelle, an der ich die History-Linie mit dem Verlauf haben
möchte, habe ich in bereits bekannter Form "%VA@xx" gesetzt. Dieser
String wird durch Stützpunkte ersetzt, die dann die Linie bilden.
Das ganze habe ich in einem IFRAME eingetragen und im Header das
reload-meta-tag eingefügt. Damit kann ein Reload auch ohne Ajax
durchgeführt werden. Die angezeigten Bilder kommen aus einem globalen
Feld, welches zur Zeit mit statischen Daten "gefüttert" ist.
Noch mal deutlich: Ich beschreibe hier keine tolle Lösung, sondern nur
eine Idee, die vielleicht von euch verwendet oder angedacht werden kann.
Anbei ein Screenshot, wie es dann aussieht.
Steffen.
Hi Steffen!
Gute Idee, werde das auch mal so versuchen!
Im Moment zeichne ich einen Temperaturverlauf mit Ulis
balke.gif als Balkengrafik :)
Achso, AJAX hat den Vorteil, dass diese nervige klicken
des IE beim Reload ausbleibt :)
Gruss,
Micha
hmmm....das mit dem Klick ist natürlich ein guter Grund. Das werde ich
mir aber erst anschauen, wenn ich es geschafft habe meinem Server ein
wenig Leben zu geben - wenigstens ein Temp.Sensor sollte heute noch ran
- bis jetzt sind das ja alles nur Variablen.
Steffen.
Hallo
@Steffeen weiter oben habe ich schon mal xml angesprochen.....SVG ist
doch schon ein Schritt in diese Richtung....
Ich bin leider auf dem "kleinen" Atmel nicht zu Hause...
..aber eine Einfache XML-Ausgabe der Form
<?xml version="1.0" encoding="utf-8"?>
<Temperatur>
<t>20.3</t>
<t>21.0</t>
<t>21.1</t>
......
</Temperatur>
würde ja reichen. Die umwandlung kann man dann im Browser mit XSL
machen.....
MfG
Achim
Ich würde das Plotten komplett in JavaScript machen, Link zu einer
fertigen Bibliothek habe ich weiter oben gepostet. Der Vorteil ist dass
der Server dann nur noch eine (z.B. kommagetrennte) Liste der Werte
bereitstellen muss die sich der Browser per JavaScript abholen und
beliebig weiterverarbeiten kann.
@Andreas:
Ja den Link hab ich mir schon mal angeschaut. Ich muss aber zugeben,
dass es mir alles recht komplex erscheint. Es werden ja mehrere
.js-Dateien eingebunden und geladen. Da ist die Belastung sicher auch
nicht ganz gering.
Rein von der Optik, kann man dann allerdings auch tolle Sachen machen
und der Rechenaufwand wird in Richtung Client verschoben, was dem
kleinen 8-Bitter sicherlich gefällt :-)
Aber ich werde mich mal damit beschäftigen.
Steffen.
Kann man eigentlich diesem MiniWebServer auch 2 IP-Adressen zuweisen?
Ich frage weil man dann ähnlich einer FritzBox eine Feste IP hat die man
zum einstellen des Servers Verwenden kann. So das man auch die 2. IP via
Netzwerk einstellen könnte.
Hat der Server eigentlich schon DHCP oder kommt das noch?
P.S.: Ich habe leider :-( noch keine MiniServer, aber eine Probesatz
ENC28J60 habe ich mir schon von Microchip zusenden lassen für sage und
schreibe 0,-EURO (Supi)
@Stefan
Da ich nicht vor habe den Server im "richtigen" Internet laufen zu
lassen, sondern mehr so als Spass in meinem Intranet, muss ich es dann
ja woanders hosten - und nur wegen der History noch einen PC (?) laufen
zu lassen, finde ich etwas übertrieben.
Mal sehen, was sich da basteln lässt...
Steffen.
@ Ulrich
erst einmal ein großes Lob, für deine Arbeit hier.
Ich verfolge dieses Forum mit großem Interesse und habe den kleinen
Webserver aufgebaut.
Hier bin ich auf ein kleines Problem gestoßen: Wenn ich unter Windows
eine Telnet-Session starte, wird unmittelbar die Meldung "Sart Telnet
Server:"
ausgegeben. Wenn ich diese Verbindung beende und erneut starte, vergehen
nun allerdings einige Sekunden bis diese Meldung wieder erscheint.
Anders verhält es sich, wenn man nach Beenden der Telnet-Session über
die RS232 mit der CPU kommuniziert, und dann Telnet wieder startet.
Leider kann ich die Ursache dafür in Deinem Code nicht finden.
Natürlich ist das kein riesen Problem, könnte aber auf einen noch nicht
erkannten Fehler hinweisen.
Stephan
Hallo Gerth,
Der Webserver bzw. Telnetserver benötigt halt seine Zeit bis dieser
bemerkt das die Telnetsession beendet wurde, und neugestartet wird.
Einfach nach dem Neustart der Session ein Return losschicken sollte dann
schneller gehen.
Gruß
Ulrich
Hallo funker,
Der ATmega644 kann ohne Probleme aus WinAVR programmiert werden. Die
Fusebits werden dabei automatisch nach meinen Vorgaben gesetzt.
Hallo @all,
Die Platinen können nun über meine Homepage im Onlineshop geordert
werden. Hierbei handelt es sich erstmal um georderte 50 Stück! Der
Versand erfolgt dann zwischen 6.12 und 10.12.2007.
Gruß
Ulrich
Hi!
habe grade ausprobiert, was passiert, wenn ich die Passwortabfrage
einfach leer lasse und ein paar mal schnell hintereinander OK drücke,
dann hängt der webserver ganz kurz, ist also für ca. 3 sekunden nicht
ansprechbar. Das könnte ja vielleicht für Angreifer von außen eine
Schwachstelle sein, den webserver durch ständige Anfragen "lahmzulegen"
(z.b. durch eine Brute-Force-Attacke). Ist es möglich einen Schutz
einzubauen, der nach z.b. 5-maliger falscher Passworteingabe die IP für
eine gewisse Zeit sperrt?
Hallo,
Mann kann den Schutz übertreiben, bester Schutz ist die Adresse des
Servers gar nicht preisgeben! Problem ist bei jeder Passworteingabe wird
ein TCP Socket geöffnet max. 5 Socket kann der Webserver in der
Defaulteinstellung öffnen. Diese werden aber nach einer definierten Zeit
wieder geschlossen (somit ist der Server wieder erreichbar).
>Ist es möglich einen Schutz einzubauen, der nach z.b. 5-maliger falscher >Passworteingabe die IP für eine gewisse Zeit sperrt?
Möglich ist alles! Zu bedenken ist aber der Webserver hat nur 2kByte
RAM. Des weiteren, selbst ist der Mann. Ich werde hier nicht anfangen,
für jeden eine individuelle Lösung anzufertigen.
Gruß
Ulrich
Hallo,
Ich noch mal, allerdings kann ich den Server via "Syn Flood" auch
einfacher lahm legen. Und wenn du die IP sperrst, benutze ich z.B. ein
Tool womit bei jeder Anfrage eine neue IP habe.
Wie viele IPs will man sperren? 4Bytes pro IP, bedeutet bei 2kBytes RAM
kann ich 512 Adressen aussperren. Dann habe ich aber auch kein RAM mehr
für mein Programm. Das ist aber alles nur fiktiv, solche Programme
dürfen ja laut unsere Regierung nicht mehr verwendet werden. Also kann
ich jetzt als Netzwerkadmin beruhigt schlafen (scherz).
Gruß
Ulrich
@Ulrich:
ok, zugegeben, meine Idee ist vielleicht etwas übertrieben gewesen und
würde die begrenzten RAM-Ressourcen des ATMELs sprengen.
War halt mal nur so ne Idee ;-)
Und gegen einen Syn Flood würde das ja sowieso nicht helfen.
Außer vielleicht mein Router, der kann Syn-Floods erkennen und für eine
definierte Zeit blocken.
Ich bin mal der Sache mit dem Java-Script Diagramm nachgegangen. Das,
was Andreas oben angeboten hat ist natürlich genau das richtige, aber
gerade wenn man alles auf den AVR legen will (.js und .html und .csv)
dann reicht der Speicher ganz sicher nicht.
Ich hab mal schnell (relativ quick & dirty) was zusammengebastelt. Ist
sicher noch ausbaufähig, zeigt aber, wohin ich will. Mit etwas
trickserei (zB Zusammenfassen der Styles in einen CSS Bereich) kann man
die Größe der .js Datei (aktuell 4kiB) noch weiter drücken.
Das Script zweckentfremdet AJAX um eine .CSV Datei zu öffnen. Die Daten
daraus werden in ein Array geschrieben. Anschließend wird automatisch
die Balkenbreite bestimmt (Je nach Gesamtbreite des Diagramms und Anzahl
der Werte in der .CSV Datei).
Die Balken werden mit div's realisiert. Also sollte das ganze sowohl im
IE als auch im FF Browser funktionieren.
Angehangen mal das .js Script zum schnellen drüberfliegen. Und hier noch
eine Demonstration:
http://klinkerstein.m-faq.de/JsBarDia/
(Lädt alle 5 Sekunden ein neues .CSV File)
PS: Eventuell bringts dem einen oder anderen was. Eventuell wirds ja
sogar noch von ein paar Leuten ausgebaut werden ;)
EDIT: in dem angehangenen Script ist noch ein Fehler betreffend
IExplorer. Aber auf der Domain ist das Script schon korrigiert.
Du könntest die statischen Dateien gzip-komprimiert auf dem Controller
speichern und mit dem Header "Content-Encoding: gzip" an den Browser
schicken. Ist zwar nicht ganz HTTP-konform (ein Server muss auch
unkomprimierte Daten bereitstellen können), funktioniert aber mit
praktisch allen Browsern.
@ Simon K.
Bei mir laufen deine Seiten von einer SD Karte.
Das größte Problem ist das du lange Dateinamen
verwendest:
JsBarDia.html
SampleData.csv
Noch schlimmer sind Dateien mit Pfadangaben:
JsBarDia-Dateien/JsBarDia.js
Da müsste man einen Pfad Parser einbauen.
Das ist einfach Unsinn auf einem uC.
Ein uC ist kein PC mit jeder Menge RAM.
Nimm kurze 8.3 DOS Dateinamen, dann kann
man den Webserver mit einem einfachen kleinen
FAT Dateisystem betreiben.
holger wrote:
> @ Simon K.>> Bei mir laufen deine Seiten von einer SD Karte.> Das größte Problem ist das du lange Dateinamen> verwendest:
Das ist ja erstmal kein Problem
> Noch schlimmer sind Dateien mit Pfadangaben:>> JsBarDia-Dateien/JsBarDia.js
Moment, das hat der Internet Explorer aber beim Speichern der Seite
verbrochen!
> Da müsste man einen Pfad Parser einbauen.> Das ist einfach Unsinn auf einem uC.> Ein uC ist kein PC mit jeder Menge RAM.
Pfad Parser?
> Nimm kurze 8.3 DOS Dateinamen, dann kann> man den Webserver mit einem einfachen kleinen> FAT Dateisystem betreiben.
Ok, an ein FAT16 Dateisystem habe ich garnicht gedacht. Ich dachte
eigentlich eher daran, die Javascript Datei fest in den ProgMem des AVRs
zu legen (3kb wird man ja wohl über haben) und bei Nachfrage an den
Webserver nach dieser Datei kann man diese ja einfach herausstreamen.
Wenn du eh ein Dateisystem hast, kannst du auch das "riesige"
Diagrammscript von Andreas Schwarz oben nehmen.
>> Noch schlimmer sind Dateien mit Pfadangaben:>> JsBarDia-Dateien/JsBarDia.js>Moment, das hat der Internet Explorer aber beim Speichern der Seite>verbrochen!
Sicher hat er das ;) Als PC User denkt man ja auch kaum über
die Gegebenheiten auf einem uC nach.
>> Da müsste man einen Pfad Parser einbauen.>> Das ist einfach Unsinn auf einem uC.>> Ein uC ist kein PC mit jeder Menge RAM.>Pfad Parser?>JsBarDia-Dateien/JsBarDia.js
JsBarDia.js liegt im Verzeichnis JsBarDia-Dateien
Da müsste das Programm erstmal reingehen. Wenn es das kann !
Na gut, ich könnte, aber vorher müsste man den Dateinamen
den der Browser als JsBarDia-Dateien/JsBarDia.js
liefert in seine Eintzelteile zerlegen. JsBarDia-Dateien und
JsBarDia.js. Wobei JsBarDia-Dateien wieder ein langer Verzeichnisname
ist.
>Wenn du eh ein Dateisystem hast, kannst du auch das "riesige">Diagrammscript von Andreas Schwarz oben nehmen.
Such ich mal, und probier es aus :)
>>Wenn du eh ein Dateisystem hast, kannst du auch das "riesige">>Diagrammscript von Andreas Schwarz oben nehmen.>Such ich mal, und probier es aus :)
Runtergeladen, und mal reingesehen.
Das war wohl ein Scherz von Andreas.
Aufm ATMega, ich glaub nicht das das geht :(
holger wrote:
>>> Da müsste man einen Pfad Parser einbauen.>>> Das ist einfach Unsinn auf einem uC.>>> Ein uC ist kein PC mit jeder Menge RAM.>>>Pfad Parser?>>>JsBarDia-Dateien/JsBarDia.js>> JsBarDia.js liegt im Verzeichnis JsBarDia-Dateien
Eben. Das braucht es aber nicht. Du kannst die .js Datei (so wie ich) in
den gleichen Ordner wie die html Datei legen.
Alternativ kannst du die .js Datei auch (wie schon gesagt) in den ROM
schreiben. (Sogar mit gz. Komprimierung, wie Andreas vorschlug)
Wenn dann ein einfaches "HTTP/1.1 GET /JsBarDia.js" vom Browser kommt,
kannst du direkt das Script streamen.
> Da müsste das Programm erstmal reingehen. Wenn es das kann !> Na gut, ich könnte, aber vorher müsste man den Dateinamen> den der Browser als JsBarDia-Dateien/JsBarDia.js> liefert in seine Eintzelteile zerlegen. JsBarDia-Dateien und> JsBarDia.js. Wobei JsBarDia-Dateien wieder ein langer Verzeichnisname> ist.
Siehe oben. Nur weil dein Internet Explorer beim herunterladen alles
verzeichnistechnisch umsortiert, musst du noch lange nichts ;)
>>Wenn du eh ein Dateisystem hast, kannst du auch das "riesige">>Diagrammscript von Andreas Schwarz oben nehmen.>> Such ich mal, und probier es aus :)
holger wrote:
> Runtergeladen, und mal reingesehen.> Das war wohl ein Scherz von Andreas.> Aufm ATMega, ich glaub nicht das das geht :(
Ich hab nicht großartig reingeschaut, aber warum sollte es nicht gehen?
Ist doch bloß eine Javascript-Sammlung. Das wird vom Server einfach nur
zum Client gestreamt, welcher dann den Javascript-Code im Browser
ausführt.
Hi Ulrich,
ich hab da ne unschöne Stelle in stack.c gefunden:
//Packeteintrag im TCP Stack finden!
index = tcp_entry_search (ip->IP_Srcaddr,tcp->TCP_SrcPort);
if (index >= MAX_TCP_ENTRY) //Eintrag gefunden wenn ungleich
{
// Auweia. Hier wird index für tcp_entry[index] benutzt
// obwohl der Wert so groß ist das er ausserhalb des
// Arrays struct tcp_table tcp_entry[MAX_TCP_ENTRY];
// liegt. Ab hier ist index mindestens MAX_TCP_ENTRY.
// Um index hier benutzen zu können müsste man so deklarieren:
// struct tcp_table tcp_entry[MAX_TCP_ENTRY+1];
DEBUG("TCP Eintrag nicht gefunden\r\n");
tcp_entry_add (eth_buffer);
if(tcp->TCP_HdrFlags & FIN_FLAG || tcp->TCP_HdrFlags & RST_FLAG)
{
result32 = LBBL_ENDIAN_LONG(tcp_entry[index].seq_counter) + 1;
tcp_entry[index].seq_counter = LBBL_ENDIAN_LONG(result32);
if (tcp_entry[index].status & FIN_FLAG)
{
tcp_entry[index].status = ACK_FLAG;
create_new_tcp_packet(0,index);
}
tcp_index_del(index);
DEBUG("TCP-Stack Eintrag gelöscht! STACK:%i\r\n",index);
return;
}
return;
}
Dann hab ich den Webserver heute mal im Firmennetz
angeschlossen. Zuhause läuft er perfekt, aber in der Firma
geht es nur stockend und scheinbar gehen Pakete verloren.
Die Seite wird nicht immer vollständig geladen, der Browser
hängt und wartet auf Daten. Die Sockets sind aber alle bereits leer.
Laut Debug Ausgaben wird häufig neu gesendet.
Weiss der Teufel woran das liegt. Jetzt im Moment, zuhause,
läuft alles wieder perfekt.
Gruß
holger
@ Simon K.
>Siehe oben. Nur weil dein Internet Explorer beim herunterladen alles>verzeichnistechnisch umsortiert, musst du noch lange nichts ;)
Mein IE sortiert nix um. Der ist bei mir arbeitslos ;)
Ich benutze Firefox.
>Ich hab nicht großartig reingeschaut, aber warum sollte es nicht gehen?>Ist doch bloß eine Javascript-Sammlung. Das wird vom Server einfach nur>zum Client gestreamt, welcher dann den Javascript-Code im Browser>ausführt.
Stimmt, aber diese Sammlung funktioniert auf dem PC schon nicht.
Da muss noch irgendein Mochi.... dazu. Das dürfte recht aufwändig
werden.
holger wrote:
> @ Simon K.>>>Siehe oben. Nur weil dein Internet Explorer beim herunterladen alles>>verzeichnistechnisch umsortiert, musst du noch lange nichts ;)>> Mein IE sortiert nix um. Der ist bei mir arbeitslos ;)> Ich benutze Firefox.
Achso, ich kannte das speziell vom Internet-Explorer. Aber ich glaube
der Firefox macht das auch so. (Hab die Funktion nie benutzt). Auf
meinem Webspace liegt aber alles in einem Ordner.
>>Ich hab nicht großartig reingeschaut, aber warum sollte es nicht gehen?>>Ist doch bloß eine Javascript-Sammlung. Das wird vom Server einfach nur>>zum Client gestreamt, welcher dann den Javascript-Code im Browser>>ausführt.>> Stimmt, aber diese Sammlung funktioniert auf dem PC schon nicht.> Da muss noch irgendein Mochi.... dazu. Das dürfte recht aufwändig> werden.
Ja, das ist wohl eine Art Bibliothek. Die sollte es auch auf der Seite
geben, aber Garantie kann ich dafür nicht geben.
Hallo Holger,
Ich habe den TCP Stack geändert. Das wollte ich auch geändert haben wo
ich es mal programmiert hatte. Dieser letzte Eintrag am ende der Tabelle
wird nur kurzzeitig benötigt. Zum zurückweisen einer Verbindung bei
vollem Stack.
Gruß
Ulrich
Hallo,
erstmal Danke für dieses schöne Projekt.
Ich habe den Kram mal zusammengelötet (auf Lochraster, wie meist bei
mir...), spielte auf Anhieb.
2 Ungereimtheiten sind mir in der Schaltung aufgefallen:
wenn schon Drossel für AVCC, dann die Spannung aber auch an der
VCC-Seite zuführen, sonst nutzt das Filter dem ADC auch nicht so richtig
viel. ;-)
Z.Diode als Überspannungsschutz ist eine gute Idee, eine flnke Sicherung
davor wäre dann allerdings ganz angebracht. So muß man sich darauf
verlassen, daß das Netzteil die Strombegrenzung erledigt und auch
durchhält. Wäre mir zu riskant.
Gruß aus Berlin
Michael
Das mit den AVCC ist richtig! Gut wenn sich mehrere Personen ein
Schaltbild anschauen. Aber die Funktion des Webservers wird dadurch
nicht beeinflusst. Die meisten lassen die Spule sogar raus und löten
eine Brücke ein. Gut mit der Sicherung war ich auch schon am überlegen,
man sollte mit allem rechnen. Somit gibt es das Eaglefile und andere
Layoutdaten korrigiert und wie immer kostenlos auf meiner HP zum
Downloaden.
Gruß
Ulrich
Hallo Ulrich,
erstmal: Respekt! Das Teil ist echt klasse.
Hatte Anfangs auf unserer etwas groben Ätzanlage Probleme mit dem
Isolate deiner EAGLE-Files. kann auch am Drucker gelegen haben ;).
Ich würde wegen Lötbarkeit und Sicherheit gegen Whisker zu einem Isolate
von 0.8 raten.
Hallo,
Natürlich kann man auch ohne Probleme eine Sicherung im alten Board
verbauen. Einfach eine 0,5A Picofuse (von Reichelt) in reihe mit der
Verpolungsschutzdiode schalten.
Gruß
Ulrich
Hallo,
bei der Diskussion mit einem Kollegen ist die Frage aufgekommen, ob es
möglich ist, einen Webservice zu installieren. Anscheinend werden diese
XML-basierten Services zwischen Anwendungen verwendet um Daten
auszutauschen.
Sinnvoll erscheint es mir, wenn ich den Miniwebserver nicht zur Anzeige
verwende, sondern im Netz einen/mehrere Sensoren habe, die über einen
zentralen PC mit richtigem Webserver und entsprechenden Möglichkeiten
Daten austauschen müssen.
Kann jemand von euch abschätzen, ob es möglich ist, Webservices zu
entwickeln und damit bspw. Sensordaten über XML zu versenden. Der
Vorteil ist, wenn man einen Javaserver o.ä. verwendet kann man Services
wohl sehr einfach einbinden.
Gruß
Steffen.
Hallo Ulrich,
habe auf Deiner Web-Seite beim "Ethernet ATmega32/644
Experimentierboard" das im Bild angeschlossene Display gesehen. Laut
Sourcecode wird es seriell angesteuert. Gibt es das Display fertig zu
kaufen? Oder wo gibt es weitere Informationen hierzu?
Gruß
Martin
Hallo Leute,
hab irgendwie immernoch nicht gerafft, wie der "Senden"-Button aus der
webpage.h in den restlichen Code eingebunden ist. den im Html
festgelegten wert "submit" find ich sonst nirgends. Hat es was mit dem
"firstswitch" zutun? wenn ja, wie?
Würde gerne nen Reset-Button ins Webfrontend machen, damit ich den
Server auch von extern reseten kann
Grüße Henning
So wie ich das verstanden habe, ist der Button ja ein Standardkonstukt
und hat also solches ein bestimmtes Verhalten. Nachdem du darauf
klickst, sendet der Browser eine Anfrage an den Server. Je nachdem ob
GET oder POST (bei Formular) verwendet wird, steht in der Adresszeile
auch der Wert jedes Formularelementes (auch des Buttons).
Der Server kann nun die neue Anfrage auswerten.
Ich hoffe, ich habe jetzt nicht zu viel falsches geschrieben.
Steffen.
Hallo *,
ein bisschen OffTopic, da es hier hauptsächlich um den WebServer geht,
aber vielleicht etwas was der ein oder andere gebrauchen kann.
Beitrag "uip für AVR/ENC"
Gruß
Sebastian
Hallo,
Hier die Version 1.0.34! Hier zeige ich wie einfach es ist eigene
Applikationen zu schreiben. Hinzu gekommen ist eine Applikation die UDP
Daten empfängt und auf dem Display darstellt.
Gruß
Ulrich
Hallo,
das würde ich jetzt auch sagen, habe mir gerade mal das angeschaut und
getestet. Auch wenn diese Funktion zur Zeit nicht von mir benutzt wird,
werde ich es mal ändern. Ich dachte schon ich mache nur Fehler ;-)
Gruß
Ulrich
Hallo,
der praktischen Anwendung wegen gibt's hier auch ein bisschen Wetter vom
AVR-Webserver - zumindest wenn mein Router an ist.
http://sw-penig.dyndns.org:8080/wetter.htm
Gruß
Sascha
geeeenial :-)
Wenn ich irgendwann mal so weit bin, soll meiner auch sowas können. Bei
mir hapert es aber noch gewaltig an JavaScript.
Ein Tipp/Anmerkung: Meist sind in Diagrammen die aktuellen Werte immer
rechts. Vielleicht kannst du die Schleife (?) in der du deine Messwerte
sendest einfach anderes herum abarbeiten.
Steffen
sascha wrote:
> Hallo,>> der praktischen Anwendung wegen gibt's hier auch ein bisschen Wetter vom> AVR-Webserver - zumindest wenn mein Router an ist.>> http://sw-penig.dyndns.org:8080/wetter.htm>> Gruß> Sascha
Das Javascript gibt übrigens Fehler beim Bewegen der Maus.
Firefox+Firebug AddOn lässt grüßen!
Hallo,
leider läuft mein Websrver nicht :-)
Wenn ich das LAN-Kabel reinstecke, leuchtet LED2 permanent. Gebe ich die
IP in den Browser ein, blinkt LED3 kurz auf.
Der Router findet den Server leider auch nicht. Muß ich evtl. noch etwas
am Router konfigurieren oder etwas in der config.h ändern (habe die
Schaltung Ver 1.1 von Uli exakt nachgebaut)?
Bernd
IP-Adresse im richtigen Subnetz eingestellt?
Was sagen die Debug-Ausgaben an der seriellen Schnittstelle?
Zum hundertsten mal kontrolliert, ob alles richtig zusammengelötet
wurde?
Steffen.
Hi,
>IP-Adresse im richtigen Subnetz eingestellt?
Ja
>Was sagen die Debug-Ausgaben an der seriellen Schnittstelle?
Habe leider kein serielles Kabel ....
Versuche mir mal eins zu besorgen.
Bernd
Hallo,
Wenn LED2 Leuchtet steht die Verbindung vom Router zum Webserver (RX)!
Du sagst die Led am Router leuchtet nicht? Somit hast du vom Webserver
aus gesehen ein TX Problem. Quarz OK! Tranciever OK?
Gruß
Ulrich
Hallo Uli,
>Wenn LED2 Leuchtet steht die Verbindung vom Router zum Webserver (RX)!
Genau, LED2 leuchtet, solange das Kabel drin ist.
LED3 blinkt kurz auf wenn der Webserver empfängt.
>Du sagst die Led am Router leuchtet nicht? Somit hast du vom Webserver>aus gesehen ein TX Problem.
Doch, die LED im Netgear-Router leuchtet auch, zeigt mit gelb sogar
korrekt eine 10Mbit-Verbindung an.
>Quarz OK!
Denke schon. Muß ich die Frequenz in der config.h eintragen?
>Tranciever OK?
Was meinst Du mit Tranceiver? Den Übertrager?
Bernd
Hallo,
also gehe ich jetzt erstmal davon aus das die Verbindung OK ist!
Betreibe mal den ENC ohne Prozessor schau dir dabei das Blinken von LED3
an. Danach stecke den Prozessor wieder in das Board, schau dir nun
nochmal das Blinken von LED3 an. Hier sollte nun auffallen, das die Led
immer etwas länger mit Prozessor blinkt, wenn nicht stimmt was mit der
Kommunikation zwischen Prozessor und ENC nicht.
Gruß
Ulrich
Hallo Uli,
ich merke ohne den Atmel leider keinen Unterschied. LED2 leuchtet
permanent, LED3 blitzt einige male (mit ein paar Sekunden Abstand) kurz
auf, sobal ich im Browser die IP eingebe und auf Return drücke.
Bernd
Hallo,
hast Du mein Layout benutzt? Sind die FuseBits des Prozessor richtig
eingestellt. Ich gehe mal davon aus das das Programm entweder nicht
richtig läuft, oder ein problem mit dem SPI Bus hast.
Hi Uli!
Sorry - mein Fehler... aber jetzt läufts! Zum einen hatte ich eine
winzige Leiterbahnunterbrechung, die ich erst unter der Lupe bzw. mit
dem Multimeter gefunden habe.
Und dann wußte ich nicht, daß ich im WINAVR vor dem 'Make all' noch ein
'Make clean' zu machen habe.
Jetzt klappts! Trotzdem vielen Dank für Eure schnelle Hilfe.
Bernd
Geniales Projekt - auf dem Weg zum tieferen Verständnis leuchten bei mir
allerdings schonmal ein paar Fragezeichen auf:
- Welche MAC nimmt man eigentlich? Die sollte doch weltweit unique
sein?!
- WLAN - Accesspoint (oder was sinngemäßes?) anschließbar (und natürlich
nutzbar;-) ?
Gruß
Frank
Nachtrag:
Über LED_B (gegen Vcc oder GND geschaltet) bestimmt man, ob der ENC in
Halb- o. Voll-Duplex Modus initialisiert. Da ich hier im Thread beide
Schaltungsvarianten gesehen habe, die Frage:
- Welche Variante nehmen?
- Wann ist Voll- , wann Halbduplexbetrieb üblich?
Fragender Gruß
Frank
Hallo Frank,
die MAC Adressen sollten weltweit unique sein, spielt aber keine Rolle
welche Du nimmst, solange sie nicht schon in deinem LAN Segment
auftaucht. Über dem LAN Segment hinaus, spielt die MAC Adresse keine
Rolle mehr (wird auch nicht über Router weitergegeben). Du hast also die
freihe wahl aus 2^48 MAC Adressen minus denen die Du schon in Benutzung
hast (und denen die etwas spezieller sind wie z.B. broad-cast
ff-ff-ff-ff-ff-ff-ff oder multi-cast - würde ich auch nicht nehmen - s.
Wikipedia ...)
Anders sieht die Sache aus, wenn du ENC Implementierungen (im großen
Stil) verkaufen willst. Dann wirst du vermutlich nicht darum
herrumkommen die MAC Adressen zu kaufen (nein, du kannst natürlich auch
weiterhin random MAC Adresse verwenden, nur Kunden wären garnicht
begeistert wenn du nun zufällig eine MAC Adresse erwischen würdest die
bei ihnen im LAN vorhanden ist - erst recht nicht, wenn's die MAC
Adresse des default router ist :-) also auf alle fälle die Vendorcodes
der gängingen Router Hersteller meiden :-) )
WLAN - also den ENC an einen AP anschließen und dann via WLAN darauf
zugreifen - geht.
Vollduplex ist immer dann zu nehmen wenn es geht... Wenn Du nicht gerade
uralt Hardware hast (Switche / Hubs etc.) sollten die FullDuplex können.
Gruß
Sebastian
P.S. man stellt Half/Full Duplex darüber ein, wie die LED angeschlossen
ist????
Das kann ich nun garnicht glauben, aber kann natürlich sein, dass das so
programmiert ist.
Gruß
Sebastian
was ich bis heut nicht verstehe; "wie kann man nur bei tuxgraphics"
nachsehen?!?!?
die projekte sind teilwese interessant, aber ansonsten happert es an
allen ecken und kannten - er persönlich ist zudem unfreundliche und bei
weitem nicht kompetent.
Nur der Startwert des Duplex-Modus wird durch die LED festgelegt. Der
Modus lässt sich aber während der Initialisierung des Chips verändern.
PS: Ulrich: Du schreibst, dass die Fuse-Bits automatisch(?) gesetzt
werden mit WinAVR(?)
Wie hast du das gemacht?
So habe mal das STK wieder benutz un konnte nun den AVR beschreiben.
Über Hyperterminal sehe ich auch wenn ich web Web drauf zugreife.
Aber wenn ich im Terminal zb. Ver eingebe passiert nix. Sehe auch nicht
das ich es schreibe.
Was kan da falsch sein ?
lg, markus
Ulrich Radig wrote:
> Hallo,>> Im Anhang die FuseBits für einen Mega32.> Einen Mega644 habe ich unter PonyProg noch nicht zum rennen bekommen.>> Gruß> Ulrich
Das mit dem MEGA644 im neuen PonyProg ist etwas komisch. Der sagt zwar
immer Hardware nich gefunden doch wenn man auf ignorieren geht tut ers
trotzdem.
Guten Morgen,
So jetzt geht es per Terminal. Habe den MAX232 rausgenommen und über
RS232 Spare vom STK500 gegangen.
Dann noch etwas, der Taster, laut Schaltplan ist der ja für Reset. Das
Board funktionier nur dann wenn ich den gedrückt halte, (es ist nen
schließer).
lg, markus
Hallo
ne Frage an die "Board"-bauer. An dem Übertrager bzw. am Connector sin
1nF 1KV Kondensatoren. 1nF ist ja kein Problem aber 1 bzw 2 KV. Wo
bekommt man die her? Bei Reichelt habe ich keine gefunden. Von einem
alten Board ist klar....so man hat.
MfG
Achim
Guten abend..
Ich habe hier noch ein 16x1 Display liegen.
Wie wird es angeschlossen ? Habe so im Quelltext die Zuordnung der Pins
nicht gefunden.
Danke, Markus
@Robin Tönniges
Hast Du bei Ponyprog mit dem Atmega 644 die Fuses genau so gesetzt, wie
Uli es oben auf seinem Bild für den Atmega32 gemacht hat?
MfG Paul
Ich habe nicht gesagt das ich den Webserver nachgebaut habe (obwohl ich
die Platine hier schon länger liegen habe). Ich habe lediglich gesagt
dass ich einen ATmega644 mit Ponyprog erfolgreich gefust und
programmiert habe.
Ach so! Ich habe den nämlich schon mit Mega32 in Betrieb und wollte
jetzt den Mega644 draufstecken.
Da wäre es schön, die Fuse-Einstellungen nochmal im "Klartext" statt im
Quelltext zu haben.
MfG Paul
Irgendwie bekomme ich es nicht hin, nutzte das STK500 mit dem 10poligem
Kabel was mit ISP aufm Webserver verbunden ist.
Bekomme aber keine Verbindung zum AVR. Es ist ziemlich umständlich immer
den AVR rauszunehmen und ins STK zu stecken.
Wo könnte da der Fehler liegen ?
Danke, Markus
Markus C. wrote:
> Guten abend..>> Ich habe hier noch ein 16x1 Display liegen.> Wie wird es angeschlossen ? Habe so im Quelltext die Zuordnung der Pins> nicht gefunden.>> Danke, Markus
Findest du ein bißchen weiter oben in diesem Thread und zwar hier:
Beitrag "Re: Webserver ATmega32/644DIP ENC28J60"> Irgendwie bekomme ich es nicht hin, nutzte das STK500 mit dem 10poligem> Kabel was mit ISP aufm Webserver verbunden ist.> Bekomme aber keine Verbindung zum AVR. Es ist ziemlich umständlich immer> den AVR rauszunehmen und ins STK zu stecken.>> Wo könnte da der Fehler liegen ?
- Quarzprobleme? Welchen verwendest du? Mal auf Kurzschlüsse und auf die
richtigen Kondensatoren testen.
- Oder die Fuses passen nicht.
- Kontrolliere deine Platine noch einmal. Besonders um den ISP-Anschluss
und dem Quarz. Programmiere mal ein Blinklicht, spiel das auf dem Atmega
auf und schau ob der Pin, den du programmiert hast, toggelt.
Gruß Gerd
>Ich habe hier noch ein 16x1 Display liegen.>Wie wird es angeschlossen ? Habe so im Quelltext die Zuordnung der Pins>nicht gefunden.
Die Schaltung zum Display findest du auf der Seite von Ulrich.
Welche Version verwendest du? Die Eagle-Dateien, die Ulrich anbietet?
Ich verwende noch die erste Version, die kleine Fehler enthielt, aber
der ISP funktionierte einwandfrei.
> Dann noch etwas, der Taster, laut Schaltplan ist der ja für Reset. Das> Board funktionier nur dann wenn ich den gedrückt halte, (es ist nen> schließer).
Das es ein Schließer sein soll ist korrekt. Geht das jetzt wenigstens
richtig? Ohne das du den Taster drücken musst? Wenn der Reset nicht
richtig beschaltet ist, dann funktioniert der ISP auch nicht.
Gib mal genau an, was klappt und was nicht.
Hallo,
ich würde den Webserver gerne in regelmäßigen Abständen mit dem
NTP-Zeitserver synchronisieren. Wenn ich das richtig sehe, wird das in
der aktuellen Version nur einmal bei Programmstart gemacht.
Habe schon versucht, ein zusätzliches ntp_request einzubauen, aber das
funktioniert irgendwie nicht...
Bernd
Hi zusammen.
Vielleicht kann mir jemand auf die Sprünge helfen, habe grade ein Brett
vor dem Kopf!
Ich muss vorausschicken, dass ich HTML und JAVA nicht grade beherrsche.
Ich habe Ulrichs Webserver begeistert in Betrieb genommen, nun möchte
ich Messwerte (Variablen des AVR) in die Webseite einbetten. Dass es mit
JAVA-Script gemacht werden muss weiß ich mittlerweiile, auch wie diese
eingebettet werden, nur nicht, wie die Übergabe vom AVR zur
JAVA-Varablen funktioniert.
Wäre prima wenn mich jemand in die richtige Richtung schubsen könnte!
Ich frage nochmal an, ob mir jemand mal die Fuse-Einstellungen für den
ATMEGA644 im Klartext posten kann. Dort gibt es nämlich Bodlevel 0, 1, 2
statt nur Boden und Bodlevel.
Flashen konnte ich ihn mit Ponyprog, aber an die Fuses gehe ich so nicht
gerne ran.
MfG Paul
@ Paul:
hast du das AVR-Studio installiert?
Im Prog-Plugin (der schwarze Käfer) kannst du dir die Bedeutung der
Fuses angucken (im Disconnectet-Modus).
Das war übrigens für mich das ausschlaggebende Argument, nicht den
Ponyprog zu benutzen. ;)
>Dass es mit JAVA-Script gemacht werden muss weiß ich mittlerweile
^^^^
:-) Dann weisst du aber was, was sonst nicht viele wissen ;-)
Ne, mal ernsthaft: Javascript ist eine Möglichkeit die Werte
anzuzeigen, und hier im Thread eigentlich nur erwähnt, um z.B. ein
Diagramm darzustellen. Für die einfache Anzeige eines (Mess-)Wertes geht
es auch einfacher.
Für diesen Miniwebserver wurde die Zeichenkette %VA@0x (x=0..9)
eingeführt. Wenn das Unterprogramm http_data_send(...) diese
Zeichenkette in der gerade gesendeten Webseite findet (definiert in
webpage.h) wird diese Zeichenkette durch den Wert aus der Variablen
var_array[x] ersetzt.
Was du dir also mal anschauen solltest:
1: Schreiben der aktuellen Werte auf die Variable var_array[x]
2: in webpage.h in der Variablen PROGMEM char page1 = [...] die Zeilen
mit %VA@0x anschauen
3: in der Routine http_data_send in httpd.c mal schauen, wie die Daten
in die Webseite eingebettet werden.
Vielleicht hilft dir das als Hinweis, dass du den Quelltext verstehst.
Steffen.
@Thilo M.
Nein, ich habe keinen Programmer, der zu AVR-Studio kompatibel ist.
Mir geht es vor allem um die BODLEVEL-Fuses, denn der MC mitsamt der
Schaltung funktioniert ja schon, nur Resettet der Kerl sich immer mal
und das hängt offenbar mit den BODLEVEL-Einstellungen zusammen. Ich habe
mir
die Anleitung zum "Umzug" von Mega32 zu Mega644 bei Atmel geladen, kann
aber leider kein Englisch.
Ich will ihn aber nicht unbedingt "verfusen", weil ich sonst erst wieder
einen Adapter für meinen HV-Programmer bauen müßte.
MfG Paul
@Ulrich
Super Projekt!
Könntest du auf deiner Seite noch eine History / Changelog zu den
Änderungen bei zukünftige Versionen machen so kann man dann sehen das du
bei einer neuen Version geändert hast.
Und könntest du bitte auch die alten Versionen auf einer „Archiv“-Seite
online stellen?
mfg CC
Hallo, ich habe gerade in der neuesten Version 0.36 gesehen, dass
versucht wird, einen Atmega128 in das Make-File zu intrigieren.
Ich verwende seit langem einen Atmega128. Habe nie versucht den
kleinsten Websever zu bauen, sondern den Größten. Ich verwende ein
Fertigmodul siehe Bild, mit unglaublichen 20 Mhz(außerhalb der Spezi,
aber stabil). Wenn ich RS232 verwende, schalte ich um auf 16 Mhz. Kann
dank LIBC Pascal Stangl Grafikmodule, Kartenleser, DS1307, DS1621 und
gigantisch viele Ports verwenden.
Der optimierte Oszi des Atmega128 kann mit guten Quarzen tadellos bis
20MHz laufen. Dank der stabilen Software habe ich nun einen tadellos
funktionierenden Webserver.
Ich danke allen Beteiligten für die tolle Server-Software.
mfg Gerhard.G
Servus Archim,
hier die Adresse: Suche bei Ebay nach Atmega128, die Firma heißt
http://myworld.ebay.de/micro-research
Der Preis ca. 30 Euro. Da gibt es auch Bilder und die Schaltung. Habe
bereits einige Boards gekauft, der Versand dauert (Hongkong), war aber
immer zufrieden.
Oder noch besser ... da der Dollar sehr niedrig ist:
Atmega128-Board und ENC28J60-Bord
http://www.futurlec.com/BasicControllers.shtml
Gruß Gerhard
> Ich verwende noch die erste Version, die kleine Fehler enthielt
Was waren das für Fehler? Bis auf die zusätzliche Sicherung kann ich so
auf Anhieb keine Unterschiede zwischen Version 1.0 und 1.1 erkennen.
Hallo,
Das war noch der Anschluss VCC und AVCC. Diese sind vertauscht gewesen!
Hat aber mit der eigentlichen Funktion des Webservers nichts zu tun.
Gruß
Ulrich
Hallo,
habe auch Ulrichs Webserver nachgebaut und
mir ist beim Ansehen der Software und beim Ausprobieren
etwas an der "icmp_reply()" Routine aufgefallen ( siehe Anhang).
Nach diesen Anpassungen ist bei mir ( Linux/WinXp ) alles
in Ordnung.
Vielen Dank, Ulrich fuer dieses schoene Projekt.
horst
Hallo,
so habe mir eine Platine erstellt und bestückt! Die Taktfrequenz und die
ip_Adresse kann ich in der config.h anpassen. Aber wo kann ich den
Prozessortype vorgeben? Finde im Quelltext zwar "if defined" aber
nirgend wo "defined". Oder habe ich etwas wichtiges übersehen?
Gruß
Martin
Danke,
für die Antwort Ulrich. Ich muss aber blöd nachfragen! Die Angabe im
Makefile hat Einfluss auf "#if defined (_AVR_ATmega644_)" in der
timer.c? Wo erfolgte die Umsetzung?
Gruß
Martin
Ganz einfach: Der Compiler bekommt beim Aufruf über make (make wiederum
parst das Makefile) die Preprozessor-Defines (und somit auch den
AVR-Typ) per Kommandozeilenparameter übergeben.
Hallo
@Ulli vielen Dank für Deine Bauteileliste....noch ne blöde Frage... in
manchen Schaltungen haben die C19/20 eine Spanungsangabe im KiloVolt
Bereich die von Reichelt haben nur bis 100V.
Kannst Du das kurz erklären?
MfG
Achim
Guten Morgen.
Als erstes, ich habe mit C keine erfahrungen. g
Möchte folgendes nutzen,
auf UDP Port 6454 soll empfangen werden und die Anwendung abgearbeitet
werden.
stack.c
Hallo,
Status: Zur Zeit versuche ich eine Philips DC-3840 Kamera an den
Webserver anzubinden. Ich hoffe doch das ich bald hier Ergebnisse dazu
liefern kann.
Diese Kamera benutzt den gleichen Chip wie die CAM_C328 und ist
technisch gesehen fast identisch.
Gruß
Ulrich
Hallo Ulrich,
wolltest Du nicht ursprünglich die MCA-25 implementieren? Wieso hast Du
Dich umentschieden? Gibt es mit der MCA Probleme oder ist die Phillips
einfach nur besser??
Grüße Henning
Hallo,
Ich finde die Philips eigentlich besser (optisch schöner, kleiner usw.).
Außerdem habe ich genug Philips Kameras hier herumliegen (somit auch
schon in meinen Shop :-) . Da inzwischen die MCA auch schwierig zu
beschaffen ist habe ich mich für ein anderes Modell entschieden.
Anscheinend kennen die Verkäufer den bedarf dieser MCA25 Kameras, und
nehmen auch schon entsprechende Preise.
Gruß
Ulrich