Hauptmenü

Firmata+Arduino

Begonnen von Rohan, 31 Januar 2013, 14:31:12

Vorheriges Thema - Nächstes Thema

ntruchsess

Der zum Flashen nötige Autoreset wird beim Arduino über das DTR-signal erzeugt (über den 0.1µF Kondensator C2 auf dem von Dir verlinkten Schaltplan). Alternativ kann man unmittelbar vor dem Flashen den Arduino auch manuell resetten.

Wenn sich der Arduino eine DHCP-addresse abholt, dann funktioniert SPI. Wenn man eine fixe IP benutzt kann man UDP abstellen (in uipethernet-conf.h), dann hat man ca. 5kb mehr Flash (und natürlich auch mehr RAM) frei für Firmata-features. Wenn man auschließlich 1-Wire benutzen will ist das natürlich kein Thema, das sollte auch mit DHCP passen, ansonsten muss man halt probieren, was geht (Man kann zwar mit 'avr-size' schauen, was wieviel Speicher initial belegt ist. Ob der Heap dann tatsächlich reicht kann avr-size allerdings nicht vorhersagen). Wenn der Heap nicht reicht stürzt der Arduino in der Regel einfach ab oder startet neu.

Gruß,

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

blueberry63

Hallo Norbert,

nachdem ich es schon ohne große Probleme geschafft hatte, einen Arduino Uno+Ethernet Shield WizNet W5100 mit Configurable Firmata ins Netz zu bringen, verzweifle ich an Arduino Nano V3 + Ethernet Shield ENC28J60. Könntest Du mal kurz schauen, ob meine Anpassung in dem bekannten Code-Abschnitt in Ordnung ist?


  // Network Firmata communicates with Ethernet-shields over SPI. Therefor all
  // SPI-pins must be set to IGNORE. Otherwise Firmata would break SPI-communication.
  // add Pin 10 and configure pin 53 as output if using a MEGA with Ethernetshield.
  // No need to ignore pin 10 on MEGA with ENC28J60, as here pin 53 should be connected to SS:
#ifdef NETWORK_FIRMATA
  // ignore SPI and pin 4 that is SS for SD-Card on Ethernet-shield
  for (byte i=0; i < TOTAL_PINS; i++) {
    if (IS_PIN_SPI(i)
        || 10==i
        // || 10==i //explicitly ignore pin 10 on MEGA as 53 is hardware-SS but Ethernet-shield uses pin 10 for SS
        ) {
      Firmata.setPinMode(i, IGNORE);
    }
  }
// pinMode(PIN_TO_DIGITAL(53), OUTPUT); configure hardware-SS as output on MEGA
  pinMode(PIN_TO_DIGITAL(10), OUTPUT); // switch off SD-card bypassing Firmata
  digitalWrite(PIN_TO_DIGITAL(4), HIGH); // SS is active low;


Ansonsten habe ich die beiden "Dinger" nach folgendem Schema verbunden:
http://arduino.alhin.de/index.php?n=24

Gruß
Blueberry63
FHEM auf BBB mit Wheezy: 1x CUL_HM_HM_SCI_3_FM, 1x INSTAR CAM3010, 1x HM-LC-SW1-PL2, 1x HM-LC-Bl1PBU-FM, 1x HM-Sen-MDIR-O, Viessmann Heizung, Gaszähler via GPIO, Klingel via HM-LC-Bl1PBU-FM an FBox, Mailcheck, AVR, XBMC, NanoCUL 433+668 an Raspi per Ethernet, Funksteckdosen (Pollin, IT), Automower

blueberry63

...noch schnell eine Frage hinterher: kann/muss man sich irgendeine MAC-Adresse für das Ethernet Shield ausdenken? Es ist nämlich keine MAC Adresse aufgedruckt.

Gruß
Blueberry
FHEM auf BBB mit Wheezy: 1x CUL_HM_HM_SCI_3_FM, 1x INSTAR CAM3010, 1x HM-LC-SW1-PL2, 1x HM-LC-Bl1PBU-FM, 1x HM-Sen-MDIR-O, Viessmann Heizung, Gaszähler via GPIO, Klingel via HM-LC-Bl1PBU-FM an FBox, Mailcheck, AVR, XBMC, NanoCUL 433+668 an Raspi per Ethernet, Funksteckdosen (Pollin, IT), Automower

