Archiv für die ‘Elektronik’ Kategorie

Ethersex auf AVR-NET-IO installieren mittels Pollin Atmel Evaluationsboard 2.0 und Windows

21 Februar 2010

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 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 “einfachen seriellen Programmern” wie dem von Pollin das sogenannte “Bit Banging” 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.

Daher habe ich dann einen alten PC mit zwei physikalischen COM-Ports und (nostalgischem) Windows 98 verwendet.
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.

Aber alles der Reihe nach.

Anforderungen

Benötigt wird:

  • das Pollin ATMEL Evaluationsboard V2.0.1 (siehe oben, Netzteil nicht vergessen!)
  • ein Windows-PC mit physikalischem COM-Port
  • WinAVR (installiert mit Standard-Optionen)
  • ein serielles Kabel m/w (ich habe dieses verwendet, Roline serielles Kabel DB9 m/w 180cm)
  • ein ATmega32

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.

Für das AVR-NET-IO verwende ich dieses ECO-Netzteil 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.

Anschluss

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.

Wenn alles korrekt war leuchtet jetzt die rote LED auf dem Board.

Verbindungstest

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.

Eine Kommandozeile öffnen (Start -> Ausführen -> cmd bzw. Start -> Ausführen -> command unter Windows 98) und folgendes eintragen:

avrdude -v -p atmega32 -c ponyser -P COM1

Wenn alles korrekt angeschlossen wurde sollte avrdude jetzt einige Informationen zum Prozessor anzeigen.

Flashen

Hier 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:

http://www.ethersex.de/firmware-builder/build.cgi?profile=avr-net-io&CONF_ENC_MAC=00%3A22%3AF9%3A01%3A53%3AE3&CONF_ENC_IP=192.168.0.110&CONF_ENC_IP4_NETMASK=255.255.255.0&CONF_ETHERRAPE_GATEWAY=192.168.0.1

Anschließend können dann die erzeugte Config-Datei und die ethersex.hex Datei heruntergeladen werden.

Das kann übrigens auf einem anderen PC geschehen als der, der zum programmieren verwendet wird.

Doch zuerst sollten die Fuses ausgelesen werden:

avrdude -v -p atmega32 -c ponyser -P COM1 -U hfuse:r:high.txt:r -U lfuse:r:low.txt:r

Im Auslieferungszustand hat ein ATmega32 die Fuses 0xE1 (low) und 0×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.

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:

avrdude -p m32 -c ponyser -P COM1 -U flash:w:ethersex.hex -v

Damit wird der Prozessor mit Ethersex geflashed – 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.

ACHTUNG! Mit falsch gesetzten Fusebits 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!

Diese Anleitung verwendet keinen Bootloader, daher habe ich nach gründlichem Studium der Fusebits und unter Verwendung des FuseBit Calculators die Fusebits auf 0xBF und 0xCB gesetzt – diese funktionieren bei mir mit dem Standard AVR-NET-IO Board und der o.a. Ethersex Firmware:

avrdude -p m32 -c ponyser -P COM1 -U lfuse:w:0xBF:m -U hfuse:w:0xCB:m

Controller-Tausch

Wenn alles funktioniert hat kann der im AVR-NET-IO enthaltene ATmega32 nun durch den soeben programmierten ersetzt werden. Dazu ist wie folgt vorzugehen:

  • Netzteil am AVR-NET-IO und am Programmer vom Stromnetz trennen
  • den programmierten ATmega32 aus dem Programmer (Evaluationsboard) entfernen
  • den im AVR-NET-IO enthaltenen ATmega32 vorsichtig entfernen
  • den soeben programmierten ATmega32 im AVR-NET-IO-Board einsetzen – Achtung! Auf korrekte Einkerbung achten und den Controller nicht falsch herum einsetzen
  • Das AVR-NET-IO wieder mit dem Stromnetz verbinden

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.

Im Browser nun die gewählte IP aufrufen.

Wenn alles funktioniert hat sieht man die Ethersex-Startseite:

Von hier an empfiehlt es sich auf ethersex.de weiterzulesen :)

http://IP.AD.RE.SSE/ecmd?help

Lichtmessung mit AVR-NET-IO, Fototransistor und PHP

13 Februar 2010

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 den Infrarotbereich anspricht als auf Wellenlängen, die das menschliche Auge sieht. Daher ist diese Schaltung eher als “Proof Of Concept” zu verstehen – andere Fototransistoren können entsprechend ebenfalls verwendet werden.

