Forum: Projekte & Code Die andere Firmware für AVR-NET IO


von Dirk B. (sharandac)


Angehängte Dateien:

Lesenswert?

Hallo,

Ich habe mir mal die mühe gemacht und das OpenMCP Projekt [1], welches 
eigentlich für einen ATmega2561 ausgelegt ist, auf das AVR-NET IO Board 
mit einen ATmega644, der mit 16MHz läuft, portiert. Herausgekommen ist 
eine bunte Weboberfläche zum steuern. Unterstützt wird derzeit das 
schalten der 8 Ausgänge am 25-poligen Stecker, einlesen der 4 Eingänge 
vom selbigen und das Anzeigen der Analogeingänge an den seitlichen 
Klemmen. Am 25-poligen Stecker habe ich zu Testzwecken eine Relais-Karte 
von Pollin dran die man wunderbar per Webinterface schalten kann.

An Netzwerkprotokollen wird derzeit eigentlich alles unterstützt was man 
so braucht:

- ARP, IP, UDP, TCP
- DHCP, NTP, DNS

zusetzlich sind eine menge anderer Funktionen implementiert die einen 
das leben erleichtern sollen.

Die Dokumentaion zum Sourcecode kann per Doxygen aus den Projekt heraus 
erzeugt werden, oder unter [1] eingesehen werden. Die Dokumentation ist 
an sich noch nicht vollständig, aber zu großen Teilen vorhanden.

Nach dem erstmaligen Flashen der Firmware (main.hex) versucht sich das 
Board eine IP-Adresse per DHCP zu holen und ist danach unter dieser IP 
per HTTP oder Telnet erreichbar. Sollte kein DHCP-Server antworten wird 
eine Standart IP gesetzt von 192.168.178.24/24. Ausgaben zum Bootvorgang 
erfolgen über den Seriellen Port mit 57600 8N1. Dort kann auch die IP 
nachgelesen werden worunter das Board zu erreichen ist. Per 
Weboberfläche kann man dann alles weitere einstellen ( IP-Adresse, 
MAC-Adresse, NTP, etc ... ) und steuern. Alle Einstellungen selber 
werden im EEprom gespeichert.
Deshalb nochmal: alle Werte im EEprom werden überschrieben wenn keine 
alte Konfiguration dieser Firmware gefunden würde!!!

So, genug der Worte, ich wünsche viel Spaß beim spielen und würde mich 
über Anregungen und Verbesserungsvorschläge freuen und versuche 
natürlich auch mit Rat und Tat zur Seite zu stehen bei Fragen.

CAY Dirk

[1] Link: http://wiki.neo-guerillaz.de

von Karl albert L. (karleido)


Angehängte Dateien:

Lesenswert?

Hallo Dirk,

beim experimentieren mit der Software ist mir folgendes aufgefallen. Der 
NTP-Server läst sich einschalten. Nach Neustart des AVR-NET-IO wird 
"Versuche DHCP-Config zu holen" noch ausgeführt und die Zeit wird 
geholt.
Ändere ich aber die MAC-Adresse, wird "Versuche DHCP-Config zu holen" 
nicht mehr ausgeführt. Es wird die Standart IP-Adresse ausgegeben. Das 
AVR-NET-IO läst sich aber nicht auf dieser Adresse anpingen. Das 
AVR-NET-IO ist erst nach Neueinspielung der Hex-Datei wieder 
ansprechbar.

Gruß
Karl Albert

von Dirk B. (sharandac)


Lesenswert?

Hallo,

klingt komisch, fast so als wenn die Konfiguration im EEprom verloren 
gegangen ist. Hast du BoD aktiviert? Wenn dies nicht aktiv ist kommt es 
manchmal vor das die Daten nicht richtig im EEprom landen ist es dann zu 
komischen Sachen kommt. Und kann es sein, das wenn du das Hex-File neu 
einspielt, das EEprom auch gelöscht wird? Das würde erklären das nach 
dem einspielen wieder alles I.O. ist. Schaue dir mal nach dem einspielen 
der Software und ändern das Konfig im Menu "System/EEprom" die Daten an 
die gespeichert wurden. Dort alles Okay? Sollte in etwa so aussehen:
1
Config ist 2047 bytes gross, 144 byte werden benutzt. Offset 13
2
3
DHCP=on
4
IP=192.168.2.195
5
MASK=255.255.255.0
6
GATE=192.168.2.1
7
DNS=192.168.2.1
8
MAC=00:03:6f:55:1c:c8
9
NTP=on
10
NTPSERVER=time.fu-berlin.de
11
UTCZONE=+2

CA Dirk.

von Dirk B. (sharandac)


Lesenswert?

ÄH ... ich sehe gerade das Problem, welches eigentlich nicht wirklich 
eins ist. Erklärung:

Nach dem ersten einspielen existiert im EEprom noch keine Konfiguration, 
logisch woher auch. Es wird daraufhin eine angelegt welche aber noch 
keine Werte und Daten enthält. Daher wird auch immer versucht per DHCP 
eine zu holen solange es keinen Eintrag dafür gibt. Wenn du nun die 
MAC-Adresse änderst schreibst du die Konfiguration für DHCP u.s.w., 
dabei wird auch DHCP ausgeschaltet, weil kein  Eintrag vorhanden war 
dafür. Also nochmal beim ändern nachsehen ob ein Häckchen bei DHCP 
steht. Damit sollte es getan sein.

Jetzt ist die Frage ob es sinnvoller ist solange kein Eintrag für DHCP 
und Netzwerk vorhanden ist, DHCP auch zu Aktivieren?

CA Dirk

von Karl albert L. (karleido)


Lesenswert?

Hallo Dirk,

den Fehler habe ich selbst verursacht. Eine MAC-Adresse darf ja nur 
einmal im Netzwerk vorkommen. Ich wollte die Mac.Adresse welche ich vom 
AVR-NET-IO Bausatz mitbekommen habe einspielen und habe aber die Adresse 
von meinem Router genommen. Danke für deine Hilfe.

Gruß
Karl Albert

von Dirk B. (sharandac)


Lesenswert?

Gerne geschehen ...

von Dirk B. (sharandac)


Lesenswert?

An dieser Stelle muss ich gleich nochmal die Frage stellen ob es Sachen 
gibt die eingebaut werden sollten oder verbessert werden sollten. Oder 
ob bedarf besteht nach einer Anleitung wie man eigene CGIs oder 
Webseiten einbaut? Oder einfach nur ein bisschen Feedback :-).

CA Dirk

von Philipp P. (-crack-)


Lesenswert?

Ich wäre für eine Anleitung wie man eigene CGIs oder
Webseiten einbaut sehr dankbar!!!

mfg. -crack-

von 1Wire Fan (Gast)


Lesenswert?

1 Wire Support fänd ich praktisch (DS18xxx)

von Simon K. (simon) Benutzerseite


Lesenswert?

Nicht immer nur fordern Leute, Selbermachen heißt die Devise ;)

von PJ (Gast)


Lesenswert?

@Simon
Bist du auf Auto-Moralisiermodus? Der OP hat doch selbst ausdrücklich 
nach Wünschen gefragt. Willst Du den anderen Postern etwa das Antworten 
verbieten? Naja, so sind halt die Moralapostel, immer muss es nach ihnen 
gehen.

@Dirk
Cooles Projekt!
Sicher auch sehr lehrreich, um in die Web-Programmierung mit dem AVM 
einzusteigen. Vielleicht hole ich mir das Board und die Teile auch, 
allein deswegen.
Am Besten dann irgendwann die Software auf der AVR NET-IO Seite im Wiki 
mit eintragen, sobald sie den von Dir gewünschten Stand hat.

von Dirk B. (sharandac)


Lesenswert?

@-crack-

Da bin ich schon am arbeiten, aber leider fehlt mir die Zeit. Ich werde 
mich mal ran setzen und versuchen diese Woche noch eine kleine Hilfe zu 
schreiben. Aber im Prinzip ist es sehr einfach CGIs oder Webseiten 
einzufügen, und das mit Absicht, soll es doch auch den Einsteiger den 
Einstieg erleichtern, da viele Einsteiger ein bisschen Angst haben vor 
C.

@1Wire Fan

Interessant auf jeden Fall. Ich werde mir mal einfache 
Temperatur-Sensoren holen und was basteln.

@Simon K.

Ja, da haste recht. Wie immer sind auch die Programmierer unter Euch 
aufgefordert was beizutragen. Aber nicht jeder ist Programmierer oder 
traut sich zu etwas dazu beizutragen, aber aller Anfang ist schwer.

@PJ

Die Software steht schon im Wiki drin. Sie hat bis auf die 
Dokumentation, welche ein bisschen hinterher hinkt, eigentlich schon den 
Stand den ich haben will.

von Dirk B. (sharandac)


Lesenswert?

Hallo,

ich wollte mich mal wieder melden. Ich habe inzwischen angefangen die 
Doku [1] zum CGI-Inferface zu schreiben, sie ist aber noch im Aufbau, 
sprich muss noch verfeinert werden und ist nicht Korrektur gelesen. Ich 
habe auch mal angefangen mich mit den 1-Wire Interface zu beschäftigen, 
mal sehen ob die Tage was dazu zu sehen ist. Und wie immer bin ich für 
Anregungen und Kritik offen.

CA Dirk

[1] Link: 
http://wiki.neo-guerillaz.de/mediawiki/index.php/Software_Hier_geht_es_dort_hin.#Dynamische_Webseiten_.28CGI.29

von Karl albert L. (karleido)


Lesenswert?

Hallo Dirk,

ich bin neu in der C Programmierung. In vielen Berichte bin ich über den 
Begriff foobar gestolpert. Ist dies nur ein Platzhalter?

Karl Albert

von PJ (Gast)


Lesenswert?


von Dirk B. (sharandac)


Lesenswert?

@Karl,

jup ... hat sich bei vielen Programmierer als synonym etabliert für 
irgend etwas. Siehe:

http://de.wikipedia.org/wiki/Foobar#Foo_in_der_IT-Branche

CA Dirk

von Karl albert L. (karleido)


Lesenswert?

Danke für die Hinweise.

Karl Albert

von Dirk B. (sharandac)


Angehängte Dateien:

Lesenswert?

Hallo,

anbei die letzte Version des OpenMCP. Im wesentlichen ist die 
Unterstützung für 1-Wire dazugekommen sowie einige kleinere 
Verbesserungen im Detail und natürlich eine bisschen Fehlerbereinigung. 
Zum Thema 1-Wire: Zu finden ist 1-Wire im Menü "IO-Ports". Derzeit 
werden nur die IDs der gefundenen Sensoren ausgeben. Der 1-Wirebus 
befindet sich am ADC2-Pin des AVR-NET IO. Kommentare und Fehlerberichte 
sind wie immer willkommen.

An dieser Stelle nochmals vielen Dank an Peter Dannegger, sein Code hat 
viel zum Verständnis von 1-Wire beigetragen.

Anschließend möchte ich nochmals auf die Doku hinweisen zu CGI und 
statische Webseiten [1] die ich geschrieben habe.

CA Dirk

[1] Link: 
http://wiki.neo-guerillaz.de/mediawiki/index.php/Software_Hier_geht_es_dort_hin.#Webserver

von Karl albert L. (karleido)


Lesenswert?

Hallo Dirk,

habe die neue Version getestet. Lief sofort auf Anhieb. Habe bis 8 
1-Wiresensoren angeschlossen gehabt. Die Anzeige Der ID's wird in eine 
Zeile geschrieben, so dass nur die ersten 4 vollständig zu lesen waren.

Was muß ich tun um das Doxyfile lesen zu lönnen?

Gruß
Karl Albert

von Dirk B. (sharandac)


Lesenswert?

@Karl

Ich werde das mal ändern, habe wohl einfach nur das \r\n vergessen und 
nicht gemerkt, da ich nur einen Sensor dran habe :-).
Das Doxyfile kann man nicht lesen, es dient nur als Konfigurationsdatei 
für das Programm Doxygen. Mit diesem kann man aus den Sourcecode heraus 
eine Dokumentation erzeugen. Diese ist auch immer unter [1] einsehbar in 
der aktuellen Version wenn ich es nicht vergessen habe zu erzeugen :-). 
Die Doku ist aber nicht immer ganz aktuell, weil die Sourcen sich 
schneller schreiben lassen als die Doku, ist wohl ein Naturgesetz.

CA Dirk

[1] Link: http://wiki.neo-guerillaz.de/html

von r.st (Gast)


Lesenswert?

Moin, moin.
Ich bin hier per google reingespült worden wie ich mich zum Pollin-Board 
informieren wollte.
Wie ich das Wiki so durchlese ist da NTP im Code eingebaut.
Dazu ist mir eingefallen; ich habe da noch eine GPS-Maus die sich hier 
langweilt, hier RGM-2000.
Das Modul hat Spannungsversorgung 5V/0,2A extern(intern mit Linearregler 
auf 3,3V), Datenausgabe in 3,3V, Standarddatensatz ist NMEA Protokoll.
Es könnte sogar noch ein ppm - Signal aus dem Modul geholt werden 
welches am Chip an Pin 29 liegt.
Die Zeitangabe im Protokoll ist identisch mit NTP, hier Hhmmss.sss.
Alle Werte die im Paket mit gesendet werden sind durch Kommata getrennt.
Wie das ausschaut ist im Dateianhang zu sehen.
Nun bin ich was C angeht nicht der Held um das in den bestehenden Code 
einzubauen und wenn ich mir den so ansehe ist der für das kleine Bord 
doch schon beachtlich angewachsen, will sagen, mir zu hoch. Ob ich 
jemanden dafür begeistern könnte das im Code aufzunehmen?
Davon ab bin noch auf der Suche nach dem ISP-Programmer für mich.
Also mal in die Tasten greifen und ausprobieren ist noch nicht.

von Karl albert L. (karleido)


Lesenswert?

Dirk Broßwick schrieb:
> @Karl
>
> Ich werde das mal ändern, habe wohl einfach nur das \r\n vergessen und
> nicht gemerkt, da ich nur einen Sensor dran habe :-).

Hallo Dirk,

ich hab mich auf die Suche gemacht und den Fehler gefunden. In der Datei 
cgi-bin.c ist in der Zeile 797 der Zeilenumbruch. Diesen habe ich in die 
Zeile 795 vor die schließende Klammer gesetzt. Jetzt sieht es schön aus.
Auch bei der Suche nach so einfachen Dingen lerne ich etwas von C.

Gruß
Karl Albert

von Dirk B. (sharandac)


Angehängte Dateien:

Lesenswert?

Hallo Karl,

ich habe mich gestern auch mal auf die suche gemacht und gleich noch nen 
paar Sachen eingefügt zu 1-Wire... zu begutachten im Anhang. Wichtig ist 
auch das ich den 1-Wire Bus auf den PB0 gelegt habe (10-poliger 
Wannenstecker), da er auf den ADC-Pin gestört hat, kann man aber in der 
Datei Hardware/1wire/1wire.h wieder ändern.

CA Dirk

von Karl albert L. (karleido)


Angehängte Dateien:

Lesenswert?

Hallo Dirk,

ich benutze auch den DS1822 als Sensor. Da in der Datei 1wire.c dieser 
nicht aufgeführt ist, hätte doch die Meldung "unkown family code" 
erscheinen müssen. Das Ergebnis habe ich als Bild beigefügt.
Der DS1822 wird von anderen Programmen wie ein DS18S20 behandelt. Bei 
der Temperaturanzeige habe keine Unterschiede festgestellt.

Gruß
Karl Albert

von Dirk B. (sharandac)


Angehängte Dateien:

Lesenswert?

Hallo,

das hatte ich gestern auch gemerkt, peinlicher Fehler :-). Habe es auch 
gleich verbessert ... anbei die aktuellen Sourcen.

CA

von Denny S. (nightstorm99)


Lesenswert?

hallo!

Erstmal vielen Dank für die tolle Arbeit!

Ich habe aber ein kleines Problem mit der Firmware.
Benutze das Pollin Board mit einem Atmega644 bei 18,432 Mhz.

Wenn ich nun die Webseite aufrufe (gleich nach dem Reset des Boardes) 
geht
alles wunderbar, aber nach ca 30sek bekommt man dann keine Verbindung 
mehr oder er brauch ewig dafür.
Woran kann das leigen?

Habe es mit der Avr-libc 1.6.1 / 1.6.2 und 1.6.6 probiert und auf 
verschiedenen Compilern, immer das gleiche!


Als Anregung hätte ich noch ein paar Sachen:
- abschalten von den Protokollen die man nicht braucht, in einer 
Confdatei
  (Speicherplatz sparen)
- SD-Karten Ünterstützung


Danke und Gruß
Denny

von Dirk B. (sharandac)


Lesenswert?

Hallo Denny,

danke für das Feedback. Ich selber habe noch keine anderen Quarze 
ausprobiert, werde mich aber gleich mal auf den Weg machen und einen 
anderen holen und das Problem untersuchen.

Zu deinen Vorschlägen:

Bei der Möglichkeit an einem Configfile bin ich schon dran, damit man 
die einzelnen Protokolle abschalten kann (NTP, DHCP, etc. ). Kommt 
vielleicht mit der nächsten Version. SD-Kartenunterstützung wollte ich 
eigentlich nicht einbauen, da ich alles On-Board haben wollten, aber 
wenn bedarf besteht könnte man mal darüber nachdenken, braucht aber mit 
Sicherheit ordentlich Speicherplatz.

CA Dirk

von sven (Gast)


Lesenswert?

eine SD unterstüzung wäre echt super!

kann mir einer sagen warum der seitenaufbau extrem lange dauert? 
(ca.1-2min) und manchmal klappt es garnicht. hab ich was falsch gemacht 
oder ist es einfach so?

von Dirk B. (sharandac)


Lesenswert?

@sven

Der Seitenaufbau ist leider nur unter Windows so langsam. Windows 
benutzt DELAYED_ACK, was soviel heißt das es immer 200ms wartet ob ein 
neues Packet kommt, und wenn in dieser Zeit keines kommt erst die 
Bestätigung für das vorherige sendet. Und da der Stack wegen 
Speichermangel immer auf die Bestätigung eines Packetes warte ist das 
schlecht wenn Windows das macht. Wenn ich es noch schaffe werde ich 
heute noch eine gefixte Version posten.

CA Dirk

von Dirk B. (sharandac)


Angehängte Dateien:

Lesenswert?

Hallo,

so, wie angekündigt jetzt die neue Version. Zu den Änderungen:

- DELAYED_ACK gefixt, geht jetzt auch mit Windows schnell
- config.h eingefügt um die einzelnen Softwaremodule ein/aus zu schalten 
( HTTP, TELNET, DHCP, DNS, NTP, UDP, TCP, GPIO, 1-WIRE, ADC )
- diverse Kleinigkeiten verbessert
- Telnet überarbeitet

So, wie immer viel Spass mit der neuen Version.

CA Dirk

p.s.: Über Kritik und Anregungen freue ich mich wie immer.

von Dirk B. (sharandac)


Angehängte Dateien:

Lesenswert?

Hallo,

ich bin es nochmal. In der Version von gestern ist ein ungewollter Bug 
drin der die Firmware instabil macht. Schuld daran ist die Erweiterung 
des TCP-Stack bei der Behandlung von DELAYED_ACK in Bezug auf Windows. 
Zum Problem:

 Durch die Erweiterung DELAYED_ACK wird durch ein schnelles versenden 
von zwei TCP-Packeten nacheinander Windows gezwungen schneller zu 
Antworten damit die Kommunikation schneller wird. Soweit so gut. Dadurch 
wurde aber ein Fehler im Treiber für den ENC28j60 aufgezeigt der nur 
sporadisch auftrat. Das zeigte sich dadurch das sich die MCU scheinbar 
aufgehangen  hat. Hat sich aber nicht. Der ENC28j60 hatte sich 
aufgehangen. Im Treiber wurde beim versenden eines neuen Packetes nicht 
überprüft ob das vorherige schon fertig versendet worden ist und somit 
platz im Speicher war um das neue aufzunehmen. Wurde nun versucht ein 
neues Packet zu versenden während das vorherige noch versendet wird, 
stürzte der ENC28j60 ab und gab keinen mucks mehr von sich.

Das Problem ist jetzt soweit behoben. Netter Nebeneffekt sind neue 
Features für Full/Halb-duplex und Linkstate. :-)

Anbei die verbesserte Version.

CA Dirk

von Dennis (Gast)


Lesenswert?

