Arduino Mega 2560 + Ethernetshield

Begonnen von ThomasL, 14 April 2013, 21:08:02

Vorheriges Thema - Nächstes Thema

ThomasL

Hallo zusammen,

ich mache meine ersten Geheversuche mit einem Arduino Mega2560.
Ich habe wie im Wiki beschrieben das "arduino-configurable-ethernet" geladen.
Ethernet-Adresse angepasst.
Kompelieren und laden hat auch alles geklappt.
Jetz steht hier aber noch folgendes
ZitatEin MEGA256 z.B. benutzt einen anderen Pin als als SS (Slave select) zur Kommunikation mit dem Ethernet-modul.
Man muss der Firmata im Setup mitteilen, welche Pins zu Ignorieren sind, damit es keine Wechselwirkungen zwischen Firmata und Ethernetlibrary gibt.
Wie mache ich das??
Welchen PIN nutzt der MEGA2560 und wo musss ich das anpassen?

Es ist für mich alles Neuland und bin sehr dankbar für Eure Hilfe.

Danke
Thomas

ntruchsess

Eigentlich sollte beim Arguino Mega 256 nichts zu ändern sein, das ist mittlerweile im IS_PIN_SPI-makro in der Boards.h der Firmata-library enthalten. Ob das Makro tatsächlich funktioniert kann ich aber (mangels eigenem MEGA256) nicht sagen.

Ansonsten ist der Mega256 hier dokumentiert: http://arduino.cc/en/Main/ArduinoBoardMega2560
dort findest Du:
'SPI: 50 (MISO), 51 (MOSI), 52 (SCK), 53 (SS). These pins support SPI communication using the SPI library. The SPI pins are also broken out on the ICSP header, which is physically compatible with the Uno, Duemilanove and Diecimila.'

In der setup-methode des sketches (arduino-configurable-ethernet / ConfigurableEthernetClient Zeile 180) findest Du:

...
    if (IS_PIN_SPI(i) || 0==i || 1==i || 4==i) {
      Firmata.setPinMode(i, IGNORE);
    }
...

hier werden die Pins 0,1,4 zusätzlich zu den vom IS_PIN_SPI-makro angegebenen als zu ignorieren markiert (0 und 1 sind die serielle/USB-schnittstelle beim UNO, 4 ist SlaveSelect für den SD-card-reader beim originalen EthernetShield). Mit dem im Boards.h definierten IS_PIN_SPI-makro sollten beim Mega256 die Pins 50,51,52 und 53 als zu ignorieren gekennzeichnet werden. Wenn auf dem EthernetShield SS nicht nur auf dem ICSP-header sondern auch an Pin10 angeschlossen ist, dann müsstest Du diesen Pin 10 (mit einem zusätzlichen '|| 10==i') der if-bedingung hinzufügen.

Ich hoffe das hilft Dir weiter.

Ich würde aber empfehlen erst mal Firmata über USB auszuprobieren, da gibt's keine Netzwerktechnischen Fallstricke und man kann schön mit der FRM-konfiguration rumspielen. Wenn das läuft kann man sich beim Umstieg auf EthernetClientFirmata sicher sein, die FRM-konfig schon mal passt. Ist in der fhem.cfg ja nur eine kleine Änderung der FRM define Zeile...

Gruß,

Norbert
while (!asleep()) {sheep++};

ThomasL

Hallo Norbert,

OK danke für die Infos.
Ich denke, dass ich alles so lassen kann.
Ich konnte noch nicht so viel testen,weil mir noch die Relaisplatine fehlt.
Aber das Steuern von Pin 13 (LED) klappt.
Ich kann die LED über FHEM ein- und ausschalten.

Weil mir aber noch die Relaisplatine fehlt, habe ich den Arduino wieder abgespöselt.
Ich hatte dann heute morgen einen Absturz von FHEM.
Ich hatte die FRM define Zeilen noch in der Config von FHEM stehen lassen.
Erst nach dem ich diese auskommentiert habe, startet FHEM wieder.
Kann es sein das es zu einem solchem Absturz kommt, weil das FRM-Gerät gesucht wird.
FHEM läuft bei mir auf einer Fritzbox 7390.

Danke
Thomas

ntruchsess

Hallo Thomas,

eigentlich sollte FRM problemlos damit klar kommen, wenn der Arduino nicht da ist. Bei der Anbindung über Ethernet (EthernetClientFirmata) sowieso - da macht FRM einen ServerPort auf und wartet, das der Arduino sich verbindet. Da ist es prinzipiell eigentlich egal wie lange FRM warten muss.
Beim Anschluss über USB ist das ähnlich, da prüft FRM per ReadyFn in der fhem-main-loop zyklisch, ob das Device da ist, der Aufruf kehrt aber bei Nichtvorhandensein des Devices sofort ohne etwas zu tun zurück. Gerade die Möglichkeit den Arduino ab- und wieder anstecken zu können war mir selbst recht wichtig - falls es da doch irgendwie klemmen kann, würde ich das gerne rauskriegen. Gab's denn Fehlermeldungen im Log beim versuchten Neustart?

Gruß,

Norbert
while (!asleep()) {sheep++};

ThomasL

Hallo Norbert,

da steht leider nicht viel:
"Including fhem.cfg"
danach war dann Ende.
Verbose steht auf 3

Hatte folgendes eingefügt und jetzt auskommentiert:

#define FIRMATA FRM 3030 global
#define Firmata_OUT FRM_OUT 13
#attr Firmata_OUT room Rollladen


Grüße
Thomas