AVR-Net-IO02 Mrz

Von krisi am 02.03.2010. Es wurden 9 Kommentare hinterlassen. Du kannst einen Kommentar hinterlassen oder trackbacken.

Ich habe mir mal wieder ein interessantes Spielzeug besorgt…

Schon vor ein paar Jahren war ich begeistert von dem AVR-basierten Webserver-Projekt von Ulrich Radig (http://www.ulrichradig.de/), bin jedoch mangels kompatibler Netzwerkkarte und Elektronikkenntinissen leider nie dazu gekommen, einen Nachbau zu wagen. Vor ein paar Wochen lief mir dann durch Zufall ein Bausatz von Pollin in den Browser.. Das AVR-Net-IO-Board, für 20€ als Bausatz verkauft, ist eine reltiv ausgereifte und günstige, einfach aufbaubare Version der in den letzten Jahren immer weiter entwickelten AVR-basierten Netzwerk-Projekte und dank aktiver Community eine perfekte Basis für eigene Gehversuche im Bereich embedded networking.

Hardware

Geliefert werden von Pollin eine Tüte “Vogelfutter”, drei ICs, eine professionell gefertigte zweiseitige Platine, sowie eine relativ ausführliche Aufbauanleitung. Wer ein bisschen Ahnung von Elektronik und schon ab und zu mal was gelötet hat, schlägt sich in dem mehrseitigen Dokument die Bestückungstabelle mit den Bauteilwerten auf und lötet das Board in nicht ganz 30min professionell zusammen. (Wer die Anleitung aufmerksam durchliest wird vielleicht nicht den selben Fehler machen wie ich und beachten, dass die Klemmleisten anreihbar sind! Meine wurden daher leider etwas scheps).
Sehr schön ist die auf der Platine integrierte Spannungsversorgung. ein paar Dioden sorgen dafür, dass das Board sowohl mit Gleich- als auch Wechselspannung betriebn werden kann und bieten gleichzeitig einen Verpolschutz, ein LM7805 sowie ein weiterer Festspannungsregler machen aus Eingangsspannungen zwischen 9V und 24V immer saubere 5V und 3V für die Schaltung. Zum Betrieb solcher Schaltungen setze ich hauptsächlich ein lüfterloses, altes PC-Netzteil ein. Dieses liefert mir stabile 12V bzw 5V. Damit könnte man sich im Prinzip den LM7805 und die Gleichrichterschaltung auf dem Board sparen, da ich aber später im Produktivbetrieb mit dem Board evtl. auf ein billiges AC-Steckernetzteil umsteigen werde habe ich beschlossen an die 2pol-Kontaktleiste die 12V-Schiene des PC-Netzteils anzuklemmen. Dabei wird der 5V-Spannungswandler bedenklich warm. Ich hab’ ihm kurzerhand einen kleinen Kühlkörper aus der Bastelkiste spendiert und ihn so auf moderate 50°C im Dauerbetrieb herunter bekommen.

Die eigentliche Arbeit auf dem Board leistet ein mit einem externen Quarz auf 16MHz getakteter ATMega32, auf den Pollin eine Demo-Firmware geflasht hat, die mit dem mitgelieferten Windows-Programm einfache Pinabfragen und Ausgangsschaltungen ermöglicht. Der ATMega wird dabei unterstützt von einem Microchip ENC28J60 Ethernet-Controller, der die Übertrager der Netzwerkbuchse speist. Der dritte IC auf dem Board ist ein MAX232-Nachbau, der die Pegelwandlung für die integrierte RS232-Schnittstelle erledigt.

Verbindung mit der Außenwelt bekommt das Board über Ethernet, RS232, einen Wannenstecker für einen ISP (Standardbelegung 10-pol) und einigen auf Klemmen, einen weiteren Wannenstecker und einen SUB-D 25 Male – Stecker, auf die die für eigene Schaltungen verfügbaren I/O-Pins des AVR zugänglich sind. Für den SUB-D Stecker hat Pollin übrigens auch eine “Adapterplatine” für wenig € im Programm, mit der sich die Pins eines SUB-D 25 Steckers auf Klemmleisten herausführen lassen. So kann man die Adapter in verschiedene Projekte integrieren und das AVR-NetIO flexibel für verschiedene Anwendungen einsetzen.

Der erste Eindruck der Hardware ist überraschend. Man hält eine kompakte Platine (ca. 7×12 cm) in der Hand, die über zahlreiche Anschlussmöglichkeiten und Erweiterungspotential verfügt und zudem durch die Standardanschlüsse auch recht schnell von einem Projekt ins andere übernommen werden kann. Für den Preis keine schlechte Investition!

Software

Wie ich oben ja bereits erwähnt habe, hat Pollin im Auslieferungszustand auf dem ATMega eine eigene Firmware gespeichert, die über eine voreingestellte IP-Adresse verfügt und sich über den RS232-Port mittels weniger simpler Befehle mit einem PC und einem Terminalprogramm recht schnell konfigurieren lässt.
Mit GETIP lässt man sich die aktuelle IP-Adresse anzeigen, SETIP ändert diese. Um auszutesten, was mit dem Board so alles machbar sein könnte, empfiehlt es sich, einmal einen Blick in die mitgelieferte Software zu werfen. Leider läuft diese ausschließlich auf Windows (Mit dem .NET 2.0 – Framework). Also die virtuelle Maschine mit dem alten XP herausgekramt und die Software installiert (wozu braucht so ein simples Tool eine Installation mit setup.exe und Trallala?). Nach Eingabe der korrekten IP-Adresse des NetIO-Boards, kann man dann im Programmfenster die Zustände der I/O-Pins betrachten und setzen. Die Werte der 4 nach außengeführten ADC-Eingänge werden direkt in Volt (mit vielen Nachkommastellen) angezeigt, über eine (ausdrücklich als BETA gekennzeichnete) Teilfunktion des Programms kann man ein optional an das Board angeschlossenes Display mit Daten beschicken.
Viele werden auf diese weise bereits eine Menge mit dem Board anfangen können. So könnte man z.B. verschiedene 230V-Verbraucher (Beispielsweise einen selten genutzten Fileserver im Keller oder die Weihnachtsbeleuchtung im Garten) über Relais an den Digitalausgängen des AVR via Netzwerk von jedem Windowsrechner aus schalten und sich aktuelle Temperaturwerte oder Versorgugsspannungen anzeigen lassen.

Doch der geübte Bastler will mehr ! ;) … So ist es z.B. durchaus unbefriedigend, dass man das Net-IO-Board nicht ohne viel eigene Software zu entwickeln von Linuxrechnern und eigener Software aus ansteuern kann. auch eine Zugangsbeschränkung wäre sinnvoll, um z.B. die Rolläden im Wochenendhaus via Internet steuern zu können, ohne dass fremde dazwischenfunken.

