Forum: Mikrocontroller und Digitale Elektronik Verbindungsprobleme mit dem Webserver


von Oktavius (Gast)


Angehängte Dateien:

Lesenswert?

Liebes Forum
ich hoffe ihr können mir weiterhelfen.

ich bin im Internet auf das sehr interessante Projekt von Ulrich Radig 
gestoßen. Das Projekt habe ich mir auf einer Streifenrasterplatine 
aufgebaut. uC ist ein Mega644.

Nach dem Erstellen eines eigenen hex.-Files klappte dann wenigstens 
schon mal die Ausgabe über das Terminal. Doch eine Verbindung mit dem 
Netzwerk ist nicht möglich. An meinem Desktop PC mit Win Vista wird mir 
ein „nicht identifizierbares Netzwerk“ angegeben. Also der PC erkennt, 
dass etwas am anderen Ende ist. Es wird aber keine Verbindung 
hergestellt. Dann probierte ich es an meinem Notebook und setzte mich in 
die Küche, wo ein Radio lief. Auf dem Notebook läuft Win 7. Hier wird 
ein Bruchteil „Aktiviert“ angezeigt und dann wieder ein Bruchteil 
„Verbindung getrennt“ dann wieder „Aktiviert“ etc… so geht es die ganze 
Zeit.

Dann fiel mir auf, dass das Radio extrem beeinflusst wurde und zwar 
nicht von mir, sondern von der Platine. Wenn ich jetzt mit dem Finger 
auf die Unterseite also die Lötseite der Platine drücke (markierte 
Stelle im Bild), dann ist das Störgeräusch weg und nun steht im Notebook 
„Netzwerkidentifizierung“ aber dabei bleibt es. Nehme ich den Finger 
weg, geht gar nichts. Nur mit Finger komme ich wenigstens einen Schritt 
weiter.

Da fällt mir ein meine Funk Maus wird auch stark beeinträchtigt. Dachte 
es wären die Batterien, aber es war wieder die Platine. Das geht locker 
über 1-2 Meter.

Also irgendwas stört extrem, anscheinend aber nur, wenn ich es mit dem 
Notebook versuche. Am Desktop PC ist keine Veränderung durch das Drücken 
mit dem Finger erkennbar.

