MicroWebServer
Aus Wiki
(Die Seite wurde neu angelegt: Projekt dideldum) |
|||
(Der Versionsvergleich bezieht 35 dazwischen liegende Versionen mit ein.) | |||
Zeile 1: | Zeile 1: | ||
- | Projekt | + | [[en:MicroWebServer]] |
+ | {{ProjectFeatures}} | ||
+ | ==Einleitung== | ||
+ | Der MicroWebServer ist ein kleiner Webserver auf Basis eines ENC28J60 von [http://www.microchip.com Microchip] und eines ATMega168 von [http://www.atmel.com/ Atmel]. | ||
+ | |||
+ | Der MicroWebServer wurde mit dem Hintergedanken entwickelt, eine möglichst kleine Entwicklungsplattform für einen ENC28J60-Treiber zu schaffen, die auch danach noch sinnvoll eingesetzt werden kann. Dafür wurden diverse Pins des ATMega168 auf eine Pfostenleiste gelegt, sodass man eine Grundplatine erhält, die um eine externe Platine mit beispielsweise Relais erweitert werden kann. Die Möglichkeiten an dieser Stelle sind sehr vielfältig. | ||
+ | |||
+ | ==Hardware== | ||
+ | ===Platine=== | ||
+ | Wie man sieht, ist das Layout also sehr allgemein gehalten, sodass es möglich ist die Platine vielseitig zu verwenden. Trotzdem ist das Layout durch die Verwendung von SMD Bauteilen und geringen Isolate-Werten zur Massefläche kompakt geworden. Die Gesamtfläche der Platine beträgt 38x31mm². Die Platine kann einzeln oder in einem Bausatz von dem [http://www.it-wns.de/themes/kategorie/detail.php?artikelid=114&source=2 IT-WNS Shop] bezogen werden. Alternativ lassen sich die Bauteile aber auch von [http://csd-electronics.de/ CSD-Electronics] beziehen. Die Platine muss dann aber selbst hergestellt werden. | ||
+ | |||
+ | ===Spannungsregler=== | ||
+ | Auf der Platine befindet sich auch ein 3,3V Spannungsregler ([http://www.national.com/mpf/LM/LM1117.html LM1117]). Bei einem durchschnittlichem Gestamtstromverbrauch von etwa 150mA und bei etwa 1,1V Dropout Spannung, die bei diesem Strom entsteht, habe ich die maximale Eingangsspannung auf 7V und die optimale Eingangsspannung auf 5V festgelegt. Die minimale Eingangsspannung wäre in diesem Falle etwa 4,4V. | ||
+ | {{Attention | ||
+ | |Die 3,3V, die von dem Spannungsregler erzeugt werden, liegen auch am 20-poligen Pfostenstecker an. Über den Pfostenstecker sollte man auf der 3,3V Leitung nicht mehr als etwa 350mA bei einer Eingangsspannung von 5V fließen lassen. Die Verlustleistung des Reglers liegt hier schon bei etwa 0,6W, was angesichts der kleinen Kühlfläche hohe Temperaturen erzeugen kann. Sollte die Eingangsspannung sogar höher als 5V sein, ist dringend davon abzuraten einen Strom in dieser Höhe über den Pfostenstecker zu beziehen. | ||
+ | }} | ||
+ | |||
+ | ===Ethernet-Buchse=== | ||
+ | Der [http://www.it-wns.de/themes/kategorie/detail.php?artikelid=114&source=2 IT-WNS Shop] liefert mehrere verschiedene Versionen des Bausatzes aus, da es zeitweilig Probleme mit der Beschaffung der vorgesehenen Ethernet-Buchse gab. Da diese neue Buchse unter anderem auch ein anderes Pinout hat, sind mehrere Versionen der MicroWebServer-Platine im Umlauf. | ||
+ | Desweiteren ist die Belegung der Leuchtdioden an selbigem nicht immer gleich, sodass man entweder unterschiedliche Farben für die Sende-/Empfangsaktivität bzw. Ethernet Link hat, oder das Initialisierungswort des ENC28J60 so anpasst, dass die Funktion der Leuchtdioden getauscht wird. (Siehe {{ProjectLinkFAQ}}) | ||
+ | |||
+ | Die verwendete(n) Ethernet-Buchse(n) hat/haben einen Ethernet-Übertrager integriert, was das Layout um einiges verkleinert hat. Dieser Übertrager ist nötig um das Potential des MicroWebServers von dem Potential auf den Netzwerkleitungen zu trennen. (Galvanische Trennung). | ||
+ | In der ersten Version des MicroWebServers war dies die "Magjack SI-60024-F" Buchse. In den neueren Versionen wird entweder die "Halo FastJack™ HFJ11-2450E-L12RL" oder die "ERNI Modular Jack M3D01-203199" Buchse verwendet. | ||
+ | |||
+ | ===Pfostenleiste=== | ||
+ | Der MicroWebServer bietet eine 20-polige Pfostenleiste um die 14 darauf gelegten Ein-/Ausgänge sauber mit externer Peripherie zu verbinden. An diesem 20-poligen Steckverbinder befinden sich neben 2xGND, 2xEingangsspannung und 2x3,3V, wie gesagt, die 14 Pins des ATMega168. | ||
+ | Alle dieser 14 Pins können als normale Ein- oder Ausgänge geschaltet werden. Manche dieser Pins besitzen aber auch Spezialfunktionen, wie zum Beispiel ein integriertes I²C Modul ('''Keine Pull-Ups auf der Platine vorhanden!'''), 6 analoge Eingänge die auf den internen 10-Bit AD-Konverter gehen ('''Kondensator an AREF ist auf dem Layout vorgesehen. Typisch: 100nF. Als Referenz können die 3,3V aus dem Spannungsregler, sowie 1,1V intern gewählt werden.'''), sowie diverse Output-Compare Einheiten um Signalformen für beispielsweise PWM zu erzeugen. Jeder der 14 Pins ist zudem noch fähig einen Pin-Change-Interrupt auszulösen. | ||
+ | |||
+ | ==Software== | ||
+ | ===Netzwerk-Stack=== | ||
+ | Als Netzwerk Stack kommt der [http://www.sics.se/~adam/uip/index.php uip-Stack] von Adam Dunkels zur Verwendung. Er implementiert die Netzwerkfähigkeiten der höherliegenden Schichten (insgesamt IP, ARP (Echo), ICMP, UDP, TCP). | ||
+ | |||
+ | ===Stack-Applikation=== | ||
+ | Zur Demonstration ist dem Downloadpaket eine klassische Webserver-Anwendung beigelegt. Diese Applikation liegt in der obersten Schicht des OSI Modells und somit über dem uip-Stack. | ||
+ | Die Anwendung implementiert einen einfachen Webserver, der über einen Browser abgefragt werden kann (GET) und über diesen auch Daten wieder empfangen kann(POST). Mit der Beispielapplikation können die 14 herausgeführten Pins an der 20-poligen Pfostenleiste auf Ein- oder Ausgang geschaltet werden, sowie in ihrem Pegel (HIGH +3,3V, LOW 0V) verändert werden. | ||
+ | |||
+ | ==Zusammenbau== | ||
+ | ===Was wird benötigt=== | ||
+ | *Lötkolben (SMD tauglich) | ||
+ | *Fortgeschrittene Löterfahrung (0805-SMD, TQFP44) | ||
+ | *Atmel AVR Programmiergerät mit 6poligem Stecker und Kompatibilität für 3,3V Zielspannung | ||
+ | *Spannungsquelle 5V - 7V DC mit mindestens 150mA | ||
+ | |||
+ | ===Bestückung=== | ||
+ | #niedrige Bauelemente wie 0805 Kondensatoren/Widerstände bestücken | ||
+ | #ATMega168, ENC28J60 und LM1117 bestücken | ||
+ | #Quarz und andere Kondensatoren bestücken | ||
+ | #Pfostenleisten bestücken | ||
+ | #Ethernet-Buchse bestücken | ||
+ | *Lötkolben nicht zu lange an das gleiche Bauteil halten | ||
+ | *Vorsichtig löten um keine schwer auffindbaren Lötbrücken einzubauen | ||
+ | *Wenn nötig mit Lupe oder Mikroskop löten | ||
+ | |||
+ | ===Inbetriebnahme=== | ||
+ | #Sources herunterladen ({{ProjectLinkDownloads}}) | ||
+ | #Am Netzwerk anschließen | ||
+ | #Spannungsquelle an die 2-polige Stiftleiste anschließen (Polung beachten!) | ||
+ | #Programmiergerät an 6-poliger Programmierschnittstelle anschließen | ||
+ | #Optional: Programm modifizieren und neu kompilieren (siehe [[#Konfiguration]]) | ||
+ | #HEX-Datei in den Mikrocontroller flashen | ||
+ | #Fuses des AVR modifizieren ('''LFuse:''' E0h, '''HFuse''': DDh) | ||
+ | ##Taktquelle auf Ext. Clock stellen (Startup Time 65ms) | ||
+ | ##Brown Out Detector auf 2,7V einstellen | ||
+ | |||
+ | Nach dem Programmiervorgang wird der Mikrocontroller automatisch gestartet und beginnt den ENC28J60 zu initialisieren und seine eigene Taktquelle auf 12,5MHz einzustellen. Ab jetzt sollte die grüne Leuchtdiode an der Netzwerkbuchse dauerhaft leuchten und bei Empfangsaktivität erlischen. Die andere (rote/gelbe) Leuchtdiode leuchtet bei Sendeaktivität. | ||
+ | |||
+ | {{Attention | ||
+ | |Sollte die Leuchtdioden-Konfiguration nicht zufriedenstellend sein, kann diese im Sourcecode angepasst werden. Siehe {{ProjectLinkFAQ}}. | ||
+ | }} | ||
+ | Sofern die Konfiguration in Schritt 5 nicht verändert wurde, sollte der Server unter der IP-Addresse 192.168.0.93 erreichbar sein. Für einen schnellen Funktionstest kann also das Kommandozeilen-Tool "ping" benutzt werden. | ||
+ | ping 192.168.0.93 | ||
+ | |||
+ | ===Konfiguration=== | ||
+ | '''Standardkonfiguration:''' | ||
+ | *MAC-Adresse: 00:03:6F:55:1C:C2 | ||
+ | *IP-Adresse: 192.168.0.93 | ||
+ | *Netzmaske: 255.255.255.0 | ||
+ | *Gateway: 192.168.0.254 | ||
+ | *WebServer-Port: 8080 | ||
+ | |||
+ | Die Konfiguration der MAC-Adresse kann in '''Hardware/Enc28j60.h''' angepasst werden. IP-Adresse, Netzmaske und Gateway lassen sich in '''Main.c''' anpassen und der Webserver-Port kann in '''Net/TcpApps/HttpD.h''' angepasst werden. | ||
+ | Nach dem Anpassen muss das Projekt neu kompiliert werden. Hierfür muss eine AVR-GCC Installation (zB WinAVR für Windows) vorhanden sein. | ||
+ | |||
+ | ==Anhang== | ||
+ | ===Benutzer-Modifikationen=== | ||
+ | ====NTP Client==== | ||
+ | Tobias Flöry hat auf seiner Seite einen NTP Client in den Udp-AppHub integriert. Seine Seite ist [http://tobiscorner.floery.net/projects/avr/synchronise-avr-clock-using-the-ntp-protocol/119 hier] zu finden. |
Aktuelle Version
Features |
Inhaltsverzeichnis |
Einleitung
Der MicroWebServer ist ein kleiner Webserver auf Basis eines ENC28J60 von Microchip und eines ATMega168 von Atmel.
Der MicroWebServer wurde mit dem Hintergedanken entwickelt, eine möglichst kleine Entwicklungsplattform für einen ENC28J60-Treiber zu schaffen, die auch danach noch sinnvoll eingesetzt werden kann. Dafür wurden diverse Pins des ATMega168 auf eine Pfostenleiste gelegt, sodass man eine Grundplatine erhält, die um eine externe Platine mit beispielsweise Relais erweitert werden kann. Die Möglichkeiten an dieser Stelle sind sehr vielfältig.
Hardware
Platine
Wie man sieht, ist das Layout also sehr allgemein gehalten, sodass es möglich ist die Platine vielseitig zu verwenden. Trotzdem ist das Layout durch die Verwendung von SMD Bauteilen und geringen Isolate-Werten zur Massefläche kompakt geworden. Die Gesamtfläche der Platine beträgt 38x31mm². Die Platine kann einzeln oder in einem Bausatz von dem IT-WNS Shop bezogen werden. Alternativ lassen sich die Bauteile aber auch von CSD-Electronics beziehen. Die Platine muss dann aber selbst hergestellt werden.
Spannungsregler
Auf der Platine befindet sich auch ein 3,3V Spannungsregler (LM1117). Bei einem durchschnittlichem Gestamtstromverbrauch von etwa 150mA und bei etwa 1,1V Dropout Spannung, die bei diesem Strom entsteht, habe ich die maximale Eingangsspannung auf 7V und die optimale Eingangsspannung auf 5V festgelegt. Die minimale Eingangsspannung wäre in diesem Falle etwa 4,4V.
Ethernet-Buchse
Der IT-WNS Shop liefert mehrere verschiedene Versionen des Bausatzes aus, da es zeitweilig Probleme mit der Beschaffung der vorgesehenen Ethernet-Buchse gab. Da diese neue Buchse unter anderem auch ein anderes Pinout hat, sind mehrere Versionen der MicroWebServer-Platine im Umlauf. Desweiteren ist die Belegung der Leuchtdioden an selbigem nicht immer gleich, sodass man entweder unterschiedliche Farben für die Sende-/Empfangsaktivität bzw. Ethernet Link hat, oder das Initialisierungswort des ENC28J60 so anpasst, dass die Funktion der Leuchtdioden getauscht wird. (Siehe FAQ)
Die verwendete(n) Ethernet-Buchse(n) hat/haben einen Ethernet-Übertrager integriert, was das Layout um einiges verkleinert hat. Dieser Übertrager ist nötig um das Potential des MicroWebServers von dem Potential auf den Netzwerkleitungen zu trennen. (Galvanische Trennung). In der ersten Version des MicroWebServers war dies die "Magjack SI-60024-F" Buchse. In den neueren Versionen wird entweder die "Halo FastJack™ HFJ11-2450E-L12RL" oder die "ERNI Modular Jack M3D01-203199" Buchse verwendet.
Pfostenleiste
Der MicroWebServer bietet eine 20-polige Pfostenleiste um die 14 darauf gelegten Ein-/Ausgänge sauber mit externer Peripherie zu verbinden. An diesem 20-poligen Steckverbinder befinden sich neben 2xGND, 2xEingangsspannung und 2x3,3V, wie gesagt, die 14 Pins des ATMega168. Alle dieser 14 Pins können als normale Ein- oder Ausgänge geschaltet werden. Manche dieser Pins besitzen aber auch Spezialfunktionen, wie zum Beispiel ein integriertes I²C Modul (Keine Pull-Ups auf der Platine vorhanden!), 6 analoge Eingänge die auf den internen 10-Bit AD-Konverter gehen (Kondensator an AREF ist auf dem Layout vorgesehen. Typisch: 100nF. Als Referenz können die 3,3V aus dem Spannungsregler, sowie 1,1V intern gewählt werden.), sowie diverse Output-Compare Einheiten um Signalformen für beispielsweise PWM zu erzeugen. Jeder der 14 Pins ist zudem noch fähig einen Pin-Change-Interrupt auszulösen.
Software
Netzwerk-Stack
Als Netzwerk Stack kommt der uip-Stack von Adam Dunkels zur Verwendung. Er implementiert die Netzwerkfähigkeiten der höherliegenden Schichten (insgesamt IP, ARP (Echo), ICMP, UDP, TCP).
Stack-Applikation
Zur Demonstration ist dem Downloadpaket eine klassische Webserver-Anwendung beigelegt. Diese Applikation liegt in der obersten Schicht des OSI Modells und somit über dem uip-Stack. Die Anwendung implementiert einen einfachen Webserver, der über einen Browser abgefragt werden kann (GET) und über diesen auch Daten wieder empfangen kann(POST). Mit der Beispielapplikation können die 14 herausgeführten Pins an der 20-poligen Pfostenleiste auf Ein- oder Ausgang geschaltet werden, sowie in ihrem Pegel (HIGH +3,3V, LOW 0V) verändert werden.
Zusammenbau
Was wird benötigt
- Lötkolben (SMD tauglich)
- Fortgeschrittene Löterfahrung (0805-SMD, TQFP44)
- Atmel AVR Programmiergerät mit 6poligem Stecker und Kompatibilität für 3,3V Zielspannung
- Spannungsquelle 5V - 7V DC mit mindestens 150mA
Bestückung
- niedrige Bauelemente wie 0805 Kondensatoren/Widerstände bestücken
- ATMega168, ENC28J60 und LM1117 bestücken
- Quarz und andere Kondensatoren bestücken
- Pfostenleisten bestücken
- Ethernet-Buchse bestücken
- Lötkolben nicht zu lange an das gleiche Bauteil halten
- Vorsichtig löten um keine schwer auffindbaren Lötbrücken einzubauen
- Wenn nötig mit Lupe oder Mikroskop löten
Inbetriebnahme
- Sources herunterladen (Downloads)
- Am Netzwerk anschließen
- Spannungsquelle an die 2-polige Stiftleiste anschließen (Polung beachten!)
- Programmiergerät an 6-poliger Programmierschnittstelle anschließen
- Optional: Programm modifizieren und neu kompilieren (siehe #Konfiguration)
- HEX-Datei in den Mikrocontroller flashen
- Fuses des AVR modifizieren (LFuse: E0h, HFuse: DDh)
- Taktquelle auf Ext. Clock stellen (Startup Time 65ms)
- Brown Out Detector auf 2,7V einstellen
Nach dem Programmiervorgang wird der Mikrocontroller automatisch gestartet und beginnt den ENC28J60 zu initialisieren und seine eigene Taktquelle auf 12,5MHz einzustellen. Ab jetzt sollte die grüne Leuchtdiode an der Netzwerkbuchse dauerhaft leuchten und bei Empfangsaktivität erlischen. Die andere (rote/gelbe) Leuchtdiode leuchtet bei Sendeaktivität.
Sofern die Konfiguration in Schritt 5 nicht verändert wurde, sollte der Server unter der IP-Addresse 192.168.0.93 erreichbar sein. Für einen schnellen Funktionstest kann also das Kommandozeilen-Tool "ping" benutzt werden.
ping 192.168.0.93
Konfiguration
Standardkonfiguration:
- MAC-Adresse: 00:03:6F:55:1C:C2
- IP-Adresse: 192.168.0.93
- Netzmaske: 255.255.255.0
- Gateway: 192.168.0.254
- WebServer-Port: 8080
Die Konfiguration der MAC-Adresse kann in Hardware/Enc28j60.h angepasst werden. IP-Adresse, Netzmaske und Gateway lassen sich in Main.c anpassen und der Webserver-Port kann in Net/TcpApps/HttpD.h angepasst werden. Nach dem Anpassen muss das Projekt neu kompiliert werden. Hierfür muss eine AVR-GCC Installation (zB WinAVR für Windows) vorhanden sein.
Anhang
Benutzer-Modifikationen
NTP Client
Tobias Flöry hat auf seiner Seite einen NTP Client in den Udp-AppHub integriert. Seine Seite ist hier zu finden.