Hallo Leute.:) Nachdem ich mich nun seit längerer Zeit mit Mikrocontrollern beschäftige, wollte ich den Versuch wagen, meinen Atmega ans Heimnetzwerk anzuschließen, um verschiedene Ports über das LAN an- und auszuschalten. (-> Webserver) Hierfür habe ich mir vor einiger Zeit ein ENC28J60-Modul aus China bestellt. Es enthält den oben genannten Netzwerkcontroller, sowie den 25MHz Quarz, einen MAG-JACK sowie einige Kondensatoren. Ich habe mich sowohl hard- als auch softwaretechnisch relativ nah an den Webserver von Ulrich Radig gehalten. http://www.ulrichradig.de/home/index.php/avr/eth_m32_ex Der Anschluss des Moduls erfolgt über eine 12-polige Stiftleiste. Zur Visualisierung habe ich eine kleine Schaltskizze erstellt, die den Anschluss der Stiftleiste an den Atmega verdeutlicht. (Verwendet habe ich einen Atmega 32 mit externem 16MHz Quarz). Die Grundbeschaltung des Atmega 32 mit den diversen Abblockkondensatoren und der Herstellung einer stabilen 5 Volt Spannungsversorgung ist selbstverständlich vorhanden, auch wenn sie in der Schaltskizze nicht dargestellt sind. Der Anschluss ist somit ähnlich wie in dem Schaltplan von Ulrich Radig, der PORTB wurde hierzu verwendet. Um zu sehen, ob die Beschaltung funktioniert, habe ich den Quellcode an mein Netzwerk angepasst und die IP-Adresse und ähnliches in der Datei config.h geändert, den Quellcode kompiliert und in den Atmega geflasht. Nun habe ich den Mikrocontroller an den Router angeschlossen - eine Verbindung zum Mikrocontroller konnte vom PC jedoch nicht aufgebaut werden. Da dies also nicht funktioniert, habe ich einwenig im Internet recherchiert und folgende Anleitung zum AVR-Webserver gefunden: http://www.ov-lennestadt.de/projekte/webserver/FiFi-Webserver_Hardwaredokumentation.pdf Demnach soll der Webserver mittels Crossover-Ethernetkabel direkt mit dem PC verbunden werden. Danach die IP-Adresse des PCs über das Netzwerkcenter manuell ändern sowie die Netzwerkgeschwindigkeit auf 10 Mbit/s einstellen. Es kann jedoch immer noch keine Verbindung zum Mikrocontroller aufgebaut werden. Zu dem Modul: Das ENC-Modul enthält eine rote SMD-LED (Power-On-LED?) die durchgehend leuchtet, sowie eine gelbe und eine grüne LED direkt am Magjack. Steckt man das Netzwerkkabel in den Magjack blinken anfangs beide Leds in unregelmäßigen Abständen, nach einiger Zeit bleibt die grüne LED durchgehend an, die gelbe LED blinkt jedoch in unregelmäßigen Abständen weiter. Die Spannungsversorgungen von 5 Volt und von 3,3 Volt laufen jeweils stabil, daran sollte es somit nicht liegen. Ich bedanke mich bereits jetzt für die Aufnahme ins Forum und freue mich auf jede Hilfe, die ich kriegen kann, in der Hoffnung, dass mein Problem gelöst werden kann. Falls weitere Informationen benötigt werden, sagt bescheid und ich antworte, sobald ich es sehe. Mit freundlichen Grüßen Marcel
Morpheus schrieb: > Um zu sehen, ob die Beschaltung funktioniert, habe ich den Quellcode an > mein Netzwerk angepasst und die IP-Adresse und ähnliches in der Datei > config.h geändert Ja, auf was genau denn? Und wie ist die Konfiguration deines LAN? > Demnach soll der Webserver mittels Crossover-Ethernetkabel direkt mit > dem PC verbunden werden. Danach die IP-Adresse des PCs über das > Netzwerkcenter manuell ändern sowie die Netzwerkgeschwindigkeit auf 10 > Mbit/s einstellen. Beides ist nicht nötig. Wenn man die Netzwerkparameter korrekt konfiguriert hat, kann so ein Teil natürlich auch mit einem stinknormalen Patchkabel an einen stinknormalen LAN-Port des Routers im heimischen LAN angeschlossen werden. Dir fehlt höchstwahrscheinlich nur das grundlegenden Verständnis der Funktionsweise eines IP-Netzwerks. Sonst hättest du schon von dir aus die nötigen Angaben zu Konfiguration gepostet. Also, man braucht im Minimum: Netzwerkadresse des Routers Netzwerkmaske des LAN Adressbereich des DHCP-Servers im Router Aus diesen drei Angaben kann man dann errechnen, welche Adressen im Netzwerk noch frei sind und eine dieser freien Adressen dem neuen Teil geben. Und die Netzwerkmaske des AVR/ENC-Teils muß natürlich im einfachsten Fall genau dieselbe sein, wie die auf dem Router konfigurierte. Mit diesen zwei Sachen sind eigentlich schon alle Konfigurationen erledigt, die nötig sind, um das Teil über seine IP-Adresse aus dem LAN erreichen zu können. Wenn es hingegen auch "von außen" erreichbar sein soll und/oder über einen DNS-Namen, ist noch etwas mehr Konfiguration nötig, aber das ist dann schon wieder ein anderes Thema.
c-hater schrieb: > Dir fehlt höchstwahrscheinlich nur das grundlegenden Verständnis der > Funktionsweise eines IP-Netzwerks. Das kann gut sein, weil ich mich zum ersten Mal wirklich mit Netzwerken auseinandersetze. Die Netzwerkadresse des Routers lautet 192.168.2.1, die Netzmaske 255.255.255.0 (cmd-> ipconfig) Korrigiert mich, wenn ich falsch liege, aber das heißt doch, dass ich dem Webserver nun eine IP-Adresse 192.168.2.x geben kann, die allerdings noch nicht vergeben ist. Da wir noch weitere PCs, Drucker etc. am Router angeschlossen haben, habe ich nun mit dem Befehl arp /a bei cmd geschaut, welche IP-Adressen schon vergeben sind. Alle anderen IP-Adressen nach dem obengenannten Muster sollten demnach frei sein. Die Änderungen in der Datei config.h sehen somit folgendermaßen aus. (Oder muss ich in der Datei sonst noch etwas ändern?)
1 | //IP des Webservers und des Routers
|
2 | #define MYIP IP(192,168,2,99)
|
3 | #define ROUTER_IP IP(192,168,2,1)
|
4 | |
5 | //Netzwerkmaske
|
6 | #define NETMASK IP(255,255,255,0)
|
7 | |
8 | //Art-Net
|
9 | #define USE_ARTNET 0
|
10 | |
11 | //DHCP-Server
|
12 | #define USE_DHCP 0 //1 = DHCP Client on
|
13 | |
14 | //DNS-Server
|
15 | #define USE_DNS 0 //1 = DNS Client on
|
16 | #define DNS_IP IP(192,168,2,1)
|
17 | |
18 | |
19 | //IP des NTP-Servers z.B. Server 1.de.pool.ntp.org
|
20 | #define USE_NTP 0 //1 = NTP Client on
|
21 | #define NTP_IP IP(77,37,6,59)
|
22 | |
23 | //Broadcast-Adresse für WOL
|
24 | #define USE_WOL 0 //1 = WOL on
|
25 | #define WOL_BCAST_IP IP(192,168,0,255)
|
26 | #define WOL_MAC {0x00,0x1A,0xA0,0x9C,0xC6,0x0A}
|
27 | |
28 | //MAC Adresse des Webservers
|
29 | #define MYMAC1 0x00
|
30 | #define MYMAC2 0x20
|
31 | #define MYMAC3 0x18
|
32 | #define MYMAC4 0xB1
|
33 | #define MYMAC5 0x15
|
34 | #define MYMAC6 0x6F
|
35 | |
36 | //Taktfrequenz
|
37 | //#define F_CPU 20000000UL
|
38 | #define F_CPU 16000000UL
|
39 | //#define F_CPU 12000000UL
|
40 | //#define F_CPU 14745600UL
|
41 | //#define F_CPU 11059200UL
|
Hast du denn auch eine MAC Adresse festgelegt? Kannst du das Modul anpingen? Egal ob ja oder nein, erscheint die MAC Adresse danach in der arp Tabelle des Routers (bzw. PC bei Direktanschluss)? Was genau meinst du mit "Verbindung zum Mikrocontroller konnte vom PC jedoch nicht aufgebaut werden"? Welche Verbindung, welches Protokoll, welcher Port, mit welchem Programm und welche Fehlermeldung erhälst du?
Schaffe Dir eine Möglichkeit, Debug Meldungen zu loggen, z.B. wie dort beschrieben: http://stefanfrings.de/avr_hello_world/index.html Dann ändere die Software des AVR so ab, dass du jedes Ethernet Paket mitloggst, dass an den Ethernet Controller gesendet oder von ihm empfangen wird. Zumindest die Größe und die ersten 20 Bytes als Hex-Dump. Dann kannst du unter Umgehung des TCP/IP Protokolls und ohne Router mal Pakete direkt an die MAC Adresse senden: arp -s 192.168.2.88 xx-xx-xx-xx-xx-xx (MAC Adresse) ping 192.168.2.88 Die IP Adresse kann ruhig falsch sein, Hauptsache sie ist frei. Dein Computer sendet dann Pakete an diese MAC Adresse. Die werden (hoffentlich) vom Ethernet Controller empfangen, was deine Log-Meldungen anzeigen sollten. Ob die Pings beantwortet werden, ist dabei erstmal egal. Du sollst nur prüfen, ob die Kommunikation vom PC zum Ethernet Conroller auf MAC Ebene funktioniert. Der PC sollte auch per Kabel angeschlossen sein, um andere Seiteneffekte durch fehlerhaftes Routing auszuschließen.
Stefan Us schrieb: > Was genau meinst du mit "Verbindung zum Mikrocontroller konnte vom PC > jedoch nicht aufgebaut werden"? Theoretisch sollte es ja so sein, dass wenn der Webserver funktioniert und alles erfolgreich konfiguriert ist, dass man dann im Browser die IP-Adresse des Webservers eingibt und man erhält Zugang zu der dynamischen Webseite, die auf dem Mikrocontroller gespeichert ist. Ich bekomme jedoch die Fehlermeldung "Diese Webseite ist nicht verfügbar." Das Anpingen über cmd funktioniert auch nicht ("Zielhost nicht erreichbar"). Verbinde ich den Webserver direkt mit dem PC, dann wird mir in der Taskleiste auch angezeigt, dass keine Internetverbindung aufgebaut werden kann, bzw das eine unbekannte Verbindung vorliegt. Die MAC-Adresse des Webservers legt man doch auch mit
1 | //MAC Adresse des Webservers
|
2 | #define MYMAC1 0x00
|
3 | [...]
|
fest oder? Jedenfalls wird die MAC-Adresse auch nicht in der arp-Tabelle angezeigt. Für die Debug-Lösung steige ich momentan leider noch nicht genug durch die Software von Ulrich Radig durch. Ich setze mich jedoch heute intensiv mit dieser auseinander und versuche diese - zumindest soweit wie nötig - zu verstehen. Ich besitze leider kein USB-UART-Kabel, aber Debug-Meldungen kann ich ja prinzipiell auch über ein LCD am Mikrocontroller anzeigen oder? @Stefan US: Ich hoffe damit deine Fragen alle beantwortet zu haben. Mfg Marcel
Die Grüne und gelbe LED zeigen erstmal an, dass grundsäzlich eine Verbindung zum Router besteht, die eine zeigt an, dass die Verbindung/Link aufgebaut wurde, die andere blinkt, wenn Daten übertragen werden. Der Router sollte auch eine LED haben, die irgendetwas (je nach Hersteller) macht, wenn das Kabel zum AVR angeschlossen wird. Ansonsten Wireshark auf dem PC installieren und mal einen Ping an den ATMEL senden. Dann siehst Du, ob der überhaupt was antwortet und der ARP Request des PC vom Atmel beantwortet wird. Evtl. mal USE_DHCP auf 1 setzen, dann müsste der Atmel sich nach einem RESET zumindest mal im Netzwerk melden, was Wireshark anzeigen sollte. Manchmal lohnt es sich, bei neuen Versuchen einfach mal ein paar Minuten zu warten, bis alle automatisch generierten Tabellen wieder gelöscht sind. Gruss Axel
:
Bearbeitet durch User
Morpheus schrieb: > Die Netzwerkadresse des Routers lautet 192.168.2.1, die Netzmaske > 255.255.255.0 > (cmd-> ipconfig) > > Korrigiert mich, wenn ich falsch liege, aber das heißt doch, dass ich > dem Webserver nun eine IP-Adresse 192.168.2.x geben kann, die allerdings > noch nicht vergeben ist. So ist es. > Da wir noch weitere PCs, Drucker etc. am Router angeschlossen haben, > habe ich nun mit dem Befehl arp /a bei cmd geschaut, welche IP-Adressen > schon vergeben sind. Vorsicht, arp ist sehr vergesslich, der ARP-Cache hat keine lange Verweilzeit. Wenn du die Befehle alle von Hand eingetippt hast, ist sehr gut möglich, dass zwei Drittel der Ergebnisse schon wieder aus dem Cache raus waren, bevor du ihn dir hast anzeigen lassen. Außerdem ist es in einer DHCP-Umgebung natürlich jederzeit möglich, dass sich Adressen ändern. Auf der sicheren Seite bist du deshalb nur dann, wenn du dem DHCP-Server des Routers die Angabe entlockst, welchen Bereich er vergibt. Bei den meisten Routern ist es kein Problem, sich das zumindest anzeigen zu lassen, bei vielen läßt es sich sogar konfigurieren. > Die Änderungen in der Datei config.h sehen somit folgendermaßen aus. [...] Unter der Voraussetzung, dass 192.168.2.99 wirklich frei ist, sieht das ziemlich korrekt aus. Übrigens: Was hast du mit CIS Technology Inc. zu tun? Denen gehört nämlich die MAC, die du deinem AVR/ENC-Gespann verpaßt hast. Die hast du doch hoffentlich nicht einfach von irgendeinem Gerät übernommen, welches in deinem LAN tatsächlich existiert? Dann bräuchtest du dich über Probleme allerdings nicht zu wundern...
LCD Displays eignen sich kaum zur Anzeige von Debug Meldungen. Erstens sind sie (in der Regel) viel zu klein und zweiten fehlt Dir die Möglichkeit, zurück zu scrollen. Ohne Debug-Log solltest du gar nicht erst versuchen, einen Webserver zu programmieren. Das endet nur mit Zeitverschwendung. > Für die Debug-Lösung steige ich momentan leider noch nicht > genug durch die Software von Ulrich Radig durch. Aber printf (in Kombination mit meiner Library) kannst du anwenden, oder etwa nicht? Wenn nicht, dann lerne das erstmal.
Axel Laufenberg schrieb: > Ansonsten Wireshark auf dem PC installieren und mal einen Ping an den > ATMEL senden. Habe ich gemacht, und den Capturing Modus gestartet, doch die IP-Adresse wird auch hier nicht angezeigt. Wie genau sende ich mit dem Programm den einen Ping an eine bestimmte IP-Adresse? c-hater schrieb: > Übrigens: Was hast du mit CIS Technology Inc. zu tun? Denen gehört > nämlich die MAC, die du deinem AVR/ENC-Gespann verpaßt hast. Die hast du > doch hoffentlich nicht einfach von irgendeinem Gerät übernommen, welches > in deinem LAN tatsächlich existiert? Dann bräuchtest du dich über > Probleme allerdings nicht zu wundern... Hm... also die MAC-Adressen waren so in dem Programm standardmäßig eingestellt, daran habe ich nichts geändert. (Siehe: http://www.ulrichradig.de/home/index.php/avr/eth_m32_ex)
zuerst den lowlevel-Teil testen. Funktioniert spi und wird die mac-adresse richtig auf den enc übertragen, z.B. so:
1 | // NOTE: MAC address in ENC28J60 is byte-backward
|
2 | enc28j60Write(MAADR5, MYMAC1); |
3 | enc28j60Write(MAADR4, MYMAC2); |
4 | enc28j60Write(MAADR3, MYMAC3); |
5 | enc28j60Write(MAADR2, MYMAC4); |
6 | enc28j60Write(MAADR1, MYMAC5); |
7 | enc28j60Write(MAADR0, MYMAC6); |
8 | |
9 | u8 x=0; |
10 | x= enc28j60Read(MAADR1); |
11 | if(x!=MYMAC5){ |
12 | lgw(2,1,"ERr mac5: ");li(x);lw("-");li(MYMAC5); |
13 | wait;wait;wait;wait;wait; |
14 | }
|
Dann den stack testen. Funtionieren die Timer -arp und http? Schauen was bei eth_get_data() ankommt. eth_get_data() geht entweder über polling oder über interrupt ? Andieser Stelle werden Daten vom enc ausgewertet:
1 | packet_length = ETH_PACKET_RECEIVE(MTU_SIZE,(uint8_t *)eth_buffer); |
2 | if(packet_length > 0) |
3 | {
|
4 | eth_buffer[packet_length+1] = 0; |
5 | check_packet(); |
6 | }
|
Lass dir den Anfang von eth_buffer auf dem lcd anzeigen. Das müssten dann der ethernet-header sein.
Das ganze kann nicht gehen, weil der Controller nicht versorgt ist.
SS/PB4 hängt bei dir in der Luft. Hast du den auf Ausgang geschaltet? Wenn nicht könnte es passieren das SPI einfach so mal nicht mehr funktioniert.
KA123 schrieb: > Das ganze kann nicht gehen, weil der Controller nicht versorgt ist. Der Schaltplan oben ist wie gesagt nur eine Skizze, selbst verständlich verfügt der AVR über eine Spannungsversorgung, ebenso wie der ENC. Die Skizze sollte nur verdeutlichen, wie ich das Modul angeschlossen habe, für den Fall dass der Fehler bereits hier liegt.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.