In Bezug auf die Geschwindigkeit unter Windows. Vor ein paar Tagen habe 
ich eine akzeptable Lösung gefunden. Mehr infos sind in der Email von 
mir unter 
http://list.zerties.org/pipermail/ethersex-devel/2009-May/001139.html 
zufinden.

Gruß Dennis

von Dirk B. (sharandac)


Lesenswert?

Hallo,

ja, das war auch meine erste Überlegung, aber eigentlich will ich keinen 
zumuten in der Registry zu spielen. Das muss auch so gehen. Ich zwinge 
Windows zu einem vorzeitigen ACK in dem ich einfach dem eigentlichen 
TCP-Packet ein ungültiges TCP-Packet welches nur ein ACK enthält 
hinterher schicke (ohne Payload). Dadurch muss Windows dann das erste 
vorzeitig bestätigen. Ich denke mal das ist eine akzeptable Lösung und 
verbraucht keine Reserven, außer ein bisschen Bandbreite.

CA Dirk

von Sven K. (Gast)


Lesenswert?

Hallo Dirk,

also ich habe mich jetzt seit einer Woche mit der Firmware beschäftigt.
Als Plattform benutze ich das Pollin Board.
Ich benutze den letzten Softwarestand vom 23.05.2009 16:33.
Der Telnet Server und der HTTP-Server läuft.

NTP läuft nicht, egal was ich anstelle.
Ich benutze eine IP Adresse und kein DNS Namen.

Zum Test habe ich auch mal diese Zeilen genommen:

unsigned long myip = IPDOT( 192l, 168l, 1l, 100l );

while( 1 )
{
// mit IP auf Port 21 verbinden
SOCKET = Connect2IP( myip, 21);
// Verbindung okay ?
if ( SOCKET != NO_SOCKET_USED ) break;
if ( i > MAX_NTP_FAILED ) return( NTP_ERROR );
i++;
}

So, ich erwarte also eine Client TCP Verbindung auf Port 21
auf die IP 192.168.1.100. Es passiert aber nichts.
Auch nicht im Netzwerkverkehr. (Wireshark)

Auf dem Rechner mit 192.168.1.100 lauscht ein TCP Server auf dem Port.

Diese eigene Funktion wird durch init() gestartet und
durch printf_P kann ich auch sehen das er den Code ausführt.

Hoffe Du kannst mir den entscheidenden Hinweis geben.

Gruß Sven

von Denny S. (nightstorm99)


Lesenswert?

Sven K. schrieb:
> Hallo Dirk,
>
> also ich habe mich jetzt seit einer Woche mit der Firmware beschäftigt.
> Als Plattform benutze ich das Pollin Board.
> Ich benutze den letzten Softwarestand vom 23.05.2009 16:33.
> Der Telnet Server und der HTTP-Server läuft.
>
> NTP läuft nicht, egal was ich anstelle.
> Ich benutze eine IP Adresse und kein DNS Namen.
>
> Zum Test habe ich auch mal diese Zeilen genommen:
>
> unsigned long myip = IPDOT( 192l, 168l, 1l, 100l );
>
> while( 1 )
> {
> // mit IP auf Port 21 verbinden
> SOCKET = Connect2IP( myip, 21);
> // Verbindung okay ?
> if ( SOCKET != NO_SOCKET_USED ) break;
> if ( i > MAX_NTP_FAILED ) return( NTP_ERROR );
> i++;
> }
>
> So, ich erwarte also eine Client TCP Verbindung auf Port 21
> auf die IP 192.168.1.100. Es passiert aber nichts.
> Auch nicht im Netzwerkverkehr. (Wireshark)
>
> Auf dem Rechner mit 192.168.1.100 lauscht ein TCP Server auf dem Port.
>
> Diese eigene Funktion wird durch init() gestartet und
> durch printf_P kann ich auch sehen das er den Code ausführt.
>
> Hoffe Du kannst mir den entscheidenden Hinweis geben.
>
> Gruß Sven

Hallo Sven!

Hast du irgendwelche Sachen ausgeschaltet in der "Config.h"?
Also bei mir geht es mit der Firmware wunderbar. Benutze auch das Pollin 
NetIO.

Dirk will heute nochmal eine Version veröffentlichen, wo eine Menge 
Fehler
berichtigt worden sind!
Außerdem wird er noch ein SVN bereit stellen wo man immer den aktuellen
Stand bekommt.

Gruß Denny

von Sven K. (Gast)


Lesenswert?

Hi Denny,

nein, in der config.h habe ich erstmal nichts ausgeschaltet.
DHCP schön eine IP holen lassen und den Time server
der eingetragen ist aktiviert.
Keine Chance, -> NTP....: fehlgeschlagen.

Modul hängt direkt an einer Fritzbox mit aktiviertem DHCP.

Was mich ja wundert ist, das die Kommunikation mit httpd funktioniert.
Nur die Client Verbindungen, die vom AVR IO aufgebaut werden sollen tun 
nicht.

Danke schon mal, ich gehe der Sache weiter auf den Grund.

Gruß Sven

von Dirk B. (sharandac)


Lesenswert?

@Sven K.

Hast du mal geschaut ob ein ARP durchkommt?

CA Dirk

von Dirk B. (sharandac)


Angehängte Dateien:

Lesenswert?

Salut.

So, heute die letzte Version bevor ich in Urlaub fahre, dann habt ihr 
erst mal 2 Wochen ruhe vor mir :-). Wie Denny schon ankündigte gibt es 
einige Verbesserungen im Detail. Neues ist eigentlich nicht wirklich was 
hinzu gekommen. Die wichtigste Verbesserung betrifft direkt und indirekt 
den TCP-Stack. Der ist jetzt stabiler geworden. Das Board hängt sich 
jetzt bei Fehlern nicht mehr auf sondern bleibt nur kurz für einige 
Sekunden hängen. TCP ist halt kompliziert :-). Sonst gibt es nur 
Verbesserungen bei Telnet und einigen Treibern. Zudem möchte ich nochmal 
darauf hinweisen das man die Aktuelle Version auch immer per SVN sich 
besorgen kann. Programme dafür gibt es sogar für Windows in vielen 
Varianten. Die URL für SVN lautet.

 http://wiki.neo-guerillaz.de/usvn/svn/

Username und Passwort sind: anonymous

So, das wars erst mal.

P.s.: Sven K., probiere mal unter Telnet das ntp aus.

von Sigurd L. (sleuther)


Lesenswert?

Hallo Dirk,

viel Spaß und gute Erholung im Urlaub. Ich habe mir verschiedene 
Projekte zum AVR Net IO von Pollin angesehen und das OpenMCP sagt mir 
von der Sourcecodestruktur zu. Leider komme ich zur Zeit mit OpenMCP 
nicht weiter, da die Netzwerkverbindungen nicht funktionieren.
( Zur Info: Alles unter Windows )
 Folgende Situation:

IP Adresse im Programmcode an meinen Netzwerkkreis angepasst, da DHCP 
nicht arbeitet. Im Sourcecode habe ich die Debugausgaben für TCP.c 
eingeschaltet.

1.) Ausgabe auf der seriellen Konsole beim Start nach einem Reset:
Microwebserver build on AVR-libc version: 1.6.6/20090309 $Id: main.c 132 
2009-05-22 3:22:47Z sharan $ $Revision: 134 $
UART initialisiert
STDOUT initialisiert
CLOCK initialisiert
Config gefunden (Pos: 0, Len: 2035, Offset: 13)
GPIO initialisiert
ADC initialisiert
1Wire Error
ENC28j60 initialisiert ( HW-Add: 00:03:6f:55:1c:c8 ) Halfduplex: Link 
ready
-+-> ARP initialisiert
 |-> UDP initialisiert
 |-> TCP (Hurrican-engine) initialisiert
 |-> Versuche DHCP-Config zu holen. DHCP-Client: DISCOVER ->Dicover 
gesendet ERROR -> Default Config
DHCP-Config Fehlgeschlagen
 |   IP     : 192.168.252.11
 |   Netmask: 255.255.255.0
 |   Gateway: 192.168.252.2
 |   DNS    : 192.168.252.2
Telnet-Server gestartet auf Port 23.
HTTP-Server gestartet auf Port 80.

Also ok bis auf DHCP ( Andere Projekte wie Uli Radig und RoBue 
funktionieren mit DHCP)

2.) Ping -t 192.168.252.11 funktioniert.
3.) Aufruf von http://192.168.252.11 Ausgabe auf der seriellen Konsole:

Kommende Verbindung auf Port 80 [SYN] auf Socket 0
VerbinduVerbindunVerbindungszuordnung auf Socket 0
Richtige reinfolge der Packete!
0 Byte befinden sich im Recivebuffer [PSH + ACK] 128 Byte empfangen
Bestaetigung gesendet [ACK]
Verbindung ist aufgebaut und READY2USE [ACK]
gEmpfang bestaetig [ACK] SendState aud READY2SEND
nÿVerbindungszuordnung auf Socket 0
Falsche reinfolge der Packete!
Verbindungszuordnung auf Socket 0
Falsche reinfolge der Packete!
Verbindungszuordnung auf Socket 0
Falsche reinfolge der Packete!
Verbindungszuordnung auf Socket 0
Falsche reinfolge der Packete!
Verbindungszuordnung auf Socket 0
Falsche reinfolge der Packete!
Verbindungszuordnung auf Socket 0
Empfang bestaetig [ACK] SendState aud READY2SEND
Kommende Verbindung auf Port 80 [SYN] auf Socket 1
VerbiVerbiVerbindungszuordnung auf Socket 1
Richtige reinfolge der Packete!
0 Byte befinden sich im Recivebuffer [PSH + ACK] 128 Byte empfangen
Bestaetigung gesendet [ACK]
Verbindung ist aufgebaut und READY2USE [ACK]
nEmpfang bestaetig [ACK] SendState aud READY2SEND
nVerbindungszuordnung auf Socket 1
Buffer Error
Verbindungszuordnung auf Socket 1
Buffer Error
Verbindungszuordnung auf Socket 1
Buffer Error
Verbindungszuordnung auf Socket 1
Buffer Error
Verbindungszuordnung auf Socket 1
Buffer Error

Keine Anzeige im Browser.

4.) Telnetverbindung zu 192.168.252.11 Ausgabe auf der seriellen 
Konsole:

Kommende Verbindung auf Port 23 [SYN] auf Socket 0
VerbiVerbindungszuordnung auf Socket 0
Richtige reinfolge der Packete!
0 Byte befinden sich im Recivebuffer [PSH + ACK] 21 Byte empfangen
Bestaetigung gesendet [ACK]
Verbindung ist aufgebaut und READY2USE [ACK]
VEmpfang bestaetig [ACK] SendState aud READY2SEND

Keine Anzeige im Telnet client ( putty )

5.) Beim dem Versuch der Telnetverbindung bricht auch der Dauerping ab 
und das Board hat sich "aufgehangen".

Hast Du oder irgend jemand eine Idee woran das liegt? Software stand 
27.5.2009 vom SVN. Bei anderen scheint es ja zu funktionieren. In der 
Hoffnung das schnell in den Griff zu bekommen und dann auch produktiv 
mitwirken zu können.

Sigurd

von Karl albert L. (karleido)


Lesenswert?

Hallo  Sigurd,

ich habe nach meinem Urlaub mir die Version vom 27.05.2009 geholt und 
auf mein AVR-NET-IO eingespielt. Ich habe die gleichen Erscheinungen so 
wie du sie beschrieben hast. Dann habe ich eine alte Version von vor 
meinem Urlaub eingespielt und diese zeigte auf einmal das gleiche 
Verhalten.
Nach vielen Versuchen fand ich das ich vor meinem Urlaub die Schaltung 
von einem anderen USB-Port mit Spannung versorgt hatte. Nach Umstecken 
auf den ehemaligen Port bekam ich sofort eine im Browser. Nun habe ich 
die Version vom 27.05.2009 eingespielt und siehe da, auch diese Version 
lief jetzt auf anhieb.
Ein Vergleich der Spannungen zeigte im Schlechtfall eine Spannung von 
4,4V / 2,8V und im Gutfall 4,5V / 2,9V. Wie genau die Spannung des ENC 
sein muß, weiß ich nicht.

Prüfe einmal deine Spannungen. Vielleicht hast du den Fehler dann 
gefunden.

Gruß
Karl Albert

von Denny S. (nightstorm99)


Lesenswert?

Hallo

hat man das Pollinboard orginal zusammengebaut sollte man an der 
Spannungsversorgung mind. 8V anlegen. Ansonsten arbeitet der 7805er 
nicht richtig und die 3,3V stimmen dann auch nicht.

Gruß Denny

von Sigurd L. (sleuther)


Lesenswert?

Hallo Karl Alber, hally Denny,

ich denke nicht, dass es an der Hardware liegt. Inzwischen habe ich auch 
Linux installiert und dort ethersex kompiliert. Das läuft auch mit allen 
Modulen. Nun stecke ich in der Zwickmühle. OpenMCP hat mir von der 
Modulaufteilung zugesagt und ist da es unter Windows kompiliert werden 
kann für mich einfacher zu handhaben. Ethersex ist auch sehr gut 
strukturiert, kann zur Zeit aber nur unter Linux gebildet werden. 
OpenMCP läuft scheinbar bei allen und bei mir funktiert die 
Netzwerkverbindung prinzipiell, ICMP echo ist ok. Sobald aber Telnet 
oder HTTP benutzt wird klemmt es. Ich dachte es sei einfach zu lösen.

Sigurd

von Dirk B. (sharandac)


Lesenswert?

Hallo,

so, bin wieder aus meinen Urlaub zurück. War echt klasse, kann Japan nur 
empfehlen :-).

@Sigurd

Das mit dem DHCP sieht schon komisch aus, er erhält vom DHCP noch nicht 
mal eine Antwort. Sollte eigentlich so in etwa aussehen:
1
 |-> Versuche DHCP-Config zu holen. 
2
DHCP-Client: DISCOVER ->Dicover gesendet
3
DHCP_MESSAGES_TYPE gefunden 02
4
Server-ID gefunden 0102A8C0
5
Leasetime gefunden 201C0000
6
SUBNETMASK gefunden 00FFFFFF
7
ROUTER gefunden 0102A8C0
8
DNS-Server gefunden 0102A8C0
9
 OFFER -> REQUEST ->DHCP_MESSAGES_TYPE gefunden 05
10
Server-ID gefunden 0102A8C0
11
Leasetime gefunden 201C0000
12
SUBNETMASK gefunden 00FFFFFF
13
ROUTER gefunden 0102A8C0
14
DNS-Server gefunden 0102A8C0
15
 ACK -> Config
16
DHCP-Config geholt

Für mich stellt sich die Frage was zu für ein Netzwerk verwendest. Es 
sollte zumindest ein NACK vom DHCP kommen. Beim Pollin-Board verwendest 
du die Standarthardware mit einem ATmega644?
Beim Rest sieht es auch so aus als wenn es Probleme mit dem Netzwerkchip 
gibt, da er wohl Packete Verschluckt. Hast du mal eine ältere Version 
vom OpenMCP genommen. Und Versuche mal in der Network.c im System/net/ 
Verzeichnis die folgende Zeile in die network.c in Zeile 103 
einzutragen.
1
enc28j60EnableFullDuplex();

so das er versucht auf jedenfall Fullduplex zu verwenden.

CA Dirk

P.s. Werde nachher mal eine neue Version vom OpenMCP auf das SVN packen 
wo man in der Config.h zusätzlich Full/Halfduplex wählen kann.

von Sigurd L. (sleuther)


Lesenswert?

Hallo Dirk,

Danke für die Antwore. Ich bin im Moment etwas eingespannt und komme 
nicht immer zum "Basteln". Daher erfolgen die Rückmeldungen hier nur 
sporadisch.

Also ich benutze das Standard Pollin board mit ATMega644. Den 
Fullduplexmode werde ich ausprobieren, sobald ich etwas Zeit habe. Was 
mich stuzig macht ist, daß die gleiche Hardware mit anderen "Webservern" 
funktioniert auch DHCP. Ich werde aber dran bleiben und weiter 
berichten. Vielleicht liegt es wirklich an meiner 
Hardwarezusammenstellung. Um den Switch auszuschließen ( 1GBit D-Link) 
habe ich das Board nun direkt an die Fritzbox angeschlossen ( 100MBit ). 
Die Boardhardware schließe ich auf Grund des Verhaltens aus. Ich benutze 
allerdings einen Bootloader. Der macht aber bei allen anderen Projekten 
keine Probleme.

Alter Versionen von OpenMCP habe ich noch nicht probiert.
Wann wurde den die FIFO Speicherung hinzugefügt?

Viele Grüße
Sigurd

von Dirk B. (sharandac)


Lesenswert?

@Sigurd

Okay. Die FIFO wurde im März 2008 hinzugefügt und macht eigentlich auch 
keine Probleme. Das mit dem Bootloader wäre mal interessant. Denn der 
benutzt ja auch Register beim Booten die auch vom OpenMCP benutzt 
werden. Vielleicht macht das ja Probleme. Kannst ja mal versuchen den 
Bootloader abzuschalten wenn das geht, sonst würde mir nix weiter 
einfallen.

CA Dirk

von Sigurd L. (sleuther)


Lesenswert?

Hallo Dirk,

ich habe alles ausprobiert. Keine Änderung. Ich werde nun noch einmal 
das ganze Projektbasierend auf build 152 neu aufsetzen . Mal sehen was 
sich dann tut. Debugging ware eingeschaltet für ethernet.c und dhcp.c. 
Jede sekunde kommt eine Meldung IRQ Empfang eingeschaltet gefolgt von 
der Meldung IRQ Empfang abgeschaltet. Ist das normal?


Sigurd

von Dirk B. (sharandac)


Lesenswert?

Hallo,

Das mit der IRQ-Meldung ist normal, denn bei jeden Zugriff auf 
Netzwerkresourcen wird der Empfang gesperrt damit bei der Abfrage der 
Verbindungen nix dazwischen funkt. Und zugreifen tun der telnetserver 
und der httpserver um auf neue Daten zu checken. Ich musste aber 
feststellen das die DEBUG-Ausgaben gefährlich sind, da die Ausgaben per 
printf passieren. Wenn jetzt Ausgaben im Interrupt gemacht werden geht 
das total schief. Also lieber nicht verwenden, das muss ich wohl nochmal 
überarbeiten. Ich habe aber in den Logs die du mir geschickt hast 
gesehen das du Halfduplex verwendest und auch jedesmal das EEprom neu 
geschrieben wird wenn du startest. Hast du mal an den Fuses gespielt für 
Brownoutdetection? Es ist ratsam das BOS eingeschaltet ist. Oder löscht 
du jedes mal auch das EEProm beim flashen?

CA Dirk

von Marco Dittmann (Gast)


Lesenswert?

Hallo,

ich bekomme es nicht hin, so zu programmieren, das mein AVR NET IO die 
angeschlossene K8-Relaykarte mit Zeitintervall schaltet, das heißt:

ich möchte das AVR NET IO mit der K8 als Kameraumschaltung benutzen,
dazu habe ich einen ATMEGA644 drinne und an der K8 9BNC-Buchsen 
angelötet, wobei die 8 beim Eingang sind und 1 am zusammengeschlossenen 
Ausgang .

das soll so laufen, das Relay 1 bei automatik für 10 min. anzieht, dann 
sofort abfällt und zugleich nach abfallen Relay 2 für 10 sek. hällt . So 
das es ein nahtloser übergang ist .
und das im wechsel (endlosschleife) .

Zusätzlich die option über Webinterface zu sagen (Automatik oder 
Manuell) und bei manuell durch anklicken die quelle auszuwählen .

Schön wäre noch das Einblenden des DS18B20 oder DS18S20 als 
Gehäusetemperatur .

Mfg Marco

von Dirk B. (sharandac)


Lesenswert?

Hallo Marco,

wo liegt das Problem? Bei der Implementierung oder wie du es anstellen 
sollst. Am besten wäre es sicherlich ein eigenes Modul dafür zu 
schreiben. Hast du dich schon mit dem CGI-Interface auseinander gesetzt?

CA Dirk

von Marco Dittmann (Gast)


Lesenswert?

Hallo Dirk,

kenne mich eigentlich mit Programmierung gar nicht aus , leider .
Habe ein wenig in der MAIN probiert, jedoch funktionierte es nicht .

Könntest Du mir das so zusammen stellen mit Web Interface :
IP 192.168.2.92, GW+DNS 192.168.2.1, Netmask 255.255.255.0

Überschrift :
Kamera Steuerung