Habt ihr einen Rat, wie ich die Verbindung herstellen kann? Hat es was 
mit der Störung zu tun? Wie kann man die Störung evt. verhindern? Ich 
bin ratlos… :( bei Bedarf kann ich auch noch ein Bild meines 
Platinenlayouts mailen.

von Oktavius (Gast)


Lesenswert?

Inzwischen steht in meinem PC dass er "lokal" verbunden mit dem "nicht 
identifizierten Netzwerk" verbunden ist. Geht man jedoch auf Status 
sieht man, dass der PC nur sendet aber nichts empfängt...

von Toff (Gast)


Lesenswert?

Dann zeig doch mal deine config.h und verrate etwas von deinem Netzwerk 
(IP deines Routers, Netzmaske).
Die LAN-Schnittstelle funktioniert übrigens nur, wenn erst alle Kabel 
eingesteckt sind und man dann erst die Spannung anschaltet.

von Wusel D. (stefanfrings_de)


Lesenswert?

Du musst eventuell auch eine feste IP Adresse am PC einstellen. Windows 
sucht standardmäßig einen DHCP Service und wenn der nicht antwortet, 
bekommst Du irgeneine (vermutlich zufällige) IP Adresse. Du brauchst 
aber eine IP-Adresse, die im gleichen Subnetz liegt, wie dein 
Mikrocontroller.

Die Funk-Störungen entstehen sicher wegen der realtiv langen 
ungeschirmten Leitungen zwischen dem Ethernet Controller und dem 
Übertrager, sowie zwischen Übertrager und Ethernet Buchse. Diese Teile 
sind sehr EMV kritisch.

von Wusel D. (stefanfrings_de)


Lesenswert?

> Die LAN-Schnittstelle funktioniert übrigens nur,
> wenn erst alle Kabel eingesteckt sind und man dann
> erst die Spannung anschaltet.

Das ist ja doof.
Wie reagiert die Schaltung denn, wenn nach einem Stromausfall der µC 
schneller startet, als der Ethernet Switch?

von Toff (Gast)


Lesenswert?

> Das ist ja doof.
> Wie reagiert die Schaltung denn, wenn nach einem Stromausfall der µC
> schneller startet, als der Ethernet Switch?

Hmm, das kann ich garnicht sagen. Ich schalte alle Verbraucher einzeln 
und in bestimmter Reihenfolge über µC angesteuert (Eigenbau-Hausbus).

von Oktavius (Gast)


Lesenswert?

Hallo.
Danke für die schnellen Antworten.

Mein pc ist auf eine feste ip eingestellt: 192.168.2.102
In meiner Config.h habe ich die ip entsprechend angepasst:
192.168.2.80
Netzmaske bei beiden 255.255.255.0
So verbinde ich Platine und PC direkt. Wenn ich mit Router es probiere 
ändere ich in der Config.h noch die Routerdaten auf 192.168.2.1
Mit Anschluss am Router blinken die Zustandsleds nicht mehr. Bei 
direktem Verbinden mit dem PC blinken die LEDs.
Muss ich sonst noch was für erste Versuche in der Config.h anpassen?
Takt ist auf 16mhz und dadrunter externer Takt auf 1 gesetzt. Die 
serielle Ausgabe funktioniert ja auch. Dort wird nach jedem Start 
angezeigt wann kompiliert wurde.

von Toff (Gast)


Lesenswert?

Taucht denn der Webserver in der ARP-Tabelle auf? Kannst Du ihn 
anpingen? Verwendest Du bei der Verbindung mit dem PC ein Cross-Kabel? 
Hast Du in der config.h schon mal alles ausgestellt, was ersteinmal 
nicht benötigt wird ( z.B. DHCP aus, Schaltautomatik aus, usw.)?

von Oktavius (Gast)


Lesenswert?

Hey,

so Pc-versiert bin ich leider nicht. Wie kann ich mir die ARP-Tabelle 
anzeigen lassen?
Anpingen kann ich bei direkter Verbindung mit der Platine nicht obwohl 
beim Netzwerk steht dass es lokal möglich sei. Mein PC erhält keine 
Antwort vom gegenüber. Wie ich auch schrieb unter Status steht dass mein 
PC sendet aber keine Antworten erhält.
Blöde frage: wie erkenne ich ein Cross over Kabel bzw wie unterscheide 
ich es von außen zum normalen?
Danke!

von Toff (Gast)


Lesenswert?

ARP-Tabelle ansehen:
- Unten links auf den START-Butten klicken
- "cmd" eingeben und ENTER drücken
- "arp -a" eingeben und ENTER drücken

Crossover-Kabel:
http://de.wikipedia.org/wiki/Crosskabel

Zeige doch trotzdem mal deine config.h.

Ich würde dir übrigens empfehlen sowas hier in der Art zuzulegen:
http://www.pollin.de/shop/dt/MTQ5OTgxOTk-/Bausaetze_Module/Bausaetze/Bausatz_AVR_NET_IO.html
Dann hast Du auch keine Störungen mehr

von Wusel D. (stefanfrings_de)


Lesenswert?

Wenn Du zwei Computer mit einem normalen Patchkabel verbindest, hast Du 
einen Kurzschluss:

Ausgang <---------------> Ausgang
Eingang <---------------> Eingang

Deswegen nimmt man dazu Crossover Kabel:

Ausgang <---------------> Eingang
Eingang <---------------> Ausgang

Um einen Rechner an einen Switch anzuschließen, verwendet man aber ein 
normales Kabel. Denn die Ethernet Buchsen von Switches sind "umgekehrt" 
belegt, als es beim PC der Fall ist.

Da bei Dir die Lichter am Switch nicht angehen, hast Du wohl entweder 
ein Crossover Kabel, oder Du hast die Ethernet-Buchse am Mikrocontroller 
falsch angeschlossen.

Crossover Kabel erkennt man, wenn man sich anschaut, welche Farben von 
Litzen an den Kontakten liegen. Be einem normalen Kabeln sind die Farben 
an beiden Enden gleich zugeordnet.

Um die Irritation komplett zu machen: Manche PC's und fast alle Switche 
können verpolte Anschlüsse erkennen und sich automatisch anpassen. Wenn 
dass aber beide Geräte können (PC und Switch), dann schlägt diese 
Automatik oft fehlt und führt zu zufälligen Ausfällen.

Außerdem führt ein verpoltes Kabel zu stark erhöhter Stromaufnahme. Wenn 
Dein Netzteil das nicht ab kann, stürzt der Ethernet Controller dabei 
ab. Der AVR läuft dann in der Regel weiter, da er auf Schwankungen in 
der STromversorgung weniger empfindlich reagiert.

von Oktavius (Gast)


Angehängte Dateien:

Lesenswert?

Hey,

anbei befindet sich die config.h und der ARP-Test zusammen in einer 
Datei.

Wenn eine direkte Verbindung zwischen Platine und PC besteht dann 
leuchtet eine LED dauerhaft und die andere blinkt. Schließe ich mit dem 
gleichen Kabel die Platine an den Router, dann leuchtet wieder eine LED 
dauerhaft aber die andere bleibt dunkel. Das gleiche mit einem anderen 
Kabel. Beide getesteten Kabel funktionieren zwischen PC und Router ohne 
Probleme.

Welches Kabel muss denn nun genommen werden? Ein Cross-over oder ein 
normales?

von Toff (Gast)


Lesenswert?

Wenn Du den Webserver direkt an den Computer anschließt, musst Du ein 
Crosskabel verwenden. Beim Anschluss an den Router ein normales 
Patchkabel (Crosskabel kann eventuell auch gehen). Bei der Verbindung 
zwischen Router und PC ist die Art des Kabels egal.
Am Webserver sollte eine Ethernet-Controller-LED sofort nach Anschluss 
der Versorgungsspannung angehen, die andere blinkt danach kurz. Was für 
ein Netzteil verwendest Du (Spannung/Strom)?
Die config.h sieht eigentlich in Ordnung aus. Wenn Du mir deine 
compilierte HEX-Datei gibst, probiere ich sie mal bei mir aus. Dann kann 
man eventuell schon mal Software-Fehler ausschließen.

von (prx) A. K. (prx)


Lesenswert?

Es ist löblich, dass du den AVR mit einigen Kondensatoren versehen hast. 
Weshalb aber hast du dann den ENC derart vernachlässigt? Der zieht 
deutlich mehr Strom als der AVR, hat dementsprechend viele 
Stromversorgungsanschlüsse, muss aber fast ohne Kerkos auskommen.

http://www.mikrocontroller.net/articles/Kondensator#Entkoppelkondensator

von Oktavius (Gast)


Lesenswert?

Hallo,

wie gesagt zwischen PC und Platine verhalten sich die LED anscheinend 
nach Vorschrift. Jedoch Platine - Router luchtet nur eine LED und die 
andere bleibt dauerhaft aus. Verwendet wurden zwei Kabel. Ein Cross und 
eins was damals zum Speedport mitgeliefert wurde. Ein ausschließlich 
gelbes ohne Einblicke am Stecker.

>Was für ein Netzteil verwendest Du (Spannung/Strom)?

9V 450mA

>Weshalb aber hast du dann den ENC derart vernachlässigt?

Also muss an jeden Pin des Enc der auf GND oder VCC gelegt ist ein 100nF 
Kondi?

von (prx) A. K. (prx)


Lesenswert?

Oktavius schrieb:
> Also muss an jeden Pin des Enc der auf GND oder VCC gelegt ist ein 100nF
> Kondi?

Zwischen jedes zusammengehörige VCC/GND-Pinpaar gehört ein 100nF Kerko. 
Und zwar dicht dran, elektrisch betrachtet.

von Oktavius (Gast)


Lesenswert?

Hey,

>Zwischen jedes zusammeghörige VCC/GND-Pinpaar

Ja wie habe ich das zu verstehen? Am Enc gibt es GND und VCC 
hierzwischen muss auf jeden Fall einer. Aber dann gibt es noch Pin 
19,20,15,25 die an VCC hängen und Pin 11,21,18,22 die an GND hängen. 
Müssen jetzt zwischen allen Pins ein Kondi? Also z.B. von Pin 19 nach 
GND von Pin 20 nach GND etc...

von Oktavius (Gast)


Angehängte Dateien:

Lesenswert?

Entschuldigt, aber ich habe die hex.-Datei vergessen anzuhängen.

von (prx) A. K. (prx)


Lesenswert?

Ungefähr so wärs völlig korrekt:
VDDTX -C- VSSTX
VDDRX -C- VSSRX
VDDOSC -C- VSSOSC
VDDPLL -C- VSSPLL
VDD -C- VSS

von Oktavius (Gast)


Lesenswert?

Ja jetzt leuchtet es ein. Mir waren die Bezeichnungen vorher nicht so 
aufgefallen.
Gut dann werde ich nachher noch die 5 fehlenden Kondis einsetzen. Danke

von Toff (Gast)


Angehängte Dateien:

Lesenswert?

Hm. Deine Hex funktioniert bei mir nicht. Probiers mal mit dieser. Die 
funktioniert bei mir auf Anhieb. Am Besten direkt im Browser 
192.168.2.99 eingeben. Es kann sein, dass Du nach dem Aufspielen der Hex 
den Webserver kurz vom Netz nehmen musst.

von Georg G. (df2au)


Lesenswert?

Toff schrieb:
> Die LAN-Schnittstelle funktioniert übrigens nur, wenn erst alle Kabel
> eingesteckt sind und man dann erst die Spannung anschaltet.

Das ist nicht so. Dem Radig Webserver ist die Reihenfolge wumpe.

von Oktavius (Gast)


Lesenswert?

Hallo,

danke für die Datei.

Ich habe die Kondis eingelötet und die neue hex. draufgespielt.

Weder direkt mit dem PC noch über den Router ist ein Ansprechen möglich.
Im Router war der DHCP-Server aktiv. Den habe ich ausgeschaltet und nun 
blinkt wenigstens die zweite LED, wenn die Platine an den Router 
angeschlsosen ist.Das tat sie vorher nicht. Der Router erkennt auch, 
dass am Port etwas ist, da der Port bei einer Verbindung als "aktiv" 
bezeichnet wird.

Laut meinem Messgerät wirft der LM 3,24 V aus. Ist das eine zu großes 
Abweichung?

von Toff (Gast)


Lesenswert?

3,24V reichen vollkommen aus. Der Ethernet-Controller scheint ja auch 
eine Verbindung mit dem Router herzustellen. Hast Du schon mal kurz für 
ein paar Sekunden den Netzstecker des Webservers gezogen? Versucht 
anzupingen?

Falls das dann immernoch nicht geht, liegt der Fehler irgendwo in der 
Hardware. Und bei deiner Lochstreifen-Variante gibts 1000 mögliche 
Fehlerursachen (z.B. SPI-Leitungen zu lang und mit zu vielen 
Abbiegungen, immerhin wird da mit 8MHz getaktet; Leitungen zur 
Ethernet-Buchse zu lang;usw.)

von Sebastian S. (sebastian_s38)


Lesenswert?

Hallo,

auf welchen Takt hast du dein Programm eingestellt? Ich nutze zur Zeit 
16Mhz.

Der PC erhält keine Antwort von der Platine. Es wird gesendet aber 
nichts kommt zurück...
Werde dann wohl mal einen MagJack kaufen und den direkt hinter den Enc 
klemmen. Dann sind die langen Leitungen ausgeschlossen.

von Toff (Gast)


Lesenswert?

16MHz.

Das hier muss in der config.c übrigens auf 0 gestellt werden, solange 
man keinen zusätzlichen 32,768kHz Uhrenquarz verwendet. Der 16MHz-Quarz 
ist damit nicht gemeint:
1
//Timertakt intern oder extern
2
#define EXTCLOCK 0 //0=Intern 1=Externer Uhrenquarz

> Werde dann wohl mal einen MagJack kaufen und den direkt hinter den Enc
> klemmen. Dann sind die langen Leitungen ausgeschlossen.

Damit hast Du dann schon mal eine Störquelle ausgeschaltet 
(normalerweise ist der Abstand zwischen Übertrager und Buchse kleiner 
als 1cm). Aber Die Leitungen für SPI müssen auch kürzer sein. Eigentlich 
müsstest Du dein gesamtes Layout neu entwerfen...

von Oktavius (Gast)


Lesenswert?

Das mit der extclock wusste ich so nicht. Gut zu wissen. Spi dürfen also 
auch nicht so lang sein? Hinreist doch aber keine HF spielt ein Abstand 
vo ca 3-4 cm so eine große Rolle?

von Oktavius (Gast)


Lesenswert?

Hallo,

die MagJack-Buchse kam heute an. Angebaut und...? Nichts. Wie soll es 
auch anders sein. Das gleiche Verhalten wie vorher auch. Eine LED 
leuchtet die andere blinkt, aber kein Signal geht zurück zum PC. D.h. 
der PC sendet, empfängt aber nichts. Habe es mit Patch- und Crosskabel 
versucht; über den Router, direkt am PC oder direkt am Notebook. Überall 
stets das gleiche Verhalten.

Man kann nun noch das ganze Layout umschmeißen, sodass die SPI-Leitungen 
kürzer werden. Aber der zeitliche Aufwand, um es dann später letzten 
Endes doch auf die Platine von Herrn Radig zu löten...ich weiß nicht. 
Sonst noch jemand Tipps?

von Georg G. (df2au)


Lesenswert?

Ohne Router direkt am PC anschließen und dann Wireshark.

von Toff (Gast)


Lesenswert?

Also wenn Du für deinen Webserver umbedingt eine eigene, selbst 
erstellte Platine haben möchtest, dann solltest Du dich mit 
Layoutprogrammen (z.B. EAGLE) auseinandersetzen und die Platine selbst 
routen. Lochraster-Karten und ähnliches ist doch eher maximal suboptimal 
für solche Projekte. Wenn Du das Layout erstellt hast, kannst Du Dir 
immernoch überlegen, ob Du deine Platine dann professionell fertigen 
lässt, oder ob Du richtig in das Hobby einsteigen willst und dir die 
Platinen dann selbst ätzen möchtst.

Zu den SPI-Leitungen: Du kannst mal versuchen die SPI-Verbindungen 
aufzutrennen und durch Twisted-pair-Leitungen zu ersetzen ( also 
verdrillte Leitung MOSI&GND, MISO&GND und SCK&GND), das kann schon mal 
Wunder wirken.

Ansonsten kannst Du im Quellcode in den (meisten) Header-Dateien eine 
Debug-Ausgabe einstellen. So kannst Du Schritt für Schritt 
nachvollziehen, wo genau der Webserver hängt.
Beispiel im Original:
1
  //#define HTTP_DEBUG  usart_write 
2
  #define HTTP_DEBUG(...)
Hier einfach die andere Zeile auskommentieren

von Oktavius (Gast)


Lesenswert?

Hallo,

habe die entsprechende Zeile im Code geändert, aber es erscheint nur 
folgende meldung über die serielle Schnittstelle:
"System Ready
Compiliert am Jun 12 2013 um 23:16:00
Compiliert mit GCC Version 4.3.3"

Nach einiger Zeit kam dann noch das per seriell:
"IP   192.168.2.107
MASK 255.255.255.0
GW   192.168.2.1
NTP Err."

Also erkennt der uC doch etwas vom Enc?

Nach einem Neustart der Platine kam nur die erste Meldung erneut über 
seriell. Die zweite Meldung bleibt aus.

Zu dem SPI Vorschlag. Eine Leitung eines Paares verbindet z.b. mosi die 
andere Leitung des Paares geht an beiden Enden an gnd?

von Toff (Gast)


Lesenswert?

> Zu dem SPI Vorschlag. Eine Leitung eines Paares verbindet z.b. mosi die
> andere Leitung des Paares geht an beiden Enden an gnd?

Genau so. Aber zapfe das GND-Signal nahe an den ICs an.

> Also erkennt der uC doch etwas vom Enc?
>
> Nach einem Neustart der Platine kam nur die erste Meldung erneut über
> seriell. Die zweite Meldung bleibt aus.

Ich bin nicht mehr so ganz drin in der Software, aber ich glaube, dass 
im ersten Fall kurz mal eine Verbindung bestand.

> Nach einiger Zeit kam dann noch das per seriell:

Hier mal ein Abschnitt aus der main.c:
1
    usart_write("\n\rSystem Ready\n\r");
2
    usart_write("Compiliert am "__DATE__" um "__TIME__"\r\n");
3
    usart_write("Compiliert mit GCC Version "__VERSION__"\r\n");
4
5
  for(a=0;a<1000000;a++){asm("nop");};
6
7
  //Applikationen starten
8
  stack_init();
9
  httpd_init();
10
  telnetd_init();
Die for-Schleife ist einfach nur eine Warteschleife, in der nichts 
geschieht. Daher die Verzögerung der nächsten Ausgaben.
Dann solltest Du jetzt Schritt für Schritt das Debuging in den einzelnen 
Applikationen aktivieren. Also erst mal in der stack.h. Wenn hier keine 
Fehler auftreten, dann die httpd.c, usw.
Allerdings wirst Du nicht viel Spaß mit deiner aktuellen Schaltung 
haben. Sporadisch wird sie funktionieren, aber nicht dauerhaft.

von Oktavius (Gast)


Lesenswert?

Hallo,

so letzte Meldung erst einmal.
Heute habe ich dann noch das Debugging in der stack.h aktiviert.

Folgende Meldung erschien:
1
System Ready
2
Compiliert am Jun 13 2013 um 19:07:35
3
Compiliert mit GCC Version 4.3.3
4
5
NIC init:
Nach dem Starten und auch nach langem Warten geht es nur bis hier.
Stecke ich dann den ISP Stecker einmal rein und ziehe ihn wieder raus 
geht es weiter:
1
My IP: 192.168.2.99
2
3
TCP Anwendung wird in Liste eingetragen: Eintrag 0
4
TCP Anwendung wird in Liste eingetragen: Eintrag 1
5
6
IP   192.168.2.99
7
MASK 255.255.255.0
8
GW   192.168.2.1
9
UDP Anwendung wird in Liste eingetragen: Eintrag 0
10
ROUTING!
11
ARP Eintrag nicht gefunden*
12
**KEINEN ARP EINTRAG GEFUNDEN**
13
.
14
.
15
.
16
**KEINEN ARP EINTRAG GEFUNDEN**
17
ROUTING!
18
ARP Eintrag nicht gefunden*
19
**KEINEN ARP EINTRAG GEFUNDEN**
20
.
21
.
22
.
23
**KEINEN ARP EINTRAG GEFUNDEN**
24
NTP Err.
Die drei Punkte wurden von mir eingefügt, da sich der Satz je noch ca 18 
Mal wiederholt.

> Toff (Gast) schrieb:
>...Du kannst mal versuchen die SPI-Verbindungen
>aufzutrennen und durch Twisted-pair-Leitungen zu ersetzen...

Habe ich heute auch noch gemacht. Kein Erfolg.

Aufgrund mangelnder Zeit beende ich hier mein Projekt. Ich werde mir, 
wenn wieder mehr Zeit ist, die Platine von Herrn Radig bestellen und den 
Webserver dort aufbauen. Vielen Dank an alle, die mich tatkräftig 
versucht haben zu unterstützen. Super Forum!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.