Die Schaltung ist sehr einfach gehalten – natürlich können auch andere Anschlüsse (ADC1-4, GND, 5V) verwendet werden als hier dargestellt:

AVR-NET-IO Anschluss eine Fototransistors

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:

100-(100/(1024/ADC-Wert))

Hier der entsprechende Beispielcode für die Verwendung mit der PHP-Klasse:

$avr = new AvrNetIo('192.168.0.90');
if ($avr->connect()) {
    $light = 100-(100/(1024/$avr->getAdc(2)));
    echo "Licht: $light%";
    $avr->disconnect();
} else {
        die("Verbindungsfehler!");
}

Viel Spaß damit ;)

Temperaturmessung mit LM35 mit AVR-NET-IO und PHP

Temperaturmessung mit LM35 mit AVR-NET-IO und PHP

13 Februar 2010

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 Bestellnummer 156600 für ca. 5 € bestellen.

AVR-NET-IO LM 35 DZ

Anschließend kann man dann wie folgt den Temperaturwert berechnen:

ADC-Wert * 0.0048828 * 100

Hier der entsprechende Beispielcode für die Verwendung mit der PHP-Klasse:

$avr = new AvrNetIo('192.168.0.90');
if ($avr->connect()) {
 $temp = 0.0048828 * $avr->getAdc(1) * 100;
 echo "Temperatur: $temp°C";
 $avr->disconnect();
} else {
 die("Verbindungsfehler!");
}

So können bis zu 3 weitere Temperatursensoren angeschlossen werden.

Auf Grund der “nur” 1024 möglichen Werte an einem ADC-Port liegt die Genauigkeit des Wertes bei ca. 0,5°C.

LED-Licht

10 Februar 2010

Creative Commons License
Diese Schaltung steht unter der Creative Commons Namensnennung-Keine kommerzielle Nutzung-Weitergabe unter gleichen Bedingungen 3.0 Deutschland Lizenz.

Das LED-Licht wird über eine 9V-Batterie betrieben und verwendet nur eine LED, um akzentuiert einzelne dunkle Bereiche
gezielt zu beleuchten. Es können sowohl weiße, farbige als auch UV-LED verwendet werden.

* Stand: 18.10.2008

Flackerlicht

10 Februar 2010

Creative Commons License
Diese Schaltung steht unter der Creative Commons Namensnennung-Keine kommerzielle Nutzung-Weitergabe unter gleichen Bedingungen 3.0 Deutschland Lizenz.

Das Flackerlicht ist eine einfache Schaltung, die ein quasi zufälliges Flackern einer weißen LED erzeugt.


Schaltplan

*.spl-Datei zur Verwendung mit sPlan

Schaltplan (GIF)
Download als PDF

* Stand: 18.10.2008

Lichtschranken Interface

10 Februar 2010

Creative Commons License
Diese Schaltung steht unter der Creative Commons Namensnennung-Keine kommerzielle Nutzung-Weitergabe unter gleichen Bedingungen 3.0 Deutschland Lizenz.

Das Lichtschranken-Interface dient dazu, eine IDEC SA1E-PP2-24V-Lichtschranke (CONRAD-Artikelnummer: 704557, ca. 60 EUR*) an den PropController anzuschließen.
Im Prinzip steuert die Lichtschranke damit nur ein 24V-Relais an und kann im Prinzip für sämtliche Schaltaufgaben verwendet werden.

* Stand: 18.10.2008

PropController

10 Februar 2010

Haftungsausschluss

Die Verwendung und der Nachbau erfolgen stets auf eigene Gefahr, die Haftung ist – sofern jeweils zulässig – auf Vorsatz und grobe Fahrlässigkeit beschränkt. Grundsätzlich sollte der PropController nicht unbeaufsichtigt und nicht in der Nähe brennbarer Materialien aufgestellt werden.

Creative Commons License
Diese Schaltung steht unter der Creative Commons Namensnennung-Keine kommerzielle Nutzung-Weitergabe unter gleichen Bedingungen 3.0 Deutschland Lizenz.

Zielsetzung

Diese Schaltung dient dazu, pneumatische Ventile, 230V-Quellen (in Verbindung mit z.B. dem ELV Schaltinterface SI230) und beliebige andere elektrisch steuerbare Geräte zu steuern.