Menue :
Automatik / Manuell

Unter Manuell :

Kamera 1 (wäre Relay 1... bei der K8...)
Kamera 2
Kamera 3
usw... bis Kamera 8 (wäre Relay 8 bei der K8)

dadrunter Gehäusetemperatur beträgt: (abfrage Temperatursensor)

Bei Automatik:

Relay 1 soll für 10min. anziehen, dann sofort abfallen und zugleich 
Relay 2 für 10 sekunden anziehen und das im wechsel (Endlosschleife), 
als Nahtloser Übergang .

Wenn es möglich ist wäre es toll, wenn man die Zeiten für den Automatik 
im WEBINTERFACE umstellen und abspeichern kann für Automatik .

Ablaufreihenfolge reicht 1. Relay 1, 2. Relay 2usw, aber als Nahtloser 
Übergang, wenn man "0" einträgt bei den Relays sollten die aussetzen 
beim durchlaufen .

Also als Bsp. Relay 3 bekommt beim Timing-Intervall eine 0 , dann 
überspringt der Ablaufen (Relay 1 = 10 min., Relay 2 = 10 Sekunden, 
Relay 3 wird übersprungen und es kommt Relay 4 mit z.B. eingestellt 10 
min. usw).

So wäre es ein echter Traum, aber bekomme ich nicht hin .

Du würdest mir sehr helfen .

Vielen Dank im Vorraus . Achso ATMEGA644

Mfg Marco

von Dirk B. (sharandac)


Lesenswert?

Hallo,

sorry, habe den Post übersehen. Eigentlich will ich keine 
Programmieraufgaben für andere Leute erledigen, dazu ist meine Zeit 
schon so zu knapp. Ich bin aber gerne bereit Hilfestellung zu leisten.
Die Überschrift kannst du in der apps/httpd/files_data.h ändern. Die 
Bezeichnungen für die Ausgänge findest sich in der apps/httpd/cgi-bin.c 
ab Zeile 550 in etwa. Für das Automatische setzen der Ausgänge würde 
sich das Cron-Interface anbieten. Allerdings arbeitet es nur im 
Minutenraster. OpenMCP mit Cron-Funktion/Interface kannst du im 
aktuellen SVN finden, ich werde es aber demnächst auch die aktuelle 
Fassung hier posten.
Aber deine Aufgabenstellung sieht eher danach aus als wenn das schon 
fast ein eigenes Modul wird. Und das wird leider ein bisschen Aufwand 
mit deiner Aufgabenstellung.

CA Dirk

von Marco Dittmann (Gast)


Lesenswert?

Hallo Dirk,

kannst Du nicht bitte ein Auge zudrücken und das mir programmieren ,
ich blicke da echt nicht durch, versuche schon seit Monaten das zum 
laufen zu bekommen .

Du würdest mir echt einen riesen gefallen tuen .

Mfg Marco

von Dirk B. (sharandac)


Lesenswert?

@Marco,

ich kann mich mal bei Gelegenheit daran setzen, aber kein versprechen 
machen das das zum Datum XY fertig wird. Spielt ja auch keine Rolle wenn 
du schon seid Monaten daran bastelst ;-).

CA Dirk

von Marco Dittmann (Gast)


Lesenswert?

Hallo Dirk,

das ist kein Thema , wichtig ist nur das es irgendwann mal läuft . Wäre 
ein Traum .

Vielen Dank im Vorraus .

Dirk denke bitte drann, ist ein ATMEGA644 . Kannst Du ruhig mit Deinem 
C-Right versehen .

Wäre schön wenn Du mir das dann an marcodittmann@gmx.de senden würdest .
Habe WinAVR drauf .

Ich mache die Tage mal Bilder von meinem Gerät und setze die hier rein .

Gruss Marco

von John S. (student)


Lesenswert?

Dirk Broßwick schrieb:
> Salut.
>
>....
>
> Zudem möchte ich nochmal
> darauf hinweisen das man die Aktuelle Version auch immer per SVN sich
> besorgen kann. Programme dafür gibt es sogar für Windows in vielen
> Varianten. Die URL für SVN lautet.
>
>  http://wiki.neo-guerillaz.de/usvn/svn/
>
> Username und Passwort sind: anonymous
>
> So, das wars erst mal.
>
> P.s.: Sven K., probiere mal unter Telnet das ntp aus.

Hallo Dirk - habe Checkout mit SVN auf 
http://wiki.neo-guerillaz.de/usvn/svn/ versucht, leider Fehlschlag ... 
mache ich was falsch?
----------------------------
Checkout from http://wiki.neo-guerillaz.de/usvn/svn, revision HEAD, 
Fully recursive, Externals included
Repository moved temporarily to '/usvn/login/'; please relocate
----------------------------

dann mit geänderter URL:
----------------------------
Checkout from http://wiki.neo-guerillaz.de/usvn/login, revision HEAD, 
Fully recursive, Externals included
The OPTIONS response did not include the requested 
activity-collection-set;
this often means that the URL is not WebDAV-enabled
----------------------

Was nu ?

Danke im voraus!

von Dirk B. (sharandac)


Lesenswert?

Hallo,

die Adresse die ich angeben habe ist für das Webinterface gedacht, damit 
man erst mal rein sehen kann. Dort erfährt man dann auch den Link für 
den Checkout. Dieser würde dann heißen:

http://wiki.neo-guerillaz.de/usvn/svn/webserver2561

Damit sollte es dann mit jeden gängigen SVN-Tool gehen.

CA Dirk

von John S. (student)


Lesenswert?

Dirk Broßwick schrieb:
> Hallo,
>
> die Adresse die ich angeben habe ist für das Webinterface gedacht, damit
> man erst mal rein sehen kann. Dort erfährt man dann auch den Link für
> den Checkout. Dieser würde dann heißen:
>
> http://wiki.neo-guerillaz.de/usvn/svn/webserver2561
>
> Damit sollte es dann mit jeden gängigen SVN-Tool gehen.
>
> CA Dirk
Habe login mit anonymous versucht, lande bei

http://wiki.neo-guerillaz.de/usvn/svn/

Zugriff verweigert!

Der Zugriff auf das angeforderte Verzeichnis ist nicht möglich. Entweder 
ist kein Index-Dokument vorhanden oder das Verzeichnis ist 
zugriffsgeschützt.

Sofern Sie dies für eine Fehlfunktion des Servers halten, informieren 
Sie bitte den Webmaster hierüber.
Error 403
wiki.neo-guerillaz.de
Sun Jul 26 15:04:37 2009
Apache/2.2.3 (Linux/SUSE)

Sorry!

von Dirk B. (sharandac)


Lesenswert?

> Habe login mit anonymous versucht, lande bei
>
> http://wiki.neo-guerillaz.de/usvn/svn/
>
> Zugriff verweigert!
>
> Der Zugriff auf das angeforderte Verzeichnis ist nicht möglich. Entweder
> ist kein Index-Dokument vorhanden oder das Verzeichnis ist
> zugriffsgeschützt.
>
> Sofern Sie dies für eine Fehlfunktion des Servers halten, informieren
> Sie bitte den Webmaster hierüber.
> Error 403
> wiki.neo-guerillaz.de
> Sun Jul 26 15:04:37 2009
> Apache/2.2.3 (Linux/SUSE)
>
> Sorry!

Hallo,

habe es eben nochmal von 3 Rechnern aus versucht mit einen SVN-Programm 
einen checkout zu machen, kein Problem. Selbst per Webinterface geht es 
wunderbar wenn ich http://wiki.neo-guerillaz.de/usvn/svn/webserver2561/ 
aufrufe und als Username und Passwort "anonymous" eingebe. Mit einen Was 
benutzt du für ein SVN-Programm ?

CA Dirk

von Marco Dittmann (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Dirk,

habe mal selbst probiert, so wie diese hier sollte es aussehen, nur 
warum
macht er überall eine 15 Min. hin als Start, habe ich da was falsch und 
warum geht die automatik zwischen C0 und C1 nicht ?

Kannst Du mal schauen...

Gruß Marco

von Bodoo (Gast)


Lesenswert?

Hallo,

was muss ich machen, um den atmega32 gegen den atmega644 zu tauschen? 
nur den chip auswechseln?

gruß,
bodoo

von Marco Dittmann (Gast)


Lesenswert?

Hallo,

um den ATMEGA644 zu verwenden musst Du Dein Projekt neu compilieren,
einfach umkopieren ist nicht.

Also in der makefile :

MCU = atmega32
#MCU = atmega644
#MCU = atmega644p

auf

#MCU = atmega32
MCU = atmega644
#MCU = atmega644p

ändern und dann neu compilieren. Ich weiß nicht wie Du den 
Mikrocontroller
programmierst. Da gibt es 2 möglichkeiten.

Ich habe erst mit dem sercon v1.1 programmiert (ISP) und jetzt die
neuere und schönere Methode vom Ulrich Radig USBasp (usb 
programmierplatine im Kaufwert 15 EURO und selbst löten).

Der Vorteil dort ist, das man direkt mit dem WinAVR Programm 
programmieren kann.

Mfg Marco

von Bodoo (Gast)


Lesenswert?

Hallo,

ich habe leider noch gar nichts gemacht, außer den pollin bausatz 
zusammen zu bauen.

hab dann hier gelesen, dass man den 644 braucht, da reicht es imprinzip 
den hardwaremäßig zu tauschen, oder?

wie man dann da was programmieren kann, muss ich dann gucken, fragen, 
testen g

von Marco Dittmann (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Dirk,

also um die Automatik brauch sich nicht mehr gekümmert werden.
Hatte den Fehler gefunden und behoben.

Lediglich geht es noch darum, das alle 8 Relais startmäßig auf 15 
Minuten
stehen, sollten laut meinen Parametern alle auf 0 stehen.

Guckst Du Dir das bitte an...

Packe noch mal mein gefixtes Archiv bei, kannst Du entpacken und mal
sehen...

Achso, ich bekomme es einfach nicht hin in der ntp.c das die Uhrzeit 
passt.
Mit GMT-korrektur komme ich ja nur 1 Stunde hoch, also von z.B. 12 auf 
13 Uhr obwohl es tatsächlich 14 Uhr ist. Das muss irgendwie mit UTC 
gehen, weiss aber nicht wie.

Könntest Du das einbasteln in die ntp.c und mir hier posten oder
als Beitrag, dann kopiere und füge ich ein...

hier meine ntp.c

/*---------------------------------------------------------------------- 
------
 Copyright:      Radig Ulrich  mailto: mail@ulrichradig.de
 Author:         Radig Ulrich
 Remarks:
 known Problems: none
 Version:        12.11.2007
 Description:    NTP Client

 Dieses Programm ist freie Software. Sie können es unter den Bedingungen 
der
 GNU General Public License, wie von der Free Software Foundation 
veröffentlicht,
 weitergeben und/oder modifizieren, entweder gemäß Version 2 der Lizenz 
oder
 (nach Ihrer Option) jeder späteren Version.

 Die Veröffentlichung dieses Programms erfolgt in der Hoffnung,
 daß es Ihnen von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE,
 sogar ohne die implizite Garantie der MARKTREIFE oder der 
VERWENDBARKEIT
 FÜR EINEN BESTIMMTEN ZWECK. Details finden Sie in der GNU General 
Public License.

 Sie sollten eine Kopie der GNU General Public License zusammen mit 
diesem
 Programm erhalten haben.
 Falls nicht, schreiben Sie an die Free Software Foundation,
 Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
------------------------------------------------------------------------ 
------*/

#include "ntp.h"

#if USE_NTP
volatile unsigned int ntp_timer = NTP_REFRESH;

//---------------------------------------------------------------------- 
------
//
PROGMEM char  NTP_Request[] = { 
0xd9,0x00,0x0a,0xfa,0x00,0x00,0x00,0x00,
                  0x00,0x01,0x04,0x00,0x00,0x00,0x00,0x00,
                  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                  0xc7,0xd6,0xac,0x72,0x08,0x00,0x00,0x00,
                  '%','E','N','D' };

unsigned char ntp_server_ip[4];

//---------------------------------------------------------------------- 
------
//Initialisierung des NTP Ports (für Daten empfang)
void ntp_init (void)
{
  //Port in Anwendungstabelle eintragen für eingehende NTP Daten!
  add_udp_app (NTP_CLIENT_PORT, (void(*)(unsigned char))ntp_get);

  //NTP IP aus EEPROM auslesen
  (*((unsigned long*)&ntp_server_ip[0])) = 
get_eeprom_value(NTP_IP_EEPROM_STORE,NTP_IP);

  return;
}

//---------------------------------------------------------------------- 
------
//Anforderung der aktuellen Zeitinformationen von einem NTP Server
void ntp_request (void)
{
  //oeffnet eine Verbindung zu einem NTP Server
  unsigned int byte_count;

  //ARP Request senden
  unsigned long tmp_ip = (*(unsigned long*)&ntp_server_ip[0]);
  if (arp_request(tmp_ip) == 1)
  {
    //Interrupt Deaktivieren da Buffer gerade zum senden benutzt wird!
    //ETH_INT_DISABLE;
    PGM_P ntp_data_pointer = NTP_Request;
    for (byte_count = 
0;byte_count<(MTU_SIZE-(UDP_DATA_START));byte_count++)
    {
      unsigned char b;
      b = pgm_read_byte(ntp_data_pointer++);
      eth_buffer[UDP_DATA_START + byte_count] = b;
      //wurde das Ende des Packetes erreicht?
      //Schleife wird abgebrochen keine Daten mehr!!
      if (strncasecmp_P("%END",ntp_data_pointer,4)==0)
      {
        byte_count++;
        break;
      }
    }

    create_new_udp_packet(byte_count,NTP_CLIENT_PORT,NTP_SERVER_PORT,tmp_ip) 
;
    //ETH_INT_ENABLE;
    NTP_DEBUG("** NTP Request gesendet! **\r\n");
    return;
  }
  NTP_DEBUG("Kein NTP Server gefunden!!\r\n");
  return;
}

//---------------------------------------------------------------------- 
------
//Empfang der Zeitinformationen von einem NTP Server
void ntp_get (unsigned char index)
{
  NTP_DEBUG("** NTP DATA GET! **\r\n");

  struct NTP_GET_Header *ntp;
  ntp = (struct NTP_GET_Header *)&eth_buffer[UDP_DATA_START];

  ntp->rx_timestamp = LBBL_ENDIAN_LONG(ntp->rx_timestamp);
  ntp->rx_timestamp += GMT_TIME_CORRECTION; // UTC +1h
  time = ntp->rx_timestamp;

  unsigned char hh = (time/3600)%24;
  unsigned char mm = (time/60)%60;
  unsigned char ss = time %60;

  NTP_DEBUG("\n\rNTP TIME: %2i:%2i:%2i\r\n",hh,mm,ss);
}

#endif //USE_NTP

Mfg Marco

von Bodoo (Gast)


Lesenswert?

hab mal USBasp angesehen, wie programmiert man den atmega8? braucht man 
ja wieder ne schaltung dafür oder?

von Marco Dittmann (Gast)


Lesenswert?

Hallo,

ja das ist richtig, einfach austauschen ohne umbasteln der Elektronik .

Dann noch programmieren mit der Software von Ulrich Radig , wurde von
RoBue gepatcht für den Pollin AVR NET IO .

RoBue 1.5 hoffentlich Final ist die letzte Version .
http://son.ffdf-clan.de/include.php?path=forum/showthread.php&threadid=86

Mfg Marco

von Marco Dittmann (Gast)


Lesenswert?

Hallo,

nein der USBasp von Ulrich Radig hat einen ATMEGA8 mit der 
Programmiersoftware drauf, also nur zusammen löten und anstecken.

Das Kabel ist auch dabei, Belegung ist 1 zu 1, also PIN1 auf PIN1 .

Mfg Marco

von Dirk B. (sharandac)


Lesenswert?

@Marco Dittmann,

siehe mal einfach in der ntp.h nach, und dort
1
  #define GMT_TIME_CORRECTION 3600  //1 Stunde in Sekunden

nach
1
  #define GMT_TIME_CORRECTION 7200  //2 Stunden in Sekunden

ändern.

Das zum Zeitproblem. Beim anderen muss ich heute Abend erst mal einen 
blick rein werfen in die Sourcen. Und als Gegenfrage, wo hast du deine 
Änderungen gemacht?

CA Dirk

von Bodoo (Gast)


Lesenswert?

ich kann aber doch sicher auch per isp programmieren?

von Marco Dittmann (Gast)


Lesenswert?

Hallo,

ja kannst Du, das ist ja für ISP . Und läuft spitze .

Mfg Marco

von Marco Dittmann (Gast)


Lesenswert?

Hallo Dirk,

prima, endlich stimmt doe Zeit, die Datei hatte ich echt nie richtig
eingesehen, manches mal ist das besser :-)

Ok, änderungen habe ich Hauptsächlich in den Dateien :

config.h
httpd.c
main.c
und webpage.h

vorgenommen. Das Zeitproblem ist ja nun gelöst :-)

Hoffe das wenn die Zeit umgestellt wird meine Zeit mitwehcselt,
denke aber schon, da der Zeitserver ja eine Stunde vor oder zurück
wechselt.

Ja, mein Problem jetzt ist, das alle 8 Relais eine Startzeit
von 15 min. stehen haben. Sollten eigentlich auf 0 stehen, es sei
denn ich setze den Startwert so doch in der httpd.c - Zeilen:

346 bis 393

z.B.
case ('a'):
          if ( var_array[10] < 15 )
            var_array[10] += 1;
          else
            var_array[10] = 0;
          break;

da sollte die Startzeit eigentlich auf 0 stehen...

Wäre toll wenn Du den Fehler findest, der da irgendwo ist...

Habe da dann noch eine weitere Frage, weil aber nicht, denke mal
wenn das erstmal gelöst ist, ist gut - denn programmierung ist ja
nicht grad einfach, bin schon froh das ich das von Iwo mit der
Automatik gebastelt bekommen hatte und von Dir die Zeitinfo und
hoffentlich den Fehler jetzt...

Mit dem USBasp geht es ja fix , und alles schön über WinAVR... Tolle
Sache und erst recht zum probieren :-)
Der SerCon hat mir immer probleme gemacht, konnte meist kein zweites
mal drüber schreiben, ging solange bis ich mit dem GALEP 4 (ausgeliehen) 
erasen konnte, weil nichts mehr ging...

Mfg Marco

von Marco Dittmann (Gast)


Lesenswert?

Hallo Dirk,

habe den Fehler gefunden und behoben. Jetzt nur noch 2 offene Dinge.
Woran liegt es das der Microcontroller beim Neustart nicht gleich auf 
"Automatik"-Betrieb schaltet ?

Und die andere, wie setze ich das fort, das die weiteren Relais nach und 
nach ab arbeiten (PC2-PC7 - Ablauf z.B. PC0 , dann PC1, dann PC0, dann 
PC2, dann PC0, dann PC3, dann PC0, dann PC4, dann PC0, dann PC5, dann 
PC0, dann PC6, dann PC0 und schliesslich PC7) - das wäre am besten, geht 
das mit "else einfach weiter ...?:

