Verweise

Download Ethernet Version
Download serielle Version
Java Beispielprogramm für PC

Hammer Terminal

Multitasking mit Protothreads und Protosockets

Bezugsquellen:
Ethernet Controller: Digikey
Ethernet Übertrager: bei mir
Komplette Module: Chip45

Foto vom Ethernet Interface CumbX1-NET
CrumbX1-NET von Chip45

Foto vom Mikrocontroller Modul Crumb168-USB
Crumb168-USB von Chip45

Historie

2.11.6 16.05.2012
Performance der I/O Status Seite verbessert.

2.11.5 07.05.2012
Das Script makefsdata wurde so geändert, dass es beim Konvertieren von Textdateien in Byte-Arrays die Zeilenumbrüche im originalen Format (DOS/Unix) beibehält.
Umgehung wegen falscher ADC Funktionsregister-Strukturen in WinAVR für Xmega128D3 eingebaut.
Korrigiert, dass der ADC eines Xmega immer die Werte der vorherigen Messung zurück liefert, anstatt den aktuellen Wert.

2.11.4 01.05.2012
Einstellungen werden nun vor dem Einschalten des Ethernet Interfaces aus dem EEPROM ausgelesen, was gegen sporadischen Verlust beim Hochfahren hilft.
Korrektur von PT_YIELD, der in untergeordneten Treads nicht funktionierte (harmlos, weil PT_YIELD nicht verwendet wird).
Der durch die Email Applikation überwachte Port ist nun in hw-layout.h einstellbar.

2.11.3 28.04.2012
Korrektur: Unvollständige Dateiübertragung von SD Karte im Fall von TCP re-transmissions.
Speicherbedarf ein bisschen reduziert.

2.11.2 24.04.2012
Korrektur: Der Thread der das Inhaltsverzeichnis der SD/MMC Karte anzeigt hatte nicht korrekt gewartet, wenn gleichzeitig ein anderer Thread auf die Karte zugegriffen hatte.

2.11.1 24.04.2012
Kein Größen-Limit mehr auf der Seite "Files on SD/MMC card".
Datei-Downloads von SD/MMC Karte haben nun einen Content-Length Header, so dass ein ordentlicher Fortschritts-Balken angezeigt wird.
Neuer Befehl "ip" am seriellen Port zeigt die aktuelle IP-Adresse an.

2.11.0 20.04.2012
Neu: Unterstützung für SD/MMC Karten.
Geändert: Auf CrumbX1-NET wird nun the hardware-Reset Leitung des Eth. COntrollers verwendet.

2.10.4 15.04.2012
Keine funktionale Änderung, nur Source Code Bereinigung.

2.10.3 11.04.2012
Korrektur: Serieller Port funktionierte nicht bei Xmega.
Korrektur: Zwei Timing Probleme bei Ethernet Initialisierung.

2.10.2 17.03.2012
Korrektur: Kompilierfehler bei ATmega2560.
Geändert: Befehle vom seriellen Port werden nun in der Hauptschleife ausgeführt (war bisher in der Interrupt Routine)

2.10.1 11.03.2012
Korrektur: Bessere Performance und keine Zufalls-Zeichen mehr in Webseiten.

2.10.0 09.03.2012
Neu: Unterstützung für CrumbX1-NET Module und andere Xmega Geräte.
Geändert: Die email Applikation schaltet nicht mehr pull-up's auf Port D ein.

2.9.0 23.02.2012
Neu: Unterstützung für mehr I/O Pins durch Schieberegister.

...

English version of this page

AVR Webserver I/O Modul

Weil aktuelle Computer keinen parallel-Port mehr haben, besteht zunehmend Bedarf für alternative externe I/O Schnittstellen.

Mit einem einzigen AVR Mikrocontroller und meiner Firmware bauen Sie sich ein solches Modul sehr kostengünstig und kompakt. Sie bekommen pro Modul über 100 (!) freie digitale und analoge I/O Pins, die Sie mit einfachen Text-Befehlen vom PC aus ansteuern. Dabei erfolgt die Verbindung zum PC wahlweise seriell (USB, Bluetooth) oder über Ethernet.

Mit dem enthaltenen Web-Server stellen Sie den Zustand der Eingänge innerhalb von Webseiten dar und natürlich können Sie auch HTML Formulare zur Steuerung der angeschlossenen Geräte entwerfen. Außerdem kann der Web Server Dateien von einer SD/MMC Karte ausliefern. Funktionen zum Beschreiben der Karte sind in der Firmware enthalten, jedoch von den Beispiel-Webseiten ungenutzt.

Das Modul kann einen Port mit bis zu 8 Leitungen selbstständig überwachen und Emails versenden, wenn einer der Pins auf auf High-Pegel geht.

Für die Ethernet Schnittstelle brauchen Sie zusätzlich zum AVR Mikrocontroller noch einen Ethernet Controller vom Typ CP2201. Bei der Firmwa Chip45 können sie solche Kombinationen fertig als Modul kaufen, die Firmware ist aber auch offen für eigene Schaltungen mit anderem Schaltplan.

Für Bluetooth schließen Sie einen Bluetooth Transmitter an den seriellen port an (z.B. ein BTM-222). Und für USB benutzen Sie einen USB-UART Chip, wie den FT232 oder den CP2102.