Im Prinzip ermöglicht es die Schaltung 12 einzelne Niedervolt-Ausgänge (5V) über ein Programm zu schalten.
Zusätzlich ist seit Version 3 noch ein Soundchip ISD1420P (CONRAD: 164984, ca. 15 EUR*) enthalten, der in relativ guter Qualität bis zu 100.000 Mal wieder beschrieben werden kann. Dieser dient zum Abspielen von Geräuschen und Sounds während das Prop-Programm läuft.

Schaltplan

*.spl-Datei zur Verwendung mit sPlan

Schaltplan (GIF)

Download als PDF

Funktionsweise

Die Schaltung basiert auf dem C-Control I M-Unit 2.0 Mikroprozessor von Conrad Elektronik und steuert einen ISD 1420 zur Soundausgabe an.
Sämtliche der 12 verfügbaren Ausgänge werden über 2 ULN2803A nach außen geführt. Zur direkten Programmierung ist ein MAX232N integriert,
so dass die C-Control direkt über den PC in der Schaltung programmiert werden kann.

Der PropController ist dafür gedacht, nach einem eingehenden Schaltimpuls am Schalteingang (vorzugsweise über eine Lichtschranke) ein Programm ablaufen zu lassen, welches die 12 verfügbaren Ausgänge sowie den Sound verwendet, um das Prop-Verhalten umzusetzen.

Anschließend ist noch eine Verzögerung angedacht, damit das Prop nicht unmittelbar danach wieder ausgelöst werden kann.
Danach beginnt das Programm wieder von vorne und wartet auf den nächsten Schaltimpuls.

Audio

Die Aufnahme eines Sounds (über Cinch-Eingang) erfolgt bei eingeschalteter Spannungsversorgung über die entsprechende REC-Taste.
Währendessen leuchtet die REC-LED. Ein Abspielen zur Kontroller der Aufnahme ist über den PLAY-Taster möglich.
Die Ausgabe erfolgt über eine Stereo-Klinkenbuchse zum direkten Anschluss eines Aktivlautsprechers.
Passive Lautsprecher dürfen nicht angeschlossen werden, da sie zur Zerstörung der Schaltung führen können!

Aktivierung

Die Schaltung wird über einen Schaltimpuls, welcher historisch bedingt über einen Optokoppler realisiert wurde,
aktiviert – sofern das Programm entsprechend entwickelt wurde. Die Schaltung darf somit nur über ein Relais erfolgen (komplette galvanische Trennung).

Stromversorgung

Die Stromversorgung erfolgt über ein handelsübliches Steckernetzteil, das entsprechend dimensioniert sein muss (abhängig von der Anzahl genutzter Ausgänge und der dort angeschlossenen Verbraucher).

Insgesamt darf die komplette Schaltung nicht mehr als 500mA benötigen, daher ist es insbesondere die Aufgabe desjenigen, der die
Schaltung nachbaut, darauf zu achten, an den Schaltausgängen keine Verbraucher anzuschließen, die dazu führen, dass die Schaltung insgesamt diesen Stromverbrauch überschreitet. Zudem ist in jedem Fall ein Kühlkörper am Festspannungsregler anzubringen!
Zur 24V Festspannungsversorgung verwende ich das Conrad Elecotrnic Voltcraft FESTSPANNUNGSNETZGERÄT 24V/3A FSP3/5 (510171), ca. 55 EUR*

Unterlagen

Nachfolgend hier verschiedene Unterlagen.
Eine genauere Beschreibung ist zurzeit auf Grund des immensen Dokumentationsaufwandes noch nicht verfügbar.

Stückliste 1

Im folgenden eine unverbindliche Stückliste für die Haupt- und Steuerplatinen – natürlich kann man die Komponenten auf an anderer Stelle kaufen oder
andere Teile verwenden. Die Preise habe ich am 19.10.2008 recherchiert und diese können sich natürlich geändert haben.

Fehler in der Liste möglich – die genaue Prüfung obliegt dem Nutzer.