// Hauptschlfeife
// **************
  PORTC &= ~(1 << PC1);
    PORTC |= (1 << PC0);

  while(1)
  {

  #if USE_ADC
    ANALOG_ON;
  #endif

  eth_get_data();

        //Terminalcommandos auswerten
  if (usart_status.usart_ready){
  usart_write("\r\n");
    if(extract_cmd(&usart_rx_buffer[0]))
    {
      usart_write("Ready\r\n\r\n");
    }
    else
    {
      usart_write("ERROR\r\n\r\n");
    }
    usart_status.usart_ready =0;

  }

  // RoBue:
  // Uhrzeit bestimmen
  hh = (time/3600)%24;
  mm = (time/60)%60;
  ss = time%60;

  if (var_array[9] == 1)
  {
    if(mm!=mm_alt)
    {
      mm_alt=mm;
      time1++;
      if (bit_is_set(PINC, 0))
      {
        if(time1>=var_array[10])
        {
          time1=0;
          PORTC &= ~(1 << PC0);
          PORTC |= (1 << PC1);
        }
      }
    }
    else
    {
      if(time1>=var_array[11])
      {
        time1=0;
        PORTC &= ~(1 << PC1);
        PORTC |= (1 << PC0);
      }
    }
  }

Mfg Marco

von Marco Dittmann (Gast)


Lesenswert?

EDIT: und von vorne , also Endlosschleife

von Erwin E. (erwinendres)


Lesenswert?

Hallo, ich habe wie einer der Vorposter auch das Problem, dass per DHCP 
keine Adresse zugewiesen wird.
Als DHCP-Server habe ich ebenfalls eine Fritz Box im Netz.

Um auszuschließen, dass die Problematik irgendwas mit der Fritz Box zu 
tun hat, habe ich deren DHCP ausgeschaltet und den DHCP-Server von hier: 
http://ruttkamp.gmxhome.de/dhcpsrv/dhcpsrv.htm eingesetzt.

Dieser Server bekommt wohl die DHCP-Anfrage meines AVR-Net und 
beantwortet sie mit einem Broadcast, aber trotzdem meldet OpenMCP 
"DHCP-Config fehlgeschalgen".

Hier das Log des DHCP-Servers:
[08/06/2009 17:32:45] Adapter 0 has recognized an incoming request
[08/06/2009 17:32:45] DHCP message = DHCPDISCOVER
[08/06/2009 17:32:45] client identifier (option 61) is not recognized
[08/06/2009 17:32:45] Lookup client data for physical address "00-03-6F 
55-1C-C8" / client_id "00-03-6F-55-1C-C8"
[08/06/2009 17:32:45] Client 00-03-6F-55-1C-C8 is not configured
[08/06/2009 17:32:45] Perform auto configuration
[08/06/2009 17:32:45] IPPOOL_1: 192.168.210.10-14
[08/06/2009 17:32:45] Auto configuration succeeded: IP-Addr = 
192.168.210.10
[08/06/2009 17:32:45] Response: offer the configured IP address (lease 
time = 86400)
[08/06/2009 17:32:45] Sending a broadcast response to the client

von Marco Dittmann (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

mir ist aufgefallen, das alle Zeit die über 240 Sekunden eingestellt 
wird beim Relais C0 die automatik nicht arbeitet zwischen Relais C1, 
steht auf 900 Sekunden und Relais C0. Kann mir jemand helfen, anbei die 
main.c und die httpd.c .

Ansonsten sobald C0 auf 240 Sekunden und Relais C1 auf z.B. 900 Sekunden
steht funktioniert der Ablauf.

Hoffe auf Antwort...

Mfg Marco

von Marco Dittmann (Gast)


Lesenswert?

Hallo,

niemand eine Lösung ?

Warum kann ich maximal 240 Sekunden einstellen, dann schaltet es noch 
abwechselnd?

Über 240 Sekunden schaltet die Automatik nicht mehr die Relais C0 und C1 
hin und her :-(

main.c

unsigned int var_array[MAX_VAR_ARRAY] = 
{0,0,0,0,0,0,0,0,0,1,10,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};

unsigned char hh;
unsigned char mm;
unsigned char ss;
unsigned char time1=0;
unsigned char ss_alt;

   // Hauptschlfeife
    // **************
  PORTC &= ~(1 << PC1);
    PORTC |= (1 << PC0);

  while(1)

  if (var_array[9] == 1)
  {
    if(ss!=ss_alt)
    {
      ss_alt=ss;
      time1++;
      if (bit_is_set(PINC, 0))
      {
        if(time1>=var_array[10])
        {
          time1=0;
          PORTC &= ~(1 << PC0);
          PORTC |= (1 << PC1);
        }
      }
    }
    else
    {
      if(time1>=var_array[11])
      {
        time1=0;
        PORTC &= ~(1 << PC1);
        PORTC |= (1 << PC0);
      }
    }
  }

und aus der httpd.c

        case ('a'):
          if ( var_array[10] < 600 )
            var_array[10] += 5;
          else
            var_array[10] = 0;
          break;
        case ('b'):
            if ( var_array[10] < 600 )
              var_array[10] -= 5;
          else
              var_array[10] = 0;
          break;
        case ('c'):
          if ( var_array[11] < 3600 )
            var_array[11] += 240;
          else
            var_array[11] = 0;
          break;
        case ('d'):
          if ( var_array[11] < 3600 )
            var_array[11] -= 240;
          else
            var_array[11] = 0;
          break;
        case ('e'):
          if ( var_array[12] < 3600 )
            var_array[12] += 240;
          else
            var_array[12] = 0;
          break;
        case ('f'):
          if ( var_array[12] < 3600 )
            var_array[12] -= 240;
          else
            var_array[12] = 0;
          break;
        case ('g'):
          if ( var_array[13] < 3600 )
            var_array[13] += 240;
          else
            var_array[13] = 0;
          break;
        case ('h'):
          if ( var_array[13] < 3600 )
            var_array[13] -= 240;
          else
            var_array[13] = 0;
          break;
        case ('i'):
          if ( var_array[14] < 3600 )
            var_array[14] += 240;
          else
            var_array[14] = 0;
          break;
        case ('j'):
          if ( var_array[14] < 3600 )
            var_array[14] -= 240;
          else
            var_array[14] = 0;
          break;
        case ('k'):
          if ( var_array[15] < 3600 )
            var_array[15] += 240;
          else
            var_array[15] = 0;
          break;
        case ('l'):
          if ( var_array[15] < 3600 )
            var_array[15] -= 240;
          else
            var_array[15] = 0;
          break;
        case ('m'):
          if ( var_array[16] < 3600 )
            var_array[16] += 240;
          else
            var_array[16] = 0;
          break;
        case ('n'):
          if ( var_array[16] < 3600 )
            var_array[16] -= 240;
          else
            var_array[16] = 0;
          break;
        case ('u'):
          if ( var_array[17] < 3600 )
            var_array[17] += 240;
          else
            var_array[17] = 0;
          break;
        case ('v'):
          if ( var_array[17] < 3600 )
            var_array[17] -= 240;
          else
            var_array[17] = 0;
          break;
        case ('z'):
          if ( var_array[28] < 1 )
            var_array[28] += 1;
          else
            var_array[28] = 0;
          break;

Bitte um Fehlersuche / Lösung.

Mfg Marco

von Dirk B. (sharandac)


Lesenswert?

Hallo Marc,

sorry, das ich den Post nicht gleich gelesen habe. Aber so wie ich das 
sehe versteht keiner dein Problem genau und kann mit dem Code nix 
anfangen. Ich persönlich finde den Code (main.c & httpd.c) mehr als 
unübersichtlich und auch nicht leserlich.
Wenn ich es noch richtig in Erinnerung habe wolltest du 2 Relais 
abwechselnd schalten in bestimmten zeitlichen Abständen, und das einmal 
mit Automatik oder Manuell und das steuerbar per Webinterface. Ich habe 
eben mal versucht den Code zu überfliegen ... ich blicke bei den, sorry 
für die Worte, ich weiß das es nicht dein Projekt/Code ist, einfach 
nicht durch. Vor allem wo was geändert wird und wo was her kommt.

CA Dirk

von Marco Dittmann (Gast)


Angehängte Dateien:

Lesenswert?

Hallo dirk,

schaue Dir mal in der main.c die Zeilen:

64, 71-75, 239-243 und 272-297

und in der httpd.c

346-447 sowie 697-760 an.

im Bereich 346-447 steht für C0 die Einstellung max. 600 (Sekunden)
und 5 (Sekunden-Schritte für + bzw - Befehl) sowie für C1-C6 die
Einstellung max. 3600 (Sekunden) und 240 (Sekunden-Schritte für +
bzw - Befehl). Da habe ich eigentlich 5 Minuten Schritte eingegeben,
also anstelle 240 den Wert 300, aber da schaltet es ja wie gesagt nicht
um, max. 240 funktioniert noch.

Gruss Marco

von Dirk B. (sharandac)


Lesenswert?

Hallo Marco,

ist dir mal aufgefallen das die Variable time1 in der main.c nur ein 
char ist, und gar nicht so hoch zählen kann und deshalb der Vergleich 
mit dem Wert aus dem Array (typ int) ein bisschen albern ist? Versuch 
mal ein int daraus zu machen.

CA Dirk

p.s. Werde morgen mal genau reinschaun, aber jetzt nach der schicht habe 
ich keine lust mehr dazu.

von Marco Dittmann (Gast)


Lesenswert?

Hallo Dirk,

kannst Du mir sagen wo und wie?

Marco

von Dirk B. (sharandac)


Lesenswert?

Hallo,

in der main.c. Dort ist eine variable time1 als unsigned char 
deklariert.
1
unsigned char time1=0;

mach daraus mal
1
unsigned int time1=0;

CA Dirk

von Marco Dittmann (Gast)


Lesenswert?

Hallo Dirk,

das ist schonmal spitze, wo ist bei int das Limit in der Zeit oder ist 
es dieses mal unbegrenzt?

Dirk, kannst Du mir sagen, wie ich die anderen Relais durchschalten 
lassen kann, die derzeitige Befehlsfolge lautet ja in der main.c:

   // Hauptschlfeife
    // **************
  PORTC &= ~(1 << PC1);
    PORTC |= (1 << PC0);

  while(1)

  if (var_array[9] == 1)
  {
    if(ss!=ss_alt)
    {
      ss_alt=ss;
      time1++;
      if (bit_is_set(PINC, 0))
      {
        if(time1>=var_array[10])
        {
          time1=0;
          PORTC &= ~(1 << PC0);
          PORTC |= (1 << PC1);
        }
      }
    }
    else
    {
      if(time1>=var_array[11])
      {
        time1=0;
        PORTC &= ~(1 << PC1);
        PORTC |= (1 << PC0);
      }
    }
  }

möchte gern Relais C0 - C6 laufen lassen...

Mfg Marco

von Hopfrl (Gast)


Lesenswert?

Hallo Dirk Broßwick,

Danke für den Code, schönes Teil.
Ich habe allerdings noch ein Problem mit der Temperaturanzeige.
In cgi-bin.c steht in der Zeile für die Temperaturausgabe:

printf_P( PSTR(" (%d.%01dC)"), TEMP >> 4, (TEMP << 12) / 6553 ); // 
0.1øC

Leider läuft die Temperaturanzeige im Browser nur in 0,5 Grad Schritten.
Gibt es eine Möglichkeit, die Anzeige in 0,1 grad Schritten anzuzeigen?
Leider reichen meine noch bescheidenen Kentnisse in C noch nicht um 
durchzublicken, was ich da ändern müsste.

von Dirk B. (sharandac)


Lesenswert?

Hallo Hopfrl,

die Ausgabe erfolgt schon mit 0.1 Grad. Dazu sei aber noch angemerkt das 
nicht alle Typen auch diese genauigkeit unterstützen. Welchen 
Temp-Sensor verwendest du denn ? Ich tippe mal auf den DS18S20?

CA Dirk

von Hopfrl (Gast)


Lesenswert?

Hallo Dirk Broßwick,

Ja, ich benutze den DS18S20. Ich dachte die hätten eine Auflösung von 
1/16 Grad und würden gerundet die 0.1 Grad anzeigen können. Da hätte ich 
natürlich lange suchen können. Mir ging es weniger um die absolute 
Genauigkeit -da würden 0.5 Grad reichen- sondern mehr um die bessere 
Erkennbarkeit der Tendenz.

Da will ich mal anders fragen. Welchen Typ von Temperaturfühler müßte 
ich verwenden, damit ich die 0,1 Grad mit Deiner Software angezeigt 
bekomme?

Danke im voraus

von Dirk B. (sharandac)


Lesenswert?

Salut,

Abhilfe schafft da z.b. ein DS18B20 so wie ich sie verwende. Bei mir in 
der Wohnung zeigen sie schön brav auf das 1/10 Grad genau an. Ein DS1822 
sollte auch noch gehen.

CA Dirk

P.S. Darf ich mal fragen ob du schon selber versucht hast OpenMCP zu 
übersetzen, und wenn ja unter welchen Betriebssystem?

von Hopfrl (Gast)


Lesenswert?

Hallo Dirk Broßwick,

Schon wieder an den Kopf klatsch. DS18B20 ist mir in der 1wire.c schon 
mal aufgefallen, allerdings dachte dabei nicht daran, dass es ein 
anderer Sensor ist sondern bin davon ausgegangen, dass da ein anderer 
Wert aus dem Sensor gelesen wird. Jetzt versteh ich das schon mal wieder 
ein Stück besser.

Übersetzen? Im Sinne von verstehen oder kompilieren?
Verstehen tu ich ihn noch nicht so detailiert. Ich habe vor ein paar 
Jahren in der Schule mit Assembler  gespielt und hab jetzt mal irgendwas 
machen wollen um in C einzusteigen. Elektronikkenntnisse hab ich 
eigentlich recht gute und dachte jetzt mach ich mal was schönes zum 
verstehen. Die Hardware (Pollin Net-IO+M644) war einfach und recht 
preisgünstig. Die Software zum laufen bekommen leider nicht so.

Aber kompiliert hab ich sie bekommen und sie läuft auch sehr gut. Ich 
verwende das Atmel AVR-Studio auf Windows. Schwierig war, dass makefile 
nicht zu AVR-Studio passte. Die c-Files hab ich dem makefile entnommen 
und einzeln in AVR-Studio geladen.  Da im Orginal makefile aber noch 
Variablen wie AVRNETIO stehen und ich nicht weis, wie man die 
entsprechen ins Sudio- makefile übernimmt, hab ich einfach die 
entsprechenden (# if defined ..) Abfragen in der ethernet.c  u.s.w 
rausgenommen und jetzt läuft sie nach langem tüfteln und studieren.
Aber bei der Sensoranzeige bin ich dann doch erst mal gescheitert.

Also danke noch mal für Deine Mühe und dein super Projekt. Und ich mach 
mich jetzt nochmal ans c lernen und verstehen.

von Daniel (Gast)


Lesenswert?

Hallo Dirk,
Ich suche schon seit langem nach der Möglichkeit mit dem NetIO in einem 
bestimmten Zeitintervall eine IP anzupingen und wenn kein reply kommt, 
soll ein Relaisausgang mal kurz (0,5 - 1sek) gesetzt werden (um damit 
beim angepingten Gerät einen Reset durchzuführen). Nun gibt es ja 
Watchdogs, die das auch können, doch bei dem NetIO gäbe es ja dann 
immernoch die Möglichkeit, auch mal per Hand einen Reset des Gerätes im 
Netzwerk durchzuführen.
Und da Du nach Anregungen suchst, hoffe ich hier auf Hilfe. Meine 
Kenntnisse mit Microcontrollern und C sind übertrieben gesagt 
bescheiden. ;)

Grüße, Daniel

von char0n (Gast)


Lesenswert?

Hallo Dirk,

ich bin während der Suche nach einer offenen Firmware für das 
Pollin-Board auf dein Projekt gestoßen. Jetzt sehe ich in diesem Thread 
leider wenig Aktivität, sowie auch keine neuen Änderungen mehr in deinem 
Wiki seit Dezember letzten Jahres.
Tut sich hier noch was? Wäre schade wenn du nicht weiter an dem Projekt 
arbeitest.

Grüße
char0n

von Dirk B. (sharandac)


Lesenswert?

Salut Char0n,

ja, es tut sich noch einiges beim Projekt :-). Auf dem AVR-NETIO werden 
derzeit der ATmega644/644P/1284P unterstützt sowie das myEthernet mit 
dem ATmega644P und dem Orginal OpenMCP mit dem ATmega2561/AT90CAN128. 
Der Code wird/wurde Aufgeräumt und besser Strukturiert. Allerdings hingt 
die Doku derzeit hinterher, so das ich diese Versionen erst mal nur per 
SVN bereit stelle.

CA Dirk

von John S. (student)


Lesenswert?

Moin Dirk,


leider funktioniert GPIO bei mir nicht, habe deshalb einmal ein Log vom 
Start und den EEPROM Inhalt gezogen:

--------------------------

OpenMCP ...

UART Initialisiert

STDOUT Initialisiert

CLOCK Initialisiert

LED_core Initialisiert

Config Initialisiert

EXTINT Initialisiert

TWI (0 Devices) Initialisiert

GPIO Initialisiert

ADC Initialisiert

1-WIRE Error

MMC/SD Error

SHELL Initialisiert

THREAD Initialisiert

ENC28j60 (Rev.: 6) initialisiert ( HW-Add: a2:c4:6f:66:c1:b5) 
Fullduplex: Link ready

-+-> ARP initialisiert

 |-> UDP (Tornado-engine) initialisiert

 |-> TCP (Hurrican-engine) initialisiert

 |   IP     : 194.01.2.210

 |   Netmask: 255.255.255.0

 |   Gateway: 194.01.2.50

 |   DNS    : 194.01.2.50

 |-> NTP-Server Zeit aktualisieren: fehlgeschlagen

HTTP-Server gestartet auf Port 80.

Telnet-Server gestartet auf Port 23.

-----------------------

Das EEPROM zeigt:

DHCP=off
IP=194.01.2.210
MASK=255.255.255.0
GATE=194.01.2.50
DNS=194.01.2.50
MAC=a2:c4:6f:66:c1:b5
ETH_FLDX=on
CRON_ENTRY_00=-1 -2 "gpio toggle 3"
NTP=on
NTPSERVER=time.fu-berlin.de
UTCZONE=+1

Meine Erwartungshaltung wäre, alle zwei Minuten togglet der Port 3.

Tut er nicht, was bitte mache ich falsch ?

Danke!

von Templogger (Gast)


Lesenswert?

Salut ...

versuche mal anstatt "gpio toggle 3" einfach "gpio_out toggle 3", ich 
denke mal damit sollte sich das dann haben.

CA Dirk

von Dirk B. (sharandac)


Lesenswert?

Vergessen einzuloggen ... obrige Antwort stammt von mir.

CA Dirk

von Dirk B. (sharandac)


Lesenswert?

@John

danke nochmal für den Hinweis, habe eben gesehen woher der Fehler 
stammen könnte. Habe das wiki zu Cron so eben aktualisiert.

CA Dirk

von John S. (student)


Lesenswert?

Dirk Broßwick schrieb:
> @John
>
> danke nochmal für den Hinweis, habe eben gesehen woher der Fehler
> stammen könnte. Habe das wiki zu Cron so eben aktualisiert.
>
> CA Dirk


Hallo Dirk, vielen Dank.

Ich habe da noch eine kleine Anregung(en).

Zur Verdeutlichung:

Die Lösung ist super, und ich würde sie gerne "as it is" zur Steuerung 
meines Garagentors und des Schwimmbeckens (Pumpen / Temperaturabfrage) 
einsetzen.

Für das Gragentor bräuchte ich einen ,5 Sekunden Impuls (als Taster)

Für die Pumpen einen Radio Button (Ein/Aus).

Die Temperatur würde ich mir notfalls selbst umrechnen (im Kopf) oder 
ich würde mir im EEPROM die Temperaturkurven der PTCs hinterlegen.

Aber im WebDesign bin ich eine totale Niete - Null Ahnung.

Wäre es nicht möglich, Deine Testanwendung so zu erweitern, dass 8 Radio 
Buttons, bzw. die Begung mit einem Impuls oder Dauer On/OFF direkt über 
HTML konfigurierbar und dann auch für DUAs nutzbar wären.

Damit wäre Dein Web-Server (mit 8 Radio Buttons) der Durchbruch für 
viele, die ebenfalls nicht das Know How haben, Deine Anwendung zu 
verändern.

Viele Grüße vom John

von Peter_Gast (Gast)


Lesenswert?

Hallo zusammen,

ich habe vor mit dem avr-netio zu beginnen und habe mit grossem
Interesse diesen Thread verfolgt.
Leider stoppt dieser hier.
Gibt es einen Neunen, weitergeführten Thread ?
Die Software habe ich mir von svn geholt und werde meine Versuche
mit der Hardware Heute beginnen.


Gruß und Kompliment bis hierher.

Peter

von Dirk B. (sharandac)


Lesenswert?

Salut ...

Die Entwicklung an OpenMCP läuft noch, hat im Sommer aber aus Prinzip 
nachgelassen. Aber da jetzt die kalte und dunkle Jahreszeit wieder kommt 
werde ich wohl wieder etwas mehr Zeit haben das Projekt weiter zu 
verfolgen.

CA Dirk

von Benjamin (Gast)


Lesenswert?

Hallo,

erstmal vorweg... das ist ein super Projekt und der Quelltext liest sich 
echt gut, bzw. ist wirklich super dokumentiert.

Ich versuche derzeit das Projekt auf dem Pollin AVR-Net-IO zum Laufen zu 
bringen. Dazu nutze ich das AVR-Studio unter Windows. Auf dem Board 
befindet sich ein ATmega644. Als Software habe ich die aktuellste 
Version aus dem SVN geladen.

Nun zu meinem Problem:
Ich kann die Firmware mit dem beiliegenden Makefile kompilieren, das 
erstellte hex-File und auch das elf-File mit dem AVR-Studio übertragen. 
Wenn ich das Board nun neu starte, dann bezieht das Board seine 
IP-Adresse über den DHCP und ich sehe diese auch in der Ausgabe der 
seriellen Schnittstelle.
Versuche ich allerdings diese IP über den Browser zu öffnen, dann 
erhalte ich lediglich "403 File not found!" vom Board.

Wo kann der Fehler liegen, bzw. was mache ich falsch?

Vielen Dank für eure Hilfe!

Gruß,
Benjamin

von Dirk B. (sharandac)


Lesenswert?

Salut Benjamin,

Ich vermute mal das in der passenden config.h im Bereich vom HTTP-Server 
noch eingestellt ist das er nur Dateien von SD-card laden soll. Schau 
mal einfach da rein. Leider kann ich gerade nicht sagen wie das #define 
dazu jetzt heisst da ich unterwegs bin.

Ca Dirk

von Benjamin (Gast)


Lesenswert?

Hi Dirk,

danke für den Tip! Genau das war es. Ich nutze zur Zeit kein 
Add-On-Board und hatte vergessen die Zeile für die SD-Karte ( #define 
MMC ) auszukommentieren.

Hab die Zeile jetzt rausgenommen und schon funktioniert alles!

Danke nochmal für die schnelle Hilfe und für das ganze Projekt sowieso 
;-).

Gruß,
Benjamin

von Conrad (Gast)


Lesenswert?

Hallo,

bei mir läuft es leider nicht auf dem NET-IO.
Habe dort deinen 1284P drauf. Habe eben das Verzeichnis über SVN 
ausgecheckt, über AVR Studio mit WinAVR kompiliert und das Hex 
draufgeflasht. Nach einer paar Sekunden kommt das Teil kurz hoch, 
antwortet auf 5-6 Pings und ist danach wieder tot.

Hab bis jetzt leider noch keine Idee.

Grüße
Conrad

von Dirk B. (sharandac)


Lesenswert?

Salut ...

ja, jetzt ist die interessante Frage was du im Makefile und in der 
entsprechenden config.h eingestellt hast. Bist du das [1] hier mal durch 
gegangen? Hast du die passende Hardware eingestellt? Was für Module hast 
du eingestellt?

CA Dirk

[1] http://wiki.neo-guerillaz.de/mediawiki/index.php/Selber_Kompilieren

von Stephan (Gast)


Lesenswert?

Ich habe mir die Software auch mal auf mein Net-Io gemacht. Funktioniert 
gut, auch mit 1284P und SD-Karte.
Was mir auffällt: im Temperaturlogger ist ein Ds1820 eingetragen, der 
auch angezeigt wird. In fast regelmässigen Abständen (fast jede volle 
Stunde) zeichnet er 1 mal 85° auf. Mit anderer Software hatte ich noch 
nie ein 85° (Timing?) Problem.
Bin für Tipps dankbar :-)

