NGW100 als Solarsteuerung

SolarMicha

Neues Mitglied
02. Dez. 2008
7
0
0
Kaltennordheim
Sprachen
Gemeinsam mit einem SPS-Programmierer habe ich im Oktober 2008 eine Solarsteuerung fertiggestellt. Er hat mittels Atmega32L einen AD-Wandler für 8 Temperatursensoren erstellt. Mein Part war die Entwicklung einer Benutzeroberfläche unter Windows. Diese hat sich inzwischen von GUI in Richtung Windowsdienst mit WebOberfläche entwickelt.
Um den Stromverbrauch zu senken und die Windows-Wartung zu umgehen war ich auf der Suche nach einer Alternative.
Seit ca. 8 Tage besitze ich nun ein NGW100 und komme nicht so recht voran.
Ich benutze AVR32 Studio. Hello World und die LED-Ansteuerung laufen als *.elf. Und nun meine Fragen:

Woher weiß ich welche includes ich für welche Funktionen benötige?
Gibt es keinen andere Pause als sleep(seconds)?
Kann man *.elf, wie unter Windows, automatisch starten?
Ich arbeite gerade "Linux-Gerätetreiber" von Alessandro Rubini & Jonathan Corbet durch. Hier steht unter anderem über Module: "Die einzigen Funktionen, die es aufrufen kann, sind die, die der Kernel exportiert; es gibt keine Bibliotheken, gegen die gelinkt wird."
Ist dies der richtige Weg?
Über ein par Schuppser in die richtige Richtung wäre ich Euch sehr dankbar!
 
ein kleiner Schritt vorwärts

Hallo,

in den letzten Tagen bin ich ein kleines Stückchen weiter gekommen. Vielleicht kann ich ja einem anderen ein wenig Mühe ersparen.
Unter Linux verfügbare Kommandos habe ich unter:

http://www.avrfreaks.net/wiki/index.php/Documentation:AVR32_Linux_Development/Available_AVR32_Linux_commands

gefunden. Mit diesem Wissen ist ein erstes kleines Programm unter Verwendung gefundener Beispiele entstanden:

Code:
#include <unistd.h> 	// diverse symbol. Konstante, Typen und Funktionen
			// hier werden "write" und "usleep" genutzt
#include <fcntl.h>	// Funtionen, Makros und Klassen für Dateizugriffe
			// hier werden "open" und sein Parameter "O_RDWR" benutzt

#define LED_OFFSET 19

int main(void){
	int i;
	static unsigned int off = 1 << LED_OFFSET;	//schiebt Bit 0 auf Bit 19 
	static unsigned int on = 0;			//alle Bits auf 0
	static int delay = 10000;
		
	int pio1, pio2;
	pio1 = open("/dev/gpio1", O_RDWR );	// öffnet Port 1 (PA) zum lesen und schreiben
	pio2 = open("/dev/gpio2", O_RDWR );	// öffnet Port 2 (PE) zum lesen und schreiben
	if ((pio1 > -1) & (pio2 > -1)) 		// beide geöffnet
	{
		for(i = 0; i < 1000; i++)	// 1000 blinker
		{
			write(pio1, &on, 4);	// schreibt 4 Byte on nach Port 1, LED A an
			usleep(delay);		// wartet "delay" Mikrosekunden
			write(pio1, &off, 4);	// LED A aus
			usleep(delay);		// wartet
			write(pio2, &on, 4);	// LED B an
			usleep(delay);		// wartet
			write(pio2, &off, 4);	// LED B aus
			usleep(delay);		// wartet
		}
		write(pio1, &off, 4);		// LED A am Ende wieder aus
		write(pio2, &off, 4);		// LED B am Ende wieder aus
		close(pio1);			// Port 1 freigeben
		close(pio2);			// Port 2 freigeben
	}
return 0;
}

Mit dem AVR32 studio konnte ich eine "Leds.elf" Datei erzeugen und mittels "/media/mmcblk0p1/Leds.elf" starten.
Der erste große Schritt für eine Steuerung (treiben der Ports) ist also getan.
Als nächstes habe ich in die Datei "/etc/init.d/rcS" mit dem Editor "vi" in der vorletzten Zeile (vor "exit 0") die Zeile "/media/mmcblk0p1/Leds.elf" eingetragen. Nun startet das Programm direkt nach dem booten und ich kann während der Laufzeit bereits die Konsole anderweitig benutzen. Hiermit dürfte das Thema autorun erledigt sein.
Nachdem ich in der Datei "/etc/httpd.conf" die Zeile "A: 10.0.0.0/24" (Vorgabe) in "A: 192.168.x.0/24" (mein Heimnetz) geändert habe, kann ich in meinem lokalen Netz über die WAN-Schnittstelle des NGW100 auf den Web-Server zugreifen.
Nun ist die nächste Klippe zu überwinden. Im Verzeichnis "/www" befindet sich die Startdatei des webServers "index.html". Diese lässt sich einfach editieren. Das Beispiel "NGW GPIO demonstration" startet von hier aus "/www/cgi-bin/cgipio.cgi". Diese Datei wurd vermutlich ebenfalls mit C erstellt. Aber wie? Wo finde ich die Quelle?

Für schnelle Hilfe wär ich dankbar.
Michael:egg:
 
Hallo Michael,

vielleicht hilft dir dieser Link zu einem Forum-Thread im avr-freaks-Forum weiter: cgipio.cgi source for ngw100

Grüße,
Dirk
 
Danke für Deine Mühe. Diese Seite kenne ich bereits. Woher die Quelle kommt geht leider nicht daraus hervor. Oder ich bin einfach zu dusselig.
 
Ein CGI-File zu erstellen ist einfacher als gedacht.
Man erstellt im AVR-Studio ein Projekt. Übersetzt dieses, ohne es statisch zu linken. Nun wird der Dateiname von "program.elf" in "program.cgi" geändert. Wenn man diese Datei nach "/www/cgi-bin" kopiert, kann man im WebBrowser mit dem Link "/cgi-bin/programm.cgi" direkt darauf zugreifen. Hier das erste Hallo Welt-Beispiel:
Code:
#include "stdio.h"
#include "stdlib.h"

int main (int argc, char *argv[])
{
	printf("<Content-type: text/html>\n\n");
	printf("<html>\n");
	printf("<head>\n<title>webSolar V 2.00.00");
	printf("</title>\n</head>\n");
	printf("<body>\n");
	printf("<h1>Hallo AVR-Praxis</h1>\n");
	printf("</body>\n");
	printf("</html>\n");
	return (EXIT_SUCCESS);
}
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)