Hier kommt die Software Ethersex (http://www.ethersex.de) ins Spiel. Die Weiterentwicklung von Etherrape (http://www.lochraster.org/etherrape/) ist eine Open-Source Firmware für den AVR-Mikrocontroller und bietet zahlreiche interessante Features für verschiedene AVR-basierte Webserverprojekte wie z.B. eben auch das AVR-NET-IO. Dazu gehören z.B. IPv6 Unterstützung, ein integrierter Webserver, Unterstützung des DALLAS 1-wire Busses, ein Eindrahtbus (Masse und Datenleitung), an den sich zahlreiche ICs wie Temperatursensoren, digitale I/O-Chips oder RTCs anschließen und über den Bus mit Energie versorgen lassen, außerdem SD-Card Unterstützung, das eigene ECMD – Protokoll, mit dem man via Netzwerk oder RS232 eine Art Terminal auf dem AVR nutzen kann, um u.a. Pinzustände abzufragen und zu setzen oder Sensordaten abzufragen und Implementierung einiger andere Netzwerkdienste.

Wer noch keine Erfahrung hat im Programmieren und Kompilieren von AVR-Software, für den empfiehlt sich der Firmware Builder, mit dem man sich in wenigen, einfachen Schritten ein fertig konfiguriertes und kompiliertes Image für seine Hardwareplattform herunterladen kann.
Wer an umfangreichern Funktionen und eigenen Softwareergänzungen interessiert ist, oder wer eine Hardware-Plattform besitzt, die der Firmware Builder nicht unterstützt, der besorgt sich den aktuellen Quelltext und baut sich sein eigenes Image. Auf einem Linux-System (die wenigen Verirrten, die noch keines nutzen, besorgen sich eine Live-CD oder installieren auf ihrem Windows-System die cygwin-Umgebung mit den entsprechenden Programmen) benötigt man für die AVR-Entwicklung allgemein ein paar Pakete aus den Universe-Quellen und speziell für die Ethersex-Entwicklung noch ein paar kleine Zusätze. Mit der folgenden (Ubuntu-)Paketauswahl sollte man arbeiten können:

krisi@asterix:~$ sudo apt-get install gcc-avr avr-libc avrdude dialog gawk m4 libncurses5-dev

Auf neueren Ubuntu-Systemen (ich verwenden momentan noch 8.10 Intrepid Ibex) oder auf anderen Linux-Distributionen können die Pakete evtl. anders benannt sein. Am besten schaut man sich dazu mal die Kompiliervoraussetzungen im Ethersex-Wiki an.

In der bash wechselt man nun in das (entpackte!) Quelltext-Verzeichnis und startet mit

krisi@asterix:~$ make menuconfig

das (halb-grafische) Konfigurationsscript. Hier kann man dann relativ simpel seine Hardwareplattform einstellen (es gibt natürlich bereits vorgefertigte Einstellungssätze für AVR-NET-IO) und nach Herzenslust Funktionen auswählen. Wenn man den im AVR-NET-IO standardmäßig verbauten ATMega32 verwendet, kann es sein dass man irgendwann ein zu großes Hexfile erhält, das nicht mehr in den Flash des Controllers passt. In diesem Falle empfehle ich, den ATMega32 durch einen ATMega644 mit doppelt so viel Flash und gleicher Pinbelegung zu ersetzen.
Nachdem man sich seine Konfiguration zusammengebastelt hat, kompiliert man Ethersex mit einem einfachen

krisi@asterix:~$ make

im Quelltextordner. Nach kurzer Zeit dürfte das Flashimage fertig und als ethersex.hex im Quelltextverzeichns abgelegt sein.
Mit dem Kommandozeilentool avrdude wird nun das Hexfile in den Controller geschrieben:

krisi@asterix:~$ avrdude -p m32 -c stk200 -U flash:w:ethersex.hex

Wenn soweit alles funktioniert hat, ist der Ethersex-Server jetzt übers Netzwerk erreichbar. Je nach persönlicher Konfiguration kann man das Board nun im lokalen Netzwerk und mittels Port-Forwarding im heimischen Router auch darüber hinaus als energiesparende Schaltzentrale verwenden.

1-wire Temperatursensoren


Durch die Unterstützung der in Bastlerkreisen beliebten 1-wire Sensoren (z.B. DS18S20) kann das AVR-NET-IO beispielsweise auch zur Temperaturüberwachung eingesetzt werden. Die Sensoren kommen in einem TO-92 Gehäuse daher, sind als von außen nicht von üblichen Transistoren zu unterscheiden. Genial ist die Tatsache, dass sich große Mengen der Sensoren parallel an eine Zweidrahtleitung anschließen und dann über das 1-wire-Protokoll komplett softwaregesteuert digital auslesen lassen. Die ICs können sich aus der Datenleitung mit Energie versorgen (=Parasitäre Stromversorgung) und durch die Wandlung der Temperaturwerte in digitale Informationen direkt im Sensor und die digitale Datenübertragung fallen aufwändige analoge Schaltungen zum auswerten von Widerstandswerten (wie bei PT100-Sensoren) gänzlich weg. einziger Schaltungsaufwand auf der Controlelrseite: Ein 4.7k-Widerstand zwischen +5V und der Datenleitung, um die Energieversorgung über den Datenbus sicherzustellen. Über die ECMD-Schnittstelle des AVR-NET-IO kann man sich alle am Bus angeschlossenen Chips anzeigen lassen, einen Messvorgang einleiten und anschließend die Messwerte abfragen:

krisi@asterix:~$ nc 192.168.3.128 2701
1w list
10adc6f90106006c
1054d1f9010600a5
 
1w convert
Ok
 
1w get 1054d1f9010600a5
23.6
 
1w get 10adc6f90106006c
21.9

Wie man sieht liefern die Sensoren das Ergebnis direkt als Dezimalzahl mit einer Nachkommastelle in °C aus. Einfacher kann man’s eigentlich kaum machen.

Mit simpelster Software lässt sich der 1-wire Bus dann übers Netzwerk nutzen. Mit dem Netzwerktool netcat kann man sich auf den ECMD-Server des Boards auf Port 2701 verbinden und so mit dem Gerät kommunzieren.
Das geht natürlich auch automatisiert! Zum Beispiel mit einem kleinen PHP-Sript, das einen TCP-Socket aufbaut, und darauf Befehle schreibt und die Antworten ließt und auswertet:

function request($request) {
    $rs = fsockopen('192.168.3.128', 2701);
    if (!$rs) {
        $response  = "Kann Verbindung nicht aufbauen!";
        die();
    }
    else {
        $response ="";
        $request = "!" . $request . "\r\n";
        fputs($rs, 'auth '.'root'.' '.'geheim'."\r\n");
        fputs($rs, $request);
 
        while (!feof($rs)) {
            $response .= fgets($rs, 128);
        }
        fclose($rs);
    }
    return $response;
}
 
request('1w convert');
 
echo "aktuelle Temperatur: ".request('1w get 1054d1f9010600a5');

Um die Stabilität der Hard- und Software zu testen habe ich einen 24h-”Langzeittest” aufgebaut: Ein Cronjob auf dem gi-project.de – Server hat einmal in der Minute eine Messung auf dem AVR bei mir Zuhause ausgelöst und dabei die Temperaturwerte von drei DS18S20 (Raumtemperatur, Heizkörpertemperatur und Außentemperatur) in eine MySQL-Tabelle geschrieben. Das Experiment ist gelungen, das Board hat meinen “Langzeittest” voll und ganz bestanden. Zwar war die Geschwindigkeit, mit der die Messungen erfolgten und ausgewertet wurden mit Zeiten im zweistelligen Sekundenbereich alles andere als schnell, aber für einfache Mess- und Regelzwecke ist das durchaus ausreichend.

Denkbare Projekte für das NET-IO Board mit Ethersex-Software wären z.B.

  • LAN-Steckdosenleiste
  • Heizungsüberwachung oder -steuerung (in Arbeit)
  • Hausautomation
  • Wetterstation
  • Roboter
  • Webserver für Homepage (in Verbindung mit SD-Karte)
  • Beleuchtungssteuerung

Prinzipiell hängt das alles nur von der eigenen Phantasie ab!

Ich hoffe, ich konnte euch mit diesem Artikel ein bisschen für Das Thema Mikrocontroller und embedded systems interessieren und werde bei positiven Rückmeldungen ab und zu gerne weitere Artikel zu dem Gebiet und laufenden Projekten schreiben.

Herzlichen Dank an dieser Stelle auch an das Ethersex-Projekt und all seine Mitwirkenden!

Wer neu einsteigen möchte in das Thema Mikrocontroller und AVR, dem sei das AVR-Tutorial von www.mikrocontroller.net wärmstens empfohlen!
Immer wieder interessantes zum Thema Hardware- und Softwareentwicklung, auch für Einsteiger gut aufbereitet, bietet das Roboternetz-Wiki von roboternetz.de.

Kristian

9 Kommentare zu "AVR-Net-IO"

  1. Bernd sagt:

    Hallo Kristian,
    ich möchte die für die gelungene Beschreibung danken!!! Ich denke in den nächsten Wochen und Monaten werde ich etwas damit rumexperimentieren.
    Sollte was Sinnvolles bei rumkommen, werde ich es verbreiten. Als Erstes aber mal den Einstieg in Linux (Ubuntu) schaffen.
    Viele Grüße,
    Bernd

  2. krisi sagt:

    Hallo Bernd,

    schön, dass dir der Artikel gefällt! Gerne schreibe ich mehr in diesem Bereich. Der Einstieg in Linux lohnt sich auf jeden Fall! In vielen Fällen ist auch ein Umstieg (ich nehme mal an du bist ein M$-Nutzer) die konsequente Folge ;)
    Willkommen in einem hochinteressanten Themengebiet!

    Mein AVR-Projekt bewegt sich leider momentan kaum weiter, da ich einen Haufen anderes Zeug um die Ohren habe. Sobald ich wieder etwas Zeit finde, gehts hier weiter mit dem Thema Messwerterfassung an der Heizungsanlage.

    Grüße
    Kristian

  3. [...] elektronische Umsetzung des Projekts ist denkbar einfach: Wie in meinem vorhergehenden Artikel über das AVR-NET-IO Board von Pollin beschrieben, ist auf dem darauf verbauten AVR die Software [...]

  4. Andreas sagt:

    Servus krisi kannste mir nochmal erklären wie man die ds18s20 genau anshliesst irgendwie läuft das bei mir net

    danke

  5. krisi sagt:

    Hallo Andreas, welche Software läuft auf deinem Net-IO? die Pollin-Software oder ethersex?
    Die Pollin-Software lässt sich leider nur über das mitgelieferte Windows-Programm vom PC aus auslesen. Diese spricht auch soweit ich weiß kein 1-wire Protokoll, kann also mit den DS18S20 leider nicht sprechen.
    Wenn du ethersex auf den AVR geflasht hast, kannst du zB. über die serielle Schnittstelle oder über die ecmd-Schnittstele via Netzwerk (mit telnet auf Port 2701 — “telnet 192.168.3.128 2701″) auf eine Textkonsole zugreifen. Hier kannst du dir mit dem Befehl “1w list” die IDs aller am Bus hängenden Chips ausgeben lassen. Um nun die Sensorwerte abfragen zu können, gibst du zunächst den Befehl “1w convert” ein, der die Messwerte aller angeschlossenen Sensoren ausliest. Mit dem Befehl “1w get 0123456789abcdef” lässt du dir die gemessenen Werte eines Sensors zurückgeben, wobei “0123456789abcdef” die Seriennummer deines DS18S20 ist (lässt sich mit 1w list in Erfahrung bringen).

    Voraussetzung für die Nutzung von ECMD und 1w-Protokoll ist, dass du ethersex mit den entsprechenden Optionen kompiliert hast. Wie man die Ethersex-Firmware auf die eigenen Bedürftnisse anpasst, wird im Ethersex-Wiki ausführlich beschrieben: http://www.ethersex.de/index.php/Kategorie:StepByStep . Am einfachsten geht das mit “make menuconfig”.

    Wenn du nach Quelltext suchst, um die Daten mit einem PC auszulesen, verweise ich dich auf meinen neueren Artikel (AVR-NET-IO meets Heizung) http://blog.gi-project.de/2010/05/avr-net-io-meets-heizung/ . Dort findest du ein einfaches PHP-Script zur Sensorabfrage übers Internet. Eine Lösung als Bash-Script kann ich bei Bedarf evtl. auch noch bauen.

    Wenn du noch Fragen hast, kannst du dich auch gern direkt per Email an mich wenden (<mein Blog-Benutzername>@gi-project.de).

    Gruß
    Kristian

    EDIT: Kleiner Nachtrag: Ich hatte “ausliest” verstanden .. du meintest “anschließt” ^^ sorry .. der Anschluss erfolgt an PIND6 des AVR (ethersex-standard). Dies ist die Datenleitung des 1-wire Bus und ist auf dem NET-IO-Board auf den mit “Ext” beschrifteten Wannenstecker (Pin 5) geführt. Sie muss mit Pin2 des DS1820 verbunden werden (das mittlere der drei Beinchen). die beiden äußeren Beinchen des DS1820 werden direkt am IC verbunden und auf Masse gelegt (gemeinsam mit der Masseleitung des NET-IO — abgreifbar an den Schraubklemmen “GND” auf dem Board). Außerdem muss ein Pullup-Widerstand (4.7k) von VCC (ebenfalls an den Klemmen abgreifbar) auf PIND6 eingebaut werden. Eine ausführliche Beschreibung und Bildchen gibts auf http://www.ethersex.de/index.php/Dallas_1-wire_Bus.
    Viel Erfolg.

  6. Andreas sagt:

    danke dir hast mir sehr dabei geholfen
    hast du noch ne idee zufällig welches programm zum auslesen der temperatur über netzwwerk man verwenden könnte

  7. krisi sagt:

    im prinzip kannst du alles verwenden, was in irgendeiner Weise über TCP mit dem NET-IO kommunizieren kann. Wenn du einen Webserver hast bietet sich da PHP an (siehe oben).
    Ein “fertiges” Programm zur Abfrage der Temperaturen wüsst’ ich gerade keins. Sorry

  8. Ingo Klein sagt:

    EDIT: Kleiner Nachtrag: Ich hatte “ausliest” verstanden .. du meintest “anschließt” ^^ sorry .. der Anschluss erfolgt an PIND6 des AVR (ethersex-standard). Dies ist die Datenleitung des 1-wire Bus und ist auf dem NET-IO-Board auf den mit “Ext” beschrifteten Wannenstecker (Pin 5) geführt. Sie muss mit Pin2 des DS1820 verbunden werden (das mittlere der drei Beinchen). die beiden äußeren Beinchen des DS1820 werden direkt am IC verbunden und auf Masse gelegt (gemeinsam mit der Masseleitung des NET-IO — abgreifbar an den Schraubklemmen “GND” auf dem Board). Außerdem muss ein Pullup-Widerstand (4.7k) von VCC (ebenfalls an den Klemmen abgreifbar) auf PIND6 eingebaut werden. Eine ausführliche Beschreibung und Bildchen gibts auf http://www.ethersex.de/index.php/Dallas_1-wire_Bus.
    Viel Erfolg.

    habe einen ds18s20… habe es genauso mal versucht.. aber ich bekomme bei der abfrage immer nur ein okay…. sprich die teile werden nicht erkannt… habe ethersex installiert.. hat jemand von euch ne idee

  9. krisi sagt:

    Hallo Ingo,

    Die DS18S20 hab’ ich auch im Einsatz. Sie arbeiten seit mehreren Monaten problemlos mit dem AVR-Net-IO zusammen. Welche Befehle führst du denn auf dem Net-IO aus? und über welche Schnittstelle (ECMD auf Port 2701, Webinterface, Serielle Schnittstelle)?

    Um den Controller via Netzwerk anzusprechen benutz’ ich das ethersex-eigene “ECMD”-Terminal, per default erreichbar mit ‘telnet’ oder ‘netcat’ auf Port 2701 des Net-IO.
    Was liefert bei dir der Befehl ’1w list’ auf dem ECMD-Terminal?
    Wenn es nur ein “OK” ist, dann solltest du nochmal die Verdrahtung prüfen (richtiger PIN? Pull-Up Widerstand eingebaut? Wackelkontakte? Zu langes Kabel? Kalte Lötstellen? Kurzschlüsse?). Wenn die Verdrahtung soweit OK is, tausch’ mal deinen DS18S20 aus. Evtl. ist das Bauteil ja defekt.
    Wenn dir ’1w convert’ nur ein “OK” ausgibt, dann ist das völlig normal. ’1w convert’ ließt alle angeschlossenen 1w-Sensoren aus und speichert ihre aktuellen Werte im Speicher des AVR. Damit hast du einen einheitlichen Zeitpunkt, zu dem die Daten ausgelesen wurden. Die eigentlichen Messwerte in °C erhälst du dann erst, wenn du sie nach dem convert aus dem AVR-Speicher ausliest (’1w get ‘ gefolgt von der ID des Sensors, dessen Wert du auslesen willst).

    Ich hoffe das hilft dir weiter. Melde dich wieder, wenn’s weiterhin Probleme gibt.

    Gruß
    Kristian

Hinterlasse einen Kommentar

© 2009 GlobalIndustry-Project Blog