Anzahl Bezeichnung Bezugsquelle Artikelnummer ca. Preis*
2 Bungard Expoxidplatine 100×160x1.0mm 1×35um Cu einseitig fotobeschichtet Conrad 529249 3,00 EUR
1 Sub-D-Buchsenleiste 9-polig, abgewinkelt Pollin 450987 0,20 EUR
3 Widerstand 470R 1/4 Watt Conrad 403210 0,10
1 Widerstand 560R 1/4 Watt Conrad 403229 0,10
1 Widerstand 1K 1/4 Watt Conrad 403253 0,10
1 Widerstand 2,2K 1/4 Watt Conrad 403296 0,10
1 Widerstand 15K 1/4 Watt Conrad 403393 0,10
6 Widerstand 47K 1/4 Watt Conrad 403458 0,10
1 Widerstand 100K 1/4 Watt Conrad 403490 0,10
10 Steckbrücken/Draht
1 Keramik-Kondensator 1nF Conrad 453005 0,22
2 Keramik-Kondensator 47nF Conrad 453080 0,25
2 Keramik-Kondensator 100nF Conrad 453099 0,27
1 Folienkondensator 0,1µF/100nF Conrad 455008 0,42
1 ELKO 100µF Conrad 445453 0,04
5 ELKO 1µF (RM 1,5) Conrad 445724 0,05
1 Diode 1N4001 Conrad 162213 0,08
2 Diode 1N4148 Pollin 140300 0,15 (10St.)
1 IC MAX232N Pollin 100906 0,40 EUR
1 IC C-Control M-Unit 2.0 Conrad 198822 27,00 EUR
1 IC ISD1420P Conrad
2 IC ULN2803 Conrad 171824 1,40
1 IC CD 4081 Conrad 173037 0,52
1 IC CNY17 oder MB104/6 Conrad 153371 0,33
1 IC 7805 Festspannungsregler (L7805CV – +5 V – 1,5 A) Pollin 170041 0,25
1 LED 5mm rot Conrad 184543 0,07
2 LED 3mm rot Conrad 184560 0,07
1 LED 3mm grün Conrad 184713 0,07
3 Print-Taster (Schaltleistung 24 V/10 mA, Abmessungen (Körper), 9,8 x 9,8 mm, Knopf Ø 4,1 mm. Knopf weiß, Höhe 15 mm). ELV 68-011-09 0,51
3 ELV-Tasterkappe (Runde Ausführung, leicht abgerundete Betätigungsfläche, Höhe 8,1 mm, Durchmesser 7,2 mm.) ELV 68-238-32 0,21
1 Schalter MTS-102 – Schalter – 1-polig EIN-EIN – Lötösen Pollin 420179 0,60
6 Klinkenbuchse 3,5 mm, stereo, für Printmontage, mit 2 Schaltkontakten (2x Öffner) in den Signal-Anschlüssen. Pollin 450013 0,15
1 Cinchbuchse abgewinkelt, für Printmontage. Maße (BxHxT): 12×12x18 mm. Pollin 450514 0,20
1 Stiftleiste 2x 10-polig, abgewinkelt, RM 2,54 (in der Mitte trennen) Pollin 450964 0,20
1 Hohlbuchse für Stecker 5,5/2,1 mm – Lötanschluss Pollin 450596 0,60
1 MINI-DIN-BUCHSE 6 POLIG Conrad 732184 1,38
13 Lötstifte Conrad 527866 3,00 (100 St.)
1 STECKBUCHSE MIT LITZE 2 POLIG Conrad 741213 1,55
3 STIFTLEISTE ABGEWINKELT 36 POLIG Conrad 739545 1,26
7 BUCHSENLEISTE 20 POLIG GLASF. POLYAMID Conrad 736350 1,21
1 IC-Fassung 14pol. RM 7,5 (für 4081) Pollin 400051 0,10
1 IC-Fassung 16pol. RM 7,5 (für MAX232N) Conrad 189529 0,18
2 IC-Fassung 18pol. RM 7,5 (für ULN2803) Pollin 400036 0,10
1 IC-Fassung 6pol. RM 7,5 (für CNY17) Conrad 189472 0,18
1 IC-Fassung 28pol. RM 15,24 (für ISD1420) Conrad 189570 0,37
1 Kühlkörper TO220 (für 7805) Conrad

Stückliste 2

Im folgenden eine unverbindliche Stückliste für die Relaisplatinen – natürlich kann man die Komponenten auf an anderer Stelle kaufen oder
andere Teile verwenden. Die Preise habe ich am 19.10.2008 recherchiert und diese können sich natürlich geändert haben.

Fehler in der Liste möglich – die genaue Prüfung obliegt dem Nutzer.
Die Anzahl gilt immer für eine Schaltung – auf einer Platine befinden sich immer 2 davon.