ntruchsess

passt soweit eigentlich. Darauf kannst Du aber verzichten (das ist für den SD-Card-reader des originalen WIZ5100-ethernet shield):

'digitalWrite(PIN_TO_DIGITAL(4), HIGH); // SS is active low;'

den '|| 10==i' braucht's eigentlich auch nicht (der sollte beim Nano im IS_PIN_SPI(i)-macro mit drin sein), schadet aber auch nix.
Mac-addresse musst Du Dir ausdenken (oder lassen, was im Sketch steht). Keine besonderen Anforderungen außer dass sie in Deinem eigenen Segment (d.h. alles was physikalisch am gleichen Switch, Hub oder Router hängt) eindeutig sein muss.

Aber wahrscheinlich hast Du einfach zu viele Features gleichzeitig aktiviert. I2C und 1Wire passen z.B. nicht gleichzeitig mit UIPEthernet ins RAM eines ATMega328. Kann man zwar noch flashen, stürzt dann aber mangels ausreichend Heap sofort ab. Also erst mal sparsam anfangen und nur die Dinge, die Du wirklich nutzen willst gleichzeitig aktivieren. Wenn's geht, dann eine fixe IP verwenden (kein DHCP), dann kannst Du UDP in der uipethernet-conf.h abstellen - das spart ca. 5kb Flash und ein paar 100 Bytes RAM.

Gruß,

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

blueberry63

mhh, dann habe ich ja eigentlich alles richtig gemacht. Du hast nicht zufällig  ::)  einen Minimal-Sketch für "Arduino Nano V3 + Ethernet Shield ENC28J60", den man zum Testen der Netzwerkanbindung nehmen kann? Wäre sicher auch für andere interessant.

Alternativ könnte ich meinen Sketch hier posten.

Gruß
Blueberry63
FHEM auf BBB mit Wheezy: 1x CUL_HM_HM_SCI_3_FM, 1x INSTAR CAM3010, 1x HM-LC-SW1-PL2, 1x HM-LC-Bl1PBU-FM, 1x HM-Sen-MDIR-O, Viessmann Heizung, Gaszähler via GPIO, Klingel via HM-LC-Bl1PBU-FM an FBox, Mailcheck, AVR, XBMC, NanoCUL 433+668 an Raspi per Ethernet, Funksteckdosen (Pollin, IT), Automower

ntruchsess

probier doch erst mal, ob die Beispiele der UIPEthernet-library funktionieren um sicher zu gehen, dass mit der Hardware alles passt.
while (!asleep()) {sheep++};

blueberry63

Hallo Norbert,

sorry, ich wollte einfach zu schnell zu viel. Ich werde morgen nochmal "klein" anfangen und mit den UIPEthernet-libraries testen.

Gute Nacht
Blueberry63
FHEM auf BBB mit Wheezy: 1x CUL_HM_HM_SCI_3_FM, 1x INSTAR CAM3010, 1x HM-LC-SW1-PL2, 1x HM-LC-Bl1PBU-FM, 1x HM-Sen-MDIR-O, Viessmann Heizung, Gaszähler via GPIO, Klingel via HM-LC-Bl1PBU-FM an FBox, Mailcheck, AVR, XBMC, NanoCUL 433+668 an Raspi per Ethernet, Funksteckdosen (Pollin, IT), Automower

Tobias

#292
bei einem "MinimalSketch" ist auch noch wichtig zu wissen, das die erste Kompilierung fehl schlägt :(
Man muss erst "oberhalb" des 1wire-Includes alles aktiviert lassen und nach der Kompilierung (aber abbruch wegen zu großem Sketch) kann (muss) man erst die nicht benötigten Features  herausnehmen.

Mein Sketch für den Arduino Mini Pro (Atmega 328p) mit DHCP, UIP-Library und 1wire ist gute 29kb groß. Passt also gerade so in die 32kb Flash.
Wenn ich den zum fliegen bekommen habe wechsel ich auf ConfigurableFirmata mit DS2482 Unterstützung...

Edit: Habe den Wiki-Artikel mal angepasst

Edit2: wird beim ENC in unserem 1wireKontext eigentlich der Reset- und INT-Pin benötigt? Siehe hier.
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

ntruchsess

Zitat von: Tobias am 14 Mai 2014, 07:15:50
Edit: Habe den Wiki-Artikel mal angepasst
danke :-)