Insgesamt gefällt mir der Ansatz Openmcp sehr gut.Wünschenswert wäre 
eine zentrale Konfiguration für alle Hardwareeinstellungen.
gruss
Stephan

von Ethan A. (Firma: Herr) (arnolde)


Lesenswert?

Hi Dirk,

ich versuche gerade openMCP zusammen mit dem Ethernet-Bootloader (siehe 
hier: Beitrag "Re: Atmega via Ethernet flashen") zum Laufen zu 
bringen. Jedes für sich alleine hab ich zum Laufen gebracht, nun scheint 
es aber an ein Paar Bytes Größe zu hapern. Bei meinem Versuch das 
openMCP Image zu verkleinern, hab ich in der config.h einiges 
auskommentiert (LED's, Shell, LCD, DCF77, etc.) aber beim make'en wird 
immer noch ALLES kompiliert und schließlich brichts auch meistens ab 
wegen fehlender Abhängigkeiten, z.B:

system/sensor/temp.o: In function `TEMP_readUDPtemp':
U:\Unternehmen\NET-IO\OpenMCP/system/sensor/temp.c:339: undefined 
reference to `LED_off'

Ich benutze die openMCP Version vom 26.9.2010.

Hättest Du irgendein Tipp für mich?

Achja, ich benutze den Pollin AVR-NETIO mit einem ATMEGA644p.

viele Grüße,
Ethan

von Dirk B. (sharandac)


Lesenswert?

@Ethan

jup ... versuche mal am besten eine Version aus dem SVN. Dort sind die 
meisten Fehler schon bereinigt. Alternativ kann ich heute mal eine 
Aktuelle Version als .zip drauf packen. Ansonsten einfach mal 
auskommentieren :-). Die Versionen nach dem August sind alle ein 
bisschen buggy da ich im August ein kleines Problem hatte mit meinem 
Rechner ( Festplatte, krypto und so ) und viele Änderungen verloren 
gegangen sind. Eine Möglichkeit ist es auch den AVG-GCC 4.2.4 zu nehmen 
statt einen aktuellen wie dem 4.3.4, der erzeugt kleineren Code.

CA Dirk

von Ethan A. (Firma: Herr) (arnolde)


Lesenswert?

Hallo,

ich benutze jetzt die SVN Version, nach einigen Tagen Bastelei (auch mit 
diversen anderen Sachen) bin ich soweit ganz happy, nur eines stört mich 
momentan sehr: Die NTP Funktion scheint fast nie zu gehen. Ich hab schon 
sehr oft verschiedene NTP Server eingetragen, jedesmal werden die 
Einstellungen auch übernommen und in der EEconfig angezeigt, aber ich 
hab bis jetzt (von ca. 50 Versuchen an 3 Tagen) nur ein einziges Mal 
erlebt daß Datum/Uhrzeit plötzlich gestimmt haben. Ich tue auch jedesmal 
den unteren Frame neuladen (benutze Firefox, muß andauernd die einzelnen 
Frames refreshen weil fast alles nur aus dem Cache genommen wird wenn 
ich rumklicke) Ich krieg auch nirgends irgendein feedback ob der Server 
überhaupt eine NTP Abfrage macht oder wie dieser gelaufen ist.

Wie kann ich die NTP Funktion am besten debuggen?

viele Grüße,
Ethan

von Ethan A. (Firma: Herr) (arnolde)


Lesenswert?

Hab jetzt die RS232 Konsoel dranhängen und beim Booten kommt immer:

NTP-Server Zeit aktualisieren: fehlgeschlagen

Aber warum?

von Ethan A. (Firma: Herr) (arnolde)


Lesenswert?

Ich rast bald aus... jetzt hat er es mal wieder geschafft, dann mußte 
ich aber wegen was anderem resetten und jetzt hab ich bestimmt 50 Mal 
resettet und jedesmal ..."fehlgeschlagen". Nach etwa 5 Sekunden. Woran 
kann das nur liegen? DNS zu langsam? Timeout zu kurz? Sonst ne Idee?

von Dirk B. (sharandac)


Lesenswert?

@Ethan

Ich habe das Problem auch schon festgestellt, allerdings nur in 
Verbindung mit 1GE Switches, warum auch immer. Ich suche selber noch den 
Fehler. Wenn sich da was tut wird man das merken.

CA Dirk

von Ethan A. (Firma: Herr) (arnolde)


Lesenswert?

Hi Dirk,

Danke für den Hinweis, ich hab tatsächlich ein 1GE Switch dran, mal 
testen ob es mit einem 100er dazwischen besser klappt. Ansonsten guck 
ich mich mal im Code um, vielleicht mal mehrere Poll-Versuche mit NTP 
machen (kann ja auch im Hintergrund weiterlaufen) und Timeouts 
verlängern.

Gruß,
Ethan

von Ethan A. (Firma: Herr) (arnolde)


Lesenswert?

Also ein 100er Hub hilft da auch nicht, hab auch FDX und HDX probiert, 
verschiedenste Server probiert und dabei mit Wireshark mitgeloggt, auf 
dem PC einen NTP Server installiert und von einem Linux rechner aus 
getestet, und dabei festgestellt: Der OpenMCP client sendet überhaupt 
keine Anfrage raus! Da kann natürlich auch keine Antwort kommen :-(

von Dirk B. (sharandac)


Lesenswert?

@Ethan,

ich hab heute Nacht mal eine neue SVN-Version rauf geschoben, probiert 
die mal bitte aus. Bei mit trat das Problem jetzt so nicht mehr wirklich 
auf.

CA Dirk

von Ethan A. (Firma: Herr) (arnolde)


Lesenswert?

Hi Dirk,

hab mir grad die neue per SVN geholt, aber leider immer noch das 
Problem.
Hab jetzt Telnet aktiviert und bin reingegangen und gebe immer wieder 
"ntp de.pool.ntp.org" ein aber nur 1 aus 10 Mal funktioniert es:

Und, los geht's...!!! ("help" hilft :-))
> ntp de.pool.ntp.org
Hole Zeit von de.pool.ntp.org
Fehler
> ntp de.pool.ntp.org
Hole Zeit von de.pool.ntp.org
Neue Zeit: 21:12:32
>

Wenn ich die IP Adresse von meinem Arbeitsplatz-PC angebe, kommt dort 
gar keine Anfrage an. Also scheint es irgendwo zu haken bevor das erste 
NTP Paket rausgeht. Evtl die DNS Abfrage? Aber wenn ich die IP direkt 
eingebe müßte keine DNS erfolgen oder?

Gruß,
Ethan

von Dirk B. (sharandac)


Lesenswert?

@Ethan,

so, ich habe das mal mit deinen NTP-Server probiert ... de.pool.ntp.org 
. Dabei habe ich festgestellt das bei weitem nicht alle NTP-Server das 
kleine NTP auf UDP-Port 37 beherrschen. Die DNS-Anfragen werden alle 
richtig beantwortet, aber jedes mal mit einer anderen IP um eine 
Lastverteilung zu machen. Ich selber benutze immer time.fu-berlin.de da 
dort auch das kleine NTP angeboten wird.
Man könnte auch richtiges NTP einbauen, aber das ist ungleich 
komplizierter da dort auch eine Zeitmessung gemacht wird wie lange z.B. 
ein Packet braucht und so weiter um das mit zu berücksichtigen.

Also kein Fehler im eigentlichen sinne ...

CA Dirk

P.S.: Probieren kannst du das mit den IPs wenn du mal "dns 
de.pool.ntp.org" eingibst und das mehrmals.

von Ethan A. (Firma: Herr) (arnolde)


Lesenswert?

Hi Dirk,

daß man unter der pool-ip laufend wechselnde IP's kriegt war mir klar, 
das ist da der Sinn eines Pools. Aber obwohl ich nach SNTP Infos gesucht 
hatte, wurde überall nur gesagt "SNTP ist ein etwas einfacheres NTP" 
aber nirgends hab ich Details gefunden, z.B. daß es über einen anderen 
Port läuft. Wenn ich das gewußt hätte, hätt ich gezielter nach dem 
Problem suchen können.

OK dann bin ich ja jetzt viel schlauer :-) vielen Dank für Deine Hilfe!

Vielleicht implementiere ich trotzdem noch einen RTC-Chip, denn die 
Uhrzeit-Abhängigkeit beim Datenloggen ist ja doch recht kritisch...

Was ich als nächstes angehen möchte ist eine Erweiterung der 
Graph-Funktionalität, z.B. hätte ich gerne einen zusätzlichen Graphen 
mit 1 Minute Auflösung für die letzten 60 Minuten, sowie mehrere (z.B. 
7) Tage rückwirkend abfragbar. Vielleicht versuche ich auch die Daten 
als CSV auf der MMC ablegen zu lassen, damit sie einfacher am Rechner 
importiert werden können. Und schließlich die Hauptaufgabe die ich mit 
dem Board realisieren will: Eine Wärmepumpensteuerung (dazu brauchts im 
Prinzip nur noch 3 Schaltausgänge 230V die ich mit Triacs oder 
Doppel-Thyristoren realisieren will), samt Konfig-Interface unter 
welchen Bedingungen (Temp-Sensor, Zeitspanne) welcher Ausgang wie zu 
schalten ist.

viele Grüße,
Ethan

EDIT: Wieso ist eigentlich aus dem Web-Netzwerkkonfig die 
Duplex-Wahlmöglichkeit rausgeflogen?

von Dirk B. (sharandac)


Lesenswert?

@Ethan

Das mit den Voll/Halbduplex habe ich raus genommen weil das eh keiner 
mehr brauchst, eigentlich hat jeder zu hause einen Switch. Und es hat 
ein paar Byte Flash gespart, da das Projekt eh gerade mal so in einen 
644 passt :-).

CA Dirk

P.S.: Was für einen RTC-Chip benutzt du? Ich wollte die Tage noch 
Support für den DS1307 einbauen.

von Ethan A. (Firma: Herr) (arnolde)


Lesenswert?

Hab mir noch keinen RTC rausgesucht, war bisher nur eine spontane Idee. 
Der DS1307 ist nicht gerade billig, nach kurzem Blick im RS-Katalog 
erscheint mir z.B. der ISL1208IB8Z deutlich günstiger, ausserdem bin ich 
eher ein SMD-Fan. Hab mich aber noch nicht damit auseinandergesetzt, hab 
nur kurz nach I2C und 3.3V/5V und Batteriepuffer geguckt.

von Sven K. (svenk)


Lesenswert?

Hallo,

den DS1307 gibts auch als SMD ;-) und nicht sooo teuer...

http://www.reichelt.de/?ACTION=3;ARTICLE=58150;PROVID=2402

Gruß Sven

Ethan Arnold schrieb:
> Hab mir noch keinen RTC rausgesucht, war bisher nur eine spontane Idee.
> Der DS1307 ist nicht gerade billig, nach kurzem Blick im RS-Katalog
> erscheint mir z.B. der ISL1208IB8Z deutlich günstiger, ausserdem bin ich
> eher ein SMD-Fan.

von Ethan A. (Firma: Herr) (arnolde)


Lesenswert?

Tatsächlich... ich sollte doch öfters auch mal bei Reichelt vergleichen. 
Bei RS kostet der über 3 EUR zzgl. MwSt.

von Ethan A. (Firma: Herr) (arnolde)


Lesenswert?

Hi Dirk,

Okay, hab grad eh was dort bestellt und hab nen DS1307 gleich 
mitgenommen. Wenn da also Support für in der Mache ist... wär cool :-)

Gruß,
Ethan

von Ethan A. (Firma: Herr) (arnolde)


Lesenswert?

Hi Dirk,

sagmal, wie kann ich dafür sorgen daß der Anfang des EEPROMs unbenutzt 
bleibt? Dort wird nämlich auch vom Bootloader config abgelegt und die 
beiden überschreiben sich gegenseitig. Ich hab schon versucht in der 
eeconfig.c einmal die "pos" und einmal die "offset" raufzusetzen (von -1 
auf 255) aber das ändert nichts, es wird immer noch angezeigt "offset: 
13" in der eemem.cgi abfrage. (Wieso eigentlich 13??? wenn es eigentlich 
0 sein müßte?)

Gruß,
Ethan

von Ethan A. (Firma: Herr) (arnolde)


Lesenswert?

Kann es sein daß die Unixzeit (TIME.time) falsch ist? Ich versuche nun 
schon seit fast 8 Stunden ein einfaches cgi hinzubekommen was einfach 
nur "[unixtimestamp,temperatur]" liefert, also z.B. [1293315620,-11.50] 
für jetzt gerade (sogar aktuelle temperatur ;-) aber wenn ich folgendes 
mache:

struct TIME nowtime;
CLOCK_GetTime(&nowtime);
TEMP_Sensor2String(i, TEMPSTRING);
printf_P(PSTR("[%lu000,%s]\r\n"), nowtime.time, TEMPSTRING);

erhalte ich immer eine Zahl die viel zu hoch ist, nämlich statt 1,29 
milliarden erhalte ich immer über 4 milliarden, zählt zwar regelmäßig im 
sekundentakt hoch aber trotzdem falsch (wäre im Jahr 2038). Ich sitze 
nun echt seit 5-6 Stunden nur an dieser Zahl :-(((

von Dirk B. (sharandac)


Lesenswert?

@Ethan,

Offset 13 bezieht sich auf die Positionangabe, an dieser befindet sich 
eine Signatur das es sich um eine Config von OpenMCP handelt. Schau mal 
in die eeconfig.h, dort siehst du die Signatur.

Ja, das mit der Unixtime ist so eine Sache. Es ist genau genommen UTC. 
Also ab 1900 gezählt, das Problem ist das das kleine NTP UTC ausliefert 
und nicht Unixzeit. Unixzeit ist zudem auch Vorzeichenbehaftet, UTC 
nicht. Vielleicht sollte ich nochmal Extra darauf hinweisen. Eigentlich 
wollte ich auch Unixzeit implementieren, aber die Implementierung davon 
ist so besch**ert das ich das verworfen habe und UTC genommen habe. UTC 
geht aber auch bis ca 2036 :-).

CA Dirk

von Ethan A. (Firma: Herr) (arnolde)


Lesenswert?

Hi Dirk,

aha, das erklärt so einiges :-) aber wieso ist die Konvertierung so 
schwer? Man muß doch nur eine Konstante abziehen (2,2 Milliarden und ein 
Paar Zerquetschte) oder? Ich probier's mal...

Bitte sag doch auch was dazu, wie ich den belegten EEPROM bereich 
verschieben kann! Ich hab den Bausatz nämlich immer noch am 
Schreibtisch-PC hängen obwohl er dringend in den Keller müßte um dort zu 
überwachen... das einzige was mir noch zu meinem Glück fehlt ist das 
funktionierende Ethernet-Flashen.

Gruß,
Ethan

von Dirk B. (sharandac)


Lesenswert?

@Ethan,

Tu was du nicht lassen kannst um aud UnixZeit zu kommen :-).

Den EEprombereich kannst du in eeconfig.c Zeile 178 verändern (Funktion 
makeConfig), dort die Variable Pos, die steht derzeit auf 0. Du kannst 
die Position dort ändern. Dazu musst du das EEprom löschen und OpenMCP 
einmal neu starten damit die Config an der neuen Position angelegt wird.

von Ethan A. (Firma: Herr) (arnolde)


Lesenswert?

Hab grad einen dritten DS18xxxx Sensor angeschlossen und konfiguriert, 
und dabei einen Bug (glaube ich) entdeckt: Wenn der Sensor abgezogen 
wird, also nicht mehr erreichbar ist, wird im Config und im Templogger 
nicht "n/a" angezeigt wie es sein müßte, sondern -0.5°C angezeigt.

von tt2t (Gast)


Lesenswert?

wie komme ich denn auf ein aktuelles .hex-file, um das auf meinen 
avr-net-io zu laden? Im SVN bin ich nicht fündig geworden.

von Ethan A. (Firma: Herr) (arnolde)


Lesenswert?

Hi tt,

Das aktuellste veröffentlichte hexfile das ich kenne ist das hier: 
http://www.mikrocontroller.net/attachment/51592/openMCP.zip (siehe 
Beitrag hier im Thread vom 27.5.2009). Aber wenn Du schon einen 
Programmer hast, wo ist das Problem sich win-avr zu besorgen und es 
selbst aus dem svn-checkout zu kompilieren? Hat bei mir ziemlich auf 
Anhieb geklappt (auch für den Net-io), mußte nur eine Handvoll 
Einstellungen in der config.h machen.

Gruß,
Ethan

von Ethan A. (Firma: Herr) (arnolde)


Lesenswert?

Wenn die MMC Card im betrieb entfernt wird, stürzt openMCP unweigerlich 
sofort ab, auch wenn die Karte vor dem Wiedereinstecken nicht 
beschrieben wird. Was kann ich tun um das zu verbessern? Die Karte hat 
ja einen Sensorkontakt, wird der denn nicht abgefragt?

von Chris M. (shortie)


Lesenswert?

Ethan Arnold schrieb:
> Die Karte hat ja einen Sensorkontakt, wird der denn nicht abgefragt?

Mal durchgemessen ob der auch am EXT Veränderungen anzeigt? Tut er 
nämlich bei mir nicht.

von Ethan A. (Firma: Herr) (arnolde)


Lesenswert?

Du meinst, ob beim ziehen/stecken der Karte der Pegel sich ändert? Ja, 
tut er. PD7 ist +3.6V bei gezogener Karte und 0V bei gesteckt.