Anzahl Bezeichnung Bezugsquelle Artikelnummer ca. Preis*
1 Bungard Expoxidplatine 100×60x1.0mm 1×35um Cu einseitig fotobeschichtet Conrad 529184 1,40
2 Schraubklemme 3-fach Print (3-polig, 16 A/250 V~, 1,5 mm², RM 5, anreihbar, quadratische Leitereinführung, mit Drahtschutz. Maße (LxBxH): 15×7,6×10 mm.) Pollin 450859 0,15 EUR
2 Diode 1N4001 Conrad 162213 0,08
1 Diode 1N4148 Pollin 140300 0,15 (10St.)
1 Widerstand 1,2K 1/4 Watt Conrad 403261 0,10
1 Klinkenbuchse 3,5 mm, stereo, für Printmontage, mit 2 Schaltkontakten (2x Öffner) in den Signal-Anschlüssen. Pollin 450013 0,15
1 LED 3mm grün Conrad 184713 0,07
1 Relais FEME M15MAH0018 5VDC** Conrad

** zurzeit offenbar nicht mehr lieferbar, zu prüfen wäre ob die 6V-Version auch funktioniert (Artikelnr. 505420)

Software

Die folgenden BASIC-Programme müssen über die C-Control-Steuersoftware wie üblich in die C-Control über das C-Control-Interface
(COM-Port oder USB) geladen werden, wobei sich die C-Control nicht im PropController befinden darf.

Obwohl der PropController über einen RS232-Anschluss verfügt rate ich grundsätzlich aus Sicherheitsgründen davon ob, die Programmierung über diese Schnittstelle durchzuführen, da bei fehlerhaft aufgebauter Schaltung oder Fehlern in der Schaltung selbst der angeschlossene
PC bzw. die entsprechende Schnittstelle zerstört werden kann.
Die Verwendung der integrierten Schnittstelle erfolgt daher auf eigene Gefahr!

ACHTUNG!

Durch Fehler im Software-Programm ist es möglich, die C-Control sowie die komplette Schaltung zu zerstören, wenn z.B. ein Schalteingang auf Ausgang und umgekehrt geschaltet wird! Eine grundlegende Kenntnis der C-Control wird daher bei der Programmierung vorausgesetzt!

Fragen & Antworten nur in diesem Forum!

Platinenherstellung

9 Februar 2010

Hier in aller Kürze (vor allem auch für mich ;) ) Informationen dazu, wie ich meine Platinen herstelle, d.h. drucke, belichte, entwickle und ätze. Vielleicht hilft es ja jemanden.

Layoutfolie

Als Layoutfolie verwende ich ausschließlich sigel Transparentfolie, mit Sensorstreifen, beschichtet, klar, 100um (IF 120) (CONRAD-Artikelnummer: 995463, ca. 10 EUR*) in Verbindung mit einem HP-Tintenstrahldrucker. In der Treiberkonfiguration ausgewählt: “HP Fotopapier, hochglanz”, Druckqualität “optimal”.
Bedruckt der Drucker die untere Seite des eingelegten Papiers (Standard) so muss die rauhe Seite unten und die runde Ecke unten rechts sein.

Platine

10×16 cm: Bungard Expoxidplatine 100×160x1.0mm 1×35um Cu einseitig fotobeschichtet (CONRAD-Artikelnummer: 529249, ca. 3 EUR*)

10×6 cm: Bungard Expoxidplatine 100×60x1.0mm 1×35um Cu einseitig fotobeschichtet (CONRAD-Artikelnummer: 529184, ca. 1,40 EUR*)

Belichtung

2:10 Min im proMa UV-Belichtungsgerät 1

Entwickeln

ca. 2:00 Min

Ätzen

ca. 6-8 Min. (Natriumpersulfat) in einem proMa Ätzgerät 1

* Preise Stand: 18.10.2008

AVR-NET-IO nicht mehr via Ethernet erreichbar?

9 Februar 2010

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 – 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.) – aber NMAP ist viel einfacher.

Damit kann man einfach das gesamte lokale Netz scannen und findet dann dank “Pollin Electronic GmbH” die korrekte IP sehr schnell wieder.

Man muss nur auf NMAP.org unter “Microsoft Windows Binaries” die aktuellste stabile Version downloaden, installieren und starten.