Zitat von: Tobias am 14 Mai 2014, 07:15:50
Edit2: wird beim ENC in unserem 1wireKontext eigentlich der Reset- und INT-Pin benötigt? Siehe hier.
nein.
while (!asleep()) {sheep++};

T.ihmann

#294
Aktuell habe ich folgendes Problem: Ich habe den Sketch mit ENC28J60 am laufen. Daran hängen 3 DS18B20 und ein Relaisboard. Die Temperaturen lassen sich auslesen, die Relais schalten. Aber mein Problem ist, daß nach einiger Zeit (ungefähr einmal pro Tag) sich FHEM aufhängt und nicht mehr erreichbar ist. Die letzte Fehlermeldung im Log ist meistens:

3030 disconnected, waiting to reappear

Man muß dann FHEM neu starten, Problem ist dann allerdings daß er Firmata nicht mehr findet, der Arduino ist im Status listening. Erst wenn man den Arduino mit Firmata neu startet, läuft alles wieder. Problem ist, den Arduino kann man ja schlecht aus der Ferne starten (aus FHEM ist er ja nicht erreichbar, auf Ping reagiert er auch nicht mehr).

T.ihmann

@blueberry63: Wenn du brauchst, könnte ich Dir eine Sketch für den Arduino Nano mit OneWire und Digital In/out zur Verfügung stellen, DHCP ist aus Platzgründen nicht drin. Funktioniert soweit problemlos - bis auf mein oben geschildertes Problem mit dem Verlieren der Verbindung zu FHEM

ntruchsess

Zitat von: T.ihmann am 14 Mai 2014, 09:15:39
... und ein Relaisboard.
[...]
3030 disconnected, waiting to reappear
[...]
auf Ping reagiert er auch nicht mehr.

Du bist leider nicht der erste bei dem der Arduino wg. Störungen vom Relais-board abschmiert. Die Relais müssen hinreichend funkentstört und möglichst potentialfrei über Optokoppler angebunden sein. Dann die Relais nicht zu nah an den Arduino positionieren (hochfrequente Störungen gehen ja auch durch die Luft) und ein Verbindungskabel mit Ferritring zum entstören verwenden.
Und/oder dem Arduino noch einen Watchdog spendieren.

Gruß,

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

blueberry63

Zitat
...noch schnell eine Frage hinterher: kann/muss man sich irgendeine MAC-Adresse für das Ethernet Shield ausdenken? Es ist nämlich keine MAC Adresse aufgedruckt.

Hat dazu jemand eine Antwort.

@T.ihmann
Du könntest mir den Sketch ja mal posten, dann habe ich noch eine Vergleichs-Möglichkeit

Danke
Blueberry63
FHEM auf BBB mit Wheezy: 1x CUL_HM_HM_SCI_3_FM, 1x INSTAR CAM3010, 1x HM-LC-SW1-PL2, 1x HM-LC-Bl1PBU-FM, 1x HM-Sen-MDIR-O, Viessmann Heizung, Gaszähler via GPIO, Klingel via HM-LC-Bl1PBU-FM an FBox, Mailcheck, AVR, XBMC, NanoCUL 433+668 an Raspi per Ethernet, Funksteckdosen (Pollin, IT), Automower

T.ihmann

MAC Adresse kann man sich frei ausdenken...

ntruchsess

Zitat von: blueberry63 am 14 Mai 2014, 11:04:30
Hat dazu jemand eine Antwort.

Lesen bildet:
Zitat von: ntruchsess am 13 Mai 2014, 22:02:47
Mac-addresse musst Du Dir ausdenken (oder lassen, was im Sketch steht). Keine besonderen Anforderungen außer dass sie in Deinem eigenen Segment (d.h. alles was physikalisch am gleichen Switch, Hub oder Router hängt) eindeutig sein muss.
while (!asleep()) {sheep++};