Hallo,
habe auf meiner Webseite einen kleinen Webserver mit einer
Netzwerkkarte und AVR µC gebaut. Wer noch eine Netzwerkkarte für ein
eigenes Projekt benötigt, findet hier auch eine keine Platine mit einem
Realtek RTL8019 Chip zum selber bauen(das Layout ist einseitig). Die
Layouts liegen als Eagle files mit der Libary vor.
Mfg Ulrich Ragig
meine Page www.ulrichradig.de
Hallo Uli,
prima. Ich hatte die Seite schon vor einigen Tagen gefunden, habe aber
noch keine Netzwerkkarte mit RTL8019. Ich werd's demnächst mal mit
einer anderen Karte probieren. Ich brauche nur noch eine
ISA-Steckleiste.
Joline
P.S. Inzwischen funzt Deine Seite ja auch mit Opera. ;o)
hallo,
ich habe mit interesse das projekt gesehen. ist es dann möglich mit
browsern wie iexplorer die ad-kanäle und ports darzustellen und gibt es
dafür beispiele?
für eine antwort wäre ich dankbar.
tschaui
Dieses ist bisher nicht realisiert stellt aber kein Problem dar.
Dieses werde ich die nächsten Tage mal in Angriff nehmen.
Zur Zeit lassen sich nur die Ports steuern.
Mfg Ulrich Radig
Hallo Ulrich,
das Layout für die einseitige Realtek Netzwerkkarte gefällt mir, werde
ich wahrscheinlich nachbauen. Aber bist Du sicher daß R1 220 Ohm haben
soll ? Soweit ich daß in Errinerung habe, muss dieser Widerstand dem
Wellenwiderstand das Kabels entsprechen, also 100 Ohm haben ?!
Grüße
Andreas
Hallo,
Laut Realtek ( www.realtek.com.tw ) soll der widerstand 200 ohm
betragen. da dieser nicht vorhanden war habe ich halt 220 ohm genommen.
funzt aber genauso.
Mfg Ulrich Radig
Hallo!
Ich habe selber diesen Webserver nachgebaut und hat soweit super
funktioniert. jedoch ist mir vor einer woche die Realtek RTL8019AS ISA
Netzwerkkarte aus irgend einem grund kaputt gegangen. deshalb hab ich
versucht eine neue aufzutreiben, war aber nicht erfolgreich.
hätte jemand eine solche NIC für mich billig übrig? (am besten gleich 2
g). - wäre super!
danke schon mal,
Max
hi,
benoetigt man fuer dein projekt eigendlich unbedingt eine karte mit
diesem realtek chipsatz oder reicht auch jede normale isa(ne2000)
ethernetkarte?
Gruß Tobias
NEIN!
es reicht eine ISA Netzwerkkarte (NE2000 Kompatibel)
getestet habe ich Netzwerkkarten natürlich Realtek RTL8019, Accton mit
MPX2 Chipsatz, 3Com 3c509TX und eine eines mir unbekannten Herstellers
mit UM9008F Chipsatz.
Mfg Uli
Hallo,
wenn ich die Quellen compiliere, wird eine .hex Datei erzeugt, die
19.814 Bytes groß ist. Ist das auch die Speichergröße, die ich auf dem
Controller benötige? Dann würde nämlich ein ATMega8/16 nicht
funktionieren.
Joline
das ist richtig das die datei 19KByte groß ist :-)
lade dieses hexfile mal mit deiner programmersoftware
und du bemerkst dann das er nur ca. 8Kbyte programmiert
in dem HEX file sind adresslocation und prüfsummen enthalten
die nicht mit programmiert werden. Somit passt das programm in einen
Mega32
Mfg Ulrich Radig
so habe von jemanden erfahren das dieser meinen Code für einen Atmel
umgeschrieben hat fotos werden laufe der nächsten tage auf meiner
homepage folgen.
Mfg uli
hi ulrich,
ich hab grad nochmal dein layout ueberfolgen, und da ist mir noch was
aufgefallen, ist denn diese Verbindung zwischen den zwei pads ganz
links unten, auf der linken seite gewollt? die sieht so unpassend zum
restlichen layout aus
Gruß Tobias
@Uli
Hallo,
ich habe mir mal den Code etwas genauer angesehen und jetzt einige
Fragen:
1. Warum wurde INT4 benutzt? Ist es auch ohne weiteres (nach
Programmanpassung) möglich, einen anderen Interrupt, etwa INT0, zu
benutzen?
2. Auf der Website, die zurückgeliefert wird, werden 3 Checkboxen
angezeigt: Lampe 1, Lampe und Test. Bei diesen sind Value=1,2 bzw. 3
hinterlegt. An welcher Stelle des Codes werden diese Werte
ausgewertet?
3. Ist es richtig, dass im Moment nur PB0 als Ausgang benutzt wird?
Wird noch ein weiterer Kanal als Eingang benutzt?
4. Es wurde ein Quartz mit 14,xxx benutzt. Hat das einen wichtigen
Grund, oder war der einfach nur gerade verfügbar?
Joline
4. Der Quarz ist unerheblich, allerdings verlängern sich bei einer
niedrigeren Frequenz die Antwortzeiten z.b bei PING
3. Es ist richtig das zur zeit nur PB0 angesteuert wird. Ist aber ohne
weiteres auf 8 und mehr kanäle zu erweitern.
2. Die Auswertung findet in der datei Httpd.c statt direkt am Anfang.
1. Der INT4 ließ sich besser konfigurieren (mehr möglichkeiten) als
INT0. Würde aber auch mit INT0 laufen wenn dieser richtig eingestellt
wird. :-)
Mfg Uli
hallo uli,
ich habe mir einen tragbaren mp3 spieler gebastelt der die daten von
einer mmc liesst. das neue projekt ist ein desktop player, der neben
mmc auch netzwerk haben soll.
ich hatt mir zwei packet whacker von edtp.com bestellt. leider war
einer schon kaputt als er an kam, und den zweite habe ich gebraten. da
habe ich deinen beitrag in diesem forum gelesen, und dein board ist wie
der packet whacker, nur das du auch noch galvanisch trennst.
lange rede kurzer sinn, tolles design.
frage : weisst du wo ich die RTL8019 einzeln bestellen kann ?
packet whacker ist mir zu teuer, und wenn ich auf zb easytcp/ip
umsteige, müsste ich die ganze source wieder ändern.
danke im vorraus,
john
Geht doch einfach zum Schrottplatz (ok, nur die mit
Elektronik-Container)!
Bei meinem findet man ISA NE2000 Netzwerk Karten in rauhen Mengen...
Gruss,
oli
Hallo Uli,
ich bin noch Anfänger in Sachen Mikrocontroller. Deshalb auch die
blöden Fragen:
Wieso lässt sich INT4 besser als z.B. INT0 konfigurieren? Macht nicht
jeder Interrupt das Gleiche?
Und noch einmal zu meiner Frage 2 (s.o.):
Ich habe schon prinzipiell die Stelle (also Httpd.c) gefunden, sonst
hätte ich das mit PB0 ja nicht gewußt. Aber ich kann dort nicht finden,
wann welche Value ausgewertet bzw. gesetzt wird. Irgendwie bin ich da
blind. :o(
Danke Joline
Meine ISA Karten habe ich vom Schrottplatz!
Habe dann den RTL8019 heruntergelötet und auf meiner Netzwerkkarte
verbaut.
Aber man bekommt den Chipsatz auch bei www.egnite.de, finde ich aber
etwas zu teuer.
Eine andere Alternative wäre da noch EBay.
Mfg Uli
Ich benutze dazu immer einen Heißluftfön.
Als erstes ziehe ich kupferlackdraht unter den IC beinchen durch,
danach befestige ich die Karte hochkant, durch erwärmen der unterseite
der platine und gleichzeitige ziehen am kupferlackdraht löst sich das
IC. Kupferlackdraht nehmen!!
mfg uli
Hallo Uli,
ich bin noch Anfänger in Sachen Mikrocontroller. Deshalb auch die
blöden Fragen:
Wieso lässt sich INT4 besser als z.B. INT0 konfigurieren? Macht nicht
jeder Interrupt das Gleiche?
Und noch einmal zu meiner Frage 2 (s.o.):
Ich habe schon prinzipiell die Stelle (also Httpd.c) gefunden, sonst
hätte ich das mit PB0 ja nicht gewußt. Aber ich kann dort nicht finden,
wann welche Value ausgewertet bzw. gesetzt wird. Irgendwie bin ich da
blind. :o(
Danke Joline
Hallo Uli,
irgendwie kann ich nicht erkennen, wie hier Value = 1,...,3 versteckt
sind:
if ((buffer[TCP_hdrflags+1]&PSH_Flag) > 0 )
{
unsigned int result16 = ((buffer[ip_vers_len] & 0x0F) << 2) +
((buffer[TCP_hdrflags] & 0xF0) >>2) + 14;
for (int a = result16;a < (result16 +20);a++)
{
if (buffer[a] == '1' && buffer[a + 1] == '=' &&
buffer[a + 2] == '1')
{
if (bit_is_set(PORTB,0))
{
PORTB = 0;
}
else
{
PORTB = 1;
}
}
}
}
Vielleicht kannst Du das ja noch einmal kurz erklären.
Danke Joline
das ist die 2 IF abfrage
if (buffer[a] == '1' && buffer[a + 1] == '=' && buffer[a + 2] ==
'1')
somit wird der portb.0 an bzw ausgeschaltet, diese routine müsste noch
überarbeitet werden am besten durchsucht man buffer nach den wert 1=1.
wenn man nun portb.1 schalten wollte kopiert man die routine und setzt
portb.1 ein und ersetzt das kriterium für die suche.
mfg uli
Hallo Uli,
das mit portb.0 ist klar.
Aber wenn man aus "webpage.h" den HTML-code extrahiert, bekommt man
eine Seite mit 3 (!) Checkboxen angezeigt: Lampe 1 (Value=1), Lampe
(Value=2) und Test (Value=3).
Wird also nur Value=1 auf den Wert 1 geprüft und die beiden anderen
Checkboxen sind überflüssig?
------------
Dem Anschlußplan der ISA-Netzwerkkarte ist zu entnehmen, dass alle
wichtigen Signale auf dem ISA-Bus Ax und Bx liegen. Bei Dx und Cx sind
lediglich D16 mit VCC und D18 mit GND verbunden. Kann man diese beiden
eigentlich auch weglassen oder sind die wichtig?
Joline
Dx und Cx können weg gelassen werden. Mit der anderen annahme liegst du
richtig, man kann die anderen Checkboxen weglassen oder mit einer
Funktion belegen.
Mfg Uli
Moin!
... hab' da mal ne Idee:
Was haltet ihr davon eine Fnktion zu integrieren, die die interne RTC
des µC mit dem NTP Protokoll und einem ntp server einstellt...
NTP ist recht simpel.
gruß
Kofi
an diese idee habe ich auch schon gedacht, aber da ich nun die mmc
ansteuerung fertig habe, werde ich erst diese für webseiten und
downloads impementieren
mfg uli
Ja es gibt eine menge vergleichbarer Produkte Ethernut usw. und auch die
Elektor hat in ihrem Halbleiterjahresheft 2004 nun einen Webserver mit
MSP µC allerdings soll dieser 159 kosten. Mein Ziel war es einen
Webserver zu bauen den jeder ohnen großen Aufwand nachbauen kann somit
sind auch meine Platinenlayouts einseitig. Ein weiteres Punkt ist und
war es so wenig Bauteile wie möglich also nur Prozessor und Netzwerk
IC. Somit ist dieser Webserver nach meinen Vorstellungen einer mit der
preiswertesten auf dem Markt.
Mfg Ulrich
Dat stimmt !
Wie weit bist du eigentlich ?!
Ist das schwierig das man z.B. files per µC auf einer MMC oder SD-Card
ablegt ?!
...Ich meine braucht man da nicht ein richtiges Dateisystem für .. FAT
oderso ?
gruß
kofi
Hallo
es geht voran werde in den nächsten 1-2 Tagen einen neuen Source Code
für den WebServer haben, nun kann dann auch eine Webseite Bilder
enthalten.
Die Ansteuerung einer MMC karte kommt dann laufe der Woche.
Die Daten werden dann zur Zeit mit einen CardReader gespeichert.
Der Webserver greift dann via FAT auf die Karte zu. Das Speichern von
Daten via FTP brauch dann noch ein wenig Zeit.
Mfg Uli
Hallo,
bin beim Nachbau. Genutzt werden, soll ein ATmega32. Ich habe aber nur
Netzwerkkarten mit einem SMC Chip (83C790). Reicht es, nur das EEprom
auszulöten?
Mfg Sascha
Ich weiß nicht wie sich der Netzwerkchip verhält wenn man das EEprom
abklemmt, beim RTL ist es dann IRQ 9 IO 300 aber das kann bei deinen
Netzwerkchip anders sein. Am besten in die Spec. schauen.
Mfg uli
Hehe,
das ist es ja. Finde nichts mehr dazu. Außer den Nachfolger, den
83C795, der auch nicht mehr hergestellt wird. An der Karte kann ich nur
per Jumper INT3 und 10 und Adresse 280 und 300 einstellen.
IRQ3 - Adresse 280
IRQ10 - Adresse 300
Mfg Sascha
das ist doch gut dann benutze halt irq10 und Adresse 300
mußt halt nur den int an IRQ10 der Netzwerkkarte anschließen anstelle
von IRQ 9 die ISA-Slot Belegung findest du auf meiner Seite.
Mfg Uli
das bedeutet das der medium Type noch nicht auf RJ45 steht,
bei dem RTL 8019 gibt es am IC ein Pin um dieses einzustellen.
evt auf deiner Karte ein Jumper.
Mfg Ulrich
Hi,
ich habe da mal ne frage. wenn ich den webserver im Netzwerk habe, kann
ich ihn ja anpingen. kann ich denn übers netzwerk auf die Speicherkarte
zugreifen ? also quasi als Netzlaufwerk ?
mfg Kay
Hallo,
Zur Zeit ist die Speicherkarte noch nicht an den Webserver angebunden
wird aber bald geschehen. Wie eine Anbindung dann aussieht weiß ich
noch nicht ob FTP,NFS
Mfg Ulrich
Hi,
so meinte ich es nicht. Meinte die Ip-Adresse, die auf den Webserver
zugreift. Nicht die, vom Webserver selber.
Hat sich aber schon erledigt.
Gruß Sascha
Naja, bisher habe ich nur den
MSP430x4xx Family User's Guide (slau056d)
und den
MSP430x1xx Family User's Guide (slau049d)
gesehen.
Übrigens gibts jetzt auch Erratas dazu!
MSP430x4xx Family User's Guide Errata (slaz008)
MSP430x1xx Family User's Guide Errata (slaz007)
n8,
oli
@Sascha
Kannst Du vielleicht Deinen Code hier posten. Ich würde das ganze mal
auf einem ATMega8 laufen lassen (wenn Reichelt endlich liefert :o( ).
Dann könnte ich mir mal die Änderungen im Vergleich zur Originalversion
ansehen.
Joline
Hallo,
Ich habe die 50 Netzwerk-Karten ersteigert wer eine von euch haben will
bitte melden! Mal sehen wann diese kommen. Will keinen Gewinn machen
alle Netzwerk - Karten kosteten mit Versand um die 81 also 1.62 das
Stück.
Mfg Uli
Hmmm... gut, dass ich doch nicht mitgesteigert habe. Sonst hätten wir
uns evtl. noch gegenseitig hochgepusht... hättest ja was sagen können
;)
Okay, ich hätte dann gerne Netzwerkkarten im Wert von pi mal Daumen 15
inkl. Versand.
Schreib mir doch einfach mal ne mail!
Super Arbeit Uli, wirklich super !
Habe mich vorhin mal hingesetzt, mir eine alte rtl8019 gesucht, und den
Webserver mit einem Mega32 ausgebaut. Und siehe da, inzwischen läuft er
:-)
Allerdings hatte ich Probleme mit meinem 16MHz Quarzoszillator, was
auch mit meiner wilden verkabelung zu tun haben könnte. Jedenfalls
funktionierts mit 8MHz jetzt prima.
Die Karte habe ich nicht umgebaut, sondern mit einem alten pc
umprogrammiert.
Anbei ein kleines Bild meines Testaufbaus.
Viele Grüsse
Björn
@uli
sind die Netzwerkkarten aus ebay angekommen?
Wenn es damit möglich ist so einen Server aufzubauen würde ich welche
nehmen! Würde das jetz doch gerne mit deiner ISA variante probieren,
weil ich drauf hoffe hier hilfe zu bekommen, wenn´s doch nicht klappen
sollte.
Den Chip würde ich nur ungern auslöten, das man die Karte so verwenden
kann kommt mir auch gelegen.
Melde Dich bitte hier oder per Mail.
Hallo,
ich habe noch ~10 ISA Netzwerkkarten mit folgendem Chip: 82595FX
Kann Ich diese Karten auch mit einem AVR ansteuern ?
Gibt es für diese Karten auch einen fertigen TCP/IP Stack ?
Vielen Dank für eure Hilfe !
Gruß
Fiffi
Hallo,
ich hab da mal ne frage. In der Device.h steht
#define data_port_rtl_read PINA
jetzt meine Frage welcher Pin oder Port versteckt sich hinter "PINA"
MfG Titus
Hallo,
Das ist Port A, in der Atmel Doku gibt es drei Register PortA für
Ausgabe PinA für die Eingabe und DDRCA für das Direction Control
Register.
Mfg Uli
Hallo,
habe schon wieda ne Frage;
loop_until_bit_is_set(ReadRTL(isr),rdc);
was Prüfst du da? Also was muss anliegen damit es weiter geht, (muss da
0x07 anliegen?)
MfG Titus
Ich habe auch einen Posten RealTek Karten mit dem RTL8019 bei ebay
ersteigert. Ich habe sie auch getestet und gleich auf IRQ 9 und IO 300
konfiguriert. (Zum Glück habe ich noch nen 486 rumstehen :-)
Für 2 Euro pro Karte würd ich welche abtreten. 1-2 Karten kann ich
(ohne Slotblende wegen max. Höhe) als Großbrief für EUR 1,44 versenden,
bei mehr wohl als Päckchen oder Warensendung.
Bei Interesse einfach melden!
im gegensatz zu Simon habe ich probleme meine Karten von Ulrich zu
konfigurieren. Hab mich jetz ne weile mit einer beschäftigt, aber was
ich auch mache, das Konfigurationsprogramm ezcfg deaktiviert die
Menüeinträge, mit der ich Plug&Pray, IRQ un I/O einstellen könnte.
Momentan scheint die Karte auf I/O 220 und IRQ 5 zu stehen. der IRQ ist
einfach nur ein andere Kontakt an der Karte, aber was mache ich mit dem
anderen I/O Bereich? evtl. die Adress Pins anders Verschalten? also
statt A8 und A9 auf Hi nun A9 und A5 auf Hi. Denke mal das ist so
korrekt.
Aber: Hat die Karte sich die Werte denn gemerkt, oder will sie beim
nächsten Power on wieder ein Plug&Play haben?
Wer hat ein alternatives Config-Programm?
Hallo Henning,
Ich hätte da eine Hardware mässige Lösung;
falls das die Karten sind die grade bei Ebay zu massig versteigert
werden (Neuwahre) dan kannst du das mal versuchen;
EEPROM auslöten (dan ist standart IRQ 9 - I/O 300) alles was mit dem
BNC Übertrager und Wandler zu tuen hat kannste auch entlöten und ganz
wichtig ist, den Pin des RTL Chips 64 auf GND und Pin 65 auf VCC legen.
(geht mit Kupferlack draht gut)
MfG Titus
Ps: sorry Softwaremässig kann ich dir nicht weiterhelfen
Hallo
Wenn dir das Auslöten des EEproms zuviel ist einfach das hardwiring an
den Adressleitungen ändern. Dieses ist auf I/O 300 eingestellt.
A8(256dez) und A9(512dez) auf high (256 + 512 = 768 also 300 HEX).
Mfg Ulrich Radig
die Karte ist aber ja noch im Plug & Play modus. Merkt sie sich denn die
Adresse, die sie beim letzten Booten im PC zugeortnet bekommen hat?
Werde das ausprobieren, hab aber noch nicht gelötet. Im Moment baue ich
den Quellcode für meinen Mega32 um.
Eeprom auslöten ist ja nicht das Problem, aber Pin 64 und 65 sind so
ungünstig klein ausgefallen. Ich werde erstmal Ulrichs Vorschlag
probieren und Jumper für Adresse und IRQ vorsehen.
Ist es möglich, den Webserver auch mit einen Mega8 oder Mega16 zu
betreiben? Und wo werden eigentlich die Webseiten gespeichert? Im
Controller, oder in einem externen Eprom?
Danke!
Die Daten der Website werden im Controller gespeichert und ich bin
gerade dabei das ganze auf einem Mega32 zum laufen zu bringen. Wenn ich
makefile hexsize (siehe wiki:winavr) ausführe zeigt er follgendes am:
text data bss dec hex filename
0 10706 0 10706 29d2 main.hex
vielleicht hilft das weiter, aber mir scheint der Wert falsch zu sein:
vor der Hex Adresse $29d2 sind jede menge Adressblöcke mit $FF gefüllt,
als wenn sie unbenutzt sind. Wenn´s nach dem letzten Speicherplatz geht,
der kein $FF enthält, ist die Datei schon bei $14E8 zuende.
Hallo,
Die Webseiten werden zur Zeit noch im Controller eigenen FlashSpeicher
abgelegt. Aufgrund des geringen Sram beim mega8 bzw 16 sehe ich einige
Probleme, mit einen Mega32 haben es schon einige Personen ohne Probleme
realisiert.
Mfg Ulrich
Hallo,
Habe eine neue Version des SourceCode auf meiner HP zum download
bereitgestellt. Enthält nun auch die Änderungen für einen ATMega32
(noch nicht getestet).
Mfg Ulrich
Hallo,
Ich habe da mal eine neue Idee Voice over IP ist doch was feines für
den Webserver. Da ich noch keine Zeit gefunden habe mich schlau zu
machen. Frage ich mal ob jemand dazu Daten hat.
Welches Audio Format? (MP3/WAV oder was)
Ich nehme mal an irdendwas einfaches wie WAV mit evt 10Khz und Mono
reicht ja für ein Internet Telefon :-) dazu würde dann der interne ADC
vom AVR µC ausreichen.
Also wenn jemand dazu Datenblätter hat mal zumailen evt. programmiere
ich dann mal was. Ist doch ganz nett den Webserver auch als IP Telefon
zu nutzen oder? (wäre dann auch recht billig wenn es dann mal geht)
Mfg Ulrich
Hab gerade den Server mit mega32 nachgebaut, allerdings erhalte ich
immer "Overrun" egal ob Netzwerkkabel angesteckt oder nicht... Ich
musste auch noch SIG_INTERRUPT4 zu SIG_INTERRUPT0 ändern. Im makefile
habe ich atmega32 eingetragen. Die IP habe ich auf 192.168.1.101
geändert.
Im aktuellen Code ist alles mit #if defined gemacht:
#if defined (_AVR_ATmega32_)
GICR|=0x40;
MCUCR=0x03;
MCUCSR=0x00;
GIFR=0x40;
#endif
#if defined (_AVR_ATmega103_)
EICR = 3;
#endif
#if defined (_AVR_ATmega128_)
EICR = 3;
#endif
//Setze Portb für die Ausgänge auf output
DDRB = OUTPUT;
//Interrupt 4 oder 0 Einschalten (für die Netzwerkkarte)
#if defined (_AVR_ATmega103_)
enable_external_int (1<<INT4);
#endif
#if defined (_AVR_ATmega128_)
enable_external_int (1<<INT4);
#endif
#if defined (_AVR_ATmega32_)
enable_external_int (1<<INT0);
#endif
Habe gerade festgestellt, dass ich A10 auf +5V hatte statt auf GND.
Jetzt passiert folgendes: Die MCU geht nach dem Init sofort auf Reset.
Card Init :34 zeigt er an und gibt noch MAC/IP aus, dann fängt er von
vorne an. Aber nur solange der Interruptpin auf GND liegt. Wenn man von
Hand auf 5V stopselt, passiert das nicht...
Hab den Webserver jetzt als Schalter für einen Netzwerklaserdrucker
laufen. Der Drucker zieht soviel Saft, dass er vom Netz getrennt sein
sollte, um Strom zu sparen. Außerdem macht sein Lüfter einen
Mordskrach. Der Webschalter kann mit einen Klick auf einen Link den
Drucker an und ausschalten. Im Anhang ein Foto vom Webserver im Einsatz
& als Prototyp und die Seite, die er sendet.
Nochmals vielen Dank an Uli, da es echt ein Erfolgserlebnis ist, für so
wenig Aufwand ein so tolles Projekt zu machen.
Hallo @all,
Ja dann werde ich bald noch einen drauf geben, die ersten Teste als
Printserver und TimeServer mit DCF77 (SNTP) laufen schon. Dauert etwa
noch so 2 Wochen dann gibt es die erste Version, natürlich ohne weitere
Hardware. (klar ein DCF77 Modul von Conrad wird halt benötigt)
Was mich jetzt nur noch plagt warum lauft die Version 1.07 noch nicht
mit einen Mega32 ohne Probleme. Das mit Sig interrupt0 ist mir klar,
das muß ich in der nächsten Version an einen Mega 32 anpassen und was
noch? wollte nicht noch einen Webserver mit einen Mega32 basteln habe
doch schon 3 ;-).
Mfg Uli
Hallo,
ich habe die Version 1.07 mit meinem mega32 leider auch noch nicht ans
laufen bekommen.
@ Uli: Wäre schön wenn du die Dateinamen Device.h und Device.c von
deinem Quellcode noch klein schreiben würdest. Unter Linux findet er
sie sonst nicht, da sie ja in den anderen Files mit kleinem Dateinamen
inkludiert sind.
Hallo,
Was mir noch zu Mega32 einfällt definiert doch mal (unsigned char
packet[1500]; auf 1400) evt stürzt er dann nicht mehr ab. Wie gesagt
habe noch leider keinen mega32 Webserver.
Mfg Ulrich
Hallo,
hab nur ne kurze Frage, schreibt jemmand den Webserver auch für einen
8051 von Philips (zb.: P89C51 etc)?
Bitte melden hätte interesse an den Sourcecode
MfG Titus
Uli, kannst du mal eine ausführlich Funktionsbeschreibung deines Codes
posten? (Welche Routine macht was, braucht was, wie hängt alles
zusammen, Programmflussplan, ...)
Mich interessiert hauptsächlich, wo denn die Pages verschickt werden,
so dass man die Seite abhängig von Sensorwerten erzeugen kann und nicht
fest eingebaut.
Hallo,
Werte dynamisch übertragen kein Problem!
Füge doch einfach in der Webseite einen Platzhalter ein wie bei printf
z.b. %x oder %i
Bei add Packet meine ich (zu faul jetzt nachzuschen) wo halt der
Pointer ins array geschrieben wird, einfach eine if abfrage einfügen.
Aber da bin ich schon zugange. Ist am dienstag fertig.
Problem da noch niemand den Fehler für einen Mega32 gefunden hat läuft
der neue Code dann wie die Version 1.07 auch nicht mit Mega 32. Sondern
nur auf Mega103/128.
Mfg Ulrich Radig
Jetzt neu:
Webserver mit mega8 (für alle die ein schmales Budget haben!)
Basiert auf der Modifikation für mega32 von Sascha.
Anschlussverdrahtung ändert sich wie folgt:
- Interner RC-Oszillator muss verwendet werden um PORTB frei zu haben.
Beachten bei STK500: PORTB6 und 7 liegen auf Anschluss PORTE als XT1
und XT2!!!
- PORTB 0..7 sind Daten-Leitungen D0..D7 (statt PORTA)
- PORTC 0..4 sind Adressleitungen A0..A4 (bleibt gleich)
- PORTD 2 ist IRQ (bleibt gleich)
- PORTD 5,6,7 sind Steuerleitungen (statt PORTC)
Update:
Ich habe eine Variable für die Anzeige auf der Webpage in "tcp.c"
eingepflegt (Anzahl Druckerbenutzer).
Routine tcp_add_data in der Schleife, die den Puffer überträgt:
if (pgm_read_byte(pointer)=='%' && pgm_read_byte(pointer+1)=='S' &&
pgm_read_byte(pointer+2) =='1')
{
sprintf(s, "%d", countaccess);
i = 0;
while (s[i] != 0)
{
buffer[result16] = s[i++];
result16++;
}
pointer += 3;
}
Dieses Konstrukt reagiert auf %S1 und schreibt die Variable countaccess
hin. Der Pointer wird auch um 3 erhöht (Länge von %S1).
Dem mega32 Reset auf der Spur: Ich bin auf ein seltsames Verhalten
gestoßen. Wenn man die Baudrate der seriellen Ausgabe über 19200 erhöht
(16 MHz Boardtakt), startet der mega32 zyklisch neu. Und zwar kurz nach
dem printf mymac myIP. Das kann ich mir nicht erklären!
Hallo Leute,
also ich habe mir jetzt auch mal so einen Server gebaut. Ich habe
allerdings alles auf einer Platine untergebracht. Die Netzwerkteile
habe ich von einer Karte runtergelötet und bei mir neu platziert. Ich
habe den Mega128 verwendet und die letzte Version (1.07) von Ulrich.
Hat auf Anhieb funktioniert. Großes Lob an Ulrich.
Jetzt müssen wir nur mal sehen, wie wir am besten eine vernünftige
Kommunikation hinbekommen (Variablen Inhalt auf der Seite automatisch
aktualisieren usw.). Ich muss mich damit jetzt auch erst einmal
beschäftigen.
Gruss Mattias
Hallo Simon,
ich habe mal versucht, die Quellen zum Mega8 mit dem neuesten WinAVR zu
übersetzen.
Dabei erhalte ich folgende Fehlermeldungen:
------------------------------------------------------------------------
--------
avr-gcc (GCC) 3.4.1
Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is
NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE.
Compiling: main.c
avr-gcc -c -mmcu=atmega8 -I. -gstabs -Os -funsigned-char
-funsigned-bitfields -fpack-struct -fshort-enums -Wall
-Wstrict-prototypes -Wa,-adhlns=main.lst -std=gnu99
-Wp,-M,-MP,-MT,main.o,-MF,.dep/main.o.d main.c -o main.o
In file included from main.c:49:
./device.c: In function `Write_Ethernet_Frame':
./device.c:156: error: invalid lvalue in unary `&'
In file included from main.c:74:
./interrupt4.c: In function `__vector_1':
./interrupt4.c:120: error: invalid lvalue in unary `&'
./interrupt4.c:126: error: invalid lvalue in unary `&'
make: *** [main.o] Error 1
------------------------------------------------------------------------
--------
In device.c ist es Zeile 156:
loop_until_bit_is_set(ReadRTL(isr),rdc);
und in interrupt4.c sind es die Zeilen 120 und 126:
if (bit_is_set (ReadRTL(isr),ovw))
if (bit_is_set (ReadRTL(isr),prx))
Eigentlich sollte das doch funktionieren, oder? Zumindest sehe ich hier
keinen
Fehler. Oder stört sich die neue Version von avr-libc vielleicht an den
alten
bit_is_set-Funktionen?
Stefan
Hallo @Stefan
Schaue dir mal die Version 1.07 an da habe ich das if (bit_is_set
(ReadRTL(isr),ovw)) rausgeschmissen und ersetzt. Diese Funktion wird
vom neuen AVR GCC nicht mehr in dieser Form unterstützt.
Mfg Ulrich
Hallo, allerseits!
Ich habe mit dem GCC genau das gleiche Problem, bin allerdings auch
kein Experte, was GCC angeht (Codevision-verwöhnt...). Ich habe in der
Datei interrupt4.c die Zeilen entsprechend geändert und bekomme nun die
Fehlermeldung
'ISR' undeclared (first use in this function)
'OVW' undeclared (first use in this function)
'PRX' undeclared (first use in this function)
Kann mir jemand einen Tip geben, wie ich das wegbekomme?
Des weiteren hatte ich testweise mal Simons main.hex in meinen Mega8
geladen. Der steckte auf dem STK500 und wurde mit einem 16MHz-Quarz
versorgt. Ich verwende eine Netzwerkkarte, wie Ulrich sie massenweise
bei eBay ersteigert hatte, und habe sie entsprechend umgebaut (EEPROM
auslöten etc.) Leider leuchtet beim Verbinden mit dem Netzwerkkabel die
grüne Lampe nicht, und ein PING vom PC aus sagt nur Timeout. Hast Du
einen Tip, woran das liegen könnte?
Vielen Dank schonmal für Eure Hilfe!
Gruß
Kai Markus
Hallo, allerseits!
Bin jetzt schon mal etwas weitergekommen.
@Henning:
Nein, ich habe die UART nicht angeschlossen. Muß ich mal ganz doof
fragen: woran sollte die UART angeschlossen sein und was sollte man da
sehen können?!?
Was den Compiler angeht, bin ich jetzt soweit, daß mir das Programm
annähernd einwandfrei übersetzt wird. Nur ganz am Schluß noch die
Fehlermeldung:
.... ccUhaaaa.s:3087 Error: garbage at end of line
make: *** [main.o] Error 1
Hat da jemand noch eine Idee?!?
MfG
Kai Markus
Hallo,
Welche Version von GCC benutzt ihr meine Version 1.07 läuft mit dem
neuen AVR GCC und der alten Version, alle vorherige Versionen laufen
nur mit dem alten AVR GCC!!
Mfg Ulrich
sorry, die antwort passte natürlich nur zum letzten teil deines post: da
die netzwerk karte noch nicht initiallisiert ist wird die led nicht
leuchten. und anpingen wirst du sie dann leider erst recht nich können.
sie hat ja noch garkeine ip zugeteilt bekommen.
auf der uart werden die unterschiedlichen initiallisierunsschritte
ausgegeben. du kannst dort also sehen ob die init prozedur geklappt
hat.
aber dein problem hängt ja noch beim compilieren des programms.
ich bin am tüfteln mit dem mega32 aber hab mir die fuses verbrannt, so
das ich jetz erst den uC wiederbeleben muss... die nicht ganz
eindeutige angabe in avrprog ärgert mich schon wieder... harken = fuse
programiert (=0) oder bit gesetzt (=1)...
Hallo @Kai
Die alten Versionen laufen noch nicht mit AVR-GCC 3.4.1 - avr-libc
1.0.4 nur die neuen ich meine ab Version 1.05.
Ist auf meiner HP aber noch genau dokumentiert.
Mfg uli
Hallo, Ulrich!
Ich kann leider nicht genau sagen, mit welcher Version von Deiner
Software ich arbeite. Ich habe die letzte Datei von Simon vom 10.9.
heruntergeladen, weiß aber nicht, auf welcher Version von Deiner
Software die aufsetzt.
Bei meiner Schaltung scheint aber auch anderes noch im Argen zu liegen.
Ich habe mal ein Skop an den TxD-Pin drangehängt und stelle auch da nach
einem Reset des AVR keinen Datenverkehr fest. Das müßte ja eigentlich
sein...
By the way, ich werde dann mal die RS232 des STK500 an den USART des
AVR hängen. Wie sollte mein Terminalprogramm denn konfiguriert sein?!?
Gruß
Kai Markus
Hallo, Ulrich und Henning!
Vielen Dank für die Infos. Habe gerade mal angeschlossen, da kommt im
HyperTerminal gar nichts an. Ich nehme mal an, daß noch etwas mit der
Schaltung im STK500 insgesamt nicht stimmt. Ich werde dann (allerdings
wahrscheinlich erst morgen) mal genau forschen, was los ist. Sobald ich
was weiß, melde ich mich wieder. Einstweilen schon mal vielen Dank und
einen schönen Abend noch!
Gruß
Kai Markus
Hallo!
Da bin ich mal wieder. Ich habe mittlerweile die UART zum Laufen
bekommen und Simons Programm mit einer älteren Version (3.3.1) von gcc
übersetzt. Das ging dann auch ohne Probleme. In Simons Programm waren
die Befehle zur UART auskommentiert, deshalb tat sich da nix.
Am Status der Netzwerkkarte hat sich noch nichts geändert. Mein
angeschlossener PC sagt mir "Netzwerkverbindung mit 10 MBit/s" und am
PC leuchtet die "link"-LED auch auf. Nicht aber an der Netzwerkkarte.
Versuche ich die Karte anzupingen, bekomme ich eine
Zeitüberschreitung.
An der UART bekomme ich folgende Statusmeldungen:
Init Network Card: ......... Init Ready!
Hat jemand noch einen Tip, woran das liegen könnte?!?
Ich glaube, Ulrich sprach mal davon, daß evtl. die Netzwerkkarte noch
auf Autodetect RJ45/BNC eingestellt sein könnte und deswegen keine
Verbindung zustande kommt. Kann das hier der Fall sein?
MfG
Kai Markus
Falls es weiterhilft, den Fehler einzukreisen:
Am RTL8019AS geht nach dem Einschalten der Pin60 in den High-Zustand.
Laut Datenblatt signalisiert das, daß er in den 10Base2-Modus
geschaltet hat oder in den Auto Link-Modus mit "link test failure".
Gruß
Kai Markus
Hallo @Tegtmeier,
Also ich nehme mal an deine Netzwerkkarte ist noch auf BNC geschaltet.
Bei Init Ready sollte 34 als Init Wert erscheinen.
Somit solltest du die Netzwerkkarte entweder auf Auto Detekt bzw. auf
RJ45 umschalten.
Mfg Ulrich
Hallo, Ulrich!
Vielen Dank für Deinen Hinweis. Ist diese Umschaltung hardwaremäßig
machbar (ich benutze eine von Deinen ISA-Karten aus eBay) oder muß ich
die in einen PC stecken und umkonfigurieren?
Gruß
Kai Markus
Hallo,
Am besten ist es sie in einen PC einstecken und umkonfigurieren, oder
halt nach meiner Umbauanleitung mit Pin64 und 65. EEprom kann dann in
diesenfall drin bleiben. Wie gesagt konfigurieren mit PC ist meiner
Meinung nach die beste Lösung.
Mfg Uli
Hm, EEprom ist bereits ausgebaut, Pin 64 ist mit GND und Pin 65 mit VCC
verbunden. Was mir dabei nicht ganz klar ist: im Datenblatt vom
RTL8019AS steht, daß der BNC-Anschluß dann deaktiviert wird, wenn Pin64
auf High gelegt wird. Müßte dann Pin64 nicht eher auf "high" mit
External MAU gelegt werden?
Ich habe auch mal verschiedene Logikzustände an Pin74 bzw. 77 "Network
medium type" angelegt, aber auch ohne Erfolg.
MfG
Kai Markus
Hallo,
AUI pin 64 wird nicht benutzt also auf low.
PNP pin 65 auf high da nicht benutzt.
Da das EEPROM fehlt initialisiert sich die Netzwerkkarte auf IO300 IRQ
9 und auf medium type RJ45.
Wie bei Mattias und vielen anderen Personen funktioniert es auch so.
Ich habe schon so 5 Netzwerkkarten selbst gebaut und immer ohne
Probleme funktionierten auf anhieb. Kannst ja mal den Schaltplan von
meiner HP für die selbstbau Netzwerkkarte herrunter laden und
vergleichen.
Mfg Ulrich
An alle Mega8 Nutzer:
Da der mega8 seinen Port B nicht ganz freigibt (XTAL an 6 und 7) muss
der interne RC-Oszillator mit 8 MHz benutzt werden!
Dann sollte auch die Netzwerkkarte korrekt initialisiert werden! Habe
ich in meinem Beitrag vom 10.09.2004 aber erwähnt.
hi, ich habe das selbe problem, wie kai:
der Hub sagt, es besteht eine Verbindung, die LED der Netzwerkkarte
leuchtet nicht. ausserdem bekomme ich nach dem Init über die Uart den
Wert 255. Was kann ich mit diesem Wert anfangen? Vorher gebe ich nach
der Zeile Resetpin low und
ReadRTL (rstport);
WriteRTL (rstport , 0xFF);
den rstport aus und erhalte immer den Wert 18.
Auch ich verwende die Netzwerkkarten von Ulrich, habe das Eprom
ausgelötet und Pin 64 auf GND sowie Pin65 auf VCC gelegt.
ausserdem erhalte ich 2 "Overrun!" kurz nach dem starten.
Ein Ping führt natürlich zum Zeitüberlauf...
vielleicht hat ja jemand nen Tip. Werd später versuchen die Signale per
Oszi nachzumessen.
Hallo, Simon!
Diese Pinbelegung habe ich auch eingehalten. Tut sich aber bis jetzt
trotzdem noch nichts. Du hattest (vermutlich aus Platzgründen) in
Deinem Code die Kommunikation via UART ja deaktiviert. Welche Zeile im
Code ist denn für das Anzeigen der "34" zuständig, die nach der
Initialisierung erscheinen soll?
MfG
Kai Markus
Das ist in device.c "init_rtl" oder so. Schau dir die Version von
Sascha für den mega32 an, ist ja fast identisch und der printf Code ist
da noch drin. Den kannst du direkt kopoeren. In main.c musst du dann
auch die printf inits wieder reintun.
Ich habe mir jetzt noch mal die Datei Device.c angeschaut, in beiden
Sourcecodes, und kann beim besten Willen keinen Printf-Befehl finden,
der über die UART eine Zahl ausgibt. Entweder bin ich zu blöd, die
Zeile zu entdecken, oder es ist schon zu spät?!?
Gruß
Kai Markus
Habe gerade die betreffende Zeile in Ulrichs Code V1.07 entdeckt. Steckt
in der main.c. Die habe ich jetzt mal in Simons Code eingebaut. Nun gibt
mir die Netzwerkkarte auch den Wert 34 zurück. Nach wie vor läßt sich
die Karte aber nicht anpingen, und auch die LED leuchtet nicht. Ein
angeschlossener PC meldet aber 10MBit-Netzwerk. Kann das immer noch an
der Einstellung RJ45/BNC liegen?
Hallo @ all
Hier der neue Source Code 1.08 nun endlich funktioniert auch der
Mega32. Habe mich mal über Nacht an den bau meines 5. Webservers
begeben aber dises mal mit Mega32 ;-). Und der neue Source Code läuft
jetzt auf Mega 32 103 128
nun stürtzt der Mega32 nicht mehr ständig ab. Eigentlich hatte ich die
Interrupt Einstellungen von Sascha übernommen aber dabei gemerkt das
immer ein Interrupt ausgelößt wird. Das funktionierte bei der Version
1.07 halt dann nicht weil ich die Datenannahme des NIC geändert hatte.
Nachdem ich die Interrupt Einstellungen richtig einstellte funktioniert
es nun. Und noch einen Webserver mehr.
Mfg Ulrich Radig
Nochmal für alle:
Nach dem Einschalten sollte folgende Meldung stehen:
Init Network Card: ......... Init Ready!
Card Init: 34
My Mac: 1e.a.2b.2b.2d.4d
My IP : 192.168.0.101
Wenn nicht 34 steht wurde die Netzwerkkarte nicht erkannt.
Bei einen Mega 103/128 wird der Interrupt 4 verwendet.
Bei einen Maga 32 der Interrupt 0 sowie die richtigen fuse Bits also
CKOPT.
Noch einen schönen Sonntag ich gehe jetzt Schlafen
Mfg Ulrich
@Ulrich
ich habe ja Deinen Webserver auf der ein-platinen-version gebaut.
Funktioniert wunderbar.
Nun habe ich aber noch ein paar Fragen zum Code:
Die wesentlichen Bestandteile werden ja in webpage.h und httpd.c
abgehandelt. Jetzt ist dort eine Schleife "for (int
a=0;a<10;a++)..".
Warum 10x ???
Warum wird der Header 10x eingelesen ???
Wie kommst Du an die Textstellen "1=1", "ulrich.jpg" usw, wenn Du
immer am Anfang des pointers "buffer" nachschaust ( a, a+1 ..) ???
Genauso wird 10x ein TCP Paket erzeugt und gesendet. Wird etwa jedes
Element (Bild, Text,...) getrennt versendet ???
Kannst Du eventuell mal in kurzen Worten erläutern, wie prinzipiell der
Ablauf funktioniert ???
Ich blicke da irgendwie überhaupt nicht durch.
Danke schon voraus.
Mattias
Hallo,
Bei einer Webseite mit Bildern wird für jedes Bild sowie die Webseite
selber ein sogenanter Socket geöffnet. Des halb reserviere ich 10
Speicherplätze, da ein offener Socket auch wieder geschlossen werden
muß. Dieses wird in der Schleife erledigt. Der Header selber wird nicht
10 mal eingelesen sondern nur auf seinen Inhalt überprüft 1=1.
Schaue dir mal die Webseite in Version 1.02 (webpage.h) an, dort hatte
ich auf der Webseite einen Buttom zum steuern einer LED eingebunden.
Bei dem betätigen des Buttom wird an dem Header 1=1 hinzugefügt,
welches im µC (1=1) überprüft wird.
Mfg Ulrich
Uli:
Dein Projekt wär glatt mal "veröffentlichungsreif", so bei Elektor,
etc. Hast ja die Elektor schon erwähnt, mit dem Preis für ihr mickriges
MSC1210 Board und Netzwerkkarte, huahuahua...
Gibt auf diesem Planeten wohl genügend Bastler, die an deiner Version
echtes Interesse hätten, wo es doch fast keine günstigen Alternativen
gibt!
Hallo @Mattias
Besorge dir mal das freie Programm Etherreal für den PC, damit kann man
sich die Datenpakete die über die Netzwerkkarte gesendet werden
anschauen.
Mfg Ulrich
Hallo,
habe mir nun auch einen Webserver mit dem Mega32 gebaut, leider kommt
nach dem Einschalten immer
Init Network Card: ......... Init Ready!
Card Init: 255
Software-Version ist 1.08, der AVR läuft mit 14,318MHz, ist auch in
main.c eingetragen.
Die Karte ist auf IRQ9 und IO300 eigestellt, Anschluß auf 10BaseT.
Ist eine Realtek 8019AS.
Gibt es vielleicht schon eine "Fehlersuchliste", warum die Karte
nicht erkannt wird?
Gruß
Peter
@Ulrich,
danke, das war ein guter Tip. Das is ja ein cooles Programm. Jetzt kann
man sich das besser vordstellen. Man, da ist ja wirklich was los auf dem
Netz.
Bei mir sagt übrigens mein Rechner zu dem Webserver immer:
...[CHECKSUM INCORRECT]...
Taucht das bei Dir auch auf ???
Der Inhalt wird trotzdem korrekt angezeigt. Das mit dem LED steuern
finktioniert auch.
Mattias
@Ulrich,
also, ich habe auch mal so ein capture file erzeugt (so.). Mein PC ist
die ...14, der Webserver die ...15
Ich habe die Seite geladen, die Lampe1 angeklickt und den Button
gedrückt. Geht alles wunderbar. Aber die Meldung ...[CHECKSUM
INCORRECT]... kommt trotzdem.
Vielleicht kannst Du in diesem Wirwar ja was sehen :-).
Mattias
Hallo,
Ja nachdem Protocol macht mein Webserver keine Probleme.
Wieso?
Weil das Packet mit der falschen Checksumme von deinen PC erzeugt wurde
und nicht von meinen Webserver. Source = 141.25.73.14 also definitiv von
deinen PC.
Welches BS benutzt du? Ich benutze XP.
Mfg Ulrich
Hallo Ulrich,
ich benutze auch XP.
Also ich würde das so verstehen: (habe aber keine Ahnung !)
schauen wir uns mal die relevanten Dinge an...
No. Time Source Destination
Protocol
3 1.514749 141.25.73.14 141.25.73.15 TCP
1900 > http [SYN] Seq=0 Ack=0 Win=16384 Len=0 MSS=1460
Nochmal....
irgendwie ist mir gerade mein Mozilla abgeschmirt :-(((
also nochmal. Ich verstehe das so:
----------------------------------------
No. Time Source Destination Protocol
3 1.514749 141.25.73.14 141.25.73.15 TCP
1900 > http [SYN] Seq=0 Ack=0 Win=16384 Len=0 MSS=1460
----------------------------------------
No. Time Source Destination Protocol
4 1.515586 141.25.73.15 141.25.73.14 TCP
http > 1900 [SYN, ACK] Seq=0 Ack=1 Win=16384 Len=0 MSS=1460
----------------------------------------
No. Time Source Destination Protocol
5 1.515626 141.25.73.14 141.25.73.15 TCP
1900 > http [ACK] Seq=1 Ack=1 Win=17520 [CHECKSUM INCORRECT] Len=0
----------------------------------------
No. Time Source Destination Protocol
6 1.519587 141.25.73.14 141.25.73.15 HTTP
GET / HTTP/1.1
----------------------------------------
No. Time Source Destination Protocol
7 1.567106 141.25.73.15 141.25.73.14 HTTP
HTTP/1.0 200 OK
In Nummer 3 will ...14 (mein PC) Kontakt mit ...15 aufnehmen (Seq=0
Ack=0).
Dann antwortet ...15 mit Seq=0 Ack=1.
...14 sagt daraufhin zu ...15 mit Seq=1 Ack=1, dass [CHECKSUM
INCORRECT] ist.
Bedeutet das nicht, dass CHECKSUM von ...15 nach ...14 falsch ist ???
Dann vordert ...14 trotzdem von ...15 irgendwas mit GET / HTTP/1.1.
...15 sendet daraufhin dises komische HTTP/1.0 200 OK.
Warum kommt die Verbindung überhaupt zustande, wenn [CHECKSUM
INCORRECT] ist ???
Was ist mit dem Win=xxxxx und MSS=xxxxx ???
Warum ist Len=0 ???
Gruss Mattias
Hallo,
Die Verbindung kommt zustande weil das Datenpacket welches vom PC kommt
nicht auf die richtige Checksumme überprüft wird.
Die LEN = 0 weil dieses nur ein ACK Packet vom PC ist ohne Inhalt
(Daten).
>>Bedeutet das nicht, dass CHECKSUM von ...15 nach ...14 falsch ist ???
Nein da nur Checksumm error angezeigt wird in dem Packet welches einen
Error hat. Würde der Webserver einen Fehler verursachen würde der PC
die Verbindung daraufhin mit FIN oder einen RST abbrechen.
Und eine neue Verbindung aufbauen.
Hallo @Mattias
Hier das gleiche Daten Packet mit Etherreal aufgezeichnet:
Frame 4 (62 bytes on wire, 62 bytes captured)
Arrival Time: Sep 21, 2004 12:53:24.711546000
Time delta from previous packet: 0.000849000 seconds
Time relative to first packet: 1.179174000 seconds
Frame Number: 9
Packet Length: 62 bytes
Capture Length: 62 bytes
Ethernet II, Src: 1e:0a:2b:2b:2d:4d, Dst: 00:0c:76:16:59:a7
Destination: 00:0c:76:16:59:a7 (Micro-St_16:59:a7)
Source: 1e:0a:2b:2b:2d:4d (1e:0a:2b:2b:2d:4d)
Type: IP (0x0800)
Internet Protocol, Src Addr: 192.168.0.101 (192.168.0.101), Dst Addr:
192.168.0.1 (192.168.0.1)
Version: 4
Header length: 20 bytes
Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN:
0x00)
0000 00.. = Differentiated Services Codepoint: Default (0x00)
.... ..0. = ECN-Capable Transport (ECT): 0
.... ...0 = ECN-CE: 0
Total Length: 48
Identification: 0x273e
Flags: 0x04
.1.. = Don't fragment: Set
..0. = More fragments: Not set
Fragment offset: 0
Time to live: 128
Protocol: TCP (0x06)
Header checksum: 0x51d3 (correct)
Source: 192.168.0.101 (192.168.0.101)
Destination: 192.168.0.1 (192.168.0.1)
Transmission Control Protocol, Src Port: http (80), Dst Port: 1063
(1063), Seq: 0, Ack: 2603669461, Len: 0
Source port: http (80)
Destination port: 1063 (1063)
Sequence number: 0
Acknowledgement number: 2603669461
Header length: 28 bytes
Flags: 0x0012 (SYN, ACK)
0... .... = Congestion Window Reduced (CWR): Not set
.0.. .... = ECN-Echo: Not set
..0. .... = Urgent: Not set
...1 .... = Acknowledgment: Set
.... 0... = Push: Not set
.... .0.. = Reset: Not set
.... ..1. = Syn: Set
.... ...0 = Fin: Not set
Window size: 65535
Checksum: 0x89db (correct)
Options: (8 bytes)
Maximum segment size: 1460 bytes
NOP
NOP
SACK permitted
Und dahinter steht dann das Datenpacket ist correct.
Ich weiß nicht welches Programm du benutzt!!
Probier es mal mit Etherreal aus evt. ist die Darstellung besser.
Auch hier ist das TCP Packet LEN = 0 da es keine Daten enthält.
Mfg Ulrich
Hallo,
also erst einmal ein ganz großes Lob an Ulrich für dieses tolle
Projekt.
Habe mir den Server mit Mega32 gebaut, funktioniert ausgezeichnet.
Kleiner Zusatz zur Doku:
Wenn man einen Mega32 benutzt, muß das JTAG-Interface disabled werden,
weil die JTAG-Pins auf PortC liegen.
MfG Torsten
@Ulrich,
ich habe mal jetzt die Verbindung zum Internet überprüft und
festgestellt, dass dort auch immer die Meldung [CHECKSUM INCORRECT]
kommt, wenn mein PC etwas anfordert. Das Netz funktioniert trotzdem
einwandfrei. Ich werde das jetzt einfach mal ignorieren...
Es liegt also tatsächlich an meinem BS.
Das Programm Ethereal ist wirklich genial.
Gruss Mattias
Hallo,
habe ein kleines Problem entdeckt.
Ich habe meinen kleinen Server an einem Netz betrieben, wo richtig was
los ist. Der Netzwerkchip (RTL 8019) hat praktisch ununterbrochen einen
Interrupt gesendet. Nun ist es ja so:
Sendet der 8019 einen Interrupt (Leitung auf high), muss er vom
Controller quittiert werden. Bleibt der Controller in der Interrup
Funktion hängen, kann er diesen nicht quittieren. Die Anlage hängt. Nun
ist in der Funktion von Ulrich aber nichts drin was hängen bleiben kann.
Man sollte also annehmen, dass der Interrupt immer quittiert wird.
Hier ein Auszug aus dem Ende der Interrupt Funktion:
.
.
.
//Zurücksetzen der Interrupt Bits des NIC
WriteRTL (ISR, 0xFF);
//startet die Network Card
WriteRTL (CR , 0x22);
//Globale wieder Interrupts Einschalten
sei ();
Ende Interrupt Funktion.
Ich habe nun folgende Vermutung:
Der Interrupt wird quittiert und die Karte wird gestartet. Wenn genau
zu diesem Zeitpunkt ein neuer Interrupt kommt, bekommt der Controller
das nicht mit, weil sei(); noch nicht ausgeführt wurde. Die
Interruptfunktion wird also nie mehr ausgeführt.
Ich habe jetzt noch folgendes (hinter sei();) hinzugefügt:
if(PINE & 0x10){
//Zurücksetzen der Interrupt Bits des NIC
WriteRTL (ISR, 0xFF);
//startet die Network Card
WriteRTL (CR , 0x22);
}
Wenn also der Interrupt Pin nach sei() high ist, quittiere ich einfach
erneut, ohne genau zu wissen, ob das so richtig ist. Vielleicht gibt es
ja eine bessere Lösung.
So funktioniert es jedenfalls schon seit mehreren Stunden einwandfrei.
Vorher ging es höchstens für 2 min. Dann hing der Server.
Gruss Mattias
Hallo @Mattias,
Hast du den Webserver an einen Switch oder HUB angeschlossen?
Würde den Fehler gerne nachvollziehen aber bisher ohne erfolg in einen
Netzwerk mit 30 Rechnern (alles über einen Switch verbunden)
Mfg Ulrich
Hallo,
Was mir noch einfällt anstelle den Interrupt flankengesteuert
einzusetzen, einfach meinen Code bei behalten und einen Interrupt
auslösen wenn High Pegel auftritt.
MCUCR=0x03; auf MCUCR = 0x01; einstellen ,meine ich, wenn ich das
Register noch richtig im Kopf habe
Mfg Ulrich
Hallo,
Zum gefundenen Fehler eine kleine Erklärung.
Natürlich ist es Richtig das nach dem neu Start der Netzwerkkarte und
dem Zurücksetzen des Interrupts ein neuer Interrupt eintreten kann.
Somit ist der µC schon mit einen gesetzten Interrupt nicht mehr in die
Interruptroutine gesprungen. Da ja der INT flankengesteuert war.
Durch ändern der INT Einstellungen sollte dieser Fehler in Version 1.09
nicht mehr auftreten.
Mfg Ulrich
Hallo,
mein Server hängt an einem HUB, dieser an einem Netz mit ca. 200
Rechnern und dieses an einem Switch. Danach weiss ich nicht wie es
weiter geht.
Das mit dem INT High Pegel wollte ich auch schon probieren, war mir
aber nicht sicher, ob das nur auf Änderungen reagiert. Werde das heute
noch probieren und berichten. So, wie gesagt, geht es jedenfalls.
Gruss Mattias
So,
habe jetzt die Änderungen von Version 1.09 übernommen. Geht so aber
nicht, da das die Definition für:
"Any logical change on INTn..." ist
Nur auf high Pegel geht leider nicht.
ISCn1 ISCn0 Description
0 0 The low level of INTn generates an interrupt request.
0 1 Any logical change on INTn generates an interrupt request
1 0 The falling edge between two samples of INTn generates an
interrupt
1 1 The rising edge between two samples of INTn generates an interrupt
Bleibe also erst mal bei meiner Änderung.
Gruss Mattias
Tach,
Hab hier noch ne 3Com Etherlink III 3C509BC ISA-Karte rumliegen. Wollte
nur mal fragen, ob die auch funktioniert. Das wurde ja hier schonmal
gefragt, aber es gab keine Antwort drauf.
Gruß PatrickHH
3com ist scheinbar nicht ne2000 kompatibel -> geht nicht.
die interrupt funktionen scheinen falsch definiert zu sein, denn SIGNAL
erledigt die cli() und sei() automatisch. Hab den letzten Quellcode
nicht überprüft (ist nur nen kurzer gedanke, der mir früher aufgefallen
ist), aber das könnte es sein. Müsste nochmals genauer betrachtet
werden.
@Mattias
Dein einseitiges Layout für den Webserver gefällt mir sehr gut.
Hast du die Platine selber geätzt ?
Ich bin leider nicht in der Lage eine derart feine und komplexe Platine
selber herzustellen und wollte desshalb fragen, ob du mir evtl ein
Exemplar anfertigen könntest (gegen Bezahlung!), oder einen Tip für
mich hättest, wo man eine Platine kommerziell anfertigen könnte.
Gruß
Björn
ich habe gestern auch einen Server zum laufen gebracht. Dabei habe ich
einen Mega32 verwendet mit 16Mhz. die ISA Karte kommt von Ulrich.
Hier ein Paar stellen, an denen es bei mir geklemmt hat:
der Tackt muss bei 16Mhz über die Fusebits eingstellt werden. was da
AVRProg programmiert stimmt efinitiv nicht. ich habe mir dann per
PonyProg geholfen
Das JTAG muss per Fusebits deaktiviert werden, denn es Liegt auf Port C
(war ein Hinweis von Torsten Voigt)
Ab da hat dann die Initiallisierung hingehauen, aber die Interrupts
stimmten noch nicht. Bei den Karten von Ulrich ist eine Treiberdiskette
mit Konfig-Programm bei. Mit dem konnte ich zwar lustig testen, aber
keine einstellungen machen (heisst EZCFG ?) auch ein hinweis von Hier
hat mich dann auf rset8019 gebracht, damit konnte ich die Karte
einstellen. Hinweis dazu: Media-Type auf Auto lassen, denn 10Base-T (=
UTP = Unshielded Twisted Pair (die mit dem RJ45 Stecker)) hatte (bei
mir) dann keinen LinkDetect mehr. mit Auto Funktionierts aber
wunderbar.
10Base-2 und 10Base-5 sind übrigens die Coax-Kabel mit BNC Stecker
dran. Ich war zwischenzeitig auf der suche nach erklärungen der
Bezeichnungen.
Hab jetzt allerdings ein anderes Problem :) ich suche noch einen
gescheiten Verwendungszweck...
@Bjoern,
die Platine habe ich bei meiner Partnerfirma fertigen lassen, weil ich
keine Lust zum Bauen hatte. Ich habe aber den Film und könnte natürlich
mal einige machen. Die Mittel habe ich. Ich sag mal so 10 EUR + Versand
1 EUR.
Ich mach einfach mal welche. Ihr könnt Euch ja dann überlegen, wer eine
haben will.
Gruss Mattias
Hallo @all,
Hier mal eine neue beta des Webservers der nun auch die Anfänge eines
FTP Servers enthält. z.b. über Smart FTP einloggen und das Root
Verzeichnis sehen geht schon. Ist natürlich noch alles pseudomäßig.
Da es ja noch kein FileSystem gibt :-q
Auch der Webserver selber also httpd.c wurde etwas besser gestaltet.
Daher die Frage welches Speichermedium soll man nehmen meine MMC oder
doch besser DOC oder was ganz anderes?
Mfg Ulrich
Hallo,
also ich würde zu MMC tendieren. Die Medien sind bei ebay günstig zu
bekommen und von allen wohl am einfachsten und mit dem wenigsten
"pin-verbrauch" anzusteuern. CompactFlash wäre aufgrund der Größe der
Karten (bis 4GB?) auch sehr schön, nur wäre der Aufwand wohl viel zu
gross.
Gruß
Björn
Ich würde SD sagen, da ich in dem breich schon ne speicherkarte habe und
die auch in einer dcam verwenden kann.
alternative währe HDD, dann kann man das gleich mit mp3 kompinieren...
jaja, der übliche mp3player...
wie sieht es eigentlich mit Übertragungsgeschwindigkeit aus? bilang kam
mir das ganze recht lahm vor. wirklich dateien kann man damit nicht
übertragen, oder was meint ihr?
Hallo,
ich wäre auch für MMC. Die HD hat so viele Pinne. Ich glaube da ist der
Atmel dann an seinen Grenzen bzw ohne Tricksereien geht es nicht mehr.
Martin
Hallo,
habe eben mal die neuste Version auf Mega32 getestet, FTP funktioniert
, jedenfalls kann man sich einloggen.
Die Uhrzeit wird über die serielle Schnittstelle ausgegeben. Gibt es
auch eine Möglichkeit, die Uhr zu stellen? Außer im Source Code?
Gruß
Torsten
Hallo,
was haltet ihr von der Idee, mal gemeinsam am Software Projekt
mitzuarbeiten? Ich würde schon gerne an der ein oder andern Stelle
etwas beisteuern.
Wir könnten das Ganze zB über "Subversion" oder "CVS" organisieren.
Einen Server könnte ich bereitstellen, falls Interesse besteht.
Gruß
Björn
Hallo,
>>Die Uhrzeit wird über die serielle Schnittstelle ausgegeben. Gibt es
auch eine Möglichkeit, die Uhr zu stellen? Außer im Source Code?
Ist schon in Arbeit wird bald über Telnet realisiert.
Mfg Ulrich
@Uli:
Ich möchte gerne eine reine socket-basierende Verbindung aufbauen,
ungefär nach folgendem Prinzip:
1. PC (=Client) öffnet Socket auf einem bestimmten Port
2. (evt.) Miniserver schickt eine kleine Bestätigung
3. PC sendet Kommando (z.B. sende Analogwert Kanal 0 oder setze Ausgang
1 auf AN)
4. Miniserver antwortet mit Daten
alternativ:
3. PC sendet Kommando "Dauerübertragung"
4. Miniserver sendet kontinuierlich Datenpakete mit Messwerten, bis
Socket geschlossen wird.
Wo muss ich mich in deinem Code da einhängen?
Hallo,
mit Uli's Einverständniss habe ich einen neue Projektpage für den
AVR-Webserver angelegt. Bisher bin ich noch nicht zu Viel gekommen,
aber der Subversion Server steht schonmal.
Wer also gerne interaktiv am Code mitwirken möchte, kann sich bei mir
per Mail melden, und bekommt dann einen Entwickler Zugang zum
Subversion Repository.
Vorerst ist die Seite zu erreichen unter:
http://avrwebserver.bjoern-b.de
Viele Grüße
Björn
Danke für den Hinweis Joline. Ich habe mich erst gefragt was du meinste,
hatte mir meine Seite mit Konqueror und IE angeschaut, doch in Mozilla
waren die Fehler dann sichtbar.
genau deswegen habe ich mich davon gelöst und pflege meine eingene
Version. Da kommt nur rein, was ich haben will, bald werden die Sitens
dynamisch erstellt.
Ausserdem kann ich meine Compilierung ohne Probleme im AVRStudio
simulieren. Einzig Aufwendig ist es die Unterschiede zu den neuen
Versionen, die hier geboten werden, herauszufinden (zu vergleichen).
Die letzte Version, die ich von hier ausprobiert habe, hat den Server
übrigens nach dem Ersten HTTP Request regelmäßig resetten lassen. - War
für mich unerklärlich und ich bin wieder (aus Einfachheit) bei meiner
Version gelandet.
Hab aber noch ne Frage zu den HTTP Headern: Auch bei den JPG Dateien
wird der Header mit Content:HTML gesendet. Klickt man im IE auf das JPG
Bild mit Rechts und ruft die Eigenschaften auf, so wird auch das JPG
Bild als HTML content ausgegeben. (Fehler?)
Hab jedoch noch ne Frage zu den HTTP Headern: wenn ich
http://192.168.0.99/ als Adresse aufrufe, erscheint zwar die Site, aber
in der Titelleiste (des IE) erscheint die Meldung "Server nicht
gefunden". Öffne ich eine Adresse mit Filename wie zB
http://192.168.0.99/index.htm so klappt der Aufruf genauso, es wird
jedoch der Header der HTML-Datei (<head><title>Server</title></head>)
berücksichtigt. Gibt es eine Möglichkeit bei Eingabe der Adresse ohne
Datei einen Redirect zur Adresse mit Datei durchzuführen? Was sendet da
zB. Apache?
Und zu den HTML-Headern auch noch eine Frage g : Wieso ist der Inhalt
der Datei (zB Page1) nicht komplett, sondern es fehlen die <HTML> und
<HEAD> Tags (mit allem, was so dazugehört)? wurde das vergessen, oder
hat das einen Grund?
greez Henning
Hallo,
Was neu in der Version 1.16 zu 1.13 ist es wurde ein Fehler bei einen
Antwortpacket beseitigt. Es wurde Device.c auf Geschwindigkeit
optimiert. Aus dem Hauptprogramm sind die Routinen für den UART
entfernt worden und in eine eigende Datei. Ich glaube das wars.
Mfg Ulrich
Hallo,
ich habe mir bis jetzt immer nur den Quellcode (oberflächlich)
angesehen. Dabei habe ich festgestellt, dass in der von Uli gepflegten
Version (seit 1.03?) immer nur ein Bild angezeigt wird (bitte
berichtigen, wenn falsch), was ja für einen Webserver auf µC-Basis
eigentlich ein bisschen sinnlos ist.
Nun gibt es ja hier einige, die das Ganze schon nutzbringend einsetzen
(z.B. als Druckereinschalter). Kann mal bitte einer eine "webpage.h"
und die passende "httpd.c" posten, in der ein paar I/O's gesetzt und
abgefragt werden?
Danke Joline
Hallo,
Mal wieder eine neue Version auf meiner Homepage:
Über Telnet setzen der Uhrzeit mit set time xx xx xx
Ausgabe der Uhrzeit über Telnet mit time
Weitere infos in meiner Version.txt
Mfg Ulrich
Hallo,
ich habe es jetzt geschafft, einen DS18S20 Temperatursensor an den
Webserver anzuschliessen, und die gemessene Temperatur dort anzeigen zu
lassen.
Das Ganze läuft mit einem ATmega32.
An PD7 ist der Data-Pin des DS18S20 angeschlossen. Diese Leitung wird
noch mit 4,7kOhm gegen VCC gezogen. Das ist notwendig da der Sensor
über den internen Pullup des AVR nicht genug Saft bekommen würde. Somit
funktioniert der Sensor mit nur zwei Adern (DATA und GND).
Zur Realisierung der Software habe ich den Code dieser Seite
verwendet:
http://www.siwawi.arubi.uni-kl.de/avr_projects/index.html#ds18x20demo
Dann habe ich Diesen noch in Version 1.22 von Uli integriert.
Zu bekommen ist der Sourcecode entweder über den Anhang, oder übers
Subversion-Repository: svn://bjoern-b.de
Viele Grüße
Björn
Hallo,
ich habe gerade erste Versuche mit einem mega32 gemacht.
Dieser war natürlich noch ganz frisch: den Fehler den externen Quarz zu
aktivieren habe ich schon 1000 mal gemacht. Aber gerade habe ich fast 1h
gebraucht um zu bemerken das default JTAG aktiviert ist. Dann geht
erstmal gar nichts bzw der network card init ist imemr 255 :-)
Sonst muss ich sagen recht schnell und auf den ersten Blick sehr
stabil...
Martin
Hallo Ulrich,
sag mal, sind deine Leiterplatten hand oder autogeroutet?
Ich habe bisher den Freeware Eagle benutzt und da konnte man den
Autorouter so gut wie vergessen.
Gruß Phili
wurde schon öfters bemängelt: der Autorouter von Eagle ist mit den
meisten Aufgaben schon überfordert, bzw. erzielt keine
zufriedenstellende Ergebnisse... man kann sich die Arbeit damit jedoch
trotzdem um einiges vereinfachen, wenn man ihn geschickt auf einige
wenige signale ansetzt
Hallo,
ich verfolge den Thread schon geraume Zeit. Die Anwendung mit der
Temperatur ist ja schon ganz nett. Ich habe da aber noch was anderes im
Auge. Ich wäre an einer WebCam interessiert. Gibt es da Ideen?
Volkmar
hallo
@ uli
hab mal ne Frage zum Programmierstiel. mir ist aufgefallen das alle
*.c Datein in main.c eingebunden sind und nicht wie bei den meisten
anderen Beispielen hier im Forum einzeln übersetzt und zusammengelinkt
werden. gibt es dafür einen besonderen Grund?
Hab ich grad gefunden :
AVR + NE2K zu Steuerung der Motoren einer beweglichen Webcam
+ Display und LED´s
http://home.teleport.ch/idobson/projects/UDP-webcam.htm
ganz unten auf der Seite den Link anklicken,
da kann man das ganze live ausprobieren.
Echt cool ! bekam sogar Antwort auf die Texte die ich im
Display anzeigen ließ :-)
Grüße
Andreas
Hallo,
hab gerade den Thread gefunden und durchstöbert. So ein
Ein-Platinen-Webserver ist genau das, wonach ich suche.
Euch fehlt es an Anwendungen? Gibt's doch nicht:o) Ich suche nach
sowas, um Luftfeuchte und Temperatur abzufragen. Und für ein AQ oder
Terrarium sind die käuflichen Lösungen überdimensioniert, sowohl von
den Abmessungen her als auch vom Preis. Ich möchte aber nicht den PC
immer laufen lassen, um diese Daten zu erfassen. Und Flatrate ist
sowieso vorhanden. Also wäre ein Ethernet Sensor ideal.
Ich würde den Ein-Platinen-Webserver ein einfaches XML-Dokument
bereitstellen lassen, und dieses von einer im Internet bereitgestellten
php Seite auslesen/einbinden.
Für diejenigen unter uns, die noch kein AQ oder Terrarium haben:
Luftfeuchte ist auch im Wohnraum nicht uninteressant.
Ein scheinbar recht brauchbarer (und daher auch nicht ganz billiger)
Sensor wäre z.B.
http://www.sensirion.com/en/sensors/humidity/sensors_devices/sensorSHT71.htm
Wenn jemand einen anderen Sensor kennt, bitte hier kurz vermerken.
Ansonsten muss ich jetzt nur noch Zeit finden, mich mit dem AVR erstmal
auseinander zu setzen, die Bauteile aufzutreiben und die Platine
aufzubauen... das wird sicher einige Wochen dauern. Ich hätte also
nichts dagegen, wenn jemand ebenfalls sowas brauchen kann und schon mal
das Sensorprotokoll implementiert:o)
Bis dahin,
Jochen
@Thorsten
ich denke nicht, denn so kompliziert ist das Projekt mit dem M32 nicht.
Auch auf Lochraster kann das gut aussehen, wenn es darum geht. beim m128
sieht das natürlich anders aus...
hallo
ich haette da auch noch eine kleine anwendung..
Euch allen sagt sicher Instabus etwas oder??
was ist, wenn man nun hingeht und in (jeden) raum einen von diesen
webservern baut mit einer eigenen ip versieht und daraus lichtschalter,
steckdosen etc aufbaut oder sogar darueber den strom misst??
evtl laesst sich dieses projekt damit erweitern
die ip adresse koennte man dann ueber einen externen 8bit DIP Schalter
aufbauen..
@All
Hallo - ich will mich ja net aufdrängen, aber wer noch Netzwerkkarten
haben will kann sich gerne bei mir melden :-)
Das sind die Karten, welche noch vor ein paar Monaten bei ebay zu je 50
Stk. zu ersteigern waren - also RTL8019AS Chip auf einer ISA-Karte.
Volker
Also ich habe damals 39 Euro für 50 Stk. bezahlt.
Macht also, wenn ich mich jetzt nicht verrechnet habe, 78 Cent/Stk.
(Kommt natürlich eventuell für dich noch das Porto dazu :-)
Volker
Hi All,
nachdem ich den ganzen thread durch habe meine Frage:
kann man den Aufbau auch verwenden um z.B. ein WOL Signal
"abzufangen" und als Schaltvorgang umzusetzen? Ist die MAC Adresse im
Realtec chip gespeichert und auslesbar?
Gruß
Hallo zusammen,
ich habe da mal 'ne Frage:
Sehe ich das richtig, dass man ausser einem Mega32 bzw. Mega128 einem
Quarz und der Netzwerkkarte (evtl. noch nen MAX232 zur Programmierung)
nichts weiter braucht, um das Teil ans laufen zu bekommen?
Wenn nicht, was muss ausser den o.g. Teilen noch auf seiten des "Atmel
Teils" der Schaltung vorhanden sein? Konnte das leider bislang nicht so
richtig ergründen.
Vielen Dank für alle Antworten und vorab schon mal große Anerkennung
für ein solch geniales Projekt.
MfG
Frank
Hallo zusammen!
Ulrich erwähnte am 29.05., dass er den Webserver mit ner 3com Karte mit
3c509 TX Chipsatz getestet hätte, am 25.09. schrieb er, dass es mit 3com
Karten überhaupt nicht funktionieren würde. Was stimmt denn nun?
Ich könnte zur Zeit Karten mit 3c509B und 3c509TP Chipsatz bekommen.
Soll ich lieber die Finger von ihnen lassen?
Besten Dank für eure Hilfe!
Volker
Hallo zusammen,
nachdem die 3com Karten nun ja nicht wirklich funktionieren :-) suche
ich nach Karten mit z.B. RTL8019 Chipsatz. Hat zufällig jemand von euch
eine oder auch gerne mehrere abzugeben?
Meldet euch doch einfach mal!
Viele Grüsse
Volker
Bei Pollin gibt es gerade welche mit einem RTL8029AS, keine Ahnung ob
der auch funktioniert. Kosten EUR 2,50, die Best.-Nr. ist 700108.
Ansonsten gibts die Karten eigentlich ständig bei eBay.
Gruß
Thorsten
Okidoki,
das klingt logisch... könntest Du mal bitte ne aktuelle Liste der
getesteten Chipsätze posten? Danke!
Jetzt fehlt eigentlich nur noch ne WLAN Lösung :-)
Viele Grüsse
Volker
Hallo,
Eigentlich alle NE2000 kompatible Netzwerk-Karten.
Am besten Realtek 8019, war gerade bei EBay da gibt es schöne kompakte
Netzwerkmodule.
Mfg Ulrich
Hi Leute,
also auch erstmal Lob von mir an dieses schöne Projekt!
Ich hab jedoch ein paar Probleme:
Ich betreibe das ganze auf nem Atmega32 mit 16 MHz externen Oszillator
(fusebits korrekt gesetzt). Als Karte hab ich ne RTL8019as.
Wenn ich den Server starte, gibt er mir Init Ready mit dem Wert 34 aus,
Verbindungslämpchen an der Slotblende und am hub geht an, nur dass von
dann an nichts mehr passiert.
Das Timerinterrupt kommt regelmässig aber nicht das int0. Wenn ich dort
das Kabel rausziehe und wieder reinstecke, dann kommt int0 (funktioniert
also).
Sieht für mich also so aus, als ob die Netzwerkkarte nichts sagt :(.
Ich hab sie auf IRQ3 konfiguriert (und wenn ich mitm Multimeter die
pins messe, liegt auf dem Pin von IRQ3 auch ein low-level, bei allen
anderen ein high).
Kann mir jemand helfen, wie ich der Netzwerkkarte mal ein paar
informationen entlocken kann und woran das liegen könnte, dass die
nichts sagt?
Er lief übrigens auch schonmal kurzzeitig aber seit dem nicht mehr :(
juti, hoffe jemand kann mir helfen!
Stefan
hi,
@uli: bei einem tcp/ip packet sind ja die lezten bytes des packtes
nutzdaten. wenn ich mir aber mal den buffer fuer die daten bis
packetlen ausgebenlasse bekomme ich am end eimme rnoch ein paar bytes
extra. werden die vom rtl angehaengt? und fuer was sind die gut? kann
man ihre laenge irgendwie bestimmen?
Hallo,
mein Versuch den Webserver mit einem ATMega8
nach Simon Lehmayr und der Datei mega8test.zip
aufzubauen hat nicht funktioniert.
Ich bekomme keine Ausgabe auf die serielle Schnittstelle.
Auch im Fehlerfalle (wohl auch ohne Netzwerkkarte),
sollte dort was ankommen., oder ???
Ich habe daher einen Mega8 mit einer kurzen Textausgabe programmiert
und in die Schaltung eingesetzt (ebenfalls int. Osc. mit 8 MHz).
Das funktioniert einwandfrei.
Meine Verdrahtung ist wie folgt und mehrfach überprüft,
GND und +5V an den Pins der RTL-Karte laut Ulrich Radig:
- Mega8 PORTB 0..7 --> ISA-BUS D0..D7
- Mega8 PORTC 0..4 --> ISA-BUS A0..A4
- Mega8 PORTD 2 --> ISA-BUS IRQ9 ???? richtig ????
- Mega8 PORTD 5 --> ISA-BUS /IOR
- Mega8 PORTD 6 --> ISA-BUS /IOW
- Mega8 PORTD 7 --> ISA-BUS RES DRV
Fusebits:
cksel 3..0 -> 0100
SUT 1..0 -> 10
Auf meinem System ist kein GCC oder ähnlich installiert,
darum habe die in obigem Zip-File enthaltene .hex Datei
in den ATMEL gebrannt.
Ist die Datei ok ??
Ein Widerspruch ist in der main.c wo folgendes steht,
#define sysclk 16000000 //Quarz Frequenz in Hz
da müsste es doch 8000000 (für 8 MHz) heißen.
Wenn dies der Fehler wäre, sollten trotzdem verstümmelte
Zeichen erscheinen.
Ich danke schonmal für Hinweise
cdg
@Jens123
Wenn das an mich gerichtet ist, erstmal danke, aber
***!!!! ATMEL MEGA8 !!!!***
PB6+7 = XTAL1+2 sind belegt (siehe oben).
Dabei halte ich mich an die Beschreibung von Simon Lehmayr
also !! interner Oszillator 8MHz !!.
Hilfe von jemandem der das mit dem Mega8 laufen hat
wäre wohl sinnvoll.
MfG cdg
Der Atmega8 hat meines wissens intern nur 1MHz. Die 8 steht für den
Speicher, nämlich 8kB.
Soweit ich gehört habe ist der interne Oszillator auch sehr instabil
und das UART läuft damit nur auf 2400 BAUD o.ä. (müsste im Source
angepasst werden).
Du solltest also auf jeden Fall einen externen Oszillator anschließen,
mit 8 oder 16Mhz.
Gruß, Jon
@Jon und andere
Bitte versteht dies nicht falsch,
aber diese Antworten nützen mir nichts.
Ich wende mich an die, die den Webserver
mit dem mega8 laufen haben
wie z.B. der von mir oben angeführte Simon Lehmayr.
Angaben mit ... soweit ich weiß
oder interner Osc. ist instabil
oder intern nur 1MHz.
Die 8 steht für den Speicher, nämlich 8kB.
das UART läuft damit nur auf 2400 BAUD
sind schlichtweg falsch.
Aber wie schon gesagt, bitte nicht falsch verstehen
ich möchte den Webserver schon laufen haben.
Danke cdg
entschuldige die Fehlangabe... hatte übersehen dass man den internen
Takt verändern kann, dennoch steht die 8 für den internen Flash
Speicher.
Wieauchimmer, noch ein unerwünschter Tipp von einem Atmega32 Benutzer:
Die Funktion des UART (nämlich die Baudrate) hängt direkt von der
definierten Clock ab. (siehe uart.c)
Dass Deine serielle Schnittstelle nicht funktioniert könnte
(entschuldige die Unsicherheit) also durchaus daran liegen.
@Jon
Danke für deine Geduld.
Ich habe mir (siehe oben) einen mega8 mit einer Textausgabe
programmiert, ohne Quarz, internen Osc. mit 8MHz eingeschaltet
und Baudrate auf 9600 Baud eingestellt.
Mit Hyperterminal ist das auch ok.
Auch andere Projekte mit dem mega8 und internem Osc. habe ich laufen.
Da ja offensichlich Simon Lehmayr den mega8 Webserver laufen hat,
hier aber z.Z. nicht schreibt suche ich andere Nachbauer des
mega8-Webserver.
Ok, ich kann auf einen mega32 oder mega128 ausweichen,
habe aber noch das Übersetzungsproblem (keinen Compiler installiert).
Auch das war ein Grund für den mega8 (.hex-File war hier im Forum)
Mich würde trotzdem interessieren, warum es nicht läuft
bzw. warum nichts auf der ser. Schnittstelle erscheint.
Freundliche Grüße
cdg
Sorry, aber das hört sich leider ein wenig "wartend" an.
Versuche doch mal mit einem eigenen hex File eine Serielle Verbindung
aufzubauen. Wenn Du schreibst du hast nichteinmal nen compiler
installiert, dann sieht das ziemlich bequem aus.
Darüber kannst du dir dann sicher sein, das deine serielle Verdrahtung
in Ordnung ist und der Fehler nirgends in anderen Funktionen im
Programm liegen kann.
henning
Naja.. er hat ja schon ein serielles Testprogramm zum Laufen gebracht.
Nur die Atmega8 Sourcen stehen halt auf 16Mhz, es wird also eine
Baudrate in abhängigkeit von 16Mhz gesetzt. Da kommmen am Ende dann
nicht mehr die gewünschten 9600 raus.
Ich denke er muss die Sourcen neu kompilieren (mit sysclk=8000000) oder
einen 16Mhz Oszillator anschließen.
hatte das ganze so verstanden, das er das auf einem anderen system am
laufen hat. nicht aber auf dem, mit dem er die Netzwerkkarte ansprechen
will.
das währe natürlich relativ nutzlos.
Sorry für die späte Antwort zum Thema mega8 Server: Compiliert mit
WinAVR. Keine serielle Schnittstelle im Programm (der Code dafür hat
zuviel Platz benötigt, daher habe ich ihn entfernt). Die zweite
gepostete Version enthält richtiges #define SYSCLK (wird aber nicht
benötigt, weil keine Baudrate)
Mein mega8 Server hat nur an einem Switch richtig funktioniert, an
einem Hub wurde er mit IP-Paketen überlastet :-)
>Mein mega8 Server hat nur an einem Switch richtig funktioniert, an>einem Hub wurde er mit IP-Paketen überlastet :-)
Das habe ich mit meinem Mega32 Server auch befürchtet, aber dann nicht
weiter verfolgt.
@Simon, Henning, Jon
Danke für die Hilfe, nun wird es klarer.
Laut Simon:
>Keine serielle Schnittstelle im Programm (der Code dafür hat>zuviel Platz benötigt, daher habe ich ihn entfernt)>Mein mega8 Server hat nur an einem Switch richtig funktioniert, an>einem Hub wurde er mit IP-Paketen überlastet :-)
Ok, ein Switch ist vorhanden.
zu Henning:
>Versuche doch mal mit einem eigenen hex File eine Serielle Verbindung>aufzubauen.
Wie oben geschrieben, hatte ich das gemacht und es funktionierte !!
Der Fehler bzw. warum keine Ausgabe ist ja nun klar.
>Wenn Du schreibst du hast nichteinmal nen compiler>installiert, dann sieht das ziemlich bequem aus.
Wenn bei einer Anleitung ein .hex File ist (alles in der .zip) und ich
hier in mehreren Beiträgen lese, neuere Compiler kommen mit den Sourcen
nicht klar, warum soll ich dann einen Compiler installieren
der anschließend nicht das gewünschte Ergebnis bringt.
Also erstmal Hexfile brennen und wenn blutgeleckt, dann Compiler
und Sourcen anpassen usw.
Werde nun aber doch zu einem größeren ATMEGA greifen,
zumal dort auch Erweiterungen in Arbeit sind und dort genug Platz ist.
Vielen Dank
cdg
Hallo
habe den Webserver mit einem Mega32 aufgebaut.
Takt 14,318MHz, Softwareversion 1.33
Dabei sind mir ein paar Probleme aufgefallen:
1. Auf meinem IE6 wird die Beispielseite nicht richtig angezeigt. Nur
die Hintergrundfarbe erscheint. Schaue ich mir den Quelltext an fehlt
ein Teil (das Ende) der Datei. Breche ich die Übertragung ab erscheint
die Seite, allerdings ohne den Counter, der steht auch nicht im
Quelltext. Ich dachte erst der Controller überträgt nicht alles, habe
die MTU-SIZE erhöht und bekam entsprechend mehr Zeichen !
Dann hab ichs mit Firefox probiert und alles ist OK. Was ist das denn
nun, mal wieder Microdoof oder was?
2. Es wird immmer nur der HTTP_OK1 zurückgegeben, scheint aber die
Browser nicht zu stören...
3. 'Card Init: 34' wird auch angezeigt, wenn gar keine Netzwerkkarte
angeschlossen ist! Erst als ich Pullup-Widerstände an den Datenbus
gehängt habe, kam 255.
4. Die IOWR-Leitung liegt meistens auf 0. Wie kommt das, die wird doch
in ReadRTL und WriteRTL gleich nach dem Datentransfer wieder auf 1
gesetzt?
Versuchsweise hab ich auch mal die alte Version 1.08 ausprobiert. Dabei
ist mir Effekt 1 und 4 nicht aufgefallen. Bei 1. liegts wohl an der
kürzeren Seite.
Noch ne Frage:
Eigentlich könnte ich so was wie einen minimal-Web*Browser* gebrauchen.
Wozu? Ich möchte einfach ein PHP-Script auf einem anderen Server
aufrufen und ihm dabei einige Werte übergeben, die er in einer
Datenbank ablegen soll und dann grafisch aufbereitet im lokalen oder
auch globalen Netz anbietet.
Die Werte soll der AVR regelmässig ermitteln.
Lässt sich sowas mit den vorhandenen Routinen realisieren?
Vielen Dank
Uwe
Hallo Martin,
der Server hängt nicht, mit Telnet kann ich drauf zugreifen.
IE abbrechen, Firefox nehmen, Seite aufrufen, geht...
Stimmt nicht ganz: geht erst beim zweiten oder dritten Aufruf.
Vorher kommen nur Text und Bilder, aber kein Counter und der Browser
meldet ewig 'Laden...'.
Rufe ich mit Firefox den Server in zwei Tabs auf, zeigen beide nach
kurzer Zeit den beschriebenen Effekt (sollten ja nach 3s neu geladen
werden).
Ist der Server damit schon überlastet?
PC und Server sind über einen D-Link Router/Switch verbunden, falls das
eine Rolle spielt.
Gruß
Uwe
Hi,
das mit dem Card init kommt daher, das bevor die 34 gelesn wird auch
eine 34 auf den bus geschrieben wird und daher einfach der selbe wert
zureuck kommt, wenn keine karte ngeschlossen ist.
Hallo
das mit dem CardInit hab ich mir auch so vorgestellt, deshalb helfen
hier auch die Pullups.
Inzwischen habe ich festgestellt, das das ständige Neuladen der Seite
auch mit Firefox nicht dauerhaft geht, wenn man das System ganz in Ruhe
lässt. Irgendwann hängt es. Die Ausgabe über RS232 sieht übrigens
vernünftig aus und nach einer kurzen Pause kann man auch wieder auf der
Server zugreifen.
Mir scheint da gehen die Pakete unterwegs verloren, lade mir gerade mal
ETHEREAL...
Uwe
Hallo,
Welche Version benutzt ihr??
Dieses Problem hatte ich bei meiner alten Versionen auch mit der Neuen
sollte dieses Problem nicht mehr auftauchen war ein Problem in
checksum.c im Anhang nochmal die neue.
Mfg Ulrich
Hallo Ulrich
ich verwende V1.33 von deiner Homepage, da ist diese Version von
checksum.c drin.
Mit Ethereal komme ich noch nicht ganz klar, versuche noch die
Bedeutung der Werte hinter seq= und ack= zu verstehen.
Was ich sagen kann: die erste Hälfte von Index.htm kommt an, wird
quittiert und dann kommt unter Firefox oft, mit IE6 nie der zweite
Teil. Bei den Bildern gibt es keine Probleme, da kommen immer alle
Teile. Da aber das Ende vom HTML-Text fehlt, zeigt IE nichts an,
Firefox gibt sich wohl auch mit Bruchstücken zufrieden. Der wartet aber
ewig auf den Rest und führt das Reload nicht aus.
Uwe
Hallo,
den Teil muss ich ja deaktivieren, sonst wirft er mir auf RS232 immer
'keine MMC/SD-Karte gefunden' oder so ähnlich aus.
Ich vermute, dass es mit dem genauen Timing der Zugriffe zusammenhängt,
eventuell liegt es auch am Router. Habe gerade kein gekreuztes
Netzwerkkabel zur Hand, sonst würde ich mal eine direkte Verbindung
versuchen. Vielleicht morgen...
Erstmal werde ich mich mit Ethereal (echt interessantes Programm, wenn
man es versteht) und den diversen Protokollen beschäftigen.
Uwe
Hab mal mein bastelzimmer nach ner alten isa netzwerkkarte durchsucht
und nix gefunden sniff
Das projekt find ich genial und will mir das auch nachbasteln !
möchte das dann auch noch mit nem vs1001k erweitern und dann als
streaming server verwenden können,
evtl. nen tv ausgang um die files auch schön anzuzeigen wär dann auch
ganz witzig :-)
mal schauen
hätte noch jemand eine (oder auch mehr) alte netzwerkkarte rumfliegen
für mich?
Hallo @Uwe,
Ohne MMC/SD - Karte würde ich mal die Version 1.24 probieren! Ich
glaube nicht das es am Router liegt. Hast du die Orginalseite
verändert? Oder lauft es mit deiner Seite nicht.
Mfg Ulrich
Ich habe deine V1.33 probiert. O.K. ich hatte [b]keine[/b]
MMC/SD-Karte...
Aber der Server reagierte sehr interessant darauf:
er brachte erstmal dreimal MMC/SD-Karte nicht gefunden und danach die
Meldung, das er eine gefunden hätte. Ja, wie jetzt? Das hat er bei mir
wiederholt gemacht. Sehr selten, dass er bei der Meldung "Keine
MMC/SD-Karte gefunden" blieb.
Der Bildaufbau der Webseite wahr natürlich (er suchte ja immer wieder
die MMC/SD...) nicht möglich. Die V1.24 hat sofort geklappt.
Danke Ulrich!
@Uli
Warum hast du eigentlich das Ein- und Ausschalten von Ports wieder
herausgenommen? Weiter oben im Thread, waren ja Versionen, in denen der
PB0 geschaltet wurde. Es würde mich sehr interessieren. Bin leider in
HTML ein frisch geschlüpftes Küken...
Hast du da noch ein Beispiel, wie das geht?
Gruß Gerd G.
Hi,
falls jemand ein Programm zum beschreiben des EEPROM sucht kann das
unter ftp://152.104.125.40/cn/nic/rtl8019as/rset-8019(330).zip finden
Gruß Tobias
Uwe Nagel schrieb am 23.01.2005 11:56 :
> Eigentlich könnte ich so was wie einen minimal-Web*Browser*> gebrauchen. Wozu? Ich möchte einfach ein PHP-Script auf> einem anderen Server aufrufen und ihm dabei einige Werte> übergeben, die er in einer Datenbank ablegen soll und> dann grafisch aufbereitet im lokalen oder auch globalen> Netz anbietet.
Du möchtest, dass der AVR zyklisch eine URL aufruft, und dabei
Parameter an dein php script übergibt? Warum nicht anders herum? Ich
hab das weiter oben schon mal angedeutet:
http://www.mikrocontroller.net/forum/read-4-87092.html#131470
Der AVR stellt dann gar kein html bereit, sondern nur eine einfache
(aber problemlos erweiterbare) XML-Datei. Die kann das php script
zyklisch (via cron job oder auch bei jedem seitenaufruf) abrufen und
die Daten weiterverarbeiten. Auf diese Weise könntest du auch jedem
Besucher die brandaktuellen Daten präsentieren. Und die Parameter wären
nicht auf URL Länge begrenzt. Sag Bescheid wenn du es so oder so
umgesetzt hast.
Gruß,
Jochen
@Uli
ok, werde mir die V1.24 runterladen und heute abend ausprobieren. Ich
habe deine Originalseite verwendet und nur die darin enthaltene IP auf
meine Verhältnise angepasst.
Wie schon gesagt, es fehlt infach der zweite teil der HTML-Seite.
Ethereal sieht dieses Datenpaket zumindest auf der PC-Seite des Switchs
nicht, deshalb möchte ich eine Direktverbindung probieren.
@Jochen
auch eine Idee! Ich werde mir beide Versionen überlegen.
Uwe
Hm irgendwie bekomm ich jezt keine leds mehr am switch zum leuchten. Die
led an der karte leuchtet immer, egal ob ein kabekl dran ist oder
nicht. Die karte gibt auch brav 34 zurueck.
In dem konfig programm habe ich als medium 10 base-t no link layer
detection angemacht.
weis jemand rat?
Gruß Tobias
@Tobias
meldet sich die Karte überhaupt?
34 ist kein Beweis, das zeigte mein Aufbau sogar ohne Karte.
Erst Pullup-Widerstände an PortA habe ohne Karte 255 gebracht.
Häng doch mal einen Pullup an PortA Bit 7, dann kommt ohne Karte
128+34=162.
Uwe
hi,
das mit den 34 stimmt schon., hab den sorurce so veraendert, dass jezt
vorher noch 255 ausgegeben wird damit spaeter nicht wieder 34
eingelesen wird.
Hallo,
Natürlich benutze ich die Version 1.33! Est ist auch richtig das erst
mit Pullup Widerständen die 34 Aussgagefähig ist. Das Gleiche gilt für
die MMC/SD Karte! Wer nun jetzt den Source Code 1.33 ohne mmc benutzt
muß use_mmc auf 0 setzen.
mfg uli
Hi,
wenn ich pin 65 auf high lege funktioniert alles(mit eingesetztem
eeprom) obwohl ich das eeprom im pc konfiguriert hatte. Hat dafuer
jemand eine erklaerung?
Moinsen...
Ich hab mir das ganze grade mal nachgebaut... Netzwerkkarte is ne alte
DM9008F (NE2000 kompatibel) hab die dann auf IO300 eingestellt und
IRQ10 (9 wollte er net) hab dann das kabel zum INT0 aber auch an IRQ10
gelötet und net an IRQ9... ;)
Als Basis dient mir im mom das rn-control1.4, und nun kommt mein
Problem... Es funzt alles klasse - bis auf die tatsache, das ich keine
antwort beim ping oder beim webseiten aufruf bekomme - hab v1.33 von
Uli grade in benutzung... ausgabe übers Terminal ist:
Init Network Card: ......... Init Ready!
Card Init: 34
My Mac: 1e.a.2b.2b.2d.4d
My IP : 192.168.1.101
hört sich also gut an und 192.168.1.101 is auch in meinem Netzwerk
richtig und auch noch nicht vergeben...
Deine mac adresse ist an der zweiten stelle nicht 2stellig. ändere das
doch einfach mal.
bekommst du am server denn überhaupt daten, soll heissen wird die
entsprechende empfangsroutine den aufgerufen?
Ups - hatte die einfach so gelassen, wie sie eh im source stand...
Habs nu geändert, jetzt kommt:
Init Network Card: ......... Init Ready!
Card Init: 34
My Mac: 1e.1f.2b.2c.2d.4d
My IP : 192.168.1.101
aber ping geht noch immer nicht - und mehr sagt er auch im terminal
net...
so, das mit der empfangroutine hatte ich eben glatt überlesen - ups...
%)
Ähm, nein... kommt nicht... habe jetzt in der interrupt4.c in zeile 36
das printf("interrupt\n"); reingenommen - und es sagt nie etwas von
einem interrupt im terminal... Heißt also, mein interrupt funzt net -
frage ist jetzt nur noch warum nicht? Windows98 meinte ja, ich hätte
IRQ10 und von da geht jetzt ja auch die Strippe nach Portd.2 (int0 am
m32)...
@Michael
was Windows meint muss nicht unbedingt stimmen...
Probier mal die anderen Interrupt-Leitungen (insbesondere 9) aus.
Ich wollte auf meiner RTL8019 Karte unter DOS 9 einstellen, ging aber
nicht, da 9 schon irgendwas anderes belegt hatte. Hab ich 5
eingestellt, am Controller kam trotzdem 9...
Hat wohl was mit Plug and Pray zu tun.
Uwe
Also ich hab die Leitung von IRQ10 jetzt mal auf alle anderen verlegt
und geguckt... aber es ändert sich net wirklich was... auf manchen
bekomme ich endlos viele Interupts auf anderen garkeine oder er sagt
einfach nur "Overrun" aber das irgendwie zufällig... XD
Was ich sehr praktisch fänd, währe, wenn ich einfach den Eeprom
abmachen könnte - nur leider werd ich aus dem Datenblatt nicht schlau,
was dann standard is, wenn der net da is... weil der Eeprom is nur in
nen sockel gesteckt und von daher schön easy raus und reinsteckbar...
Aber vielleicht kann ja jemand von euch mir mit dem Datenblatt
weiterhelfen:
http://modding.mr-action.de/projects/porsche_cayenne_s/DM9008F.pdf
Hallo,
ich beschäftige mich in letzter Zeit intensiv mit dem Thema dieses
Threads und hänge vor allem in Sachen Ne2000 Programmierung den
"Vorgaben" von Ulrich hinterher.
Kann jemand eine gute Referenz empfehlen, wo die Ne2000 (oder AS8019)
spezifiziert ist? Ich habe auf die "Schnelle" nichts sinnvolles
finden können.
Gruß, Jon
das datenblatt, welches uli empfohlen hat, ist das einzige an specs was
ich gefunden hab.
ich hab mich dann auf den linux kernel treiber verlassen:
/usr/src/linux/drivers/net/ne.c
oder
/usr/src/linux/drivers/net/8390.*
nett anotiert und ein paar tricks kann man sich da auch abschauen
ansonsten empfehle ich noch:
- interrupts aus und karte regelmäßig auf neue packete abchecken
- mac auf 00:00:xx:xx:xx:xx setzen. im oberen bereich liegen irgendwo
die multicast adressen. das kann probleme mit schlauen switches/routern
geben.
@Michael R.:
also bei gezogenem EEPROM hat der RTL8019AS die Defaulteinstellungen:
-IRQ enable
-IRQ 2/9 (bedeutet INT0 am Chip, also PIN 4)
-I/O Baseadresse 0x300
Steht eigentlich alles im Datenblatt.
Zum Debuggen ist es sicher nützlich auch die TX und RX - LED´s
anzuschließen, damit man sieht ob physikalisch überhaupt irgendwas im
NIC ankommt.
Gruß Andreas
Hallo @hebel123,
Mir ist es schon passiert das bei gezogenen EEprom die Werte laut
Datenbatt nicht stimmten, wieso? Weil ein Pullup oder Pulldown
Widerstand an der Datenleitung dran war :-)
Aber sonst stimmt das Datenblatt ohne EEprom haben Realtekkarten mit
rtl8019 IRQ9 IO 300 und MAC 00:00:00:00:00:00
Allerdings sollte man mit einer eigenen MAC aufpassen! Am besten die
alte von der Netzwerkkarte aufschreiben.
Ich hatte als mac mein Nachnamen benutzt (hexcodiert) und dieser
funktionierte nicht, obwohl die Werte im erlaubten bereich waren.
Ausserdem sollte die MAC im Netzwerk nicht doppelt vergeben sein, das
sollte aber ziemlich schwer sein wer eine Zufallszahl benutzt.
Ansonsten empfehle ich demjenigen Lotto zu spielen. Achso das Internet
arbeitet mit IP Adressen und nicht mit MAC Adressen nur eine anmerkung
zum Schluß.
Mfg Ulrich
Hi Uli,
aber werden die IP-Adressen nicht nur benutzt um via ARP die
MAC-Adresse rauszubekommen um anschließend über diese eine Verbindung
herzustellen?
@Guido:
Genau genommen stehen im EEPROM sogar die kompletten Config 1-4
Register, die MAC-Adresse, die Product-ID, die Vendor-ID, Seriennummer
sowie ein Haufen Plug and Pray - Info´s...
Gruß Andreas
Hi,
Uli hab einen fehler in Read_Ethernet_Frame() in rtl8019.c gefunden.
Ziemlich gegen ende der funktion heist es
buffer[tmp1 + 1] = 0;
damit schreibst du aber hinter den buffer. Bei großen packeten wird
dann bufferlen ueberschrieben und der mc hanegt sich auf.
es muss heisen
buffer[tmp1] = 0;
Wozu diese null ueberhaupt?
Gruß Tobias
Habe mich nach zwei Wochen wieder mal mit diesem schönen Programm
beschäftigt. In der Zwischenzeit eine neue Netzwerkarte besorgt aber
immer noch Rätsel.
Das Originalprogramm in Version 1.34 läuft jetzt bei mir auf einem
mega32! Liegt aber nicht an der neuen Version, die alten gehen auch,
sondern daran das ich den Quarztakt reduziert habe!
Mit verschiedenen Quarzen zwischen 4 und 12 MHz läuft das Programm
stabil, mit 14.318 MHz nicht.
Jetzt habe ich in rtl8019.c überall, wo zwei nop's stehen 5 nop's
hingeschrieben, nun scheint es auch mit 14.318MHz zu laufen, jedoch
nicht mit 16MHz, da halfen auch zwei weitere nop's nicht.
Desweiteren verbesserte sich die Stabilität (bei 14MHz und zwei
nop's), wenn ich in die interrupt4.c ganz vorne ein
printf("interrupt %d",ReadRTL(ISR));
einfüge (auch ohne den ReadRTL bringt es was), also hier ein wenig Zeit
verschwende.
Hier zeigt sich auch, dass 'interrupt 0' angezeigt wird, also ein
Interrupt ausgelöst wird, aber der RTL keine Ursache nennt!
Dieser Effekt verschwindet auch nicht ganz, wenn man den Interrupt nur
auf steigender Flanke auslöst, also in main.h schreibt:
#if defined (_AVR_ATmega32_)
#define Networkcard_INT_Set() MCUCR=0x03;
#endif
Warum eigentlich auf beiden Flanken? Das erzeugt doch nur eine
zusätzlichen Interrupt nach den eigentlichen, nämlich wenn der RTL
seine Interruptleitung wieder auf Null setzt. Letzteres führt
unweigerlich zur 'interrupt 0'-Meldung...
Kann es sein, dass der RTL hin und wieder einen Waitstate in seine
Zugriffe einlegen möchte?
Uwe
Im Rahmen eines Uni-Projekts haben wir einen TCP/IP Stack implementiert,
bzw. sind noch dabei, und werden das in Kürze hier veröffentlichen (Wenn
die Dokumentation vervollständigt ist). Lediglich auf der
Hardwareschicht, die wir quasi von Ulrich abgekupfert haben, hängts
manchmal ein wenig, auch weil wir noch keine ordentliche Dokumentation
dazu gefunden haben und keine Zeit hatten das detailliert zu
analysieren. (Hat da jemand Ahnung?)
Es muss also nicht unbedingt eine Initiative zum Neuschreiben gegründet
werden, da gibts evt. schon was :-) Wiegesagt... in Kürze mehr dazu an
dieser Stelle.
Ich wäre für jede Info dankbar, bzw. würde mich gerne beteiligen. Habe
da noch Probleme, alle Einzelheiten zu verstehen. Aber Rom wurde auch
nicht an einem Tage erschaffen...
Hallo allerseits,
ich verfolge schon seit längerem sehr interessiert diesen Thread. Ich
habe mir anhand des ulrichschen Codes, Ethernut und easyWEB und anderen
Quellen meinen eigenen TCP/IP-Stack zusammengebaut.
Beim näheren Studieren des TCP/IP-Standard´s bin ich nun auf einige
Ungereimtheiten gestoßen. Bei TCP/IP-Verbindungen geht es ja um eine
gesicherte Verbindung mit Rückkanal, Bestätigung etc.
Dazu ist:
1.Verbindungsaufbau
2.Übertragung
3.Verbindungsabbau
vorgesehen.
Das Problem ist, dass das irgendwie jeder anders zu machen scheint.
Es fängt schon bei der Definition des Socket-Status an (Socket_Close
(0), Socket_Open(1) etc.)
Ich habe im Netz mehrere verschiedene Kombinationen von Zahlenwerten
und Statusdefinitionen gefunden, was früher oder später schief gehen
muss.
Laut RFC793 scheint das Folgende korrekt zu sein:
// TCP Status
#define SOCKSTAT_CLOSED 0 // Verbindung getrennt
#define SOCKSTAT_LISTEN 1 // Warten auf TCP-Verbindungssetup
#define SOCKSTAT_SETSYNC 2 // Veränderung der Verbindung gesendet
#define SOCKSTAT_GETSYNC 3 // Veränderung der Verbindung empfangen
#define SOCKSTAT_ESTABLISHED 4 // Verbindung besteht
#define SOCKSTAT_CLOSEWAIT 5 // Auf Verbindungsabbau warten
#define SOCKSTAT_FINWAIT1 6 // Warten auf Abbruchbestätigung
#define SOCKSTAT_CLOSING 7 // Schließen der Verbindung
#define SOCKSTAT_LASTACK 8 // Letzte Bestätigung
#define SOCKSTAT_FINWAIT2 9 // Warten auf Abbruchbestätigung
#define SOCKSTAT_TIMEWAIT 10 // Warten
// TCP Flags
#define FIN_FLAG 0x01 // Datenübertragung wird beendet (finish)
#define SYN_FLAG 0x02 // Verbindung aufbauen (synchronize)
#define RST_FLAG 0x04 // Verbindung neu initialisieren (reset)
#define PSH_FLAG 0x08 // Datenübergabe an Anwendung (push)
#define ACK_FLAG 0x10 // Datenübertragung bestätigen (acknowledged)
Mir ist bei Ulrich´s Code aufgefallen, dass z.B. nie der Status
Socket_Established(4) erreicht wird und daher eigentlich nie eine
"richtige" TCP/IP-Verbindung besteht.
Beim Verbindungsabbau, also wenn der "Auflegende" das FIN-Flag setzt,
wird hier die Verbindung nicht geordnet abgebaut (FINWAIT1 und
FINWAIT2), sondern per Reset-Flag hart abgebrochen. Das sollte IMHO nur
bei einem schweren Fehler (keine Antwort über Timeout etc.) gemacht
werden. Sicherlich geht der TCP/IP-Standard damit relativ tolerant um,
so dass Daten ausgetauscht werden können aber so 100%ig korrekt scheint
mir das nicht zu sein. Was denkt Ihr darüber?
Gruß Andreas
Hallo Andreas,
es spielt keine Rolle, mit welchen Zahlenwerten die Socket-Status
kodiert werden. Diese Zahlen sind sowieso intern und werden zwischen
verschiedenen Stacks ja nicht ausgetauscht. Wichtig ist lediglich, dass
die TCP Flags identisch sind, aber das sollte nun wirklich überall so
sein.
Ulrichs Stack macht kein echtes TCP. Er macht gerademal genug, um TCP
Verbindungen im Idealfall (keine Retransmissions, etc.) laufen zu
lassen. Das ist auf dem AVR insofern praktikabel, weil dort so wenig
RAM vorhanden ist, aber es geht natürlich besser ;-)
Wir sollten aber einen separaten Thread aufmachen glaube ich, wenn wir
die Interna von TCP diskutieren wollen.
Hallo @hebel23,
Jon nimmt mir das Wort aus dem Mund ;-), natürlich geht es elleganter,
und mit mehr Speicher wäre es auch kein Problem! Ich überprüfe auch
nicht die Checksumme von eingehenden Datenpacketen! In meinen
SourceCode ist das min. von TCP/IP implementiert was für eine Webseite
benötigt wird, wie bei vielen anderen mini Webservern auch und diese
benötigen noch zusatz Speicher.
Aber das ändert sich bald :-) Was neues ist schon in der mache.
Mfg Ulrich
Hi,
hier eine einfach implementierung:
-----------------udp.h------------------------
#ifndef _UDP_H
#define _UDP_H
#define UDP_OFFSET 0x22
struct UDP_Header {
unsigned int UDP_SrcPort; //der Quellport für das Packet
unsigned int UDP_DestPort; //der Zielport für das Packet
unsigned int UDP_PacketLen; //Packetlänge incl. Header
unsigned int UDP_CheckSum;
};
#define UDP_SRCPORT UDP_OFFSET+0x00 //der Quellport für das
Packet
#define UDP_DESTPORT UDP_OFFSET+0x02 //der Zielport für das
Packet
#define UDP_PACKETLEN UDP_OFFSET+0x04//Packetlänge incl. Header
#define UDP_CHECKSUM UDP_OFFSET+0x06
#define UDP_DATASTART UDP_OFFSET+0x08
#define UDP_HEADERLEN 0x08
#endif
--------------------------udp.h----------------------------
----------------------------interrupt4.c-------------------
...
struct UDP_Header *udp;
udp = (struct UDP_Header *)&packet[UDP_OFFSET];
...
if(ip->IP_Proto == PROT_UDP){
if (udp->UDP_DestPort == SOCKET_BLINKENLIGHTS){
unsigned int temp;
temp = udp->UDP_PacketLen << 8;
temp |= udp->UDP_PacketLen>>8;
blinkendata(packet+UDP_DATASTART,temp-UDP_HEADERLEN);
}
...
----------------------------interrupt4.c-------------------
Du musst natuerlich in in socket.h ein define fuer deine port adresse
anlegen. ich uebergebe der funkzion fuer die daten einfach nur den
bereich fuer die rohdaten. du kannst natuerlich auch einen pointer auf
die udp struct uebergeben, dann koennen auch noch quelladresse etc.
ausgwertet werden. Ich empfange damit blinkenlights frames. du musst
aber aufpassen, dass eine udp packet in den buffer passen muss. sonst
wird es beschnitten
Gruß Tobias
Hallo
Vielen Dank Tobias für dein Beispiel. leider verstehe ich den Code
nicht wirklich da ich ein C Anfänger bin. Die udp.h habe ich denke ich
einigermaßen durchschaut aber die interrupt4.c verstehe ich ncith
wirklich. Wo genau muss ich deinen Code dort einfügen ? Und in welcher
Variablen befinden sich dann die empfangenen Daten ?
Vielen Dank schon mal
Roland
@Ulrich:
Alles klar. Naja ich hab das Ganze auf einem Mega128 laufen - Speicher
hab ich also genug. Vielleicht könnte man wirklich einen neuen Thread
aufmachen, für die Leute die an den Tiefen von TCP/IP interessiert
sind.
Was benutzt Du denn für Literatur?
Gruß Andreas
@Andreas & Co.
Ich habe mal einen neuen Thread aufgemacht, der sich evt. nicht nur um
Ulrichs Webserver dreht, sondern umfassendere Diskussionen bzgl.
Netzwerkprotokollen zulässt.
http://www.mikrocontroller.net/forum/read-4-157859.html#new
Gruß, Jon
Mir würde eine Festplatte an dem Webserver gefallen. Da mir das
technische Verständnis für die Erweiterung fehlt hoffe ich das jemand
genauso denkt und mehr von der Materie versteht.
Hat jemand Interesse den Webserver um eine Festplatte zu erweitern?
Hallo
nochmal eins vorneweg: Ich hab von C keine Ahnung also bitte nicht böse
sein. Ich habe mal versucht irgendwie mit Tobias Programm an die per UDP
übermittelten Daten zu kommen. Dazu habe ich gedacht dass er mit dem
Befehl "blinkendata(packet+UDP_DATASTART,temp-UDP_HEADERLEN);" die
UDP Daten in die Variable blinkendata schreibt. Jetzt scheint es mir
allerdings eher als wäre blinkendata eine Funktion ? Wie kann ich denn
die Daten in eine Variable bekommen oder in welcher sind sie schon drin
?
Vielen Dank schon mal für die hoffentlich anfängerkompatiblen
Antworten
Roland
Hallo Roland,
ja blinkendata ist eine funktion die die daten auswertet und die daten
komprimiert an mein blinkenled weiterleitet. Das hat dann aber nichts
mehr mit dem netzwerkteil zu tun und daher hab ich sie auch nicht
begefuegt.
Die daten des udp packets lassen sich im packet buffer wiederfinden.
Und zwar beginnen die eigendlichen nutzdaten bei packet[UDP_DATASTART]
und haben die laenge von temp-UDP_HEADERLEN wobei temp die zuvor
berechnete laenge des gesammten udp packets ist. das blinkendata() sich
nicht um die herkunft des packets und checksummen kuemmert hab ich
einfach einen zeiger auf das erste nutzdatan byte uebergeben und das
ist nunmal packet+UDP_DATASTART
Ich hoffe dir geholfen zu haben
Gruß Tobias
Hallo Tobias,
ja du hast mir schon mal weitergeholfen. Vielen Dank dafür schon mal.
Aber kannst du mir ein konkretes Beispiel geben wie ich die Daten in
eine Variable kriege ? Ich hab leider wirklich keine Ahnung von C und
bin daher für jede Hilfe dankbar.
Die Daten stehen bereits in einer "Variablen"; und zwar in einer, die
im Speicher an der Adresse "packet+UDP_DATASTART" liegt.
Du brauchst die Daten ja nicht noch ein mal kopieren, das wäre
Speicherverschwendung. Damit man nicht wild im Speicher herumliest,
muss man natürlich auch noch die Länge des Packets kennen.
Verständlich?
Hallo (OldBug),
hm ja also die Daten sind also im Speicher. Aber in keiner Variablen
mit der ich sie einfach abrufen kann. Um sie abzurufen muss ich sagen
an welcher Stelle sie sind und wie lang sie sind? Wenn ich die Daten
jetzt einfach mit dem UART weiterschicken will geht dass mit dem outp
Befehl ? Kann mir das jemand konkret kurz aufschreiben wie das geht ?
Vielen Dank schon mal wieder
Hallo Roland,
ich glaube das kann man so allgemein nicht vormachen. C ist zwar nicht
superkompliziert, hat aber schon viele Eigenheiten, die sich so
zwischen zwei Sätzen nicht wirklich erklären lassen. Falls Du im
Englischen gut bewandert bist, kann ich Dir folgendes Buch sehr ans
Herz legen. Wenn Du dort unter Arrays und Pointern nachschlägst wirst
Du vieles von dem, was hier schon geschrieben wurde, verstehen.
http://www.amazon.de/exec/obidos/ASIN/0131103628/qid=1109323054/ref=sr_8_xs_ap_i1_xgl/302-6235070-0919213
Viele Grüße,
Jon
Hallo,
wieso kann man das nicht so allgemein machen ? Ich bin überzeugter
Basic Programmierer und wir machen so was so :
Print (UDPDaten)
Ich kann irgendwie nicht glauben dass es in C so ein großes Problem ist
eine "Variable" (was das in C euch auch immer heißt) mit dem UART zu
senden. Kann mir niemand kurz die Zeile hinschreiben, wie das geht,
dann seid ihr mich auch los, es sei denn es ist wirklich nicht so
einfach möglich.
Gruß
Roland
Natürlich ist es möglich per
printf("Test");
eine Nachricht über das UART zu senden. Das setzt aber voraus, dass Du
einen String in der Hand hast. Das eingehende Paket ist aber ein Array
von Charactern. Da muss man einfach die Datentypen von C verstehen. Ein
Character Array in C ist potentiell auch als String zu verstehen, wenn
es durch ein 0-Character abgeschlossen wird. Soviel zur Vorrede.
Die Daten stehen im Speicher in der Variable packet, die ein Character
Array darstellt. Über packet[UDP_DATASTART] gelangst Du an die Stelle
im Array, an dem die von Dir gesuchten Daten stehen. Wenn Du an das
Ende der Daten einen 0-Character setzt, hasst Du einen String in der
Hand, den Du ausgeben kannst.
packet[UDP_DATASTART+temp-UDP_HEADERLEN+1]='\0';
printf("%s",&(packet[UDP_DATASTART]));
Aber wiegesagt. Das Speicher- und Variablenkonzept von C unterscheidet
sich doch deutlich von Sprachen wie Basic oder Pascal. Man kann sehr
effizient auf dem Speicher operieren, ohne ihn durch unnötige Variablen
zu verschwenden, was gerade bei AVR Programmierung sehr vorteilhaft
ist.
Das mit dem Buch war vorhin nicht schnippig gemeint. Ich habe daraus
sehr viel gelernt/nachgeschlagen und habs gern weiterempfohlen. Was
hilft Dir der Beispielcode von oben (der vielleicht sogar fehlerhaft
ist, ich habs nicht getestet), wenn die Zusammenhänge nicht klar sind?
:-)
@Tobias
Die Funktion mit dem Blinkenleds würde mich näher interessieren,
da ich auch ein Blinkenled habe.
Kannst Du noch mehr zu dem Thema veröffentlichen ?
z.b. Die Funktion selber, oder den gesamten Source ?
evtl. Schaltplan.
Vielen Dank,
Ralf
Hallo Jon,
jetzt funktioniert es wunderbar. Vielen Dank für dein Bemühen. Das mit
dem Buch war schon OK. Wenn ich mich mal mit C auseinander setzen will
werde ich auf jeden Fall darauf zurück kommen, da es auch bei Amazon
durchgehen sehr gut bewertet wird. Nur im Moment habe ich dazu keine
Zeit und wollte das Problem nur möglichst schnell und einfach lösen.
Also nochmal vielen Dank an Tobias, OldBug und Jon
Roland
Hallo Ralf,
ich habe das blinkenled vor ca. 2 Jahren gebaut. Damals war die Idee,
es mit einem eeprom und einer rs232 Schnittstelle auszustatten, um
Filme im eeprom abzuspeichern bzw. es an der seriellen schnittstelle zu
betreiben. Dafuer hab eich einen AT89S8252 verwendet. Das ist ein 8051er
von Atmel mit 8kb isp flash im dip 40 Gehaeuse. Der abgespeckte Code
fuer die Ethernet Variante braucht gerademal etwa 250Byte. Die leds
werden nicht per multiplex angesteuert, sondern jede Spalte mit 8 low
current leds haengt an einem CD4094 der wiederum am mc haengt. Strobe
und clock aller Schieberegister sind dabei zusammengafasst. Damals habe
ich mir noch ein kleines java Programm geschrieben, das die
blinknelights Packete entgegennahm und auf die serielle schnittstelle
ausgab. Mit der Möglichkeit, dies in einem MC mit RTL8019 zu
realisieren habe ich einfach noch eine Platine gemacht um sie auf die
Lochrasterplatine des Blinkenled zu stecken. Sie besteht aus einem
ATMega8 mit RTL8019 und dem zugehoerigen Kleinkram und basiert
ebenfalls auf dem Design von Uli. Auf ihr laeuft der abgeaenderte Code
von Uli. Es werden etwa 2kb Speicher benoetigt. Das Eternetmodul
kommuniziert per spi mit dem 8051er. Ich habe mal die Sourcecodes und
eagle Dateien in ein zip gepackt. Vll. kannst du ja was damit anfangen.
Der code fuer den 89S8252 und den mega8 ista auf das noetigste
abgespeckt und enthaelt keinerlei unoetige Features.
Wenn ich das Projekt nochmal machen sollte wuerde ich einfach einen
groesseren Mega mit mehr io-pins nehmen und die leds direkt in einer
Matrix ansteuern. Ich schaetze, dass der Code nicht groeser als 4kb
werden duerfte ob ein mega16 jedoch genug pins hat habe ich jezt nicht
gezaehlt.
Die Beschaltung fuer die Schieberegister habe ich jezt nicht als
Schaltplan sie sollte jedoch ziemlich leicht aus dem Code auzulesen
sein.
Gruß Tobias
Hallo,
ich habe mir Ulrichs Projekt mit einem ATmega162 (hat 2 kB internes
RAM) aufgebaut. Ein Ping auf den Webserver funktioniert, aber leider
krieg ich im Internet Explorer die Homepage des Webservers nicht
angezeigt (da muss ich doch einfach nur http://192.168.0.101 eingeben,
oder?).
Ich verwende momentan keine MMC, der Compilerswitch USE_MMC ist
auskommentiert. Im internen Flash müsste doch aber die Homepage auch
abgelegt sein, richtig? Reichen die 2 kB RAM des ATmega162 aus oder
könnte daher das Problem kommen?
Bin für Tipps dankbar.
Gruß
Michael
Hallo Michael,
die 2k RAM reichen, ich habe es für den mega32 compiliert, der hat auch
nicht mehr. Aber Probleme hab ich auch damit, siehe weiter oben.
Passt die IP-Adresse zu deinem Netzwerk? Sonst musst Du sie anpassen.
Kommt aus der RS232 was raus? Kommt überhaupt was im Browser? Bei mir
kommt oft nur ein blauer Hintergrund. Stabil läuft das Programm bei mir
nur bis etwa 12 MHz Takt ohne Änderungen. Versuchs mal mit kleinerer
Frequenz, vielleicht hilft's.
Uwe
Ups, ich meinte natürlich 1kB RAM beim ATmega162. Reicht das trotzdem?
Die IP-Adresse passt zu meinem Netzwerk, ein Ping funktioniert ja auch
problemlos, bloß im Internet Explorer bekomme ich nichts angezeigt
(Seite kann nicht gefunden werden). Auch auf dem UART kommt das
richtige raus. Die Taktfrequenz ist bei mir 8 MHz.
Gruß
Michael
Ich hab das ganze nun mal mit einem ATmega32 statt des ATmega162
probiert, mit dem Mega32 funktioniert alles wunderbar, die Homepage
wird im Internet Explorer angezeigt.
Somit scheinen die 1 kB RAM des ATmega162 nicht auszureichen.
Wo könnte man denn noch RAM-Speicherplatz sparen, damit man auch mit 1
kB auskommen könnte?
Gruß
Michael
RAM wird zum einen durch den Ethernet Frame verwendet (den kannst Du
mittels der MTU verkleinern) und durch Stack und Heap, auf denen sich
* Variablen (auch die Strings der Debugmeldungen), und
* Funktionsaufrufe
tummeln. Neben dem Heruntersetzen der MTU könntest Du also sämtliche
Funktionsaufrufe vermeiden und alles innerhalb des Interrupt Handlers
(interrupt4.c) unterbringen.
Alle Strings für Debugmeldungen oder andere Ausgaben kann man über das
Schlüsselwort PROGMEM im ROM unterbringen, braucht dann aber eine
angepasste print Routine.
Oben wurde mal gefragt, ob eine SMC 83C795 funktioniert. Hab' hier eine
in Verwendung, allerdings ist mi unklar, ob ich irgendwo einen Fehler
bei der Verdrahtung habe oder die Software den 83c795 nicht mag.
Weiss jemand genaueres ?
Softwareversion: 1.38, Board: ExBoard 1.4 (mit Anpassungen an meine
Anforderungen, aber unbedeutend).
Ansonsten währe eine passende ISA Karte mit 8019 nicht schlecht, hat
noch jemand zu viele ?
Ich habs mit ner SMC 83C79QF auf nem Board probiert, das sonst mit dem
RTL 8019 funktioniert, sie ging nicht. Suchen im Netz ergaben auch,
dass diese Karte nicht NE2000 kompatibel ist.
Hallo!
ich habe ebenfalls den webserver von ulli gebaut und für meine zwecke
adaptiert. nur etwas störend ist, dass ich für einen upload vom pc auf
den webserver ca 70kByte/s erreiche und für einen download vom
webserver etwa nur so 5-6KByte/s. Ich schätze dass liegt daran, dass
der uC beim download die CRC usw selbst generieren muss. Würde es daher
etwas bringen zum bsp einen CRC Lookup Table auf der SD karte zu
speicher, um die CRC berechnung zu beschleunigen?
ich verwende einen atmega32 für den webserver.
schöne grüße,
Max
Tach,
habe mittlerweile eine rtl8019as ergattern können.
Funktion: leider nicht 100%ig,
Ausgabe:
Init Network Card: ......... Init Ready!
Init: Okay 34
My Mac: 0.80.c6.5.5c.29
My IP : 10.1.1.11
Overrun!
Ping: funktioniert, telnet: funktioniert
http Anfragen timen out, aber auf der
ser. Konsole erschreint die angefragte Datei.
Hardware: das Board von Uli mit einem ATMega 128
da ich keine mmc/sd Karte angeschlossen habe,
habe ich die main.c um "#undef USE_MMC" ergänzt.
Hallo,
die MMC kannst du in der mmc.h deaktivieren, indem du USE_MMC auf null
setzt. Also:
#define USE_MMC 0
ziemlich am Anfang der Datei. Da steht normalerweise ne 1 drin.
Gruß Elektrikser
Tag,
ich moechte noch was zum Mega8-Webserver beitragen. Ich hab mir den
gerade auch mal aufgebaut und das fertige Mega8-Hexfile
reinprogrammiert. Zuerst lief leider gar nichts (die Karte hat zwar die
Link-LED angemacht, wenn ich ein Kabel reingesteckt habe, aber Ping und
weiteres ging nicht). Die Loesung des Problems: 4,7k-Pullups an den
Datenleitungen! Ausserdem muss ich dem AVR aus irgendwelchen Gruenden
auch nach dem Einschalten immer noch mal einen Reset geben (obwohl der
BOD an ist), bevor der Webserver im Netzwerk erreichbar ist. Und so
sieht das ganze bei mir aus:
http://www.elektronik-kompendium.de/public/arnerossius/temp/Webserver-Mega8_0.jpg
Jetzt werde ich mich mal dran versuchen, die neuste Version des
Webservers auf den Mega8 zu portieren, weil ich unter Linux nur die
neuste Version vom avr-gcc nutzen kann, die den alten Code ja leider
nicht mehr mag.
Ein Freund hat mir gerade etwas geholfen, es ist gar nicht noetig, den
neuen Code zu portieren, es muessen einfach folgende Zeilen hinter das
#include <avr/signal.h>
in main.c eingefuegt werden, damit der alte Mega8-Code mit dem neuen
avr-gcc funktioniert:
#define cbi(sfr, bit) ((sfr) &= ~_BV(bit))
#define sbi(sfr, bit) ((sfr) |= _BV(bit))
#define bit_is_set(sfr, bit) ((sfr) & _BV(bit))
#define bit_is_clear(sfr, bit) (!((sfr) & _BV(bit)))
#define loop_until_bit_is_set(sfr, bit) do { } while
(bit_is_clear(sfr, bit))
#define loop_until_bit_is_clear(sfr, bit) do { } while
(bit_is_set(sfr, bit))
Unter Linux muessen ausserdem alle Dateinamen, die Grossbuchstaben
enthalten (Device.c, Device.h und ARP.c), in Kleinbuchstaben geaendert
werden (device.c, device.h, arp.c). Die Pfadangaben im Makefile
scheinen unter Linux nicht beachtet zu werden, koennen also ungeaendert
drinbleiben.
Und schon funktioniert's :-)
(getestet mit avr-gcc 3.4.3)
Hallo Ulrich,
dass die Funktionen in deinem Source nicht mehr drinstehen, habe ich
gesehen, aber ich konnte auf deiner Seite keinen Code fuer den Mega8
finden, deshalb habe ich die letzte Version von mega8test.zip aus
diesem Thread verwendet.
Noch ein Nachtrag: es finktioniert scheinbar doch nicht. Der Code laesst
sich zwar fehler- und Warning-los kompilieren, aber der Webserver
funktioniert trotzdem nicht. Der Code ist auch voellig anders als der
im beiliegenden Hexfile (der erste Unterschied schon an Adresse 0000).
Ich sage wieder Bescheid, wenn ich rausgefunden habe, was da
schieflaeuft.
Ich hab' es jetzt aufgegeben mit dem alten Mega8-Paket und mal den
neusten Source auf Mega8 zu portieren versucht. Hat auch geklappt :-)
Ich habe den Source und ein funktionierendes Hexfile mal angehaengt,
aber bitte nicht erschrecken, der Code sieht ein bisschen aus wie
Schlachtfeld, ich werde da noch etwas dran herumspielen und alles etwas
ordnen. Der Fehler, dass man den AVR immer erst einmal resetten muss,
ist auch weg.
Uebrigens, man kriegt knapp 3kB Programmspeicher frei, wenn man aus
webpage.c das Bild rauswirft!
...das geht nicht ohne Änderungen. Ulrich hat seinen Stack (extra?) so
gebaut, dass der NIC an jedem beliebigen Port eines AVR hängen kann.
Bei der Ethernuthardware dagegen hängt der NIC am Memorymapped-IO des
Mega128 und wird auch über diesen angesprochen...
Andreas
...wobei sich der Umfang der Änderungen eigentlich in Grenzen halten
müsste. Ich kenne zwar den Code nicht (und habe auch recht wenig Ahnung
von C) aber meines Erachtens müssten ja "nur" die "low-level Ein- und
Ausgabe Routinen" (und etwas in der Initialisierung natürlich) geändert
werden. Also aus den über Portzugriffe "gestrickten" Ein- und Ausgaben
muüssten st und ld Zugriffe werden, oder?
Jörg
Hallo,
So wie ich meine kann man meine Hardware nicht für Ethernut verwenden.
Das liegt daran ich wollte einen Webserver ganz ohne externes SRAM
aufbauen. Also Processor und die Netzwerkkarte FERTIG. Ethernut ist von
der Software wesentlich besser geschrieben (meine Software war nur mal
ein Versuch gewesen) dieser Stack benötigt aber noch externes SRAM. Das
war für meine Kaffeemaschine mit Ethernet doch etwas viel aufwand :-)
deshalb entstand meine Software.
Mfg Ulrich
Hi,
wer die Platine von Guido hat kann da ein Ethernut draufmachen. Imgrund
emuss man nur ein paar Paramter im Konfigurationstool bearbeiten.
In der CVS-Version gibt es glaub bereits Hardwaredefinitionen dafuer.
Gruss Tobias
ich bins mal wieder...
hab' mich mit dem ATMega128-Board von Uli und einer SD Karte
versucht.
Anschluss der Karte an PB3,5,6,7. Pegelanpassung über 1k8 / 3k6
Widerstände und 2x1n4148 in der Versorgungsspannung.
Problem: Ausgabe "wie wild" keine SD/MMC Karte gefunden.
Rebootet der ATMega grübel ? Zur Stabilisierung habe ich noch 100nF
zu den 1µF zwischen Reset / GND gelötet. Hat jemand ne Idee ? Vielen
Dank schonmal im Voraus.
Was hat das nun mit dem Thread zu tun ?
Bitte mal in einem MMC/SD Thread fragen. Ach ja, die Erzeugung der
Betriebsspannung mit 2 Dioden ist nicht sehr gut, bitte einen
Spannungsregler, z.B. LM317, verwenden.
Ansonsten:
DI/DO richtig rum angeschlossen ?
Als Clock Leitung auch den SCLK verwendet (weiß grad nicht die PB
Zuordnungen auswendig)
Stefan
Verwende einen Spannungsregler, der dir 3,0 V oder 3,3 V liefert. Mit
den zwei Dioden kommst du auf 3,6 bis 3,8 V und das verweigern viele
der SD-Karten. Sie gehen zwar nicht kaputt, aber arbeiten tun sie dann
auch nix.
Gruß Elektrikser
Hallo,
ich habe den Webserver mit Holger's Platine (www.mikrocontroller.com)
aufgebaut. Aber ich bekomme den irgendwie nicht zu Laufen. :o(
Ich habe zwei Netzwerkarten mit UM9008 Chip. Sollten lt. Uli auch
laufen. Alle Werte auf den Karten sind korrekt eingestellt (9,300). Und
trotzdem bekomme ich kein Card Init: OKAY 34.
Ich bekam anfangs meistens folgende Werte:
Card Init: ERROR(255).
Dann habe ich einen Pullup an einen Dataport gehangen. Fortan bekomme
ich nun:
Card Init: ERROR(162).
Wäre wahrscheinlich auch in Ordnung. Die Karte wird eben nicht erkannt.
Aber bei jedem 4.-8. Reset erhalte ich:
Card Init: ERROR(34).
Das heisst doch, beim ersten Test ReadRTL() bekommt der AVR einen Werte
!= 34 und beim anschliessenden printf ist der Wert dann '34'. Also
wird die Karte doch manchmal erkannt, oder?
Und wenn ich dann einen
Card Init: ERROR(34)
bekommen habe, dann kommt nach einiger Zeit auch ein
Overrun!
Also wird doch auch ein Interrupt ausgelöst!? Ich habe nun auch mal in
der Interrupt-Routine ein printf("interrupt") eingefügt, damit ich
sehe, ob und wann die Funktion aufgerufen wird. Nun habe ich folgendes
entdeckt: Wenn ich nach einem Card Init: ERROR(34) meinen Rechner mit
der Karte verbinde, kommt nach einer Weile ein 'interrupt' und gleich
darauf ein 'overrun!'. Dann pinge ich den Webserver mal an. Eine Weile
tut sich gar nichts, aber nach 30-60s (da steht schon lange im
DOS-Fenster mehrfach 'Zeitüberschreitung' drin) werden plötzlich 4-5
Zeilen 'interrupt' z.T. auch 'overrun!' auf der seriellen
Schnittstelle ausgegeben.
Mir sieht das Ganze nach einem gewaltigen Timing-Problem aus.
Ich hoffe, meine Ausführungen waren nicht zu wirr. Hat hier vielleicht
einer eine Idee, was ich noch machen kann, damit es geht?
Danke
Joline
P.S. Ich benutze übrigens die Quellen von www.mikrocontroller.com
v1.38.
Hi!
Funktioniert der Webserver auch mit ner UM9007AF ?
Hab hier zwei rumliegen und gerade versucht den Webserver
aufzubauen.
Ich bekomme aber nur:
Card Init: ERROR(255).
zurück.
Wenn ich die NW Karte nicht mit 5V versorge bekomme ich
Card Init: ERROR(31).
Eine meiner Karten scheint defekt zu sein, ich höre ein leises 2 Hz(?)
klacken dass aber beim Avr reset kurz aufhört.
Ich hab das eeprom der karten abgezogen.
CPU ist nen mega32.
jemand ne Idee ?
Mein Aufbau inklusive AT90CAN128 mit CAN-Abindung, RS232 sowie LCD
entwickelte einen hörbaren hochfrequenten Ton, den ich lange einfach
nicht lokalisieren konnte. Hatte alles schon wieder ausgebaut oder
abgelötet, bis sich herausstellte, dass meine RS232-Treiber MAX202 dran
schuld war. Hat jemand schon mal piepende Treiber gehabt? Es scheint an
meinem Platinenlayout zu liegen, denn in einer anderen Schaltung piept
der Baustein nicht.
Hi!
Meine fiepende Karte kam daher dass ich beim ISA Stecker die Leitungen
komplett
vertauscht angelötet hatte :o
Ich dachte die Zeichnung im Pdf sei wenn man von unten auf die karte
guckt, sie zeigt sie aber von oben ...
Hab mich gestern gewundert wieso Vcc und GND nicht an die dicken
Leitungen gehen g
Hatte aber nur 5V mit 200mA Begrenzung dran (die sprang nicht an)
Leider funktioniert die Karte auch korrekt angeschlossen nicht..
Entweder hab ich sie getoastet oder sie gingen eh nicht.
Werde heute mal versuchen ne rtl8019 zu organisieren ;)
Meine Verwendung des Webservers soll irgendein Schalten/Abfragen von
Ports (LEDs u. Schalter) werden. Weiter oben im Thread wurde ja schon
mehrfach nach Webseiten-Vorlagen bzw. Hinweisen, wie man das dann im
Quellcode aktiviert, gemacht. Leider gab's keine/unzureichende
Antworten, die alten Quellcodes sind nicht mehr vorhanden oder die
Beispiele hier sind weder kompilierbar noch fehlerfrei. Mag vielleicht
jemand nochmal sein Wissen hier posten? Das wäre nett.
Ich versuche einmal es zu erklären.
In der Original-Version von Ulrich wird die Webpage alle paar Sekunden
aktualisiert und in der Mitte links wird der Zähler erhöht. Wenn du in
der webpage.c schaust, wirst du an der Stelle des Zählers "%VA1"
finden.
In der tcp.h wird in der Funktion tcp_add_data (...) diese Zeichenkette
gesucht, ausgeblendet und durch die Anzahl der Aktualisierungen
ersetzt.
1
// Wird VA1 gefunden %VA1 Variable1 einfügen
2
if(strncmp_P("VA1",(pointer+1),3)==0)
3
{
4
pointer++;//don't show "%VA1"
5
pointer++;//don't show "%VA1"
6
pointer++;//don't show "%VA1"
7
pointer++;//don't show "%VA1"
8
9
unsignedinttmp=sitecounter;
10
charcounter[5];
11
12
for(unsignedchari=0;i<5;i++)
13
{
14
counter[i]=(unsignedchar)(tmp%10)+'0';
15
tmp/=10;
16
}
17
18
for(unsignedchari=0;i<5;i++)
19
{
20
buffer[result16]=counter[4-i];
21
result16++;
22
}
23
sitecounter++;
24
}
Was man jetzt machen kann ist, dass man eine schöne Website macht und
mit z. B. Checkboxen den Zustand der Eingänge anzeigt:
1
"<p><font size=\"4\"> Port D Bit 0
Die Abfrage erfolgt dann auch wieder in der tcp.c, z.B. so:
1
if(strncmp_P("VA3",(pointer+1),3)==0)
2
{
3
pointer++;//don't show "%VA3"
4
pointer++;//don't show "%VA3"
5
pointer++;//don't show "%VA3"
6
pointer++;//don't show "%VA3"
7
8
charcounter[8]="dekcehc";
9
10
if(PIND&(1<<7))
11
{
12
for(inti=0;i<7;i++)
13
{
14
buffer[result16]=counter[6-i];
15
result16++;
16
}
17
}
18
}
Ich hoffe ein bißchen geholfen zu haben. Ich wollte eigentlich mein
komplettes Programm posten. Den habe ich zum Testen für ein Projekt
verwendet (eine Art Wetterstation mit Netzwerk und Speicherung auf
MMC), aber da muß ich noch viel ändern und erstmal überflüssiges
ausholzen.
Gruß Elektrikser
Hi!
Also ich habs jetzt laufen :D
Bei mir steckt eine Genius LAN K0236012 Karte im ISA Slot...
Jumper steht auf AUTO.
Dann ergibt sich eine io von 0x300 und IRQ 5. Also hab ich den irq
einfach umgelötet ;)
Die UM9007 Karten werden jetzt auch mit OK erkannt.
Wenn ich den Int wieder umlöte laufen die evtl auch ;)
Meine Fehler:
- JTAG war beim Atmega32 an (ARGHHH...)
- zu doof zum Kabel stecken aufm Experimentierboard
Was mir gerade aufgefallen ist:
In der tcp.h wird für html und jpeg derselbe OK Header gesendet.
Dort sollte beim jpg anfordern auch der jpg header geschickt werden ;)
Schön das Ganze bis hier, ich kann jetzt bei mir 'nen Taster mit ner
Box abfragen. Und wie geht der umgekehrte Weg? Ich klicke in so 'ne
Box und der Webserver zündet die Bombe oder so.
Da muss dann die Abfrage in der httpd.c erfolgen. Du brauchst dann aber
noch eine Anzeige auf deiner Webseite, da nach einem Refresh der Haken
aus der Checkbox verschwindet.
Geht das noch etwas genauer? Wie müßte so ein HTML-Tag aussehen und wie
fragt man dieses dann in der httpd.c ab? Bin leider kein
Webseiten-Experte, die Mechanismen sind mir nicht so ganz klar.
HTML oder Webpages programmiere ich normalerweise auch nicht. Noch nie
vorher gemacht. Ich habe so lange probiert, bis ich einen Weg gefunden
habe. Ist vielleicht nicht der Schönste, aber funktioniert.
webpage.c:
1
"<p><font size=\"4\"> Port B Bit 0
Damit werden zwei Checkboxen angezeigt. Die erste ist für das Ein- und
Ausschalten gedacht und die zweite als Anzeige. Jetzt muss in der
httpd.c abgefragt werden, ob im HTML-Header die Checkbox b0 gesetzt
worden ist. Das kann man in der Funktion httpd machen. Bei mir steht
es nach dem die beiden Ulrich-Bilder verarbeitet werden.
1
DDRB=0xff;
2
if(strstr(File_Name,"b0=1")!=0)
3
{
4
if(bit_is_set(PORTB,0))
5
{
6
PORTB&=~(1<<DDB0);
7
}
8
else
9
{
10
PORTB|=(1<<DDB0);
11
}
12
}
Die zweite Checkbox kann jetzt noch in der tcp.c abgefragt werden, aber
das ist das gleiche, wie bei den Eingängen.
Gruß Elektrikser
Hi,
ich habe die Sache jetzt eine Weile (aus Zeitmangel und aus Frust, weil
ich es nicht hinbekomme) liegen lassen. Aber ich bekomme das einfach
nicht zu Laufen. Was ich auch anstelle, immer dasselbe Ergebnis
(http://www.mikrocontroller.net/forum/read-4-87092.html#229383). :(
Ich habe die Original-Quellen von Holger benutzt und die Fuses genau
wie auf seiner Seite beschrieben, gesetzt. Aufgebaut ist das auch auf
seiner Platine (Also scheiden Verdrahtungsfehler ja fast aus...). Das
Einzige, was anders ist, ist die Netzwerkkarte. das ist eben eine mit
UM9008 Chip. Aber die sollte ja auch laufen. Habe die Konfiguration nun
auch schon mehrfach überprüft (IRQ9, I/O 0x300, Auto-Mode, Keine
EEPROM-Adresse).
Was könnte noch schief laufen?
Joline
Der Frust kann beim Stochern im Nebel meist recht groß werden. Bei mir
hat das Ganze glücklicherweise auf Anhieb funktioniert. Ich hatte mir
'ne eigene Platine nach eigenen Bedürfnissen entwickelt. Nun klemmt's
höchstens an der Software noch ein wenig.
Zu Joline, nur mal so'n paar Fragen: Hast du die Karte mal in 'nem PC
auf Funktion getestet? Wenn sie dort geht. PNP mit 'nem Konfig-Tool
ausgeschaltet und Medientyp richtig gewählt? PullUps halte ich bei den
Datenleitungen nicht für nötig bzw. ist überflüssig. Wenn du Probleme
mit den Interrupts hast, verbinde doch einfach brutal alle ISA-IRQs
(B4, B21-B25) und führe diese dann gemeinsam zum Interruptanschluß des
Mikrocontrollers; das hab ich auch so gemacht. Dann, ist dein
Mikrocontroller noch in Ordnung, irgendwelche Leitungen vieleicht doch
vertauscht oder Kurzschlüsse oder gar alles spiegelverkehrt
(Betriebsblindheit?!), geht beim Einstöpseln des Kabels die Link-LED
nach 1-2 Sekunden wirklich an und beim Abziehen auch wieder aus? Wenn
letzteres klemmt, ist was mit der Resetleitung nicht in Ordnung. Ist
beim Kompilieren der richtige Prozessor im Makefile gewählt? Die Liste
ließe sich fortsetzen....
@Birger*
1. Ich habe 2 Karten gleichen Typs. Beide liefen vorher in
verschiedenen PC's. Mit dem PNP-Tool habe ich die Einstellungen
vorgenommen und abgespeichert (Beim nächsten Neustart kontrolliert).
2. Ich benutze die Platine von Holger. Da sind schon alle Interrupts
miteinander verbunden. Leitungen vertauscht kann deswegen auch nicht
sein, es geht ja bei anderen. Und in benutze einen ATMega32 und die
passende SW von Holgers Seite. Also alles "Standard".
3. Ja, die Link-LED geht an. Anschliessend kommt nach einer gewissen
Zeit "Overrun!". Also wird die Interrupt-Funktion ja auch
aufgerufen.
Wa mich irgendwie stutzig macht, ist die Tatsache, dass manchmal nach
der Initialisierung ein 'Card Init: ERROR(34)' erscheint. Wenn man
sich den Code anschaut, dann wird zum Test, ob alles i.O. war, ein
ReadRTL(0) ausgeführt. Ist der Return-Wert != 34, dann erfolgt die
Ausgabe von 'ERROR(...)'. Was dann in den Klammern steht, ist der
Return-Wert eines weiteren ReadRTL(0). Und wenn der nun 34 ist, dann
ist doch nun alles OK, oder? Aber warum erst beim 2. Mal?
Und warum erfolgt die Ausgabe 'Overrun!'?
Leider kann ich dir aber über diesen Weg nicht noch weiter helfen. Und
weitere übliche Allgemeinplätze helfen dir so nicht. Meine Erfahrung
sagt mir allerdings, dass der Fehler meistens vor dem Bildschirm sitzt.
Auf jeden Fall scheint bei dir doch irgendwie der Wurm drin.
Hi allerseits
Zuerst einmal Hut ab vor Uli und Holger!
'n Spitzen Projekt das da auf die Füße gestellt worden ist. Respekt!!
Ich hab den AVR Webserver meinerseits nachgebaut.
Technische Daten:
- AtMega32 auf STK500
- Netzwerkplatine von Uli (leicht abgeändert)
- 128MB sdCard mit 7407er Pegelwandler
- I2C Bus
Ausserdem hab ich ein eigenes Layout entworfen und dabei höchsten Wert
auf minimalen Platzverbrauch gelegt.
Dabei ist jetzt eine Platine entstanden die nicht grösser ist als eine
!Checkkarte!
Nun stehe ich allerdings vor dem Problem dass sich die (professionelle)
Platinengerstellung für mich alleine fast nicht rechnet.
Also möchte ich hier einfach mal auf den Busch klopfen ob jemand
Interesse an so einem Board hätte.
Der Preis einer "nackten" Platine würde bei ca 20EUR liegen.
Technische Daten:
- Platine 8.5 * 5.5 cm
- Doppelseitig + Durchkontaktiert
- mit Lötstopplack und Bestückungsdruck
Im Angang ein vorläufiger Screenshot
Schaltplan und Bestückungsplan auf Anfrage erhältlich
Die meisten verwendeten Bauteile sind soweit Standart und leicht
erhältlich.
Widerstände und Kondensatoren sind hauptsächlich in 0603er SMD
Bauform.
Unter Umständen könnte ich auch fertig bestückte Platinen anbieten.
tnx für eure Aufmerksamkeit
Andreas
@ Guido
also von dir is dieses Luxusgerät!
Meinen Respekt
Danke für deinen Tip. Ich nehm' ihn mir zu Herzen.
Zum Thema kleiner:
der einzige RTL8019-Based Webserver den ich gesehen hab der kleiner
ist, war die Ausführung mit ATMega8. Der ist Hard- und
Softwarewaremässig ziemlich "geschrumpft" worden um auf diese Grösse
zu kommen.
Meine Interpretation von Ulis Webserver Basiert auf 'nem Mega32 und
hat so eben 32kB Flash, ausserdem hab ich die SD-Card+Pegelwandler
onboard dabei!
MFG
Andreas
Schöner Vorschlag, ich vermisse nur richtige Steckanschlüsse für die
Stromversorgung. Die Idee bei einer hergestellten Platine mit
Pfostensteckkontakten zu hantieren halte ich persönlich für nicht
tragbar. Dann hab ich am Ende eine fast perfekte Platine, die wiederum
nur mit Gebastel funktioniert. Ich verwende für meine Projekte immer
diese Hohlstecker (bei Reichelt HEBW 21). Und wenn ich die nicht mag,
kann ich immer noch mit Freidrahtgetstrippe hantieren - nur umgekehrt
geht's nicht. Und warum muss es ein ATmega32 sein? Der mega128 bietet
doch mehr Speicher für alle Lebenslagen und damit wäre das Projekt
deutlich zukunftssicherer. Was nützt eine Fallstudie mit einem knapp zu
kleinen Mikrocontroller, die nachher in der Ecke liegt? Und wenn ich
hier schon rumnöle, dann würde ich eine professionelle Platine so
herstellen, dass der RTL8019 nicht per Portpolling sondern via
memory-mapped-Modus angesprochen wird. Das würde das System sicherlich
noch um Einiges beschleunigen und die Anpassungen im Quellcode wären
minimal. Die letztliche Platinengröße wäre für mich hierbei
zweitrangig, denn für mich zählt Funktionalität und Performance.
Meine Version war Ursprünglich als Erweiterung für bestehende oder
zukünftige Projekte gedacht. Um z.B. ein Gerät um eine Webkonfiguration
zu erweitern...
Die Server-Platine sollte mit den Pfostensteckern auf die
Projekt-Platine "gesandwitcht" werden könne.
Für Standalone Webserver liegen ja bereits ausreichend Bauvorschläge
vor.
Der Webserver sollte über seinen "Slave" mit Spannung versorgt
werden, weshalb auch keine eigene Netzbuchse vorhanden ist.
Und zum Thema in der Ecke liegen:
Mit einer compilierten Version von Ulis Software ist gerade mal knapp
über die Hälfte des Flashspeichers des ATMega32 belegt. Und da ist
immernoch die Webseite mit einem Bild dabei!
Mit dem Thema Portpolling vs Memory Mapping hab ich mich noch nicht
beschäftigt.
Aber wäre gut wen du dazu evtl. Unterlagen oder einen Link hättest
Tnx an Birger*
Hi,
Ich möchte nur eine Telnet verbindung, mit der ich ein paar
einstellungen vornehmen kann. kann ich so was auch mit einem PIC oder
HC12 machen?
MfG Freaky
Hat sich eigentlich schon mal jemand Gedanken über die Nutzung des
Eprom-Sockels auf den Netzwerkkarten gemacht? Könnte man dort nicht
auch wunderbar Daten - sprich Webseiten ablegen? Hätte doch den Reiz,
keine SD-Karte oder internen Controllerspeicher samt umfangreichen
Routinen gebrauchen zu müssen. Das spart etwas Programmierzeit.
Dazu müßte man doch eigentlich nur wissen, wie die Karte mit dem
Mikrocontroller über den Adress-Datenbus (also memory-mapped)
verdrahtet gehört. Vorteil wäre auch ein schnellerer Zugriff auf die
Register der Netzwerkkarte selber. Für interessante und konstruktive
Vorschläge bin ich zu haben.
Hi (oder Mahlzeit :-))
Ich bin gerade beim basteln mit dem RTC EPSON RX8564LCBT
-leider sehr kleines Gehäuse!
Hat jemand dazu eine Eagelib gebastelt und würde sie mir zur verfügung
stellen ?
Hallo,
suche auch noch eine RTL8019-ISA-Netzwerkkarte! Hat irgendjemand noch
welche auf Lager und kann 3 Stück verkaufen?
Würde mich über eine Antwort freuen :-)
Grüße,
Patrick
Scherzkeks...
200004558184 -> Hat nen UMC-Chip
180006214792 -> Eine mit UMC-Chip, ne andere eventuell mit
Realtek-Chip
170003454377 -> Alles nur kein Realtek!
sry bei den ersten beiden hab ich mich wohl vertag, sry
aber die letzte is 100% eine realtek. Auf dem sticker steht YES! und
drunter is trommelwirbel ein RTL8019.
hatte den sticker auf den ersten beiden wohl für den YES! sticker
gehalten.
aber von aufbau her könnte da auch ein RTL8019 drunter sein? sieht
zumindest so aus, kann ich aber nicht garantieren...
>getestet habe ich Netzwerkkarten natürlich Realtek RTL8019, Accton mit>MPX2 Chipsatz, 3Com 3c509TX und eine eines mir unbekannten
Herstellers
>mit UM9008F Chipsatz.
Habe auch eine Netzwerkkarte mit UM9008-Chipsatz. Hat mir jemand einen
Sourcecode, damit es mit dieser funktioniert? Habe auch schon I/O CH
RDY an PD6 angeschlossen. Bekomme die Source aber nicht kompiliert (die
signal.h vom WinAVR ist wohl mal getauscht worden)
@hilfesuchender
Der neue AVR GCC hat das Signal Handling und noch einiges anderes
geändert. Probier mal die deprecated.h mit einzubinden, die stellt noch
einige der alten Funktionen zur Verfügung.
Naja der Fehler bleibt... mach ich was falsch?
Hab in der main.h hinzugefügt:
#include <compat/deprecated.h>
Der Error mit fdevopen bleibt, egal ob ich noch dazu das include der
signal.h auskommentiere oder nicht.
Bin für jede Hilfe dankbar!
Hmm okay, scheine eine Lösung im Forum gefunden zu haben:
Ein #define __STDIO_FDEVOPEN_COMPAT_12 muss vor dem inlcude der stdio
stehen.
Nun erscheint beim kompilieren aber eine Fehlermeldung mit dem PRINTF,
undefined reference heißt es. Tatsächlich kann ich nirgendwo eine
definition von PRINTF finden, wie kann das sein?
Und wie muss ich es definieren? Vom Umgang mit LCDs am Controller weis
ich, dass dort eine Funktion drin stehen muss die die Daten ausgibt,
z.B. über den UART. Aber wie heißt diese?
Hallo Forenuser,
kann mir jemand helfen? Ich suche eine fertige HEX-File für meinen
Webserver. Kompiliert für: ATmega32 mit 16MHz-Quarz und einer Realtek
RTL8019-Netzwerkkarte.
Mit den fertigen Hexfiles der Version 1.38 läuft der Webserver bereits,
jedoch habe ich dort keine Möglichkeit der Konfiguration. Und in der
1.40 kann man dann ja via Datei auf der MMC-Speicherkarte IP-Adresse
usw. einstellen.
Währe nett wenn jemand einem alten Hasen wie mir helfen könnte.
Gruß,
Harald
Hallo zusammen,
bin auf der suche nach dem RTL Chip nun habe ich bei EBAY diese
Netzwerkarte gefunden Artikelnummer: 180014984457 ist es damit genau so
möglich den Webserver aufzubauen? oder besser mit dem einzelnem Chip?
MfG Peter W.
mit der karte isses sogar um einiges einfacher weil du übertrager buchse
und alles schon so hast wie dus brauchst...
musst halt entscheiden ob se dir ned zu groß is sonst geht alles genau
so und super!
Ich hoffe ich werde jetzt nicht gekillt, dass ich diesen Thread
ausgrabe, aber ich habe da ein paar Fragen zu der RTL8019 Karte und
deren Initialisierung:
1. In deinem Code (rtl8019.c) sowie in allen anderen (zB Arthernet) Code
findet man immer etwas, was ungefähr so aussieht:
1
ReadRTL(RSTPORT);
2
WriteRTL(RSTPORT,0xFF);
Was ist das für ein RSTPORT ? Ich habe mich schon wund gesucht im
RTL8019 Datenblatt. Alles was ich finden kann sind die
Registerdefinitionen. Diese haben allerdings maximal einen Offset von
0x0F. RSTPORT ist jedoch mit 0x18 oder mit 0x1F (arthernet) definiert.
Das gleiche mit diesem DMA Zugriff. Wo steht darüber was im Datenblatt?
2. Wie funktioniert dieses DMA (Direct Memory Access) genau? Kann ich in
den Speicher der Netzwerkkarte direkt hereinschreiben? Oder was soll das
heißen? Sprich: Hier kann ich ab Offset 0xYZ direkt in den Sendepuffer
hinenschreiben, was dann automatisch ausgegeben wird?
3. Wenn die Init fertig ist, wie kann ich am besten testen, ob überhaupt
der Zugriff auf die Netzwerkkarte funktioniert? Wenn ich so ein
Register, was ich in der Init mit zB Konfigurationsdaten oder der MAC
Adresse beschreibe, wieder auslese, müsste man doch genau das gleiche
wieder auslesen, oder?
So das wars erstmal. Eine Antwort wäre nett :-)
Gruß
*Ein nicht ganz durchblickender Simon ;)
Hallo Simon,
zu 1.
Der RTL8019 ist irgendwo am AVR-Controller angeschlossen. In deinem Fall
am "RSTPORT". Der Begriff "RSTPORT" ist in einer *.h-Datei mit dem Port
verknüpft (z. B. Port A), an dem der RTL8019 angeschlossen ist. RSTPORT
bezieht sich auf den Port des AVR-Controllers.
zu 2.
Der DMA-Zugriff beim RTL8019 funktioniert nicht so, wie z.B. beim Z80.
Tiefere Erkenntnisse kann man gewinnen, wenn man die Literatur zu NE2000
oder DP8390 studiert. Die RTL8019-Beschreibung ist hier etwas
oberflächlich.
zu 3.
so sehe ich das auch.
Ich hoffe, Dir etwas weitergeholfen zu haben.
Gruß
Joachim
Ich muß mich noch einmal korrigieren.
zu 1.
Sieh einmal in den Funktionsdefinitionen zu ReadRTL und WriteRTL nach.
Dort kann man erkennen, was mit dem übergebenen Wert "RSTPORT" gemacht
wird.
Gruß
Joachim
Hallo JoachimB
Danke für deine Antwort erstmal.
RSTPORT ist ein Define.. Allerdings kein Define für ein (I/O-) Register
oder ähnliches. Es wird genauso der Funktion ReadRTL bzw WriteRTL
übergeben, als wäre es ein NE2000 kompatibles Register ?! So zumindest
sehe ich das. Allerdings lässt sich dieses Register nirgndwo in der
RTL8019 Doku finden. Zu dem DMA Gedönse ebenfalls nicht.
Ich schau mal, dass ich eine NE2000 Spec bekomme..
Hallo nochmal,
Ich habe mich mittlerweile durch einige Google-Links geklickt und bin
auf Projekte und Vorträge gestoßen. Ich konnte feststellen, dass dort
auch immer die Rede von einem "Reset Port" ist, und dass man diesen zum
Initialisierungszeitpunkt beschreiben solle.
Eine NE2000 Specification o.ä. konnte ich jedoch nicht finden. Hat da
zufällig jemand einen Link parat? Hier im Forum habe ich leider auch
nichts finden können.
PS: Das mit dem DMA bzw dem Remote-DMA hat sich zwischenzeitlich gelegt.
Das leuchtet mir mittlerweile ein ;)
In meiner Version der Realtek Doku findet sich der Reset-Port in der
Register-Übersicht auf Seite 9.
Kompatibel und Doku irgendwo zu finden: Davicom DM9008.
Kern der NE2000 war der National Semiconductor DP8390. In dessen
Datasheet gibt's den Reset-Port naturgemäss nicht. Dafür ist die Doku
teilweise recht anschaulich.
Hey Leute,
Ich weiß das is jetzt ne ganz andere geschichte... aber hat irgendwer
hier ne Ahnung wie ich den EEPROM (Dateneeprom) eines PIC24FXXX
beschreiben kann? mit dem C30 Compiler in C - denn irgendwie werde ich
bis jetzt nicht so recht schlau aus dem ganzen und ich habe noch keinen
anhaltspunkt =/
Danke mfg Manuel
Hallo,
bevor ich das ganze demnächst evtl. aufbaue: was für
Geschwindigkeiten/Datendurchsätze erreicht ihr so beim Abruf von
(größeren) Bildern/Dateien
a) aus dem internen Speicher
b) von SD-Card via SPI?
Würde mich über ein paar Erfahrungswerte freuen, da ich evtl. plane
Log-Dateien mit ca. 500kB einzusetzen. Bringt nur nichts, wenn die übers
Netz nicht schnell genug rüberkommen.
Insofern: könnte mal jemand 1MB auf Karte kopieren und den Durchsatz
messen. Evtl. auch "nur" mit ein paar KB aus dem Speicher?
Danke,
Dirk
Ich habe einen ALLNET Printserver Junior extra mit dem RTL8019AS Chip,
mein Problem ist wenn ich einen Dauerping mache verliert er immer wieder
pings in unregelmässigen abständen. Hab ihn auseinander genommen und
bemerkt das ein Kondensator (.75 1KV sec) einen dünnen riss hat jetzt
weis ich nicht ob das so seien muss oder ob er defekt ist. Googlen hat
nichts gebracht, bin dadurch hier angekommen wenn einer ne Idee hat
worans liegen kann sagts mir bitte bitte
Hallo,
ich habe mir auch einen AVR-Webserver auf einer ISA-CTRL Platine
aufgebaut.
Jetzt habe ich das Problem, dass ich den AVR nicht pingen kann.
Netzwerkkarte: RTL8019AS, eingestellt auf IRQ9 und I\O-Bereich:0300-031F
über den Gerätemanager in Windows 2k
Das Hyper-Terminal gibt folgendes aus:
RTL8019AS: Okay 34
MAC: 00:40:95:08:5A:FA
IP : 192.168.0.111
Am AVR-Webserver kann es nicht liegen, da ich ihn bereits mit einer
weiteren Netzwerkkarte (ebenfalls RTL8019AS) von einem Kumpel
ausprobiert habe. Mit dieser hatte er funktioniert.
Mein PC ist auch im gleichen Subnetz.
An was kann das liegen?
Mfg,
GutMan