Übrigens stürzt openmcp bei mir leider recht oft auch so ab, scheinbar 
umso schneller (teilweise schon nach 1-2 minuten) je intensiver die 
Webseiten abgefragt werden. Wenn ich per Javascript und Livechart alle 2 
Sekunden eine kurze cgi (gibt per http 16 Zeichen aus) aufrufe, läufts 
selten länger als ne stunde.

von Ethan A. (Firma: Herr) (arnolde)


Lesenswert?

Vielleicht liegt es an 2 oder mehr gleichzeitigen http-requests? Ich hab 
unten die Statusframe auf autorefresh alle 30sek und die templogger 
grafik auf alls 60sek, und die livechart holt sich alle 2 sekunden ein 
paar bytes. Ist da irgendwas bekannt?

von Dirk B. (sharandac)


Lesenswert?

@Ethan,

bei der MMC gibt es nix zu verbessern, es sei denn man baut 
Hotplug-Support ein. Und es Hilft auch nix wenn man vor dem nächsen 
schreiben/lesen die Karte wieder einsteckt, denn die MMC will auch 
initialisiert werden was nicht ganz trivial ist.

Zu dem Problem mit dem Abstützen: OpenMCP b.z.w. das AVRNETIO ist kein 
Supercomputer oder gar ein vollwertiger Webserver der XY Anfragen in der 
Sekunde verarbeiten kann. Deshalb alles immer schön der Reihe nach. Und 
sicher das OpenMCP abstürzt? Woran machst du das fest?

Ich bin zwar immer bemüht alles nach besten Wissen und Gewissen zu 
machen aber ich kann leider nicht vorhersehen was der Benutzer damit 
anstellt. OpenMCP an sich ist schon recht Stabil von meiner Seite aus, 
ich selber verbringe sehr viel Zeit damit und treibe auch ordentlich 
Aufwand nach Fehlern und Schwachstellen zu suchen.
Hast du denn mal versucht raus zu bekommen Wo oder bei welcher Aktion 
denn der Controller stehen bleibt? Bleibt er denn wirklich stehen? Geht 
Ping noch? Blinkt die LED1 auf dem ADD-ON? Da du selber schon Code 
eingefügt hast: Verbrauchst du vielleicht zu viel RAM und erzeugt einen 
Stackoverflow der in bestimmten Situationen auftritt? Arbeitest du mit 
Interrupts in deinem Code? Fängst du auch alle erdenklichen Fehler ab im 
Programm?

CA Dirk

von Ethan A. (Firma: Herr) (arnolde)


Lesenswert?

Hi Dirk,

Du mußt die Leistung des Servers nicht derart herunterspielen, mir ist 
durchaus bewußt was hier auf kleinem Raum geleistet wird und bitte 
verstehe meine Fragen nicht im Sinne von "wasn das fürn scheiss, dat 
läuft ja net" sondern ich bin Dir extrem dankbar für das Ganze und ich 
finds ungemein nützlich und interessant und eine super Basis für meine 
eigenen ersten Schritte in der Weiterentwicklung für eigene Zwecke. Ich 
hab schon Mitte der 80er Jahre als Jugendlicher den Atari 800XL (6502, 
64k RAM, ähnlich dem C64) in Maschinensprache programmiert (hatte keinen 
Assembler oder gar C Compiler, da gabs keine Variablen und define's und 
Labels, da wurde jeder Befehl von Hand auf Papier in Zahlen übersetzt, 
Sprünge manuell berechnet, und per for...next...poke x,y Schleife in den 
Speicher geschrieben. Ich bin aber nicht die ganze Zeit so freakig 
geblieben g ich hab viel Elektronik-Allgemeinwissen und hab auch 1 
Jahr auf PIC entwickelt aber das ist auch schon Jahre her. Daher ist 
jetzt AVR von der Grundsache her bekannt aber ich muß mich erst 
einarbeiten. Aber es ist mir schon klar daß der Atmega mit einem 
einzigen html-Seitenabruf für 1-2 Sekunden alle Hände voll zu tun hat 
und man nicht viel mehr verlangen kann. Tue ich auch nicht.

Ich mache das Abstürzen daran fest, daß überhaupt keine http Anfrage 
mehr beantwortet wird, nie mehr. Ping reagiert auch nicht mehr. Das 
Addon Board hab ich nicht daher auch keine LED, hab nur die MMC gemäß 
Schaltplan des Pollin Addon Boards angeschlossen. Kann aber mal checken 
ob die LED blinken würde wenn sie da wäre, dazu muß ich aber erstmal die 
LED wieder mit reinnehmen und neu compilen+flashen. Die einzigen 
Aktionen die ich mache sind http Abfragen also kann ich nicht genauer 
sagen woran es hängt. Ich hab als einzige eigene Erweiterung eine 
Abwandlung Deines cmd_onewire als cgi ergänzt, sonst nichts. Aber auch 
wenn ich die gar nicht benutze taucht das Problem auf. Wenn ich gar 
keine http anfragen schicke dann läuft das Teil meistens problemlos 
durch, auch über Nacht. Aber wenn ich irgendeine Seite offenlasse dann 
wird die untere Statuszeile alle 30sek per REFRESH neu geladen, und wenn 
ich die templogger Seite offenlasse dann auch die Grafik alle 60sek, und 
wenn ich das stundenlang so lasse dann komme ich fast immer zurück und 
finde ein "Zeitüberschreitung" auf dem Bildschrim und der AVR reagiert 
auf gar keine http Anfrage mehr (und kein Ping). Ausser den REFRESH in 
den html-header einzubauen hab ich an der templogger Sache nix geändert.

Zum Thema MMC, wie wäre es mit einem Interrupt wenn die Karte 
eingesteckt wird und dann kann sie ja neu initialisiert werden? Oder ist 
das einfacher gesagt als getan? Ich wollt Dich eh fragen, schreibst Du 
bei jedem Datei-Schreibvorgang auch den Verzeichniseintrag fertig (also 
"Datei schließen") oder läßt Du die Datei offen? Ersteres hat den 
Vorteil erhöhter Ausfallsicherheit (bei Stromausfall oder Kartenziehen) 
aber den Nachteil daß das Flash auf der Karte ziemlich oft beansprucht 
wird und irgendwann Schaden nehmen wird.

viele Grüße,
Ethan

Meine angepaßte cgi (auf Grundlager Deiner cmd_onewire), liefert Daten 
für einen Livechart wie hier 
(http://www.highcharts.com/studies/live-server.htm) beschrieben:
1
#include <avr/pgmspace.h>
2
#include <avr/version.h>
3
#include <stdio.h>
4
#include <string.h>
5
#include <stdlib.h>
6
#include <math.h>
7
8
#include "config.h"
9
10
#include "apps/httpd/cgibin/cgi-bin.h"
11
#include "system/sensor/temp.h"
12
#include "system/clock/clock.h"
13
14
#include "livedata.h"
15
16
void init_cmd_livedata( void )
17
{
18
#if defined(HTTPSERVER_ONEWIRE)
19
  cgi_RegisterCGI( cgi_livedata, PSTR("livedata.cgi"));
20
#endif
21
}
22
23
void cgi_livedata( void * pStruct )
24
{
25
  struct TIME nowtime;
26
   int i;
27
  char TEMPSTRING[10]="\0";
28
29
  for ( i = 0 ; i < 1 ; i ++ ) // TEMP_MAX_SENSORS
30
  {
31
    CLOCK_GetTime( &nowtime );
32
    nowtime.time-=2208988800L; // nowtime provides utc (from 1900), correction for unixtime
33
    TEMP_Sensor2String(i, TEMPSTRING);      
34
    
35
    printf_P(PSTR("[%lu000,%s]"), nowtime.time, TEMPSTRING); 
36
    
37
  }
38
}

von Ethan A. (Firma: Herr) (arnolde)


Lesenswert?

Vielleicht nochmal kurz meine gezielte Frage: Was passiert wenn mehrere 
http Anfragen sich überlappen, z.B. wenn die Startseite (die ja aus 
Frames besteht und daher schon von Haus aus 4 Anfragen parallel kommen) 
geladen wird? Werden die Anfragen gepuffert und versucht nacheinander 
abzuarbeiten oder ist während dem Abarbeiten einer Anfrage der Webserver 
"auf dem Ohr taub"? Ich hab auch sehr oft den Fall daß die obere 
Menüzeile und/oder die untere Statuszeile einfach leer ist und auch 
nicht nachgeladen wird, muß den Inhalt ständig mit rechtsklick/"Frame 
neu laden" wieder ranholen.

von Dirk B. (sharandac)


Lesenswert?

Hm ... interessant wäre wo der Controller stehen bleibt. Es wäre 
praktisch wenn du da mal ein bisschen forschen könntest. Oft kommt es 
auch vor das Ethernetcontroller einfach hängen bleibt. Am besten mal 
eine LED dran bauen und sehen was passiert.
 Die MMC könnte man Theoretisch im Interrupt initialisieren, aber das 
würde das Timing des System stark kompromittieren und das will ich nicht 
machen.
 Ich selber versuche immer eine Datei nur kurz zu öffnen und gleich 
wieder zu schließen. Zum einen spart das Speicher, weil ich dann nur 
Speicher auf den Stack brauche nicht die Dateiinformationen speichern 
muss. Zum anderen ist das sicherer wenn irgend etwas mal abstürzt. Der 
MMC stört das auch nicht im geringsten, die Internen Controller der MMC 
kümmern sich um die gleichmäßige Auslastung der Speicherzellen so das 
von dort keine Gefahr droht. Also keine sorge das deine MMC mal deshalb 
kaputt geht.
 Nochmal zum HTTP-Server. Der TCP/IP Stack kann mehrere Verbindungen 
annehmen, aber der HTTP-Server immer nur eine gleichzeitig bearbeiten, 
und erst wenn er eine fertig bearbeitet hat kann die nächste in angriff 
genommen werden. So kann es z.b. leicht passieren das eine schon 
angenommene Verbindung in den Timeout läuft und geresetet wird ohne das 
auch nur ein Byte übertragen worden ist. Auf der Benutzerseite sieht das 
dann wie nicht erreichbar aus. Wenn dann noch alle Sockets belegt sind 
kann es passieren das der Controller für eine Zeit nicht zu erreichen 
ist bis alle Verbindungen in den Timeout gelaufen sind.
 Am besten hier und da nochmal ein bisschen probieren.

CA Dirk

von Ethan A. (Firma: Herr) (arnolde)


Lesenswert?

Hi Dirk,

die MMC muß ja nicht ständig im Interrupt initialisiert werden, es geht 
ja nur darum daß falls sie mal gezogen werden sollte, der Betrieb ja 
ohnehin gestört ist und da kann der Betrieb auch ruhig ruhen (von mir 
aus auch einen Vollreset machen, wäre vielleicht einfacher) wenn die 
Karte dann wieder eingesteckt wird. Fragst Du den Steckkontakt überhaupt 
irgendwo ab oder müßte ich das komplett selbst implementieren?

Ich werd mal ne blinkende LED anbauen und vielleicht noch etwas debug 
ausgaben über den Comport. Die Ethernet LED's blinken jedenfalls 
weiterhin. Hattest Du eine Watchdog implementiert? Ich hab jetzt 
jedenfalls 12h uptime weil ich über Nacht keine Webseite aufgerufen hab 
also bin ich mir sehr sicher daß es daran liegt, es sei denn Du siehst 
in meinem CGI code (der immer maximal 10mins läuft) etwas gefährliches.

Gruß,
Ethan

von Ethan A. (Firma: Herr) (arnolde)


Lesenswert?

Ich vermute inzwischen daß es ein Hardwareproblem sein könnte, denn ich 
hab inzwischen gelesen daß man sie SPI Leitungen ziemlich kurz halten 
sollte und eine 3,3V Pegelanpassung mittels Widerständen (wie beim 
Pollin addon) nicht optimal ist. Bei mir hängt die SD Karte momentan 
fliegend an bis zu 10cm langen Einzeldrähten. Ich werd die also auch mal 
etwas ordentlicher verdrahten und dann weitersehen.

von Ethan A. (Firma: Herr) (arnolde)


Lesenswert?

Also die LED blinkt weiterhin, aber das ist auch das einzige 
Lebenszeichen.

Ping antwortet nicht und es werden keine Daten mehr auf SD-Karte geloggt 
(hab in temp_json debug output über die uart eingefügt).

von Christian Brandtner (Gast)


Lesenswert?

Ethan Arnold schrieb:
> eine 3,3V Pegelanpassung mittels Widerständen (wie beim
> Pollin addon) nicht optimal ist.

das stimmt, gibt dazu einen interessanten Link, das Problem mit der 
Pegelanpassung ist relativ einfach zu lösen.....

http://www.rocketnumbernine.com/2009/04/10/5v-33v-bidirectional-level-converter/

Guten Rutsch ins neue Jahr

von Uwe N. (ulegan)


Lesenswert?

Hallo Dirk,

hat die aktuelle Version im svn eigentlich ein Problem mit Windows?
Ich kann weder mit http noch telnet zugreifen, nur Ping geht.
Unter Linux funktioniert jedoch alles einwandfrei.
Mit Wireshark sehe ich, dass mein Board nicht auf das SYN-Paket 
reagiert. Die SYN-Pakete unter Linux und Windows sehen eigentlich 
ziemlich gleich aus, bis auf die Windowsize. Die ist unter Windows 16384 
und unter Linux 5480 Byte, stört das?

Achso: ich benutze ein AVRNetIO ohne Zusatzboard mit dem ATmega644. 
Software aus dem svn von heute Vormittag mit einer kleinen Änderung in 
der  uart_1.c , hier muss stehen:
1
#if !defined(__AVR_XMEGA__) && defined(__AVR__) && !defined(__AVR_ATmega644P__)
So steht's in der ZIP-Datei, die ich gestern geladen habe, die ist wohl 
vom 26.12.
Mit der ZIP-Version geht es auch unter Linux nicht wirklich, Telnet 
geht, die Webseite erscheint nur teilweise. Hab ich nicht weiter 
untersucht, sondern dann aus dem svn geladen.

von Ethan A. (Firma: Herr) (arnolde)


Lesenswert?

Hi Uwe,

welches Windows benutzt Du denn? XP, Vista, Win7?
Bei mir unter Win7 x64 klappts einwandfrei, benutze eine ca. 10 Tage 
alte SVN Version, glaub aber nicht daß sich inzwischen was geändert hat.

Gruß,
Ethan

von Uwe N. (ulegan)


Lesenswert?

Hallo Ethan,

ich benutze Win XP Home SP3, Win7 könnte ich morgen mal probieren.
Ubuntu 10.10 macht keine Probleme.
Habs mit zwei Rechnern und zwei Routern probiert.
Momentan ist das Teil über http://ulegan.dyndns.org zu erreichen.

Gruß
Uwe

von Ethan A. (Firma: Herr) (arnolde)


Lesenswert?

Also ich komm bei Dir drauf. Wird irgendeine Inkompatiblität sein die 
nur in deiner Kombination zum Tragen kommt.

von Carsten M. (monte70)


Lesenswert?

Hallo Uwe,
 also ich habe genau das gleiche Problem, ich komme "nicht" auf deine 
Seite und habe auch mit XP SP3 kompiliert. Von intern funktioniert meine 
Seite, von der Arbeit aber nicht. Jetzt ist es 21:05 meine Seite ist

monte70.dyndns.org

@Dirk , das mit dem "&& !defined(_AVR_ATmega644P_)" habe ich auch 
gemerkt das fehlt glaube ich im SVN.

Ich habe auch das Net-IO und Add on mit dem "644" ohne p

Kann jemand mal probieren?

Gruss

von Uwe N. (ulegan)


Lesenswert?

Hallo Carsten,

komme jetzt um 22:30 nicht auf deinen Server. Allerdings auch nicht mit 
Linux.
Es ist übrigens egal, ob ich mit Linux oder WinAVR unter Windows 
compiliere, trotz unterschiedlicher Compilerversionen und libc's.
Heute haben es offenbar mehrere probiert, auf meinen Server zuzugreifen. 
Die Netzwerk-LED hat mehrmals heftig geblinkt.
Hat keiner Probleme gehabt?

Uwe

von Christian Brandtner (Gast)


Lesenswert?

ich komme drauf, 22:53

mit Debian Squeeze und Iceweasel, auch mit XP in Virtualbox gehts

von Dirk B. (sharandac)


Lesenswert?

@all

ja, habe nach euren Hinweis jetzt auch gesehen das da noch etwas im SVN 
Fehlt :-). Ist mir wohl durch die Lappen gegangen. Habe es eben 
nachgereicht. Zu euren Servern. Ich habe beide erreicht ohne Probleme, 
sowohl

http://ulegan.dyndns.org/ als auch
http://monte70.dyndns.org

.
Der erste hat jetzt eine Uptime von ca 6h und der Zweite von 16h. 
Interessanterweise laufen sogar die Uhren komplett synchron. Es wäre mal 
interessant zu wissen was ihr für Rechner benutzt, b.z.w. euer 
Betriebssystem.

CA Dirk

Edit: Betriebssystem, Ubuntu 10.4 und WindowsXP SP2 in einer VM.

von Uwe N. (ulegan)


Lesenswert?

Habe es gerade selbst nochmal mit Windows XP versucht, ging nicht. Aber 
dabei gab es wohl einen Neustart des Boards, denn beim anschliessenden 
Versuch unter Linux zeigte es eine Uptime von wenigen Sekunden.
Das passierte um 16:27 schon einmal, da war ich es aber nicht selbst...

Bei mir funktioniert:
Ubuntu 10.10 und Ubuntu 10.04 sowie Windows 2000 auf 3 verschiedenen 
Rechnern
Es gehen nicht:
2 Rechner mit Windows XP Home SP3 bzw. XP Professional SP3

Alle Rechner sind im lokalen Netzwerk. Es macht keinen Unterschied, ob 
ich direkt zugreife, oder über den Umweg mit dyndns.org.

Uwe

von Karl albert L. (karleido)


Lesenswert?

Hallo,

nach sehr langer Zeit habe ich wieder Zeit gefunden und mal 
reingeschaut. Das Projekt hat sich ja toll weiter entwickelt. Ich hoffe, 
dass ich mich jetzt wieder mit dem Projekt weiter beschäftigen kann.

Die Server:
http://monte70.dyndns.org/ und
http://ulegan.dyndns.org/
habe ich sofort erreicht. Bei der Seite ulegan fehlt aber die Fußzeile.
Ich habe XP Professional Sp3 und Mozilla Firefox benutzt.

Gruß
Karl Albert

von Carsten M. (monte70)


Lesenswert?

Hallo, also mein openMCP funktioniert nur sporadisch von "Außen",

ich habe jetzt mal zwei OneWire Sensoren angebaut echt super.

Ich komme aus meinem Hausnetz immer auf den Server über die Dyndns 
Adresse.

Heute habe ich von meinem Onkel versucht (Linux und XP) ohne Erfolg.

Über die Testseite von dyndns sieht bei mir alles gut aus.
http://www.dyndns.com/support/tools/openport.html

Kommt einer von euch auf die Server von Dirk? ich nicht ?grübel?

http://www.neo-guerillaz.de:81
http://www.neo-guerillaz.de:82
http://www.neo-guerillaz.de:83

LG Carsten

von Dirk B. (sharandac)


Lesenswert?

@Carsten,

die drei Boards von mir sind wegen DNS-Problemen bei meinem dyndns z.Z. 
nicht zu erreichen. Das muss ich mal in einer langen Session fixen ...

CA Dirk

von Uwe N. (ulegan)


Lesenswert?

Hallo Carsten,

deinen Server konnte ich noch nie erreichen, weder Linux noch XP. Aber 
der Port 80 ist offen.
Inzwischen habe ich einen Rechner im lokalen Netzwerk gefunden, mit dem 
ich den Server auch unter XP erreichen kann.
Interessanterweise sehen dessen SYN-Pakete anders aus, als bei den 
anderen. Ich denke auch, dass mein NetIO SYNACK-Pakete verschickt, aber 
der PC empfängt sie nicht, auch Wireshark zeigt sie nicht.
Ich habe versucht, zusätzliche Debugausgaben einzubauen, dazu musste ich 
den UART Tx-Buffer vergrößern. Meistens stürzt der Server jedoch 
trotzdem mitten in der Ausgabe ab. Derzeit habe ich den größeren Buffer 
noch aktiviert, aber keine Ausgaben. Damit scheint das Teil instabiler 
zu werden. Es kommen meistens nicht alle Frames an.
Ich hab mir jetzt ATmega1284 bestellt, die haben 16k RAM, vielleicht 
läuft's dann besser.
Uwe

von Ethan A. (Firma: Herr) (arnolde)


Lesenswert?

Ich hatte anfangs Probleme die TFTP Pakete an meinem PC (Win7) zu 
empfangen, bis ich die Windows-Firewall deaktivierte (bzw. anschließend 
eine Regel dafür einrichtete). Wenn sie an der Firewall hängenbleiben 
dann werden sie auch in Wireshark nicht angezeigt. Ist ein banales 
Problem aber doch häufiger als man denkt.

von Uwe N. (ulegan)


Lesenswert?

Hallo Ethan,
habe mal die Firewall deaktiviert, was aber erwartungsgemäss nichts 
bringt. Das Problem tritt ja schon beim Aufbau der TCP-Verbindung auf. 
Der PC schickt ein Paket mit gesetztem SYN-Flag an den Server. Daraufhin 
sollte der ein Paket mit SYN- und ACK-Flag zurückschicken. Diese Antwort 
sehe ich mit Wireshark nicht. Zusätzliche Debugausgaben über die 
serielle Schnittstelle zeigen mir aber, dass das Paket zusammengebaut 
und zumindest an die Funktion sendEthernetframe übergeben wird. 
Allerdings kann ich nicht das komplette Paket über die serielle senden, 
dabei stürtzt der Server komplett ab. Ob das ein Timing- oder 
RAM-Problem ist, weiss ich nicht. Ich weiss auch nicht, ob das Paket auf 
der Ethernet-Schnittstelle rauskommt.

Uwe

von Dirk B. (sharandac)


Lesenswert?

@Uwe

Die Debug-Ausgaben gehen nicht im Interruptbetrieb, da die Routinen zur 
Ausgabe per RS232 selber Interrupts benutzen. Aber Inetressant das 
selbst keine Antworten beim PC ankommen. Welche Version benutzt du von 
OpenMCP, die aus dem SVN? Die Sourcen dort sind aktueller als die aus 
der .zip. Kannst ja mal versuchen diese zu benutzen.

CA Dirk

von Uwe N. (ulegan)


Lesenswert?

Jetzt gehts...
Die TCP-Header passen nicht!
Wo werden die im PC verarbeitet und wenn sie nicht genehm sind 
verworfen? Etwa im Netzwerk Treiber? Das würde erklären, warum es auf 
den meisten Rechnern geht und bei anderen, mit gleichem Betriebssystem 
aber anderer Netzwerkhardware und damit anderen Treibern, nicht.
Offenbar hab ich da zwei besonders empfindliche Exemplare.

Was passt nicht (zumindest meinen Rechnern):
Im SYN+ACK Paket stehen am Ende die Optionen. Die sind 12 Byte lang, 
aber es werden nur die ersten 9 Byte beschrieben. Dazu sind noch Nullen 
drin, ein leerer Platz muss aber mit 0x01, Wireshark nennt das NOP, 
gefüllt werden. Zudem enthalten eben die letzten 3 Byte Müll.
In einem ACK Paket stehen normalerweise keine Optionen. Wenn aber hier 
am Ende noch ein paar eigentlich überflüssige Byte gesendet werden darf 
da nicht '\0Hurrican' drin stehen, sondern der Bereich gehört mit 0x01 
gefüllt.
Aslo folgende Änderung in tcp.c, in der Funktion MakeTCPheader:
1
    if ( TCP_sockettable[ Socket ].ConnectionState == SOCKET_SYNINIT )
2
    {
3
      // beschreibe das Optionfeld mit MSS = MAX_TCP_Datalenght wenn der SYN ausgehandelt wird
4
      TCP_packet->TCP_Options[0] = 0x02;
5
      TCP_packet->TCP_Options[1] = 0x04;
6
      TCP_packet->TCP_Options[2] = ( MAX_TCP_Datalenght >> 8 ) & 0x00ff ;
7
      TCP_packet->TCP_Options[3] = MAX_TCP_Datalenght & 0x00ff ;
8
      TCP_packet->TCP_Options[4] = 0x01;
9
      TCP_packet->TCP_Options[5] = 0x01;
10
      TCP_packet->TCP_Options[6] = 0x04; SACK permitted, was bedeutet das?
11
      TCP_packet->TCP_Options[7] = 0x02;
12
      TCP_packet->TCP_Options[8] = 0x01;
13
      TCP_packet->TCP_Options[9] = 0x01;
14
      TCP_packet->TCP_Options[10] = 0x01;
15
      TCP_packet->TCP_Options[11] = 0x01;
16
      }
17
    else
18
    {
19
      // lasse Optionfeld leer wenn kein SYN
20
      TCP_packet->TCP_Options[0] = 0x01;
21
      TCP_packet->TCP_Options[1] = 0x01;
22
      TCP_packet->TCP_Options[2] = 0x01;
23
      TCP_packet->TCP_Options[3] = 0x01;
24
      TCP_packet->TCP_Options[4] = 0x01;
25
      TCP_packet->TCP_Options[5] = 0x01;
26
      TCP_packet->TCP_Options[6] = 0x01;
27
      TCP_packet->TCP_Options[7] = 0x01;
28
      TCP_packet->TCP_Options[8] = 0x01;
29
      TCP_packet->TCP_Options[9] = 0x01;
30
      TCP_packet->TCP_Options[10] = 0x01;
31
      TCP_packet->TCP_Options[11] = 0x01;
32
  }

Optimal ist das sicher nicht, die überflüssigen Byte sollte man besser 
weglassen. Dazu muss man aber die TCP_HEADER_LENGHT modifizieren, die 
aber als Konstante definiert ist. Daraus eine Variable hab ich noch 
nicht hinbekommen, hatte zuviele Nebenwirkungen.

So, für heute reicht es mir. Morgen suche ich mir mal Literatur über den 
Aufbau von TCP-Headern. Verstanden hab ich's nämlich noch nicht...

Uwe

P.S. Die Namensgebung mit _LENGTH und _LENGHT hat mich reichlich 
verwirrt. Das sollte man mal aufräumen

von Dirk B. (sharandac)


Lesenswert?

@Uwe,

Der Headeraufbau ist RFC-Konform. Das Optionfeld wird mit einer 0x00 
abgeschlossen. Demzufolge ist ein 12-Byte Optionsfeld welches mit 0x00 
beginnt richtig, weil die Daten danach nicht mehr beachtet werden. 0x01 
ist einfach nur ein NOP und macht nix, wenn man das bis zum ende des 
Optionfeldes rein schreibt ohne die Options mit 0x00 zu terminieren hat 
das Optionfeld kein Ende und es gibt wirklich Probleme wenn die Treiber 
das nicht richtig machen (RFC793 Page 18).

Es ist aber durchaus möglich, dass Du die empfindlichsten, zu Deutsch: 
miesesten Treiber der Welt erwischt hast. D.h. Deine Kombination ist die 
erste in 2000+ D/L die mit einem RFC konformen Aufbau nicht zurecht 
kommt - kann sein.
Dies könnte man ausschließen, indem man auf dem gleichen Rechner eine 
andere Netzwerkkarte in Betrieb nimmt.

Ich bin der Meinung, das bei 2000+ D/L solche Fehler rein statistisch 
längst aufgetreten sein sollten. Aber die Gretchenfrage bleibt: Warum 
können andere zugreifen?

CA Dirk

P.S.: Du kannst gerne die Sourcen nach Fehlern durchsuchen, wie auch 
immer geartet, und den korrigierten Sourcecode zum einpflegen mir geben, 
bin ja auch nicht perfekt. Aber ein plumpes "Das sollte man mal 
aufräumen" geht mal gar nicht. Hilfe anbieten JA, aber peitschen NEIN.

von Hans (Gast)


Lesenswert?

Hallo,

ich habe mir das Pollin Net-IO Board und das AdOnBoard zugelegt. Des
weiteren habe ich den Controller auf einen AT Mega 644P gewechselt.
Nach dem ich die fertige HEX-Datei von der Homepage
(http://wiki.neo-guerillaz.de/mediawiki/index.php/Hauptseite) auf den
Controller geschoben hatte und alle inbetrieb genommen habe, überträgt
der Controller folgenden Text über die RS232 Schnittstelle.
1
OpenMCP ...<\r><\n>
2
UART Initialisiert<\r><\n>
3
STDOUT Initialisiert<\r><\n>
4
CLOCK Initialisiert<\r><\n>
5
LED_core Initialisiert<\r><\n>
6
Config Initialisiert<\r><\n>
7
EXTINT Initialisiert<\r><\n>
8
PCINT Initialisiert<\r><\n>
9
GPIO Initialisiert<\r><\n>
10
ADC Initialisiert<\r><\n>
11
DCF77 Initialisiert<\r><\n>
12
MMC/SD Initialisiert<\r><\n>
13
Filesystem Initialisiert<\r><\n>
14
SHELL Initialisiert<\r><\n>
15
THREAD Initialisiert<\r><\n>
16
ENC28j60 (Rev.: 6) initialisiert ( HW-Add: 02:03:6f:55:1c:c8 ) Fullduplex: Link ready<\r><\n>
17
-+-> ARP initialisiert<\r><\n>
18
 |-> UDP (Tornado-engine) initialisiert<\r><\n>
19
 |-> TCP (Hurrican-engine) initialisiert<\r><\n>
20
 |-> Versuche DHCP-Config zu holen. DHCP-Config geholt<\r><\n>
21
 |   IP     : 192.168.129.37<\r><\n>
22
 |   Netmask: 255.255.255.0<\r><\n>
23
 |   Gateway: 192.168.129.1<\r><\n>
24
 |   DNS    : 192.168.129.1<\r><\n>
25
HTTP-Server Port 80.<\r><\n>
26
Telnet-Server Port 23.<\r><\n>

Anhand dieser Informationen denke ich mal, das alles funkt. Ein Ping
geht auch. Aber wenn ich im Browser (FireFox) die URL
http://192.168.129.37:80 eingebe, kommt nur Seiten-Ladefehler.
1
Fehler: Netzwerk-Zeitüberschreitung
2
3
Der Server unter 192.168.129.37 braucht zu lange, um eine Antwort zu senden.
4
5
    *   Die Website könnte vorübergehend nicht erreichbar sein, versuchen Sie es bitte 
6
        später nochmals.
7
8
    *   Wenn Sie auch keine andere Website aufrufen können, überprüfen Sie bitte die 
9
        Netzwerk-/Internetverbindung.
10
11
    *   Wenn Ihr Computer oder Netzwerk von einer Firewall oder einem Proxy geschützt wird, 
12
        stellen Sie bitte sicher, dass Firefox auf das Internet zugreifen darf.

Zudem ist mir aufgefallen, das wenn ich mit putty versuche eine 
Telnet-Verbindung aufzubauen, das das Fenster schwarz bleibt und sich 
nach ca. 60 sek schließt.


Kann  mir jemand sagen was ich falsch mache?

Danke für eure Hilfe
mfG Hans

von Uwe N. (ulegan)


Lesenswert?

@Hans
Du machst wahrscheinlich gar nichts falsch, du hast nur die falsche 
Hardware-Betriebssystem Konfiguration.
Hab mir dieses HEX-File auch gerade mal geladen, es zeigt bei mir auch 
das oben von mir beschriebene Problem.
Probier mal einen anderen PC oder ein anderes Betriebssystem.

@Dirk
Hab mir das RFC793 angeschaut und kann deine Aussage bezüglich des 
Optionsfelds nur bestätigen.
Ich habe mir einfach die Antworten verschiedener Webserver angesehen, 
die hatten zumindest im SYN-ACK-Paket nie eine 0 stehen. Es scheint also 
nicht üblich zu sein, das Optionsfeld so zu begrenzen, auch wenn es 
ausdrücklich erlaubt ist.
In ACK Paketen fehlt das Optionsfeld ganz, bzw es werden nur Nullen 
eingefügt, damit die Headerlänge ein vielfaches von 4 Byte ist 
(Padding).

Trotzdem funktioniert meine obige Lösung und schaden tut sie auch nicht.
Allerding hab ich die SACK-Option wieder entfernt, nachdem ich ungefähr 
verstanden habe, was das ist.

Ausserdem wollte ich dich nicht kritisieren, schon garnicht Peitschen... 
Mich hat es nur mehrfach verwirrt, das ich TCP_HEADER_LENGTH beim Suchen 
nicht finde. Es heist bei dir TCP_HEADER_LENGHT.

Ich werde mal weiter forschen, ob man das mit den Headern optimieren 
kann und dabei ein bischen aufräumen.

Gruß
Uwe

von Peter (Gast)


Lesenswert?

Ich hab jetzt mal versucht das Modul mit FireFox und IE unter den 
folgenden OS anzusprechen:

Windows XP
Windows Vista
Windows 7 64Bit
Windows 2003 Server

bei allen kam das gleiche Ergebniss wie oben schon mal beschrieben.
Mit ist allerdings aufgefallen, das die gelbe LED von der RJ45 Buchse 
scheinbar dauerhaft leuchtet und die grüne LED nur sehr selten.

von Ethan A. (Firma: Herr) (arnolde)


Lesenswert?

Es steht auch überall "SECOUND" statt "SECOND" in den Sourcen. Dirk ist 
halt kein Englischguru ;-) dafür hat er bei anderen Sachen echt 
gepunktet! Die Modularität kann sich echt sehen lassen.

von Peter (Gast)


Lesenswert?

so damit es keine Verwirrung gibt, Hans ist ein Kollege von mir und wir 
arbeiten zusammen an dem Projekt ;-)