Unter “Ziel” oben links gibt man dann einfach das Netz gekürzt ein, z.B. 192.168.0.*und wählt bei “Profil” einfach “Ping scan” aus und klickt dann auf “Scan”. Nach ca. einer Minute sollte das AVR-NET-IO mit seiner IP gefunden sein:

Der Pfeil zeigt auf die Stelle, an der die IP des AVR-NET-IO zu finden ist.

Diese ist dann auf eine andere IP umkonfigurierbar.

Die NetServer-Software stellt keine Verbindung her?

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 “IP-Adress=…” die gefundene IP eintragen und das Programm wieder starten.

Nach einem Klick auf den “Connect”-Button sollte man direkt auf das AVR-NET-IO zugreifen können.

AVR-NET-IO mit PHP ansteuern

9 Februar 2010

Vor einigen Tagen habe ich mir das AVR-NET-IO von Pollin bestellt. Eine sehr interessante kleine Schaltung – schon vor einigen Jahren hätte ich gerne auf einfache Weise über Ethernet gemessen und geschaltet – 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.

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 Ethersex dafür verwenden, aber erst einmal möchte ich einfach anfangen.

Langer Rede, kurzer Sinn – hier ist die Beschreibung der PHP-Klasse :)

Verfügbare Methoden

Zusätzlich zu den direkten Mappings der Befehle auf PHP-Methoden gibt es auch einige Methoden, die aggregierte Informationen zurückliefern.

Verbindung herstellen und trennen

$avr = new AvrNetIo('192.168.0.90');
$avr->connect();
$avr->disconnect();

Versionsinformationen abfragen

$avr->getVersion();

liefert ein assoziatives Array der Form

array('uc' => "ATMega32", 'ver' => "1.03", 'nic' => "ENC28J60");

Netzwerkeinstellungen

Lesen

$avr->getIp();
$avr->getMask();
$avr->getGw();

Schreiben

$avr->setIp("192.168.0.200")
$avr->setMask("255.255.255.0")
$avr->setGw("192.168.0.1");

Kumulierte Informationen abrufen

$avr->getData();

liefert als Convenience-Funktion ein assoziatives Array der Form

array('ip' => '192.168.0.90', 'gateway' => '192.168.0.1', 'netmask' => '255.255.255.0', 'controller' => 'AtMega32', 'firmware' => '1.03', 'nic' => 'ENC28J60');

Status abfragen

$avr->getStatus($returnType);

liefert den Status wie der Befehl STATUS zurück, in der Standardform exakt so, also z.B. als S00000000.
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:

// Boolesches Array
$avr->getStatus(AvrNetIo::STATUS_ARRAY_BOOL);

liefert z.B.

array(true, false, false, false, false, false, true, false);
// Integer-Array
$avr->getStatus(AvrNetIo::STATUS_ARRAY_STRING);

liefert z.B.

array(1, 0, 0, 0, 0, 0, 1, 0);

Digitalports abfragen

Das AVR-NET-IO verfügt über 8 digitale Eingänge. Diese können wie folgt abgefragt werden:

$avr->getPort($number);

Analogports abfragen

Die 4 Analog-/Digital-Konverter-Eingänge (ADC) können wie folgt abgefragt werden:

$avr->getAdc($number);

Digitalports setzen

Die 4 digitalen Ausgänge können so geschaltet werden:

$avr->setPort($number, $value);

LCD-Funktionen

Der Befehl INITLCD muss im Prinzip einmalig vor Verwendung des LCDs aufgerufen werden, wird aber von der PHP-Klasse automatisch ausgeführt:

$avr->initLcd();
$avr-> writeLcd($line, $text);
$avr->clearLcd();

Beispielcode

<?php
require "AvrNetIo.php";
$avr = new AvrNetIo('192.168.0.90');
if ($avr->connect()) {
     echo "IP: ".$avr->getIp()."<br />\r\n";
     echo "Gateway: ".$avr->getGw()."<br />\r\n";
     echo "Netmask: ".$avr->getMask()."<br />\r\n";
     var_dump($avr->getVersion());
     echo "<br />";
     echo "Port 1:".$avr->getPort(1)."<br />\r\n";
     echo "ADC1 1:".$avr->getAdc(1)."<br />\r\n";
     var_dump($avr->getData());
     echo "<br />\r\n";
     var_dump($avr->getStatus(AvrNetIo::STATUS_RAW));
     echo "\r\n";
     for ($i=1; $i<5; $i++) {
         echo "ADC #$i: ".$avr->getAdc($i)."<br />\r\n";
     }
     $avr->disconnect();
} else {
     die("Verbindung nicht möglich!");
}
?>

