IP-Steckdose mit AVR |
Einführung In den letzten Jahren ('07 und '08) sind einige nachbaubare und erschwingliche Schaltungen mit Mikrocontrollern aufgetaucht, die zusätzlich über eine Netzwerkanbindung verfügen. Abgesehen vom Recycling RTL8019- und 3C5x9-basierender PC ISA-Netzwerkkarten, ist der Chip ENC28J60 im 'wurstfingerfreundlichen' 28-Pin DIP-Gehäuse eine echte Alternative. Angesichts der zunehmenden Versorgung mit DSL (ja an meinem QTH war das erstmalig im August 2007 möglich) und der sinkenden Preise für Internet-Flatrates, ist der Gedanke an eine fernsteuerbare Station nicht mehr so abwegig. Dabei kommt man auch nicht umhin, über die eine oder andere fernsteuerbare Steckdose nachzudenken. Zugegeben, so etwas gibt es schon fertig, bisher waren die Preise bisher allerdings recht horrend und selber machen kann man dann auch nichts mehr daran so richtig. |
Die Realisierung - Hardware Nach Sichtung diverser Bauvorschläge im Internet, die alle mit mehr oder weniger tollen Gimmicks (z.B. Web-Cam, SD/MMC-Card-Reader, etc.) aufwarten können, fiel - auch wegen des günstigen Preises - die Wahl auf das AVR-NET-I/O von Pollin-Elektronik, das es mittlerweile auch als aufgebaute Version gibt. Zu diesem Board gibt es mittlerweile eine eigene(s) Forum und Projektseite, aber aufmerksam wurde ich auf das Board erstmalig durch Beiträge im Mikrocontroller-Forum (diese Seite war auch zuerst da!). Naja, und aufgrund der Tatsache, dass ich mir 4 Wochen nach der Neuerscheinung Zeit liess, waren auch wohl schon alle Kinderkrankheiten beseitigt, die Inbetriebnahme klappte einwandfrei. Gekauft habe ich mir gleich 2 davon... Nimmt man nun noch die ebenfalls bei Pollin erhältliche Relais-Karte (K8IO) sowie ein geeignetes Netzteil hinzu und tütet alles in ein passendes Gehäse ein, dann wäre die Geschichte an dieser Stelle schon zu Ende, wenn man mal von den doch etwas schwächlichen Relais absieht. Nun gibt es aber doch noch einiges über die Software zu berichten, und mangels eines kostengünstigen und passenden Gehäuses gibt es doch noch etwas mehr zu berichten. Da das im Wesentlichen aber Standard und leicht nachvollziehbar ist, belasse ich die Beschreibung der vorgenommen Modifikationen bei einer Aufzählung:
|
Die Realisierung - Software Der "Standard" bei IP-Lösungen im Embedded-Bereich ist heute eigentlich, dass man - je nach auf dem Mikrocontroller verfügbaren Ressourcen - die Ansteuerung über einen Web-Server, evtl. über ein proprietäres Protokoll sowie manchmal über das SMTP-Protokoll anbietet, das hängt auch vom Preis des Produkts ab. Beim AVR-NET-I/O mit der Pollin-Fimrware 1.01 wird nur die 2. Lösung angeboten, ebenso ist eine Ansteuerung via RS232 möglich. Im Wiki-Artikel des Projekts werden einige Software-Varianten beschrieben, die man alternativ benutzen kann. Mir haben es die minimalistische Version von Simon Kueppers sowie die Variante von Ulrich Radig angetan. Beide stellen einen Embedded-Web-Server zur Verfügung, die Version von U.Radig erfreut einen zudem auch mit Ausgaben über die serielle Schnittstelle. Bei meiner ersten Realisierung habe ich den Source-Code von Simon K. genommen und erweitert. Bei der Version von SimonK muss man etwas aufpassen, die auf seiner Web-Site vorhandene Beschreibung geht von einer leicht anderen Beschaltung aus und es wird ein ATmega168 mit externer Taktversorgung (kein Quarz) verwendet, da kann man sich leicht die Fuses des AVR verfrickeln - ist mir leider mehrfach passiert :( Daher hier gleich mal die richtigen Fuse-Einstellungen (PonyProg):
Die entsprechende Werte für avrdude lauten: hfuse= 0xD9 lfuse= 0xEFSollte das Jemandem mal passieren, kann man den AVR wiederbeleben, einfach dem Vorschlag von Klaus Leidingers AVR-Preserver folgen, das Material für diese schnelle Notmassnahme sollte wohl in jeder Bastelkiste zu finden sein. Diesen Link zu einem online AVR-Fuse-Calculator möchte ich daher auch Niemandem vorenthalten. Die Software von U.Radig passt nur gerade so in den ATmega32, wenn man alle unnötigen Software-Optionen ausschaltet, dann füllt man den Flash mit ca. 27 kByte. Ein Vorteil dieser Lösung ist es, dass ein Authenifizierungsmodul dabei ist, man kann also den Zugang absichern, d.h. es sollte keine missbräuchlichen Zugriffe auf die Stationskomponenten geben. Da der ATmega32 ja genügend Ein- und Ausgänge zu bieten hat, wäre es ein Leichtes, die 8 Taster für das manuelle Bedienen sowie 8 Kontroll-LEDs anzubringen, doch ganz so einfach wollte ich es mir nicht machen. Da es möglich scheint, jeweils einen Taster sowie die zugehörige Kontroll-LED an einem (dem selben) Port-Pin unterzubringen, sollte das der Weg zum Ziel sein. Die prinzipielle Vorgehensweise ist von P.Danneger (tnx Peter!) mit Code-Beispiel beschrieben. Das muss jetzt "nur" noch auf den ATmega32 angepasst werden und in geeigneter Weise mit dem Code des Web-Servers "verheiratet" werden. Achja, es erfordert auch die Benutzung der ADC-Pins, davon hat der ATmega32 ja 8, wenn auch etwas ungünstig auf dem AVR-NET-I/O verteilt...
|
Anpassung und Konfiguration etc. ... Zunächst muss in der Datei main.c eine Anpassung an die verwendete IP-Address-Umgebung vorgenommen werden, bei mir an die Standard-Einstellung der FritzBox: // setup for a fixed address uip_ipaddr(IpAddr, 192, 168, 178, 211); uip_sethostaddr(IpAddr); // set IP address of this host uip_ipaddr(IpAddr, 192, 168, 178, 1); uip_setdraddr(IpAddr); // set default router's IP address uip_ipaddr(IpAddr, 255, 255, 255, 0); uip_setnetmask(IpAddr); //Weiterhin findet man in Hardware/Gpio.c die Zuweisung der Portbits zu den symbolischen Konstanten, die in dem Code der Web-Seite verwendet werden, diese sind entsprechend zu ändern: struct tGpio PROGMEM g_Gpio[] = { // setup of IP-Switch // might read inputs from PA0..7 { &PINA, &PORTA, &DDRA, PA0 }, { &PINA, &PORTA, &DDRA, PA1 }, { &PINA, &PORTA, &DDRA, PA2 }, { &PINA, &PORTA, &DDRA, PA3 }, { &PINA, &PORTA, &DDRA, PA4 }, { &PINA, &PORTA, &DDRA, PA5 }, { &PINA, &PORTA, &DDRA, PA6 }, { &PINA, &PORTA, &DDRA, PA7 }, // Out1..8 { &PINC, &PORTC, &DDRC, PC0 }, { &PINC, &PORTC, &DDRC, PC1 }, { &PINC, &PORTC, &DDRC, PC2 }, { &PINC, &PORTC, &DDRC, PC3 }, { &PINC, &PORTC, &DDRC, PC4 }, { &PINC, &PORTC, &DDRC, PC5 }, { &PINC, &PORTC, &DDRC, PC6 }, { &PINC, &PORTC, &DDRC, PC7 }, };Die Reihenfolge der Port-Pins in dieser "Tabelle" geht mit der Nummerierung in der Web-Seite 1:1 einher. Nicht vergessen sollte man, Ausgänge auch als solche zu schalten (DDRC = 0xff in diesem Fall). In der Datei Net/TcpApps/HttpD.h ist die Konstante PORT_HTTPD zu 8080 definiert, das kann man so lassen oder auch ändern. Falls man im gleichen Netzwerksegment mehr als einen Web-Server betreibt, sollte jder Port nur einmal verwendet werden. Da dieser Port vom öffentlichen Internet aus erreichbar sein soll, muss in der FritzBox eine Port-Weiterleitung aktiviert werden. Der externe Port kann, muss aber nicht, 8080 sein, jede Zahl zwischen 1 und 65535 ist da möglich. Anstelle der Datei webpage.h gibt es nun eine Datei webswitch.h welche den angepassten Code für die Web-Seite enthält. Der spezielle Programm-Code zur Tastenabfrage und zur Steuerung der Relais befindet sich in Hardware/IpSwitch.c, die zugehörige Initialisierungsfunktion (Port- und Timer-Initialisierung sowie Interrupt-Routine) muss demzufolge aus der main.c noch zusätzlich angesprungen werden. |
So sieht es dann aus...
|
Ausblick und Nachlese
Wie sich herausstellt, wird der 7805-Spannungsregler trotz Kühlkörper recht warm, nicht so
gerade das richtige für ein vollständig geschlossenes Plastikgehäuse. Ein Grund dafür
ist auch die recht hohe Stromaufnahme der Relais (Typ Omron G4D-*-*-*). Folgendes soll mit dem Interface in absehbarer Zeit noch gemacht werden:
|
Nachlese II
Es hat sich herausgestellt, dass der Grund für das Zusammenbacken der Relaiskontakte nicht
primär in der ungenügenden EIgenschaften des verwendeten Relais zu suchen ist, sondern
darin besteht, dass die hohe Stromaufnahme des Schaltnetzteiles SPS-9250 (Maas Elektronik) im
Einschaltmoment die eigentliche Ursache ist. Auch "passendere" Relais können nach wenigen
Schaltvergängen zerstört sein. Es wird also eine Einschaltstrombegrenzung benötigt,
und so sieht diese jetzt aus:
Sie ist noch im Gehäuse des Netzteiles untergebracht, es bietet genug Platz dafür.
Hier muss ich mich bei meinem Bekannten Reiner für die vielen nützlichen Hinweise zum
Thema bedanken. |
Links und Referenzen Neben den bereits oben angegeben Referenzen zu AVR-Netzwerk-Projekten sollten auch diese nicht fehlen:
Neben dem bereits erwähnten Mikrocontroller-Forum findet sich
|