von Uwe N. (ulegan)


Lesenswert?

@Hans / Peter
Das mit den Leuchtdioden stimmt so.

@Ethan
Die Modularität gefällt mir auch, das ist der wesentliche Grund, warum 
ich mich dafür interessiere. Die TCP-Stacks von Ulrich Radig und uip von 
Adam Dunkel scheinen, zumindest unter Windows, besser zu funktionieren, 
aber da finde ich alles recht unübersichtlich.

von Dirk B. (sharandac)


Angehängte Dateien:

Lesenswert?

@Hans,

anbei mal ein .hex zum testen auf dem AVR-NET-IO mit einem 644P und 
ADD-ON. Schau mal bitte ob das so geht bei euch.

CA Dirk

von Uwe N. (ulegan)


Lesenswert?

Hab kein 'P' ...
Oder sollte es auch auf einem normalen ATmega644 laufen?
Dann probier ich's heute abend aus.

Uwe

von Hans (Gast)


Lesenswert?

@Dirk

danke für die Firmeware und deinen Einsatz rund um dieses Projekt.

Leider bekomm ich immer noch keine Webseite angezeigt.

Folgende Meldungen treten jetzt auf:
1
OpenMCP ...<\r><\n>
2
UART Initialisiert<\r><\n>
3
STDOUT Initialisiert<\r><\n>
4
CLOCK Initialisiert<\r><\n>
5
LED_core Initialisiert<\r><\n>
6
Config Initialisiert<\r><\n>
7
EXTINT Initialisiert<\r><\n>
8
PCINT Initialisiert<\r><\n>
9
TWI Error<\r><\n>
10
LCD Initialisiert<\r><\n>
11
GPIO Initialisiert<\r><\n>
12
ADC Initialisiert<\r><\n>
13
1-WIRE Error<\r><\n>
14
DCF77 Initialisiert<\r><\n>
15
MMC/SD Initialisiert<\r><\n>
16
Filesystem Initialisiert<\r><\n>
17
SHELL Initialisiert<\r><\n>
18
THREAD Initialisiert<\r><\n>
19
ENC28j60 (Rev.: 6) initialisiert ( HW-Add: 02:03:6f:55:1c:c8 ) Fullduplex: Link ready<\r><\n>
20
-+-> ARP initialisiert<\r><\n>
21
 |-> UDP (Tornado-engine) initialisiert<\r><\n>
22
 |-> TCP (Hurrican-engine) initialisiert<\r><\n>
23
 |-> Versuche DHCP-Config zu holen. DHCP-Config geholt<\r><\n>
24
 |   IP     : 192.168.129.37<\r><\n>
25
 |   Netmask: 255.255.255.0<\r><\n>
26
 |   Gateway: 192.168.129.1<\r><\n>
27
 |   DNS    : 192.168.129.1<\r><\n>
28
HTTP-Server Port 80.<\r><\n>
29
Telnet-Server Port 23.<\r><\n>

Die LED1 von AdOn-Board blinkt schön gleichmäßig.

Im Browser (FireFox unter Win7 x64) braucht der Ladevorgang schon 
wesentlich länger als vorher. Als Meldung kommt jetzt
1
Fehler: Verbindung unterbrochen
2
3
Die Verbindung zum Server wurde zurückgesetzt, während die Seite geladen wurde.
4
5
    *   Die Website könnte vorübergehend nicht erreichbar sein, versuchen Sie es bitte 
6
        später nochmals.
7
8
    *   Wenn Sie auch keine andere Website aufrufen können, überprüfen Sie bitte die 
9
        Netzwerk-/Internetverbindung.
10
11
    *   Wenn Ihr Computer oder Netzwerk von einer Firewall oder einem Proxy geschützt wird, 
12
        stellen Sie bitte sicher, dass Firefox auf das Internet zugreifen darf.

Wenn ich unter Putty eine Telnet-Verbindung aufbaue (192.168.129.37:23) 
bekomme ich jetzt (zum ersten mal) nach etwa 20 - 60 Sekunden (Zeiten je 
nach Versucht unterschiedlich) folgendes angezeigt
1
Und, los geht's...!!! ("help" hi

von Dirk B. (sharandac)


Lesenswert?

@Hans ...

naja, immerhin ein Teilerfolg :-). Da es jetzt ein bisschen geht wäre 
mal ein Wireshark-log interessant für mich. Was ich auch gerne noch 
wissen wollen würde wäre was ihr genau für Hardware verwendet bei den 
Netzwerkkarten und ob hier noch andere Software wie Firewalls oder so am 
laufen habt. Interessant wäre auch zu wissen was für einen Switch ihr 
benutzt.

CA Dirk

von Uwe N. (ulegan)


Angehängte Dateien:

Lesenswert?

Hab das Hex-File auch mal ausprobiert, geht nicht unter Windows, aber 
unter Linux. Liefert zwar ein '403 File not found!', denke das sucht auf 
der SD-Karte. Telnet geht unter Linux, unter Windows nur Ping. Es kommt 
weiterhin keine Antwort auf das SYN-Paket.
Netzwerkkarte hier ist eine 'Realtek RTL8168/811 PCI-E Gigabit Express' 
onboard auf einem Foxconn Mainboard. BS ist XP-Home .
Router ist eine Fritzbox 7170.
Der zweite Problemrechner ist ein Dell Latitude D830 Notebook.
Da geht weder der Broadcomm Gigabit Netztwerk-Anschluss, noch das Dell 
Wireless 3945 WiFi® 802.11a/g Wlan. BS hier ist XP-Pro.
Ausser der Windows Firewall ist auf beiden Rechnern nichts aktiv.

Hab mal meine geänderte tcp.c und tcp.h angehängt. Die gehen bei mir 
unter Windows, allerdings immer noch langsamer als unter Linux.

Ich hab das Optionsfeld bei SYN-ACK-Paketen auf 4 Byte gekürzt, nur noch 
die MSS steht drin. Alle anderen Pakete haben kein Optionsfeld mehr.
Damit gibt es keine 0-Bytes mehr. Die werden bei mir offenbar wie NOP's 
behandelt und sind nicht das eigentliche Problem. Das Problem sind die 3 
letzten Byte, die alten Müll enthalten, bzw. der String 'Hurrican'.

Uwe

von Dirk B. (sharandac)


Angehängte Dateien:

Lesenswert?

So ... habe mal ein bisschen gespielt, die Version von heute Mittag 
hatte noch Fehler gehabt, da wurde noch Müll im Optionfeld mitgeliefert. 
Jetzt die bereinigte Version für den 644 und den 644P. Bitte mal 
Probieren.

CA Dirk

von Hans (Gast)


Lesenswert?

Hallo Dirk,

das WireShark-log erstell ich heute gegen abend, muss mich mit dem Prog 
erst mal beschäftigen.

Zur Hardware:
Clientnetzwerkkarte: PCI Express LAN 10/100/1000 Fast Ethernet by 
Realtek 8111C
Switch: 1000er 8 Port NetGear (anderen haben wir momentan nicht)
DHCP Server: Fritz!Box Fon WLAN 7050