Die I/O Ports des AVR können mit Schieberegistern vom Typ 74HC165 und 74HC595 erweitert werden. So kommen sie auf bis zu 32 zusätzliche Eingänge und 32 zusätzliche Ausgänge. Außerdem wird ein serieller 12bit ADC vom Typ MCP3204 oder MCP3208 unterstützt, wie er auf dem Crumb644-NET Modul v1 vorhanden war.

Die Firmware ist modular aufgebaut und umfangreich kommentiert, damit Sie eigene Funktionen und Erweiterungen einbauen können. Programmiert wird dabei in C und ein bisschen Javascript. Lesen Sie dazu auch meinen Aufsatz Multitasking mit Protothreads und Protosockets.

Die NET Version enthält alle hier genannten Funktionen. Außerdem gibt es noch eine abgespeckte Variante, die nur den seriellen Port unterstützt, also ohne Ethernet und ohne Webserver. Sie

So funktioniert es

Bauen Sie eine Verbindung über USB, Bluetooth, HTTP Potokoll oder IP-Socket (Telnet) zum AVR auf. Dann senden sie Befehle in Text-Form und empfangen Antworten auf dieser Verbindung. Die Firmware unterstützt eine serielle und vier Ethernet Verbindungen gleichzeitig. Sie können jeden einzelnen Pin bitweise, byteweise oder mehrere Ports auf einmal ansprechen. Alle freien analogen und digitalten I/O Leitungen des AVR Mikrocontrollers sind so ansprechbar.

Zum Beispiel setzen Sie so den Pin PC3 auf High:

Sende: oPC3,1
Antwort: Ok

So fragen Sie den ganzen Port D ab:

Sende: iPD
Antwort: PD=60

So fragen Sie den dritten analogen Eingang ab:

Sende: a3
Antwort: ADC3=014C

Per HTTP fragen Sie den Pin PB5 so ab:

Request: http://192.168.0.123/io?iPB5
Response: PB5=0

Sie können bis zu 200 Befehle pro Sekunde ausführen.

Voraussetzungen

Die serielle Version läuft auf allen AVR Mikrocontrollern ab 8KB Progammspeicher (z.B. ATmega8). Sie harmoniert mit

Die Ethernet Version erfordert einen AVR mit mindestens 64KB Programmspeicher und 4KB Ram (z.B. ATmega644) und den Ethernet Controller Silabs CP2201. Bei Verwendung einer SD/MMC Karte empfehle ich einen Mikrocontroller mit doppelt so viel Speicher (z.B. Xmega128).

Sie können den Ethernet Controller an beliebige Pins anschließen. Die Firmware ist für einige Module von der Firma Chip45 vorkonfiguriert, und generell auch für andere Hardware-Konfigurationen geeignet.

Protokolle

* DHCP funktioniert mit wenigen Internet/WLAN Routern nicht (z.B. Vodafone EasyBox 803).

Bildschirmfotos

I/O-Befehle über TCP Socket (Telnet):
Bildschrimfoto von I/O Befehle über TCP Socket

I/O-Befehle über seriellen Port (USB):
Bildschrimfoto von I/O-Befehle über seriellen Port (USB)

I/O-Befehle über HTTP:
Bildschrimfoto von I/O-Befehle über HTTP

Web Server:
Bildschrimfoto vom Web Server

Bildschrimfoto vom Web Server

Bildschrimfoto vom Web Server

Bildschrimfoto vom Web Server

Bildschrimfoto vom Web Server

Bildschrimfoto vom Web Server

Befehle

Commands that affect all port pins:
d,DDCCBBAA  Set direction of all port pins,
            high=output, low=input
p,DDCCBBAA  Configure pull-up resistors,
            high=on, low=off
o,DDCCBBAA  Output data on all port pins
i           Read from all port pins

(auch als 64 bit Version auf großen AVR's)

Commands that affect one port:
dPB,xx      Set direction of port B
pPB,xx      Configure pull-up resistors of port B
oPB,xx      Output data on port B
iPB         Read from port B

Commands that affect a single port pin:
dPB0,i      Set direction of port B pin 0 to input
            (0 or i=input, 1 or o=output)
pPB0,e      Enable pull-up resistors of port B pin 0
            (0 or d=disabled, 1 or e=enabled)
oPB0,h      Output high on port B pin 0
            (0 or l=low, 1 or h=high)
iPB0        Read from port B pin 0

Analog inputs:
rVCC        Set analog reference
              On Xmega: INT1V (default), INTVCC (=VCC/1.6), AREFA, AREFB
              On Atmega:  VCC (default), EXT, 1.1V, 2.56V
a3          Read from analog pin 3
    
Extented inputs:
iPX          Read all extended inputs
iPX0         Read from extended input 0

Extented outputs:
oPY,xxxxxxxx Write all extended outputs (8,16,24 or 32 bit hex value)
oPY0,h       Write to extended output pin 0 (0 or l=low, 1 or h=high)
iPY          Read status of all extended outputs
iPY0         Read status of extended output 0
Port B ist hier nur als Beispiel genannt. Alle Ports sind auf diese Weise ansprechbar.

 

Stichwörter: AVR Ethernet Webserver Web Server embedded Ethernet Internet Mikrocontroller Netzwerk schalten steuern fernwirken ferne wirken fernsteuern Fernsteuerung remote USB Bluetooth seriell abfragen Sensoren Schalter Kontakte Relaises.