<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Sascha-Kimmel.de &#187; AVR-NET-IO</title>
	<atom:link href="http://www.saschakimmel.de/category/elektronik/avr-net-io/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.saschakimmel.de</link>
	<description></description>
	<lastBuildDate>Sun, 21 Feb 2010 08:00:17 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Ethersex auf AVR-NET-IO installieren mittels Pollin Atmel Evaluationsboard 2.0 und Windows</title>
		<link>http://www.saschakimmel.de/2010/02/ethersex-auf-avr-net-io-installieren-mittels-pollin-atmel-evaluationsboard-2-0-und-windows/</link>
		<comments>http://www.saschakimmel.de/2010/02/ethersex-auf-avr-net-io-installieren-mittels-pollin-atmel-evaluationsboard-2-0-und-windows/#comments</comments>
		<pubDate>Sun, 21 Feb 2010 08:00:17 +0000</pubDate>
		<dc:creator>Sascha</dc:creator>
				<category><![CDATA[AVR-NET-IO]]></category>
		<category><![CDATA[Elektronik]]></category>
		<category><![CDATA[ethersex]]></category>

		<guid isPermaLink="false">http://www.saschakimmel.de/?p=83</guid>
		<description><![CDATA[Nachdem ich bereits zuvor auf das Pollin AVR-NET-IO mit der Originalfirmware zugegriffen habe und gezeigt habe, wie man mit PHP auf das AVR-NET-IO zugreift habe ich mich entschlossen, Ethersex darauf zu installieren (zu flashen).
Dazu habe ich mir bei Pollin das ATMEL Evaluationsboard V2.0.1 als Fertigmodul bestellt und am PC angeschlossen. Da ich einen modernen PC [...]]]></description>
			<content:encoded><![CDATA[<p>Nachdem ich bereits zuvor auf das <a href="http://www.pollin.de/shop/dt/NjI5OTgxOTk-/Bausaetze/Diverse/AVR_NET_IO_Fertigmodul.html" target="_blank">Pollin AVR-NET-IO mit der Originalfirmware</a> zugegriffen habe und gezeigt habe, wie man mit <a href="/2010/02/avr-net-io-mit-php-ansteuern/">PHP auf das AVR-NET-IO</a> zugreift habe ich mich entschlossen, <a href="http://www.ethersex.de" target="_blank">Ethersex</a> darauf zu installieren (zu flashen).</p>
<p>Dazu habe ich mir bei <a href="http://www.pollin.de/shop/dt/NTI5OTgxOTk-/Bausaetze/Diverse/ATMEL_Evaluations_Board_V2_0_1_Fertigmodul.html" target="_blank">Pollin das ATMEL Evaluationsboard V2.0.1 als Fertigmodul</a> bestellt und am PC angeschlossen. Da ich einen modernen PC besitze verfügt dieser nicht mehr über einen physikalischen COM-Port, weshalb ich einen USB-COM-Adapter bei Amazon bestellt habe (mit Prolific IC), der aber nicht so recht funktionieren wollte. Wie sich später herausstellte, wird bei &#8220;einfachen seriellen Programmern&#8221; wie dem von Pollin das sogenannte &#8220;<a href="http://de.wikipedia.org/wiki/Bit-Banging" target="_blank">Bit Banging</a>&#8221; benutzt, wofür die Software direkt auf die Hardware-Leitungen des COM-Ports (RS-232) zugreifen muss, was mit den meisten USB-COM-Adaptern aber nicht funktioniert.</p>
<p>Daher habe ich dann einen alten PC mit zwei physikalischen COM-Ports und (nostalgischem) Windows 98 verwendet.<br />
Obwohl ich mit avrdude auf den Programmer zugreifen konnte wollte PonyProg dies nicht, so dass ich im weiteren nur auf die mir mögliche Programmierung mittels avrdude eingehen werde.</p>
<p>Aber alles der Reihe nach.</p>
<h2>Anforderungen</h2>
<p>Benötigt wird:</p>
<ul>
<li>das Pollin ATMEL Evaluationsboard V2.0.1 (siehe oben, Netzteil nicht vergessen!)</li>
<li> ein Windows-PC mit physikalischem COM-Port</li>
<li><a href="http://sourceforge.net/projects/winavr/files/" target="_blank">WinAVR</a> (installiert mit Standard-Optionen)</li>
<li>ein serielles Kabel m/w (ich habe <a href="http://www.amazon.de/gp/product/B000K86W0O/" target="_blank">dieses</a> verwendet, Roline serielles Kabel DB9 m/w 180cm)</li>
<li>ein <a href="http://www.pollin.de/shop/dt/MzgwOTk4OTk-/Bauelemente/Aktiv/Microcontroller/Microcontroller_ATMEGA32_16PU.html" target="_blank">ATmega32</a></li>
</ul>
<p>Im weiteren Verlauf gehe ich davon aus, dass das ATMEL Evaluationsboard von Pollin mit einem Netzteil verbunden ist und für das AVR-NET-IO ebenfalls bereits ein Netzteil sowie ein Netzwerkkabel vorhanden ist.</p>
<p>Für das AVR-NET-IO verwende ich dieses <a href="http://www.pollin.de/shop/dt/NTU5OTQ2OTk-/Stromversorgung/Netzgeraete/Steckernetzgeraete/EcoFriendly_Stecker_Schaltnetzteil_MW_3R15GS.html" target="_blank">ECO-Netzteil</a> in 9V-Einstellung, was (mit ELV Energie Monitor gemessen) gerade einmal 2,2W an 230V aufnimmt, so dass es bei 24/7-Betrieb pro Monat gerade einmal etwas mehr als 30 Cent an Stromkosten fordert.</p>
<h2>Anschluss</h2>
<p>Das serielle Kabel mit einem COM-Port und das andere Ende mit dem ISP-Port (oben!) am Evaluationsboard verbinden. Den ATmega 32 mit richtiger Polung in den Sockel stecken (Kerbe oben). Nach genauer Prüfung das Netzteil anschließen und mit dem Stromnetz verbinden.</p>
<p>Wenn alles korrekt war leuchtet jetzt die rote LED auf dem Board.</p>
<p><a href="http://www.saschakimmel.de/wp-content/uploads/2010/02/atmel1.jpg"><img class="aligncenter size-full wp-image-88" title="Pollin ATMEL Evaluationsboard V2.0.1" src="http://www.saschakimmel.de/wp-content/uploads/2010/02/atmel1.jpg" alt="" width="600" height="450" /></a></p>
<h2>Verbindungstest</h2>
<p>Nach der Installation befindet sich avrdude automatisch im Pfad und kann direkt aufgerufen werden (sofern diese Option nicht im Setup deaktiviert wurde). Im folgenden gehe ich davon aus, dass das Board an COM1 hängt, bei einem anderen Port muss dies jeweils entsprechend angepasst werden.</p>
<p>Eine Kommandozeile öffnen (<em>Start -&gt; Ausführen -&gt; cmd</em> bzw. <em>Start -&gt; Ausführen -&gt; command</em> unter Windows 98) und folgendes eintragen:</p>
<pre>avrdude -v -p atmega32 -c ponyser -P COM1</pre>
<p>Wenn alles korrekt angeschlossen wurde sollte avrdude jetzt einige Informationen zum Prozessor anzeigen.</p>
<h2>Flashen</h2>
<p><a href="http://www.ethersex.de/firmware-builder/list.cgi" target="_blank">Hier</a> eine Firmware als HEX-Datei für das AVR-NET-IO erstellen lassen. Dabei aufpassen, denn IP, Gateway, Netmask und MAC-Adresse sind in der URL bereits enthalten und können manuell geändert werden:</p>
<p>http://www.ethersex.de/firmware-builder/build.cgi?profile=avr-net-io&amp;CONF_ENC_MAC=00%3A22%3AF9%3A01%3A53%3AE3&amp;CONF_ENC_IP=<strong><span style="color: #ff0000;">192.168.0.110</span></strong>&amp;CONF_ENC_IP4_NETMASK=<strong><span style="color: #ff0000;">255.255.255.0</span></strong>&amp;CONF_ETHERRAPE_GATEWAY=<strong><span style="color: #ff0000;">192.168.0.1</span></strong></p>
<p><span style="color: #ff0000;"><span style="color: #000000;">Anschließend können dann die erzeugte Config-Datei und die ethersex.hex Datei heruntergeladen werden.</span></span></p>
<p><span style="color: #ff0000;"><span style="color: #000000;">Das kann übrigens auf einem anderen PC geschehen als der, der zum programmieren verwendet wird.</span></span></p>
<p>Doch zuerst sollten die <a href="http://www.mikrocontroller.net/articles/AVR_Fuses" target="_blank">Fuses</a> ausgelesen werden:</p>
<pre>avrdude -v -p atmega32 -c ponyser -P COM1 -U hfuse:r:high.txt:r -U lfuse:r:low.txt:r</pre>
<p>Im Auslieferungszustand hat ein ATmega32 die Fuses 0xE1 (low) und 0&#215;99 (high), lt. Pollin-Anleitung des AVR-NET-IO sollte der enthaltene ATmega32, der bereits fertig programmiert ist, die Fusebits 0xBF und 0xCA haben, auslesen konnte ich aber 0xFF und 0xCA.</p>
<p>Nun zur Programmierung des ATmega32. In der Kommandozeile unter Windows in das Verzeichnis wechseln, das die heruntergeladene ethersex.hex Datei enthält und dann folgendes zum programmieren eingeben:</p>
<pre>avrdude -p m32 -c ponyser -P COM1 -U flash:w:ethersex.hex -v</pre>
<p>Damit wird der Prozessor mit Ethersex geflashed &#8211; nach dem Schreiben wird automatisch ein Vergleich durchgeführt, ob das Schreiben funktioniert hat. Wenn alles funktioniert, dann jetzt weiter mit dem Setzen der Fusebits.</p>
<p><span style="color: #ff0000;"><strong>ACHTUNG! Mit <a href="http://www.mikrocontroller.net/articles/AVR_Fuses#Reaktivieren_bei_fehlerhaften_Taktquellen-Fuse-Einstellungen" target="_blank">falsch gesetzten Fusebits</a> kann man sich den uC so verändern, dass man ihn nicht mehr wie hier beschrieben programmieren kann! Das Setzen der Fusebits erfolgt auf eigene Gefahr!<br />
</strong></span></p>
<p>Diese Anleitung verwendet keinen Bootloader, daher habe ich nach <a href="http://www.wiki.elektronik-projekt.de/mikrocontroller/avr/fusebit_tutorial" target="_blank">gründlichem Studium der Fusebits</a> und unter Verwendung des <a href="http://www.engbedded.com/fusecalc/" target="_blank">FuseBit Calculators</a> die Fusebits auf 0xBF und 0xCB gesetzt &#8211; diese funktionieren bei mir mit dem Standard AVR-NET-IO Board und der o.a. Ethersex Firmware:</p>
<pre>avrdude -p m32 -c ponyser -P COM1 -U lfuse:w:0xBF:m -U hfuse:w:0xCB:m</pre>
<h2>Controller-Tausch</h2>
<p>Wenn alles funktioniert hat kann der im AVR-NET-IO enthaltene ATmega32 nun durch den soeben programmierten ersetzt werden. Dazu ist wie folgt vorzugehen:</p>
<ul>
<li>Netzteil am AVR-NET-IO und am Programmer vom Stromnetz trennen</li>
<li>den programmierten ATmega32 aus dem Programmer (Evaluationsboard) entfernen</li>
<li>den im AVR-NET-IO enthaltenen ATmega32 vorsichtig entfernen</li>
<li>den soeben programmierten ATmega32 im AVR-NET-IO-Board einsetzen &#8211; Achtung! Auf korrekte Einkerbung achten und den Controller nicht falsch herum einsetzen</li>
<li>Das AVR-NET-IO wieder mit dem Stromnetz verbinden</li>
</ul>
<p>Wenn alles funktoniert hat leuchtet die POWER-LED am AVR-NET-IO wieder wie zuvor. Nach einiger Zeit müsste dann auch die gelbe LED am RJ45-Anschluss leuchten.</p>
<p><a href="http://www.saschakimmel.de/wp-content/uploads/2010/02/atmel2.jpg"><img class="aligncenter size-full wp-image-91" title="Pollin AVR-NET-IO mit Ethersex" src="http://www.saschakimmel.de/wp-content/uploads/2010/02/atmel2.jpg" alt="" width="550" height="413" /></a></p>
<p>Im Browser nun die gewählte IP aufrufen.</p>
<p>Wenn alles funktioniert hat sieht man die Ethersex-Startseite:</p>
<p><a href="http://www.saschakimmel.de/wp-content/uploads/2010/02/ethersex.gif"><img class="aligncenter size-full wp-image-92" title="Ethersex Startseite" src="http://www.saschakimmel.de/wp-content/uploads/2010/02/ethersex.gif" alt="" width="550" height="290" /></a></p>
<p>Von hier an empfiehlt es sich <a href="http://www.ethersex.de/index.php/Feature_Liste" target="_blank">auf ethersex.de weiterzulesen</a> <img src='http://www.saschakimmel.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>http://IP.AD.RE.SSE/ecmd?help</p>
]]></content:encoded>
			<wfw:commentRss>http://www.saschakimmel.de/2010/02/ethersex-auf-avr-net-io-installieren-mittels-pollin-atmel-evaluationsboard-2-0-und-windows/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Lichtmessung mit AVR-NET-IO, Fototransistor und PHP</title>
		<link>http://www.saschakimmel.de/2010/02/lichtmessung-mit-avr-net-io-fototransistor-und-php/</link>
		<comments>http://www.saschakimmel.de/2010/02/lichtmessung-mit-avr-net-io-fototransistor-und-php/#comments</comments>
		<pubDate>Sat, 13 Feb 2010 09:02:40 +0000</pubDate>
		<dc:creator>Sascha</dc:creator>
				<category><![CDATA[AVR-NET-IO]]></category>
		<category><![CDATA[Elektronik]]></category>
		<category><![CDATA[avr]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.saschakimmel.de/?p=72</guid>
		<description><![CDATA[Nachdem ich zuvor schon geschrieben habe wie man einen LM35 Temperatursensor an das AVR-NET-IO anschließt, um diesen mit der Originalfirmware von Pollin auszulesen hier nun die Beschreibung, um einen Fototransistor anzuschließen. Diesen kann man z.B. zur Helligkeitsmessung verwenden.
Es sei angemerkt, dass der hier verwendete Fototransistor BPW 40 (BPW 96C, Conrad Electronic Bestellnummer 184055) mehr auf [...]]]></description>
			<content:encoded><![CDATA[<p>Nachdem ich zuvor schon geschrieben habe wie man einen <a href="/2010/02/temperaturmessung-mit-lm35-mit-avr-net-io-und-php/">LM35 Temperatursensor an das AVR-NET-IO anschließt</a>, um diesen mit der <strong>Originalfirmware </strong>von Pollin auszulesen hier nun die Beschreibung, um einen Fototransistor anzuschließen. Diesen kann man z.B. zur Helligkeitsmessung verwenden.</p>
<p>Es sei angemerkt, dass der hier verwendete Fototransistor BPW 40 (BPW 96C, <a href="http://www.conrad.de" target="_blank">Conrad Electronic</a> Bestellnummer <span id="mc_info_184055_artikelnummer">184055</span>) mehr auf den Infrarotbereich anspricht als auf Wellenlängen, die das menschliche Auge sieht. Daher ist diese Schaltung eher als &#8220;Proof Of Concept&#8221; zu verstehen &#8211; andere Fototransistoren können entsprechend ebenfalls verwendet werden.</p>
<p>Die Schaltung ist sehr einfach gehalten &#8211; natürlich können auch andere Anschlüsse (ADC1-4, GND, 5V) verwendet werden als hier dargestellt:</p>
<p><a href="http://www.saschakimmel.de/wp-content/uploads/2010/02/avrnetio-fototransistor.gif"><img class="aligncenter size-full wp-image-73" title="avrnetio-fototransistor" src="http://www.saschakimmel.de/wp-content/uploads/2010/02/avrnetio-fototransistor.gif" alt="AVR-NET-IO Anschluss eine Fototransistors" width="488" height="215" /></a></p>
<p>Die Schaltung ist nicht für die direkte Messung der Lichtintensität (z.B. in Lux, Lumen) ausgelegt, kann aber gut relative Lichtunterschiede erkennen. Der Wert eines ADC-Eingang kann sich zwischen 0 und 1024 bewegen, daher errechnet sich der prozentuale Wert wie folgt:</p>
<p><strong>100-(100/(1024/ADC-Wert))</strong></p>
<p>Hier der entsprechende Beispielcode für die Verwendung mit der <a href="./2010/02/avr-net-io-mit-php-ansteuern/">PHP-Klasse</a>:</p>
<pre>$avr = new AvrNetIo('192.168.0.90');
if ($avr-&gt;connect()) {
    $light = 100-(100/(1024/$avr-&gt;getAdc(2)));
    echo "Licht: $light%";
    $avr-&gt;disconnect();
} else {
        die("Verbindungsfehler!");
}</pre>
<p>Viel Spaß damit <img src='http://www.saschakimmel.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;">
<h1>Temperaturmessung mit LM35 mit AVR-NET-IO und PHP</h1>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.saschakimmel.de/2010/02/lichtmessung-mit-avr-net-io-fototransistor-und-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Temperaturmessung mit LM35 mit AVR-NET-IO und PHP</title>
		<link>http://www.saschakimmel.de/2010/02/temperaturmessung-mit-lm35-mit-avr-net-io-und-php/</link>
		<comments>http://www.saschakimmel.de/2010/02/temperaturmessung-mit-lm35-mit-avr-net-io-und-php/#comments</comments>
		<pubDate>Sat, 13 Feb 2010 08:40:38 +0000</pubDate>
		<dc:creator>Sascha</dc:creator>
				<category><![CDATA[AVR-NET-IO]]></category>
		<category><![CDATA[Elektronik]]></category>
		<category><![CDATA[avr]]></category>
		<category><![CDATA[temperaturmessung]]></category>

		<guid isPermaLink="false">http://www.saschakimmel.de/?p=66</guid>
		<description><![CDATA[Nachdem ich hier bereits meine PHP-Klasse zur Ansteuerung des Pollin AVR-NET-IO (manchmal auch als AVR-NetIo bezeichnet) vorgestellt habe, die ohne Änderung der Originalfirmware funktioniert hier nun Informationen zur Temperaturmessung mittels eines LM35 von National Semiconductor (LM 35 DZ), der an einem der 4 ADC-Eingänge angeschlossen wird. Diesen kann man z.B. bei Conrad Electronic unter der [...]]]></description>
			<content:encoded><![CDATA[<p>Nachdem ich <a href="/2010/02/avr-net-io-mit-php-ansteuern/">hier</a> bereits meine PHP-Klasse zur Ansteuerung des Pollin AVR-NET-IO (manchmal auch als AVR-NetIo bezeichnet) vorgestellt habe, die <strong>ohne Änderung der Originalfirmware</strong> funktioniert hier nun Informationen zur Temperaturmessung mittels eines <a href="http://www.national.com/mpf/LM/LM35.html" target="_blank">LM35 von National Semiconductor</a> (LM 35 DZ), der an einem der 4 ADC-Eingänge angeschlossen wird. Diesen kann man z.B. bei <a href="http://www.conrad.de" target="_blank">Conrad Electronic</a> unter der Bestellnummer 156600 für ca. 5 € bestellen.</p>
<p><a href="http://www.saschakimmel.de/wp-content/uploads/2010/02/avrnetio-lm35.gif"><img class="aligncenter size-full wp-image-68" title="avrnetio-lm35" src="http://www.saschakimmel.de/wp-content/uploads/2010/02/avrnetio-lm35.gif" alt="AVR-NET-IO LM 35 DZ" width="488" height="284" /></a></p>
<p>Anschließend kann man dann wie folgt den Temperaturwert berechnen:</p>
<p><strong>ADC-Wert * 0.0048828 * 100</strong></p>
<p>Hier der entsprechende Beispielcode für die Verwendung mit der <a href="/2010/02/avr-net-io-mit-php-ansteuern/">PHP-Klasse</a>:</p>
<pre>$avr = new AvrNetIo('192.168.0.90');
if ($avr-&gt;connect()) {
 $temp = 0.0048828 * $avr-&gt;getAdc(1) * 100;
 echo "Temperatur: $temp°C";
 $avr-&gt;disconnect();
} else {
 die("Verbindungsfehler!");
}</pre>
<p>So können bis zu 3 weitere Temperatursensoren angeschlossen werden.</p>
<p>Auf Grund der &#8220;nur&#8221; 1024 möglichen Werte an einem ADC-Port liegt die Genauigkeit des Wertes bei ca. 0,5°C.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.saschakimmel.de/2010/02/temperaturmessung-mit-lm35-mit-avr-net-io-und-php/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>AVR-NET-IO nicht mehr via Ethernet erreichbar?</title>
		<link>http://www.saschakimmel.de/2010/02/avr-net-io-nicht-mehr-via-ethernet-erreichbar/</link>
		<comments>http://www.saschakimmel.de/2010/02/avr-net-io-nicht-mehr-via-ethernet-erreichbar/#comments</comments>
		<pubDate>Tue, 09 Feb 2010 16:31:50 +0000</pubDate>
		<dc:creator>Sascha</dc:creator>
				<category><![CDATA[AVR-NET-IO]]></category>
		<category><![CDATA[Elektronik]]></category>
		<category><![CDATA[nmap]]></category>
		<category><![CDATA[pollin]]></category>

		<guid isPermaLink="false">http://2010.sascha-kimmel.de/?p=16</guid>
		<description><![CDATA[Hier ein Tipp für diejenigen, die die IP des AVR-NET-IO von Pollin geändert haben (womöglich über die NetServer Software) und die sie dann weder über die alte noch die neue IP erreichen können.
Es kommt manchmal vor, dass die AVR-NET-IO nicht die angegebene sondern eine andere im gleichen Netz verwendet &#8211; das war auch bei mir [...]]]></description>
			<content:encoded><![CDATA[<p>Hier ein Tipp für diejenigen, die die IP des AVR-NET-IO von Pollin geändert haben (womöglich über die NetServer Software) und die sie dann weder über die alte noch die neue IP erreichen können.</p>
<p>Es kommt manchmal vor, dass die AVR-NET-IO nicht die angegebene sondern eine andere im gleichen Netz verwendet &#8211; das war auch bei mir der Fall. Um diese zu finden kann man natürlich alle 255 IPs im Netz manuell durchsuchen (telnet 192.168.0.2 50290, telnet 192.168.0.3 50290 etc.) &#8211; aber NMAP ist viel einfacher.</p>
<p>Damit kann man einfach das gesamte lokale Netz scannen und findet dann dank &#8220;Pollin Electronic GmbH&#8221; die korrekte IP sehr schnell wieder.</p>
<p>Man muss nur auf <a href="http://nmap.org/download.html" target="_blank">NMAP.org unter &#8220;Microsoft Windows Binaries&#8221;</a> die aktuellste stabile Version downloaden, installieren und starten.</p>
<p>Unter &#8220;Ziel&#8221; oben links gibt man dann einfach das Netz gekürzt ein, z.B. 192.168.0.*und wählt bei &#8220;Profil&#8221; einfach &#8220;Ping scan&#8221; aus und klickt dann auf &#8220;Scan&#8221;. Nach ca. einer Minute sollte das AVR-NET-IO mit seiner IP gefunden sein:</p>
<p><a href="http://2010.sascha-kimmel.de/wp-content/uploads/2010/02/nmap.gif"><img class="alignnone size-full wp-image-17" title="NMAP AVR-NET-IO Scan Pollin Electronic" src="http://2010.sascha-kimmel.de/wp-content/uploads/2010/02/nmap.gif" alt="" width="653" height="599" /></a></p>
<p>Der Pfeil zeigt auf die Stelle, an der die IP des AVR-NET-IO zu finden ist.</p>
<p>Diese ist dann auf eine andere IP umkonfigurierbar.</p>
<h2>Die NetServer-Software stellt keine Verbindung her?</h2>
<p>Ganz gleich welche Einstellung im Feld AVR-IP vorgenommen wird, die NetServer-Software verwendet immer nur die bei Start initial angezeigte. Zur Lösung des Problem das Programm beenden und im Ordner, in dem sich die NetServer.exe befindet die Datei config.ini öffnen und in der Zeile &#8220;IP-Adress=&#8230;&#8221; die gefundene IP eintragen und das Programm wieder starten.</p>
<p>Nach einem Klick auf den &#8220;Connect&#8221;-Button sollte man direkt auf das AVR-NET-IO zugreifen können.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.saschakimmel.de/2010/02/avr-net-io-nicht-mehr-via-ethernet-erreichbar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AVR-NET-IO mit PHP ansteuern</title>
		<link>http://www.saschakimmel.de/2010/02/avr-net-io-mit-php-ansteuern/</link>
		<comments>http://www.saschakimmel.de/2010/02/avr-net-io-mit-php-ansteuern/#comments</comments>
		<pubDate>Tue, 09 Feb 2010 15:33:30 +0000</pubDate>
		<dc:creator>Sascha</dc:creator>
				<category><![CDATA[AVR-NET-IO]]></category>
		<category><![CDATA[Elektronik]]></category>
		<category><![CDATA[elektronik.avr]]></category>
		<category><![CDATA[mikrocontroller]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[pollin]]></category>

		<guid isPermaLink="false">http://2010.sascha-kimmel.de/?p=5</guid>
		<description><![CDATA[Vor einigen Tagen habe ich mir das AVR-NET-IO von Pollin bestellt. Eine sehr interessante kleine Schaltung &#8211; schon vor einigen Jahren hätte ich gerne auf einfache Weise über Ethernet gemessen und geschaltet &#8211; das AVR-NET-IO macht es endlich möglich. Für C-Control von Conrad Electronic, das ich vor allem für den PropController für Halloween verwendet habe, [...]]]></description>
			<content:encoded><![CDATA[<p>Vor einigen Tagen habe ich mir das <a href="http://www.pollin.de/shop/dt/NjI5OTgxOTk-/Bausaetze/Diverse/AVR_NET_IO_Fertigmodul.html" target="_blank">AVR-NET-IO von Pollin</a> bestellt. Eine sehr interessante kleine Schaltung &#8211; schon vor einigen Jahren hätte ich gerne auf einfache Weise über Ethernet gemessen und geschaltet &#8211; das AVR-NET-IO macht es endlich möglich. Für C-Control von Conrad Electronic, das ich vor allem für den PropController für Halloween verwendet habe, war das nicht so einfach möglich.</p>
<p>Als PHP-Entwickler musste ich natürlich gleich eine Klasse zur Ansteuerung erstellen, so dass man direkt alle Befehle der Standard-Firmware ausführen kann. Später werde ich vermutlich auch andere Firmware wie etwa <a href="http://www.ethersex.de/index.php/Ethersex" target="_blank">Ethersex</a> dafür verwenden, aber erst einmal möchte ich einfach anfangen.</p>
<p>Langer Rede, kurzer Sinn &#8211; hier ist die Beschreibung der PHP-Klasse <img src='http://www.saschakimmel.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2>Verfügbare Methoden</h2>
<p>Zusätzlich zu den direkten Mappings der Befehle auf PHP-Methoden gibt es auch einige Methoden, die aggregierte Informationen zurückliefern.</p>
<h3>Verbindung herstellen und trennen</h3>
<pre>$avr = new AvrNetIo('192.168.0.90');
$avr-&gt;connect();
$avr-&gt;disconnect();</pre>
<h3>Versionsinformationen abfragen</h3>
<pre>$avr-&gt;getVersion();</pre>
<p>liefert ein assoziatives Array der Form</p>
<pre>array('uc' =&gt; "ATMega32", 'ver' =&gt; "1.03", 'nic' =&gt; "ENC28J60");</pre>
<h3>Netzwerkeinstellungen</h3>
<h4>Lesen</h4>
<pre>$avr-&gt;getIp();</pre>
<pre>$avr-&gt;getMask();</pre>
<pre>$avr-&gt;getGw();</pre>
<h4>Schreiben</h4>
<pre>$avr-&gt;setIp("192.168.0.200")
$avr-&gt;setMask("255.255.255.0")
$avr-&gt;setGw("192.168.0.1");</pre>
<h3>Kumulierte Informationen abrufen</h3>
<pre>$avr-&gt;getData();</pre>
<p>liefert als Convenience-Funktion ein assoziatives Array der Form</p>
<pre>array('ip' =&gt; '192.168.0.90', 'gateway' =&gt; '192.168.0.1', 'netmask' =&gt; '255.255.255.0', 'controller' =&gt; 'AtMega32', 'firmware' =&gt; '1.03', 'nic' =&gt; 'ENC28J60');</pre>
<h3>Status abfragen</h3>
<p>$avr-&gt;getStatus($returnType);</p>
<p>liefert den Status wie der Befehl STATUS zurück, in der Standardform exakt so, also z.B. als S00000000.<br />
Manchmal ist es aber sinnvoll, direkt ein Array mit den Werten der einzelnen Ports zu erhalten. Diese kann man sich entwder als Array mit booleschen Werten (true, false) oder als Integer-Array zurückliefern lassen:</p>
<pre>// Boolesches Array</pre>
<pre>$avr-&gt;getStatus(AvrNetIo::STATUS_ARRAY_BOOL);</pre>
<p>liefert z.B.</p>
<pre>array(true, false, false, false, false, false, true, false);</pre>
<pre>// Integer-Array</pre>
<pre>$avr-&gt;getStatus(AvrNetIo::STATUS_ARRAY_STRING);</pre>
<p>liefert z.B.</p>
<pre>array(1, 0, 0, 0, 0, 0, 1, 0);</pre>
<h3>Digitalports abfragen</h3>
<p>Das AVR-NET-IO verfügt über 8 digitale Eingänge. Diese können wie folgt abgefragt werden:</p>
<pre>$avr-&gt;getPort($number);</pre>
<h3>Analogports abfragen</h3>
<p>Die 4 Analog-/Digital-Konverter-Eingänge (ADC) können wie folgt abgefragt werden:</p>
<pre>$avr-&gt;getAdc($number);</pre>
<h3>Digitalports setzen</h3>
<p>Die 4 digitalen Ausgänge können so geschaltet werden:</p>
<pre>$avr-&gt;setPort($number, $value);</pre>
<h3>LCD-Funktionen</h3>
<p>Der Befehl INITLCD muss im Prinzip einmalig vor Verwendung des LCDs aufgerufen werden, wird aber von der PHP-Klasse automatisch ausgeführt:</p>
<pre>$avr-&gt;initLcd();
$avr-&gt; writeLcd($line, $text);
$avr-&gt;clearLcd();</pre>
<h2>Beispielcode</h2>
<pre>&lt;?php</pre>
<pre>require "AvrNetIo.php";</pre>
<pre>$avr = new AvrNetIo('192.168.0.90');
if ($avr-&gt;connect()) {
     echo "IP: ".$avr-&gt;getIp()."&lt;br /&gt;\r\n";
     echo "Gateway: ".$avr-&gt;getGw()."&lt;br /&gt;\r\n";
     echo "Netmask: ".$avr-&gt;getMask()."&lt;br /&gt;\r\n";
     var_dump($avr-&gt;getVersion());
     echo "&lt;br /&gt;";
     echo "Port 1:".$avr-&gt;getPort(1)."&lt;br /&gt;\r\n";
     echo "ADC1 1:".$avr-&gt;getAdc(1)."&lt;br /&gt;\r\n";</pre>
<pre>     var_dump($avr-&gt;getData());
     echo "&lt;br /&gt;\r\n";
     var_dump($avr-&gt;getStatus(AvrNetIo::STATUS_RAW));
     echo "\r\n";</pre>
<pre>     for ($i=1; $i&lt;5; $i++) {
         echo "ADC #$i: ".$avr-&gt;getAdc($i)."&lt;br /&gt;\r\n";
     }</pre>
<pre>     $avr-&gt;disconnect();</pre>
<pre>} else {
     die("Verbindung nicht möglich!");
}
?&gt;</pre>
<p><a href="/assets/AvrNetIo.phps" target="_blank">Download der Klasse</a></p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 99px; width: 1px; height: 1px;">class AvrNetIo<br />
{<br />
protected $ip;<br />
protected $conn;<br />
protected $timeout = 5;</p>
<p>protected $lcdInitialized;</p>
<p>const STATUS_RAW          = 1;<br />
const STATUS_ARRAY_BOOL   = 2;<br />
const STATUS_ARRAY_STRING = 3;</p>
<p>public function __construct($ip)<br />
{<br />
$this-&gt;ip = $ip;<br />
}</p>
<p>public function connect()<br />
{<br />
$this-&gt;conn = fsockopen($this-&gt;ip, 50290, $errno, $errstr, $this-&gt;timeout);<br />
return (bool)$this-&gt;conn;<br />
}</p>
<p>public function disconnect()<br />
{<br />
return fclose($this-&gt;conn);<br />
}</p>
<p>protected function read($cmd, $lines)<br />
{<br />
fputs($this-&gt;conn, trim($cmd).&#8221;\r\n&#8221;);<br />
$results = array();<br />
for ($i=0; $i&lt;$lines; $i++) {<br />
$results[] = trim(fgets($this-&gt;conn, 65535));<br />
}<br />
return $results;<br />
}</p>
<p>public function getVersion()<br />
{<br />
$info = $this-&gt;read(&#8220;VERSION&#8221;, 3);<br />
$data = array();<br />
foreach ($info as $l) {<br />
list($n, $v) = explode(&#8220;:&#8221;, $l);<br />
$v = trim($v);<br />
$data[strtolower($n)] = $v;</p>
<p>}<br />
return $data;<br />
}</p>
<p>public function getData()<br />
{<br />
$data      = array();<br />
$boardInfo = $this-&gt;getVersion();</p>
<p>$data['ip']         = $this-&gt;getIp();<br />
$data['gateway']    = $this-&gt;getGw();<br />
$data['netmask']    = $this-&gt;getMask();<br />
$data['controller'] = $boardInfo['uc'];<br />
$data['firmware']   = $boardInfo['ver'];<br />
$data['nic']        = $boardInfo['nic'];</p>
<p>return $data;<br />
}</p>
<p>public function getStatus($returnType = self::STATUS_RAW)<br />
{<br />
$r    = $this-&gt;read(&#8220;GETSTATUS&#8221;, 1);<br />
$data = $r[0];</p>
<p>if ($returnType == self::STATUS_RAW) {<br />
return $r[0];<br />
} else {<br />
$array = array();<br />
if ($returnType == self::STATUS_ARRAY_BOOL) {<br />
for ($i=1; $i&lt;strlen($data); $i++) {<br />
$char = substr($data, $i, 1);<br />
$array[] = (bool)$char;<br />
}<br />
} else if ($returnType == self::STATUS_ARRAY_STRING) {<br />
for ($i=1; $i&lt;strlen($data); $i++) {<br />
$char = substr($data, $i, 1);<br />
$array[] = (int)$char;<br />
}<br />
}<br />
}<br />
return $array;<br />
}</p>
<p>public function getIp()<br />
{<br />
$r = $this-&gt;read(&#8220;GETIP&#8221;, 1);<br />
return $r[0];<br />
}</p>
<p>public function setIp($value)<br />
{<br />
$r = $this-&gt;read(&#8220;SETIP &#8220;.($value), 1);<br />
return $this-&gt;resultToBool($r[0]);<br />
}</p>
<p>public function getMask()<br />
{<br />
$r = $this-&gt;read(&#8220;GETMASK&#8221;, 1);<br />
return $r[0];<br />
}</p>
<p>public function setMask($value)<br />
{<br />
$r = $this-&gt;read(&#8220;SETMASK &#8220;.($value), 1);<br />
return $this-&gt;resultToBool($r[0]);<br />
}</p>
<p>public function getGw()<br />
{<br />
$r = $this-&gt;read(&#8220;GETGW&#8221;, 1);<br />
return $r[0];<br />
}</p>
<p>public function setGw($value)<br />
{<br />
$r = $this-&gt;read(&#8220;SETGW &#8220;.($value), 1);<br />
return $this-&gt;resultToBool($r[0]);<br />
}</p>
<p>public function getPort($number)<br />
{<br />
$r = $this-&gt;read(&#8220;GETPORT &#8220;.(int)$number, 1);<br />
return (int)$r[0];<br />
}</p>
<p>public function setPort($number, $value)<br />
{<br />
if ($value) {<br />
$value = 1;<br />
} else {<br />
$value = 0;<br />
}<br />
$r = $this-&gt;read(&#8220;SETPORT &#8220;.(int)$number.&#8221;.&#8221;.(int)$value, 1);<br />
return $this-&gt;resultToBool($r[0]);<br />
}</p>
<p>public function getAdc($number)<br />
{<br />
$r = $this-&gt;read(&#8220;GETADC &#8220;.(int)$number, 1);<br />
return (int)$r[0];<br />
}</p>
<p>public function initLcd()<br />
{<br />
if ($this-&gt;lcdInitialized) {<br />
return true; // already initialized<br />
}<br />
$r   = $this-&gt;read(&#8220;INITLCD&#8221;, 1);<br />
$res = $this-&gt;resultToBool($r[0]);<br />
if ($res) {<br />
$rhis-&gt;lcdInitialized = true;<br />
}<br />
return $res;<br />
}</p>
<p>public function writeLcd($line, $text)<br />
{<br />
$this-&gt;initLcd();<br />
$r = $this-&gt;read(&#8220;WRITELCD &#8220;.(int)$line.&#8221;.&#8221;.$text, 1);<br />
return $this-&gt;resultToBool($r[0]);<br />
}</p>
<p>public function clearLcd()<br />
{<br />
$this-&gt;initLcd();<br />
$r = $this-&gt;read(&#8220;CLEARLCD&#8221;, 1);<br />
return $this-&gt;resultToBool($r[0]);<br />
}</p>
<p>protected function resultToBool($result)<br />
{<br />
return ($result == &#8216;ACK&#8217;);<br />
}<br />
}<br />
?&gt;</p>
</div>
<p><a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/de/"><img style="border-width: 0;" src="http://i.creativecommons.org/l/by-sa/3.0/de/88x31.png" alt="Creative Commons License" /></a><br />
<span>AvrNetIo PHP Class</span> von <a rel="cc:attributionURL" href="http://www.sascha-kimmel.de/2010/02/avr-net-io-mit-php-ansteuern/">Sascha Kimmel</a> steht unter einer <a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/de/">Creative Commons Namensnennung-Weitergabe unter gleichen Bedingungen 3.0 Deutschland Lizenz</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.saschakimmel.de/2010/02/avr-net-io-mit-php-ansteuern/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->