Download der Klasse

class AvrNetIo
{
protected $ip;
protected $conn;
protected $timeout = 5;

protected $lcdInitialized;

const STATUS_RAW          = 1;
const STATUS_ARRAY_BOOL   = 2;
const STATUS_ARRAY_STRING = 3;

public function __construct($ip)
{
$this->ip = $ip;
}

public function connect()
{
$this->conn = fsockopen($this->ip, 50290, $errno, $errstr, $this->timeout);
return (bool)$this->conn;
}

public function disconnect()
{
return fclose($this->conn);
}

protected function read($cmd, $lines)
{
fputs($this->conn, trim($cmd).”\r\n”);
$results = array();
for ($i=0; $i<$lines; $i++) {
$results[] = trim(fgets($this->conn, 65535));
}
return $results;
}

public function getVersion()
{
$info = $this->read(“VERSION”, 3);
$data = array();
foreach ($info as $l) {
list($n, $v) = explode(“:”, $l);
$v = trim($v);
$data[strtolower($n)] = $v;

}
return $data;
}

public function getData()
{
$data      = array();
$boardInfo = $this->getVersion();

$data['ip']         = $this->getIp();
$data['gateway']    = $this->getGw();
$data['netmask']    = $this->getMask();
$data['controller'] = $boardInfo['uc'];
$data['firmware']   = $boardInfo['ver'];
$data['nic']        = $boardInfo['nic'];

return $data;
}

public function getStatus($returnType = self::STATUS_RAW)
{
$r    = $this->read(“GETSTATUS”, 1);
$data = $r[0];

if ($returnType == self::STATUS_RAW) {
return $r[0];
} else {
$array = array();
if ($returnType == self::STATUS_ARRAY_BOOL) {
for ($i=1; $i<strlen($data); $i++) {
$char = substr($data, $i, 1);
$array[] = (bool)$char;
}
} else if ($returnType == self::STATUS_ARRAY_STRING) {
for ($i=1; $i<strlen($data); $i++) {
$char = substr($data, $i, 1);
$array[] = (int)$char;
}
}
}
return $array;
}

public function getIp()
{
$r = $this->read(“GETIP”, 1);
return $r[0];
}

public function setIp($value)
{
$r = $this->read(“SETIP “.($value), 1);
return $this->resultToBool($r[0]);
}

public function getMask()
{
$r = $this->read(“GETMASK”, 1);
return $r[0];
}

public function setMask($value)
{
$r = $this->read(“SETMASK “.($value), 1);
return $this->resultToBool($r[0]);
}

public function getGw()
{
$r = $this->read(“GETGW”, 1);
return $r[0];
}

public function setGw($value)
{
$r = $this->read(“SETGW “.($value), 1);
return $this->resultToBool($r[0]);
}

public function getPort($number)
{
$r = $this->read(“GETPORT “.(int)$number, 1);
return (int)$r[0];
}

public function setPort($number, $value)
{
if ($value) {
$value = 1;
} else {
$value = 0;
}
$r = $this->read(“SETPORT “.(int)$number.”.”.(int)$value, 1);
return $this->resultToBool($r[0]);
}

public function getAdc($number)
{
$r = $this->read(“GETADC “.(int)$number, 1);
return (int)$r[0];
}

public function initLcd()
{
if ($this->lcdInitialized) {
return true; // already initialized
}
$r   = $this->read(“INITLCD”, 1);
$res = $this->resultToBool($r[0]);
if ($res) {
$rhis->lcdInitialized = true;
}
return $res;
}

public function writeLcd($line, $text)
{
$this->initLcd();
$r = $this->read(“WRITELCD “.(int)$line.”.”.$text, 1);
return $this->resultToBool($r[0]);
}

public function clearLcd()
{
$this->initLcd();
$r = $this->read(“CLEARLCD”, 1);
return $this->resultToBool($r[0]);
}

protected function resultToBool($result)
{
return ($result == ‘ACK’);
}
}
?>

Creative Commons License
AvrNetIo PHP Class von Sascha Kimmel steht unter einer Creative Commons Namensnennung-Weitergabe unter gleichen Bedingungen 3.0 Deutschland Lizenz.