Zudem habe ich mir den Controller noch mal genauer angeguckt und musste 
mit bedauern feststellen, das uns nicht den ATMega 644P geliefert wurde 
sondern der ATMega 644 (blöd wenn man sich nur drauf verlässt, dass das 
richtige ankommt und man nicht noch mal genau hinguckt).

Werde im laufe des Tages noch mal versuchen das Projekt für den 644 zu 
compilieren und aufzuspielen ... vielleicht war das ja schon das 
Problem.

Gruß Hans

von Uwe N. (ulegan)


Lesenswert?

@Dirk
Das Programm von 0:50 funktioniert. Webserver liefert 'HTTP 403 
verboten', Telnet geht. SYN-ACK Pakete kommen an.
Aber warum hast du das Optionsfeld auf 16 Byte vergrössert?
Da steht ausser den 4 Byte beim SYN-ACK Paket nie was drin.

Uwe

von Dirk B. (sharandac)


Lesenswert?

@Uwe,

schon mal gut des es geht.Ich habe das Optionfeld auf 16 vergrößert 
damit ich RTT machen kann welches 10Byte im Optionfeld braucht, damit 
kann der gegenüber die Latenz messen was die Verbindung beschleunigen 
kann. Ich werde ich Scourcen heute Abend mal in das SVN packen.

CA Dirk

von Hans (Gast)


Lesenswert?

@Dirk

herzlichen Dank für die Firmeware von heute nacht um 0:50 .. telnet 
reagiert jetzt richtig und im Browser wird 403 File not found! 
angezeigt. Die Reaktionszeiten sind so wie ich es erwartet hatte schön 
zügig.

Was muss ich jetzt im Browser eingeben, damit ich die von dir 
vorkonfigurierten Seiten aufrufen kann?

Gruß Hans

von Dirk B. (sharandac)


Lesenswert?

@Hans

Wenn du das ADDON hast brauchst du nur die Dateien die in der. Zip oder 
im SVN liegen unter SD-CARD auf die kopieren und fertig. Wenn kein ADDON 
vorhanden ist wird ein eigenes .hex benötigt wechelches man sich selber 
bauen kann wenn ich heute nacht die Sourcen aktualisiere.

CA Dirk

von Hans (Gast)


Lesenswert?

@Dirk,

Herzlichen Dank noch mal für deine Mühe rund um unsere Fragen und 
natürlich auch für das ganze Projekt, tolle Arbeit.

Mit der SD Karte und den passenden Dateien drauf funkts jetzt so wie wir 
uns das vorgestellt haben.

DANKE Hans

von Dirk B. (sharandac)


Lesenswert?

@Hans

gerne gemacht. Aber die Testfirmware von heute Nacht ist nicht stable, 
da sie noch kleine Fehler im Tcp-Stack enthält die ich letzte Nacht noch 
ausgebügelt habe im Zusammenhang mit den Änderungen.

CA Dirk

von Dirk B. (sharandac)


Lesenswert?

Salut ...

Die neue Version liegt auf dem SVN, die .zip Dateien sind auch auf den 
aktuellen Stand der Dinge.

CA Dirk

von Carsten M. (monte70)


Lesenswert?

Hallo, was mir noch aufgefallen ist.

Ich habe also auch nochmal neu übersetzt, und gestartet. Danach kein 
zugriff auf die IP-Adresse bzw. dyndns Adresse. ?? -> Meine FritzBox 
steht auf DHCP und hat einen zweiten OpenMCP eingetragen. Nach löschen 
aus der FB und Konfiguration des OpenMCP auf die Richtige IP geht bei 
mir alles.

XP (SP3), Realtek RTL8169/8110 Family Gigabit

Gruss Carsten

von Dirk B. (sharandac)


Lesenswert?

@Carsten,

schließe ich daraus das bei dir DHCP nicht richtig geht ?

CA Dirk

von Carsten M. (monte70)


Lesenswert?

@Dirk

Nein das glaube ich nicht, meine Fritzbox kommt da glaube ich etwas aus 
dem Tritt. In der FB ist der OpenMCP fest mit seiner Portfreigabe 
eingetragen, wenn ich neu übersetzt habe und starte hat die FBox eine 
neue IP vergeben.

Also Achtung beim einschalten -> IP Adresse überprüfen

LG

von Otto (Gast)


Lesenswert?

Hast Du eine neue MAC Adresse eingestellt?

von Karl albert L. (karleido)


Lesenswert?

Hallo,

nur zur Info: Der Microcontroller ATMEGA1284P-PU ist bei Pollin wieder 
lieferbar.

Gruß
Karl Albert

von Frank K. (afauer)


Lesenswert?

Hallo,

ich habe mir die aktuellen Sourcen von openMCP aus dem SVN gezogen und 
bin über die Dateien:
1
./system/net/n_buffer.h
2
./system/net/n_buffer.c
gestolpert. Kann jemand bestätigen, dass diese Dateien für das Projekt 
nicht benötigt werden?

Frank

von Dirk B. (sharandac)


Lesenswert?

@Frank,

ja, die Dateien werden "noch" nicht benötigt, aber damit sie nicht 
verloren gehen sind sie mit im SVN.

von ATXMEGA Board 2 user (Gast)


Lesenswert?

Hallo,

gibt es hier oder im web eine Diskussion über OpenMCP in Verbindung mit 
dem ATXMEGA2 Board. Habe mir OpenMCP installiert und noch einige 
Probleme.
 Die SD Karte wird nach einiger Zeit nicht mehr gebootet und nur neues 
aufkopieren der Dateien hilft dann noch (möglicherweise ein 
Hardwarefehler). Im modul gpio_core.c werden die Ausgänge eingelesen 
anstatt der Eingänge.

von Dirk B. (sharandac)


Lesenswert?

@Gast,

nein gibt es nicht, da sich bis jetzt auch noch keiner dazu geäußert hat 
was geht und was nicht.

Mit der SD-Karte ist das so ein leidiges Thema das es mal anzupacken 
gilt.
Zu den GPIO, da bin ich noch dabei, da ich darüber gestolpert bin das 
die Eingänge, namentlich die Tasten, gegen Low schalten aber keine 
Pullups besitzen. Ich muss mir dazu noch ein Interface ausdenken wie man 
generisch die Pullups einschaltet auf dem Xmega und dem mega über das 
gleiche Interface. Aber da ich jetzt meine freien Tage genieße werde ich 
wohl ein bisschen weiter machen bei OpenMCP.

CA Dirk

von Michael (Gast)


Lesenswert?

Hallo,

erst mal ein herzliches Dankeschön an Dirk, dass wir an dem tollen 
openMCP-Projekt teilhaben dürfen. Dieses Projekt beeindruckt mich 
wirklich.

In der Vergangenheit habe ich ein bischen Erfahrung mit dem Arduino 
gemacht, die erweiterten Möglichkeiten von openMCP gefallen mir jedoch 
besser.

Ich habe openMCP auf einem AVR-NET IO Board mit Hilfe der Dokus soweit 
ans Laufen gebracht.


Ich versuche hinzukriegen, dass das Board Schaltzustände, Messerte 
(1-Wire) und so periodisch (z.B. jede Stunde) an ein Formular (auf einem 
beliebigen Webserver) mit GET übergiebt. Dort kann man dann fein alles 
in einer DB ablegen. Wer kann mich hier mal in die richtige Richtung 
schubsen? Wo muss ich ansetzen? Meine C-Kenntnisse sind recht 
bescheiden, aber ich bin lernwillig.

Freue mich über jede Anregung. Außerdem würde ich gerne zur Diskussion 
stellen, ob man eine solche Funktionalität nicht korrekterweise über 
einen vornehmen Webservice (SOAP) realisieren sollte.

Grüße
Michael

von ATXMEGA Board 2 user (Gast)


Lesenswert?

Dirk Broßwick schrieb:
> Zu den GPIO, da bin ich noch dabei, da ich darüber gestolpert bin das
>
> die Eingänge, namentlich die Tasten, gegen Low schalten aber keine
>
> Pullups besitzen.

Ich habe zunächst mal die 4 Taster in der gpio_in init Funktion mit dem 
Pullup versehen, ist aber nicht elegant. Eine Lösung ähnlich der 
LED(Tafel) wäre wahrscheinlich die beste. Ich finde das OpenMCP auch 
wirklich gut und fände es gut wenn noch einige mehr hier ihre 
Erfahrungen posten würden.

von Mx W. (mxwx)


Lesenswert?

Michael schrieb:
> Ich versuche hinzukriegen, dass das Board Schaltzustände, Messerte
> (1-Wire) und so periodisch (z.B. jede Stunde) an ein Formular (auf einem
> beliebigen Webserver) mit GET übergiebt. Dort kann man dann fein alles
> in einer DB ablegen. Wer kann mich hier mal in die richtige Richtung
> schubsen? Wo muss ich ansetzen? Meine C-Kenntnisse sind recht
> bescheiden, aber ich bin lernwillig.
>
> Freue mich über jede Anregung. Außerdem würde ich gerne zur Diskussion
> stellen, ob man eine solche Funktionalität nicht korrekterweise über
> einen vornehmen Webservice (SOAP) realisieren sollte.

Hast du schon in Erwägung gezogen sowas mit Cacti zu erledigen? Ich habe 
vor ein paar Wochen ca. 2h (inkl. Einarbeitung) gebraucht und habe dann 
ein System laufen gehabt, dass etwas über 30 Werte von verschiedenen 
openMCP Boards pollt und visualisiert. Konkret gemacht habe ich das über 
die in openMCP schon vorhandenen Funktionen und ein bißchen Perl 
dahinter:

1.) Webseite von openMCP (Eingänge, Ausgänge, Sensoren, ...) anfordern
2.) Webseite mit Perl-Script parsen, die geparsten Werte entsprechend 
für Cacti Poller-Scripte aufbereiten und ausgeben.
3.) Perl-Scripte aus Cacti heraus zyklisch aufrufen lassen
4.) sich über schöne RRD Grafiken freuen.

Den ganzen Rest kannst du dann aus den Round-Robin-Datenbanken beliebig 
generieren, zur Not ein paar separate Perl-Scripte die dir deinen 
Webservice realisieren wenn du über das was Cacti alles kann noch mehr 
benötigst.

Michael

von Mx W. (mxwx)


Angehängte Dateien:

Lesenswert?

Ich habe in den letzten Tagen mal ein (weiteres) openMCP kompatibles
Board erstellt, dass meine Anforderungen etwas besser erfüllt als die
bisherigen Lösungen. Mein Hauptanliegen war Kommunikationsfähigkeit auf
hohem Niveau (Ethernet, RS232) und darüber hinaus möglich große
Flexibilität und einfache Erweiterbarkeit. Die Grunddaten sind wie
folgt:

- Boardgröße 100*80
- einseitiges Layout (eine Brücke, ich hatte keinen Bock mehr weiter zu
routen)
- alles mit bedrahteten Bauteilen um die Grobmotoriker unter uns
Hobbylötern ausreichend ins Projekt mit einbinden zu können ;-). Ich
mache demnächst aber auch mal eine Variante in SMD.
- läuft grundsätzlich auch mit einem ATMega 32, empfohlen wird aber ein
644er
- Ports A,C und D sind auf Pfostenleisten an den Platinenrand geführt
zur Verwendung mit Flachbandkabel an Pfostensteckern oder zur einfachen
Montage von Daughterboards. An Pin 1 und 2 von Port D hängt noch der
Max232 für RS232 (wie beim AVR-Net-IO). Wenn man die UART nicht benötigt
ist Port D komplett nutzbar - einfach MAX232 nicht bestücken.
- Die Daughterboards (1* 100x80 oder 2 * 50x80) können auch auf
Lochraster aufgebaut werden, Pfostenleisten stehen im 2,54er Raster
- An Port B hängt im Wesentlichen der ENC26J60 für Ethernet und der ISP
Connector (wie beim AVR-Net-IO auch).
- Netzteil ist für den Betrieb mit LowDrop Reglern ausgelegt. Im
Prototyp steckt noch ein 7805 (deshalb auch der Kühlkörper auf dem
Bild). Für den 3,3 Volt Zweig ist schon ein LF33 (pinkompatibel zu 78xx
Reglern) verbaut. Der 5 Volt Regler kann auch eins zu eins gegen z.B.
einen LF55 LowDrop ausgetauscht werden.
- Die Dallas 1Wire Anbindung funktioniert wie auch auf dem AVR Net IO
über die 3polige Pfostenleiste.
- Im Gegensatz zum AVR-Net-IO habe ich dem Board mal einen separaten
Resettaster spendiert - gefällt mir persönlich einfach besser.
- openMCP läuft ohne Änderungen mit den Einstellungen für das AVR-Net-IO
- für den Ethernetanschluss habe ich mich für den Mag-Jack SI-60024-F,
wegen günstiger Verfügbarkeit z.B. bei CSD, entschieden. Ich denke aber
im Moment noch darüber nach ggf. eine Möglichkeit zum "jumpern" auch für
andere Pinouts für die Modular-Buchsen vorzusehen.

Vielleicht fällt ja noch dem ein oder anderen etwas ein was als nettes
Feature mit ins bestehende Konzept (kommunikativ, einfach erweiterbar
und flexibel) passt, dass würde ich dann noch kurzfristig mit einbauen.

Zur Zeit muss ich eh noch ein paar Änderungen am Layout machen - habe
die LED's etwas dämlich verdrahtet.

Achso, Stromaufnahme liegt voll bestückt bei ca. 200 mA.


BG

Michael

von Michael (Gast)


Lesenswert?

@MXWX
Danke für Deine Antwort. Aber Dein Lösungsvorschlag wird das Board 
gepollt. Das genau möchte ich nicht. Das Board soll periodisch 
(cron-Job) an ein get-Formular senden...

Viele Grüße
Michael

von Mx W. (mxwx)


Lesenswert?

Michael schrieb:
> Das Board soll periodisch
> (cron-Job) an ein get-Formular senden...

das würde man grundsätztlich auch hinbekommen, die Voraussetzungen in 
openMCP sind ja vorhanden durch die scriptfähigkeit des cronmodules. 
warum stört dich denn das pollen?

bg

michael

von Michael (Gast)


Lesenswert?

@Michael (MX WX)

Nun ja, eine Website parsen geht zwar, fine ich aber von der 
"Architektur" unschön. Außerdem möchte ich Portforwarding vermeiden 
(auch wenn es technisch einfach ist). Der Server steht bei einem Hoster 
und da soll das Board halt schön seine Werte zyklisch hin abliefern.
Am elegantesten wäre sicher ein Webservice (SOAP), aber da kenne ich 
mich (noch) nicht so gut aus. Also würde es ein GET-Formular auch erst 
mal tun.

Übrigens ein schönes Board welches Du da gebaut hast. Ich spiele auch 
mit dem Gedanken das Pollin-Board mal ein bischen abzustrippen und nur 
das (für mich) allernötigste draufzulassen: 644, Netzwerk, 
Spannungsregelung für 3V (Versorgung über 5V Steckernetzteil) und 2 
RJ11-Buchsen für 1-Wire Sensoren....

Viele Grüße
Michael

von Mx W. (mxwx)


Lesenswert?

Michael schrieb:
> Am elegantesten wäre sicher ein Webservice (SOAP)

Ich persönlich finde SOAP da eher hinderlich, insbesondere unter dem 
Aspekt Aufwand-Nutzen-Relation. Wenn du wirklich echtes SOAP machen 
willst mußt du ja auch noch richtig von Seiten des Protokolls nachlegen. 
Wäre mir persönlich dafür warscheinlich zu aufwendig. Ich bin im 
MC-Bereich gerne so minimalistisch wie möglich unterwegs - ansonsten 
kann ich ja gleich was "embbedetes" mit einem ordentlichen linux drauf 
nehmen. Wie dem auch sei - meine Philosophie weiter verfolgend, deine 
Bedenken bzgl. des Portforwardings aber berücksichtigend ;-) könnte ich 
mir eine "Zwischenschicht" in Form eines Scripts das hausintern läuft 
(kein echtes SOAP ;-) ) vorstellen. Das Script fragt die Daten auf dem 
MC ab und schickt diese dann auf den externen Server, hier würde ich 
dann aber das Gefrickel (welches du ja schon intern hättest) mit GET 
extern sein lassen und direkt in eine DB schreiben aus der dann der 
Webserver die Grafiken macht. Hier würde ich im übrigen schon wieder 
cacti vorschlagen.

BG

Michael

von Michael (Gast)


Lesenswert?

@michael (mxwx)
Sicher auch eine interessante Variante.
Aber das ist nicht das was ich möchte.

Meine Frage ging eher in die Richtung wie sieht ein erster Lösungsansatz 
aus, damit ich openMCP so erweitere, dass es periodisch Daten (z.B. 
Werte von 1-Wire-Sensoren) an ein get-Formular überträgt. Das mit SOAP 
ist vielleicht noch Zukunftsmusik...
Sicher gibt es Alternativen zu dieser Vorgehensweise, aber erst mal 
würde ich gerne diesen Weg beibehalten...
Es ist ja eigentlich alles da: cron, Netzwerkanbindung und 1-Wire.


Hat jemand eine Idee, wie man das am besten anfängt?

Viele Grüße
Michael

von Ethan Arnold (Gast)


Lesenswert?

Im Prinzip bräuchtest Du ein Telnet-Client (genauer gesagt es muß eine 
TCP Verbindung geöffnet werden, viel mehr ist Telnet nicht).

Ein Beispielablauf wäre dann:
telnet www.deinwebserver.de 80 (port 80 = http)
GET /verzeichnis/deinscript.php?variable1=wert1&variable2=wert2

oder so ähnlich... wäre dann im Endeffekt sowas wie diese url 
aufzurufen:
http://www.deinwebserver.de/verzeichnis/deinscript.php?variable1=wert1&variable2=wert2

Gruß,
Ethan

von Mx W. (mxwx)


Lesenswert?

Michael schrieb:
> Meine Frage ging eher in die Richtung wie sieht ein erster Lösungsansatz
> aus, damit ich openMCP so erweitere, dass es periodisch Daten (z.B.
> Werte von 1-Wire-Sensoren) an ein get-Formular überträgt.

falls dir der crondienst nicht gefällt schau mal hier, da wurde 
letztlich ein http-client implementiert

http://son.ffdf-clan.de/include.php?path=forumsthread&threadid=868

von Michael (Gast)


Lesenswert?

Hallo,

@Mx Wx (mxwx)
Danke für den Tipp. Das sieht interssant aus, werde mich mal einlesen...

Viele Grüße
Michael

von xana (Gast)


Lesenswert?

Welche   IP   ist  Standat
danke in voraus

von Mx W. (mxwx)


Lesenswert?

Die die in der config.h ziemlich am Anfang steht, die Datei findest du 
nach dem entpacken der Sourcecodes im Stammverzeichnis.

Ich finde es macht Sinn sich mit dem (oder ähnlichen) Projekt(en) an 
sich ein bißchen auseinander zu setzen. Ganz unabhängig davon welche 
eigenen Fähigkeiten/Voraussetzungen (Programmierung, Elektronik, etc) 
man mitbringt. Der eigentliche Trick bei solchen Projekten ist meines 
Erachtens, dass man seine eigenen Fähigkeiten ausbaut, festigt oder auch 
auffrischt. Wenn man auf der Suche nach einen out-of-the-box 
funktionierenden System ist, werden die persönlichen Erwartungshaltungen 
hier warscheinlich enttäuscht. Es ist im weitestens Sinne ein 
unspezialisiertes System welches großen Potential in Richtung 
Spezialisierung hat, da bleibt es nicht aus, dass man zur Lösung seines 
spezifischen Problems noch ordentlich Gehrinschmalz, Zeit, Lust und 
Laune investieren muss. Was ich letztlich damit sagen will, selbst ist 
der Mann oder die Frau. Hier geht es nicht darum fertige Lösungen zu 
erhalten sondern durch eigenes Verstehen, Ausprobieren und Erweitern mit 
Spass Lösungen zu entwickeln. Voraussetzung dafür ist meines Erachtens, 
dass man zumindest willens und in der Lage sein sollte die ganz 
grundlegenden Funktionsprinzipien wie die zentrale Steuerdatei 
(config.h) aufzufinden und schonmal erste eigene Experiment angestellt 
zu haben. Wenn das schwer fällt gibt es entweder ein Problem mit der 
Grundmotivation oder es fehlt noch an ganz grundsätzlichem Verständnis 
für die Funktionsweise von solchen Systemen (Hardware, Software, etc) - 
dann sollte man besser erstmal weiter vorne anfangen und später hier 
weiter machen. Nur meine bescheidene Meinung.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.