Arduino Forum

International => Deutsch => Topic started by: power-dodge on Dec 25, 2017, 07:59 am

Title: Arduino Mega mit W5100 funktioniert nicht
Post by: power-dodge on Dec 25, 2017, 07:59 am
Hallo,

würde gern den W5100 mit dem Mega zum laufen bekommen.

Das Problem ist das ich diese Pins dafür nutzen möchte:

PIN 50 = MISO
PIN 51 = MOSI
PIN 52 = SCK

finde grad nicht wo ich diese definieren kann...

Und dieses Sketch würde ich gern nutzen:

Code: [Select]
#include <SPI.h>
#include <Ethernet.h>

#include "Mudbus.h"

Mudbus Mb;
//Function codes 1(read coils), 3(read registers), 5(write coil), 6(write register)
//signed int Mb.R[0 to 125] and bool Mb.C[0 to 128] MB_N_R MB_N_C
//Port 502 (defined in Mudbus.h) MB_PORT

void setup()
{
  uint8_t mac[]     = { 0x90, 0xA2, 0xDA, 0x00, 0x51, 0x06 };
  uint8_t ip[]      = { 192, 168, 178, 70 };
  uint8_t gateway[] = { 192, 168, 178, 1 };
  uint8_t subnet[]  = { 255, 255, 255, 0 };
  Ethernet.begin(mac, ip, gateway, subnet);


  //PWM Frequenz
  //0×01  1      31.374 KHz
  //0×02  8      3.921 Khz
  //0×03  64     490.1 Hz            // default
  //0×04  256    122.5 Hz
  //0×05  1024   30.63 Hz
  //For Arduino NANO:
  //http://playground.arduino.cc/Main/TimerPWMCheatsheet
  //timer 0 (controls pin 13, 4)
  //timer 1 (controls pin 12, 11)
  //timer 2 (controls pin 10, 9)
  //timer 3 (controls pin 5, 3, 2)
  //timer 4 (controls pin 8, 7, 6)

  TCCR1A = (TCCR1A & 0xF8) | 0x01;
  TCCR0A = (TCCR0A & 0xF8) | 0x01;
  TCCR0B = (TCCR0B & 0xF8) | 0x01;
  TCCR2B = (TCCR2B & 0xF8) | 0x01;
 
 
  pinMode(9, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(3, OUTPUT);
}

void loop()
{
  Mb.Run();
 

 
  //D9 Timer1A
  analogWrite(9, Mb.R[3]);
  //D6 Timer0A
  analogWrite(6, Mb.R[2]);
  //D5 Timer0B
  analogWrite(5, Mb.R[1]);
  //D3 Timer2B
  analogWrite(3, Mb.R[0]);
 
 

}



Dieser Mega soll von Ip syscom gesteuert werden.
In dem Sketch müsste ich noch weiter Ausgänge Steuern per PWM.
Daher sind die 2-13 pins belegt...
Danach muss ich noch ein paar PIR´s einbinden.

Kriege grad aber das kleine W5100 net zum laufen.

Habt Ihr einen Tipp?

Danke euch schon mal!
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: uwefed on Dec 25, 2017, 09:18 am
Die SPI-Schnittstelle ist hardwareinplementiert und darum sind die Pins bekannt und werden in der Bibliothek automatisch definiert. Du brauchst aber zusätzlich pin 10 (und pin 4 für die SD-Karte falls eine verwendest).
Statt dem Pin 10 kannst Du jedes andere verwenden, Du mußt dann aber auf dem W5100 umlöten.

Grüße Uwe
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: power-dodge on Dec 25, 2017, 11:10 am
Hallo,

vielen Dank für die Antwort!

Sd Karte soll nicht benutzt werden.
Also bräuchte ich Pin10 nicht?

Wie bekomme ich den das Modul zum laufen?

Dankeschön
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: power-dodge on Dec 25, 2017, 11:13 am
Oder hab ich jetzt was falsch verstanden?

Ist es bekannt was man umlöten muss?
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: uwefed on Dec 25, 2017, 11:16 am
Hallo,

vielen Dank für die Antwort!

Sd Karte soll nicht benutzt werden.
Also bräuchte ich Pin10 nicht?

Wie bekomme ich den das Modul zum laufen?

Dankeschön
Die SD Karte hängt normalerweise an pin 4.

Welche W5100 Platine bzw Shield hast Du?

Grüße Uwe
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: combie on Dec 25, 2017, 12:05 pm
Egal was du tust, aber wenn du Hardware SPI nutzt, muss der SS Pin ein Output sein, oder zumindest dauerhaft auf HIGH liegen.

Quote
Das Problem ist das ich diese Pins dafür nutzen möchte:

PIN 50 = MISO
PIN 51 = MOSI
PIN 52 = SCK
Das ist kein Problem, sondern der Normalfall.
 :smiley-cool: Alles andere wäre ein Problem :smiley-cool:
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: power-dodge on Dec 25, 2017, 12:35 pm
Hallo,

der mini ist es ,

https://rover.ebay.com/rover/0/0/0?mpre=https%3A%2F%2Fwww.ebay.de%2Fulk%2Fitm%2F272952466045

Hab wie oben beschrieben die Pins angeschlossen.
Nur Eben noch GND an GND, 5V an 5V und Reset an Reset.

Glaube SS in am Pin  53 angeschlossen.
Muss man diesen noch irgendwo einstellen?
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: combie on Dec 25, 2017, 12:41 pm
Quote
Glaube SS in am Pin  53 angeschlossen.
Unsinn!

Du meinst sicherlich:
/CS(SS) des W5100 ist an Pin 53 angeschlossen

Denn SS des Mega ist Pin 53.
Immer, beim Mega.
Unveränderlich.


----

Die Ethernet Lib möchte gerne Pin 10 für /CS(SS des W5100) verwenden.
Aber dennoch MUSST du folgendes tun:
Quote
Egal was du tust, aber wenn du Hardware SPI nutzt, muss der SS(des Mega) Pin ein Output sein, oder zumindest dauerhaft auf HIGH liegen.
Dazu gibt es keine Alternative!
Keine Alternative!
No!
Nie und nimmer.
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: power-dodge on Dec 25, 2017, 12:47 pm
Auf dem Board von W5100 ist ein Pin SS der ist am Pin 53 angeschlossen.

Anschließen wollte ich es wie auf diesem Beispiel,

https://code-bude.net/2013/06/22/tutorial-arduino-mega-2560-mit-enc28j60-ethernetadapter-nutzen/

Nur ist es eben für nen anderen Adapter,  hab es auch versucht nach diesem Beispiel...

Ist es machbar?

Dankeschön
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: power-dodge on Dec 25, 2017, 12:50 pm
Wen Pin 10 auf  immer auf high sein muss, also auf dem weg zum Modul.
Kann ich da nicht 3 V drauf packen.

Gruß
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: Tommy56 on Dec 25, 2017, 12:58 pm
Warum schaust Du Dir nicht die Beispiele an, die bei Deiner Ethernet-Lib dabei sind und die Du in der IDE aufrufen kannst? Beispiele von anderen Libs funktionieren sehr selten.

Gruß Tommy
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: combie on Dec 25, 2017, 01:03 pm
Wen Pin 10 auf  immer auf high sein muss, also auf dem weg zum Modul.
Vorsicht:
DAS HABE ICH NICHT GESAGT!

Ich habe gesagt, und gemeint, dass die Ethernet Lib gerne Pin 10 verwenden möchte um den /CS(SS) des W5100 zu bedienen.

Und ich habe gesagt, dass SS Pin des Mega der Pin 53 ist.

Beweis:
> Serial.print(SS);
Ausgabe: 53

Dieser Pin muss dauerhaft auf Ausgang geschaltet werden, oder HIGH Potential haben, damit HardwareSPI nicht zwischendurch in den Slave Modus schaltet.
Das steht auch in der SPI Doku so drin.
Das steht auch im Datenblatt des ATMega2560 ganz klar und eindeutig so drin.

Also:
Wenn du das nicht tust, wirst du deinen Ethernet Adapter NICHT (zuverlässig) zum laufen bekommen.


Nachtrag:
Sehe gerade der Pin auf dem W5100 Adapter ist auch mit SS beschriftet.
/CS hätte ich erwartet.

Also:
Mache den Pin 53, also SS des Mega zum Output
Und schließe SS des W5100 Adapters an Pin 10 des Mega an.
Dann laufen alle Beispiele der Ethernet Lib.



Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: power-dodge on Dec 25, 2017, 02:46 pm
Vielen Vielen Dank euch!

Ha den SS auf Pin 10 gelegt und konnte kleines Ziel
erreichen.
Hab eigene IP abrufen können und diese war in der
Fritzbox vergeben.

Anstatt Pin 10 werde mir an der Stelle anderes PWM Ausgang auswählen. Sind noch ein paar frei.

Werde weiter als testen, hoffe kriege es einiger maßen hin.


Danke euch noch mal  :)
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: uwefed on Dec 25, 2017, 03:26 pm
Anstatt Pin 10 werde mir an der Stelle anderes PWM Ausgang auswählen. Sind noch ein paar frei.
Dann mußt Du das ein anderes Pin in der Bibliothek wählen.

Grüße Uwe
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: power-dodge on Dec 25, 2017, 04:13 pm
Ich muss da eh noch viele Pins vergeben und experimentieren...

Dann eben auch PIRs einbinden und schauen wie alles mit Modbus läuft.

Danke euch noch mal.

Gruß
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: Tommy56 on Dec 25, 2017, 05:15 pm
Mal eine grundlegende Frage zu Deinem W5100 Shield:

Ist das überhaupt für den MEGA geeignet? Hat das hinten den 3x3 Pin Steckverbinder für den ICSP-Anschluß dran?
Wenn nicht, funktioniert das nicht auf dem MEGA. Gib uns im Zweifelsfall mal einen Link zu Deinem Shield.

Gruß Tommy
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: combie on Dec 25, 2017, 05:19 pm
Quote
Gib uns im Zweifelsfall mal einen Link zu Deinem Shield.
Hat er/sie/es gemacht!
Zumindest eine URL.

Es hat keinen ICSP Stecker am hinteren Ende
Und dennoch tut es am Mega!

Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: Tommy56 on Dec 25, 2017, 05:27 pm
Ok, die URL habe ich übersehen. Nach allgemeinem Sprachgebrauch ist das Ding ja auch kein Shield, sondern ein Modul. Wegen der Bezeichnung Shield habe ich nach dem Anschluß gefragt.

Gruß Tommy
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: combie on Dec 25, 2017, 05:32 pm
Quote
Wegen der Bezeichnung Shield habe ich nach dem Anschluß gefragt.
Ja, die Semantik, da hapert es manchmal!
(nicht nur bei mir)
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: power-dodge on Dec 25, 2017, 05:46 pm
Moin,

ja manchmal weiß man es nicht wie man die Teile nennen soll.

Ich jetzt den Scetch erweitert, auf meine 11 Ausgänge.
Mit dem Modbus TCP View komme ich drauf und kann die Ausgänge steuern.

Wenn ich aber paar nach einander ansteure, bleibt das Modul irgendwie hängen.
Da hillft nur reset.
Im Normalfall leuchten 4 LED.s am Modul, wenn es hängt bleibt eine LED an
und zweite blinkt (FDX)

Oder muss man hier noch etwas anpassen : (Eher im oberen Bereich)?

Code: [Select]
TCCR1A = (TCCR1A & 0xF8) | 0x01;
  TCCR0A = (TCCR0A & 0xF8) | 0x01;
  TCCR0B = (TCCR0B & 0xF8) | 0x01;
  TCCR2B = (TCCR2B & 0xF8) | 0x01;
 
  pinMode(0, INPUT);
  pinMode(1, INPUT);
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
  pinMode(15, INPUT);
  pinMode(16, INPUT);
  pinMode(17, INPUT);
  pinMode(18, INPUT);
  pinMode(19, INPUT);
  pinMode(20, INPUT);
  pinMode(21, INPUT);
}

void loop()
{
  Mb.Run();
 

 
  //D2 Timer1A
  analogWrite(2, Mb.R[0]);
  //D3 Timer0A
  analogWrite(3, Mb.R[1]);
  //D4 Timer0B
  analogWrite(4, Mb.R[2]);
  //D5 Timer2B
  analogWrite(5, Mb.R[3]);
  //D6 Timer1A
  analogWrite(6, Mb.R[4]);
  //D7 Timer0A
  analogWrite(7, Mb.R[5]);
  //D8 Timer0B
  analogWrite(8, Mb.R[6]);
  //D9 Timer2B
  analogWrite(9, Mb.R[7]);
  //D11 Timer1A
  analogWrite(11, Mb.R[8]);
  //D12 Timer0A
  analogWrite(12, Mb.R[9]);
  //D13 Timer0B
  analogWrite(13, Mb.R[10]);
 
}


Muss hier noch was rein?:

Wenn ja wie würde es sich fortsetzen?

TCCR1A = (TCCR1A & 0xF8) | 0x01;
TCCR0A = (TCCR0A & 0xF8) | 0x01;
TCCR0B = (TCCR0B & 0xF8) | 0x01;
TCCR2B = (TCCR2B & 0xF8) | 0x01;
 
Dankeschön
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: ElEspanol on Dec 25, 2017, 05:47 pm
Ist ein Modul und läuft am Mega genausogut wie am Uno. Hab ich auch im Einsatz
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: power-dodge on Dec 25, 2017, 06:20 pm
Hatte auch mal gelesen gehabt das es an Stromversorgung liegen kann.


Es lag auch bei mir daran, über einen Stabi und eigene Masse läuft er jetzt länger
und die Led´s sind heller (5V)

Hab da ne Frage wie kann ich in dem Sketch so konfigurieren, das jeder Ausgang
PWM im Float  steuert? Ob hoch  oder runter...

Quasi so:

Code: [Select]
    if (fade < ziel) {
      fade++;
      Serial.print("fade Pin1 ");
      Serial.println(fade);
    }
    if (fade > ziel) {
      fade--;
      Serial.print("fade Pin1 ");
      Serial.println(fade);
    }
    analogWrite(pinLEDt, fade);
  }
}


Und hier ist mein jetziges Programmchen:

Code: [Select]
#include <SPI.h>
#include <Ethernet.h>

#include "Mudbus.h"

Mudbus Mb;
//Function codes 1(read coils), 3(read registers), 5(write coil), 6(write register)
//signed int Mb.R[0 to 125] and bool Mb.C[0 to 128] MB_N_R MB_N_C
//Port 502 (defined in Mudbus.h) MB_PORT

void setup()
{
  uint8_t mac[]     = { 0x90, 0xA2, 0xDA, 0x00, 0x51, 0x06 };
  uint8_t ip[]      = { 192, 168, 178, 70 };
  uint8_t gateway[] = { 192, 168, 178, 1 };
  uint8_t subnet[]  = { 255, 255, 255, 0 };
  Ethernet.begin(mac, ip, gateway, subnet);


  //PWM Frequenz
  //0×01  1      31.374 KHz
  //0×02  8      3.921 Khz
  //0×03  64     490.1 Hz            // default
  //0×04  256    122.5 Hz
  //0×05  1024   30.63 Hz
  //http://playground.arduino.cc/Main/TimerPWMCheatsheet

  TCCR1A = (TCCR1A & 0xF8) | 0x01;
  TCCR0A = (TCCR0A & 0xF8) | 0x01;
  TCCR0B = (TCCR0B & 0xF8) | 0x01;
  TCCR2B = (TCCR2B & 0xF8) | 0x01;
 
  pinMode(0, INPUT);
  pinMode(1, INPUT);
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
  pinMode(15, INPUT);
  pinMode(16, INPUT);
  pinMode(17, INPUT);
  pinMode(18, INPUT);
  pinMode(19, INPUT);
  pinMode(20, INPUT);
  pinMode(21, INPUT);
}

void loop()
{
  Mb.Run();
 

 
  //D2 Timer1A
  analogWrite(2, Mb.R[0]);
  //D3 Timer0A
  analogWrite(3, Mb.R[1]);
  //D4 Timer0B
  analogWrite(4, Mb.R[2]);
  //D5 Timer2B
  analogWrite(5, Mb.R[3]);
  //D6 Timer1A
  analogWrite(6, Mb.R[4]);
  //D7 Timer0A
  analogWrite(7, Mb.R[5]);
  //D8 Timer0B
  analogWrite(8, Mb.R[6]);
  //D9 Timer2B
  analogWrite(9, Mb.R[7]);
  //D11 Timer1A
  analogWrite(11, Mb.R[8]);
  //D12 Timer0A
  analogWrite(12, Mb.R[9]);
  //D13 Timer0B
  analogWrite(13, Mb.R[10]);
 
}



Kann man das als eine Zeile für alle Ausgänge definieren?
Oder jeden einzelnen Ausgang muss man hinweisen?
Das man die Schnelligkeit des Fadens einzustellen wäre schön.

gruß
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: Tommy56 on Dec 25, 2017, 06:46 pm
Quote
Hab da ne Frage wie kann ich in dem Sketch so konfigurieren, das jeder Ausgang
PWM im Float  steuert? Ob hoch  oder runter...
PWM (analogWrite) geht von 0 ... 255 (1 Byte). Was willst Du da mit float? Oder meinst Du etwas anderes?

Gruß Tommy
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: power-dodge on Dec 25, 2017, 06:56 pm
Möchte das die Werte langsam erreicht werden.
Also von 0 bis 255 sagen wir mal in 1 Sekunde.
Mag kein plötzliches einschalten.

Daher auch PWM nutze ich, damit ich auch mal sagen wir mal auf 100 stellen kann. Wenn ich aber
255 einstelle soll es dahin floaten.

Die verschiedenen helligkeiten gingen eben auch bei testen. Da sendete ich über Modbus saegen wir mal 100 zu dem 0 oder andere bis 11. Und das funktionierte.

Also möchte einfach keine ruckartige änderungen des Wertes.

Danke euch noch mal

Gruß
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: power-dodge on Dec 25, 2017, 06:57 pm
Vielleicht verwechsle ich gerade float mit fade.
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: Tommy56 on Dec 25, 2017, 07:15 pm
Noch einen Hinweis dazu: Die Helligkeitsempfindung des Auges ist extrem nichtlinear, die Helligkeit der LED ist auch nicht linear. Das führt dazu, das Änderungen der Spannung im unteren Bereich wesentlich stärker wahrgenommen werden, als gleich große Änderungen im oberen Bereich.

Dazu gibt es hier einen Beitrag mit Wertetabellen (https://www.mikrocontroller.net/articles/LED-Fading).

Gruß Tommy
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: power-dodge on Dec 25, 2017, 07:19 pm
Danke für den Hinweis!

Das ist ja kein Problem, es werden später feste Werte
vergeben. Die gewünschten werden eh durchs ausprobieren herausgefunden.
Oder auch mehrere pro Einheit, dann werden diese
unter einander gewechselt, nur sollte es über fade erfolgen.

Gruß
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: postmaster-ino on Dec 25, 2017, 09:06 pm
Hi

Das (fade) ist dann wiederum Dein Part.
Was hindert Dich daran, dem µC mehrere Werte zu übermitteln?
Zumindest, wenn ich Dich korrekt verstanden habe, ist Das 'Daten in den µC bekommen' nicht das Problem.
Dann sende :gewünschte Helligkeit, Zeit bis zum Erreichen dieses Wertes
Im µC schaust Du nach, welche Helligkeit gerade anliegt, welche Helligkeit gewünscht ist und wie lange Du zwischen den Einzelschritten warten musst.
Dann wartest Du diese Zeit ab, Ausgangs-Helligkeit++, Endwert erreicht? Nein -> Warten, Ja -> schlafen, bis neuer Befehl kommt.

Wenn Du Da noch irgendwelche Kurven (aka nichtlineares Empfinden) rein zaubern willst, wird's mit den Wartezeiten wohl etwas aufwändiger, wenn man sich aber bereits so tief mit der Materie auseinander gesetzt hat, sollte auch dieser Schritt schaffbar sein.

MfG
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: power-dodge on Dec 25, 2017, 09:29 pm
Danke für den Tipp,

hindert tut mich da nicht. Aber wie er merkt habe ich nicht so die Erfahrung.

Der Mega soll nen Slave sein, IP Syscom soll dann bei bestimmten Ereignissen,
zu einzelnen Pins die Helligkeitswerte senden.
Und ein paar Sensoren ständig auslesen, z.B. Pir´s.

So in etwa war meine Vorstellung...

Das Fade werde ich mir mal anschauen.

Gruß
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: power-dodge on Dec 26, 2017, 02:03 pm
Hallo,

leider bekomme ich es doch nicht hin.
Entweder blinkt die LED schnell (delay zeit)
oder eben wird ignoriert. 255 z.B wird sofort ausgeführt.

Würde mich über ein paar Tipps freuen.

Danke schon mal.

Gruß
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: postmaster-ino on Dec 26, 2017, 02:08 pm
Hi

delay() wird aber nicht(mehr) benutzt, oder?

MfG
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: power-dodge on Dec 26, 2017, 09:54 pm
Hallo,

nicht? Doch denke nicht.

Hab folgendes probiert, bringt mich auch nicht weiter.
Bestimmt sehe ich den Wald vor lauter Bäume nicht:

Code: [Select]
void loop()

{
  Mb.Run();

  //D2 Timer Pin2
  analogWrite(2, Mb.R[2]);
    // fade in from min to max in increments of 5 points:
  for (int fadeValue = Mb.R[2] ; fadeValue <= Mb.R[2]; fadeValue += 5) {
    // sets the value (range from 0 to 255):
    analogWrite(2, fadeValue);
  }

  // fade out from max to min in increments of 5 points:
  for (int fadeValue = Mb.R[2] ; fadeValue >= Mb.R[2]; fadeValue -= 5) {
    // sets the value (range from 0 to 255):
    analogWrite(2, fadeValue);
  }


Gruß
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: ElEspanol on Dec 26, 2017, 09:59 pm
Wo ist die Verzögerung beim Faden?

Und dann ist das ganze sowieso schon im Ansatz falsch.
Faden tut man in der loop mit blockierungsfreiem Gedöns, die for Schleife blockiert, wenn du da delay rein packst
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: Tommy56 on Dec 26, 2017, 10:03 pm
Lass doch den ganzen Netzwerkteil erst mal weg und lasse ganz einfach eine LED jede Sekunde die Helligkeit um 1 Wert zunehmen und wenn 255 erreicht ist, wieder runter bis 0 und dann wieder hoch. Das nennt man faden. Am Anfang auch gern mit delay. Dann lernst Du erst mal die Grundlagen. Das delay kommt dann später raus.
Wenn Du Dir das eine Weile anschaust, wirst Du den Sinn meines Postings #25 verstehen.

Du bist mit Deinem aktuellen Projekt derzeit eindeutig überfordert.

Gruß Tommy
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: power-dodge on Dec 26, 2017, 10:20 pm
Danke euch für die Tipps,

in der Tat weiß es nicht wie es weiter gehen soll.
Ihr merkt es ja das ich da noch sehr wenig plan hab.
Werde es dann mal weiter versuchen.

Ihr macht es bestimmt schon Jahre war?

Werde dann erst mal mit Fade arbeiten, am besten
aber gleich richtig faden zu lernen oder?
Aus dem Post 25 eben.
Die einfachen Beispiele sind da net so gut?

Gruß
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: Tommy56 on Dec 26, 2017, 10:25 pm
Mach doch erst mal das, was ich in #33 geschrieben habe. Dann lernst Du evtl. was fade eigentlich bedeutet. Du hast Dich an diesem Begriff festgebissen, ohne ihn zu verstehen.
Ich habe Dir einen möglichen Weg zum Lernen aufgezeigt. Was Du daraus machst, ist Dir überlassen aber Du merkst selbst, dass Du weit daneben liegst.

Gruß Tommy
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: power-dodge on Dec 26, 2017, 10:35 pm
Das stimmt danke, danke auch dafür das Du direkt bist.  Besser so als was falsches auf zu zeigen.

Stimmt auch, kenne keinen anderen Begriff fürs
helligkeit dimmen beim Arduino.

Bin vielleicht auch auf ganz falschem Wege,
leider kenne ich Alternativen Weg nicht.

Werde mir morgen #25 genauer anschauen.

Gruß
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: Tommy56 on Dec 26, 2017, 10:38 pm
Nochmal und noch direkter: #25 ist frühestens der 2. Schritt, wenn Du #33 begriffen hast und bis dahin bin ich raus.
Rede ich hier gegen eine Wand oder liest Du auch, was ich schreibe?

Gruß Tommy
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: power-dodge on Dec 27, 2017, 06:58 am
Hi Tommy,

doch habs verstanden.  33 wird als ertes gemacht !

Gruß
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: power-dodge on Feb 03, 2018, 08:58 am
Hallo,

versuche gerade das dimmen dem arduino bei zu bringen.
Leider funktioniert das nicht wie ich mir es vorstelle.

Eigentlich soll ja nur bei Wertänderung hin oder her dimmen.
Bekomme flackern hin oder ohne dimmen funktioniert es.

Hab Ihr vielleicht nen Tipp?

Code: [Select]
#include <SPI.h>
#include <Ethernet.h>

#include "Mudbus.h"

int fadeAmount = 5;    // how many points to fade the LED by
unsigned long currentTime;
unsigned long loopTime;

Mudbus Mb;
//Function codes 1(read coils), 3(read registers), 5(write coil), 6(write register)
//signed int Mb.R[0 to 125] and bool Mb.C[0 to 128] MB_N_R MB_N_C
//Port 502 (defined in Mudbus.h) MB_PORT

void setup()
{
  uint8_t mac[]     = { 0x90, 0xA2, 0xDA, 0x00, 0x51, 0x06 };
  uint8_t ip[]      = { 192, 168, 178, 70 };
  uint8_t gateway[] = { 192, 168, 178, 1 };
  uint8_t subnet[]  = { 255, 255, 255, 0 };
  Ethernet.begin(mac, ip, gateway, subnet);


  //PWM Frequenz
  //0×01  1      31.374 KHz
  //0×02  8      3.921 Khz
  //0×03  64     490.1 Hz            // default
  //0×04  256    122.5 Hz
  //0×05  1024   30.63 Hz
  //http://playground.arduino.cc/Main/TimerPWMCheatsheet

  TCCR1A = (TCCR1A & 0xF8) | 0x01;
  TCCR0A = (TCCR0A & 0xF8) | 0x01;
  TCCR0B = (TCCR0B & 0xF8) | 0x01;
  TCCR2B = (TCCR2B & 0xF8) | 0x01;
 
  pinMode(2, OUTPUT);
  currentTime = millis();
  loopTime = currentTime; 
}

void loop()  {
 
    Mb.Run();
   
  currentTime = millis();
  int brightness = Mb.R[3];    // how bright the LED is
  if(currentTime >= (loopTime + 40)){ 
    // set the brightness of pin 9:
    analogWrite(2, fadeAmount);   

    // change the brightness for next time through the loop:
    brightness = brightness + fadeAmount;

    // reverse the direction of the fading at the ends of the fade:
    if (brightness <= 0 || brightness >= 255) {
      fadeAmount = -fadeAmount ;
    }     
    loopTime = currentTime;  // Updates loopTime
  }
  // Other processing can be done here
                           
}


Würde mich über eure Hilfe sehr freuen, danke schon mal dafür.

Gruß
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: agmue on Feb 03, 2018, 10:05 am
Code: [Select]
int fadeAmount = 5;    // how many points to fade the LED by
...
    analogWrite(2, fadeAmount);   
...               

Du solltest den Helligkeitswert ausgeben und nicht die konstante Veränderung.
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: power-dodge on Feb 03, 2018, 11:58 am
Hallo,

ach ja das ist einer meiner blöden Versuche gewesen.
Sonnst steht da "brightness".

Funktionierte alles nicht so wie ich es sollte.

Fade wird dann da einfach ignoriert.

Gruß
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: power-dodge on Feb 03, 2018, 03:27 pm
Hallo,

jop eben ausprobiert. Über das Netzwerk wird die LED verändert
aber leider ohne fade. Was übersehe ich den da?

Irgendwie blicke ich das da nicht durch...

So sieht der Code gerade aus:

Code: [Select]
#include <SPI.h>
#include <Ethernet.h>

#include "Mudbus.h"

int fadeAmount = 5;    // how many points to fade the LED by
unsigned long currentTime;
unsigned long loopTime;

Mudbus Mb;
//Function codes 1(read coils), 3(read registers), 5(write coil), 6(write register)
//signed int Mb.R[0 to 125] and bool Mb.C[0 to 128] MB_N_R MB_N_C
//Port 502 (defined in Mudbus.h) MB_PORT

void setup()
{
  uint8_t mac[]     = { 0x90, 0xA2, 0xDA, 0x00, 0x51, 0x06 };
  uint8_t ip[]      = { 192, 168, 178, 70 };
  uint8_t gateway[] = { 192, 168, 178, 1 };
  uint8_t subnet[]  = { 255, 255, 255, 0 };
  Ethernet.begin(mac, ip, gateway, subnet);


  //PWM Frequenz
  //0×01  1      31.374 KHz
  //0×02  8      3.921 Khz
  //0×03  64     490.1 Hz            // default
  //0×04  256    122.5 Hz
  //0×05  1024   30.63 Hz
  //http://playground.arduino.cc/Main/TimerPWMCheatsheet

  TCCR1A = (TCCR1A & 0xF8) | 0x01;
  TCCR0A = (TCCR0A & 0xF8) | 0x01;
  TCCR0B = (TCCR0B & 0xF8) | 0x01;
  TCCR2B = (TCCR2B & 0xF8) | 0x01;
 
  pinMode(2, OUTPUT);
  currentTime = millis();
  loopTime = currentTime; 
}

void loop()  {
 
    Mb.Run();
   
  currentTime = millis();
  int brightness = Mb.R[3];    // how bright the LED is
  if(currentTime >= (loopTime + 40)){ 
    // set the brightness of pin 9:
    analogWrite(2, brightness);   

    // change the brightness for next time through the loop:
    brightness = brightness + fadeAmount;

    // reverse the direction of the fading at the ends of the fade:
    if (brightness <= 0 || brightness >= 255) {
      fadeAmount = -fadeAmount ;
    }     
    loopTime = currentTime;  // Updates loopTime
  }
  // Other processing can be done here
                           
}


Modbus läuft wohl, teste es über "ModBusView TCP",
gewollt ist eigentlich das Arduino faden übernimmt.

Sind vielleicht die Operatoren falsch gesetzt?

Danke euch schon mal für die Tipps.

Gruß

Alex
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: Tommy56 on Feb 03, 2018, 03:49 pm
Du überschreibst den Wert immer wieder. Der hat überhaupt keine Gelegenheit zu faden.


Code: [Select]
  currentTime = millis();
  int brightness = Mb.R[3];    // <--- Wert einlesen
  if(currentTime >= (loopTime + 40)){ 
    // set the brightness of pin 9:
    analogWrite(2, brightness);    // <-- ausgeben des gelesenen Wertes

    // change the brightness for next time through the loop:
    brightness = brightness + fadeAmount;  // <-- der Wert kommt nie zum Zug



Gruß Tommy
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: power-dodge on Feb 03, 2018, 04:23 pm
Vielen Dank Tommy für Deine Antwort,

ja stimmt wo Du drauf hinweist. Sehe ich es grad.
Wie bringe ich den da durch zu laufen.

Hab es so ausprobiert aber ist shon klar, dann schreibt
er mir die 5 gleich von dem FadeAmount rein.

Code: [Select]
currentTime = millis();
  int modbus2 = Mb.R[2];    // how bright the LED is
  int brightness = modbus2 + fadeAmount;
  if(currentTime >= (loopTime + 40)){     
   
  analogWrite(2, brightness);
 
    // reverse the direction of the fading at the ends of the fade:
    if (brightness <= 0 || brightness >= 255) {
      fadeAmount = -fadeAmount ; 
    }     
    loopTime = currentTime;  // Updates loopTime
  }


Sorry wegen so einfachen Fragen.

Gruß

Alex
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: Tommy56 on Feb 03, 2018, 04:31 pm
Ich glaube, Du solltest Dir erst mal klar darüber werden, was Du genau erreichen willst.
Du übergibst einen Helligkeitswert. Nehmen wir mal an 128. Was soll dann passieren?
Später übergibst Du 180. Was soll jetzt passieren?

Soll er vom alten Wert auf den neuen faden und dort bleiben?
Soll er laufend hoch und runter faden - Du wertest dabei die Helligkeit nicht aus?
Oder noch etwas anderes?

Danach richtet sich die Herangehensweise.

Gruß Tommy
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: power-dodge on Feb 03, 2018, 05:49 pm
Hallo Tommy,

danke Dir für die Antwort!

Also eine Modbusadresse soll die Helligkeit vorgeben.
Genau zu diesem Wert soll hoch oder runter dimmt werden und dort bleiben.
Wird bei herunter dimmen ein höherer Wert eintreffen zu Modbusadresse,
dann soll herunter dimmen abgebrochen werden und hoch zu diesem Wert hoch
gedimmt werden.

So wäre meine Vorstellung, bin wohl auf dem falschen Weg nicht?

Danke noch mal für die mühe, Ihr seid echt super!

Gruß
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: Tommy56 on Feb 03, 2018, 06:03 pm
Geht, ist aber etwas umständlicher.

1. alten Wert der Helligkeit merken
2. Nur wenn ein anderer Wert kommt, diesen bearbeiten
3. Vorzeichen bestimmen (alter Wert ist größer, dann -, sonst +)
4. Helligkeit dimmen. Wenn aktuellerWert+/- Änderung > oder < als Zielwert - diesen setzen
5. merken, ob das Dimmen noch läuft
6. Wenn ja, dann den aktuellen Wert als alten Wert setzen

So mal grob auf die Schnelle.

Gruß Tommy
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: power-dodge on Feb 03, 2018, 06:15 pm
Danke Tommy,

gibt es eine gute Quelle mit Beispielen oder Übungen dazu?
Weil so aus dem Ärmel werde ich das nicht runter tippen können.

Werde mich gleich mit Google erstmals auseinander setzen.
Oder gibt es hier im Forum schon mal etwas ähnliches?
Manchmal weis man nicht nach was man suchen soll.

Danke noch mal für die Tipps!!!

Grüße

Alex
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: Tommy56 on Feb 03, 2018, 06:30 pm
Da wirst Du wenig finden. Baue es schrittweise auf.
Ich habe hier (https://www.arduinoforum.de/arduino-Thread-Serielle-Eingabe-zur-Steuerung-einer-RGB-LED) mal in meiner Anfangszeit sowas über die serielle Schnittstelle gemacht. Evtl. kannst Du Dir da ein paar Anregungen holen.

Gruß Tommy
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: power-dodge on Feb 03, 2018, 07:25 pm
Hallo Tommy,

danke für den Link... Nun ja werde es mir ansehen, da muss man aber programmieren studiert haben!
Ich mein das im guten, echt Respekt. Werde dann es mal ansehen und versuchen zu begreifen.
Zumindest vielleicht nen Teil von...

Gruß

Alex
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: Tommy56 on Feb 03, 2018, 07:27 pm
Muss man nicht, ich habe mir das auch selbst beigebracht.

Gruß Tommy
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: agmue on Feb 03, 2018, 11:22 pm
So mal grob auf die Schnelle.
Viele Voraussetzungen wie Ethernet fehlen mir, aber mit der seriellen Schnittstelle kann man es als Anregung eventuell simulieren:

Code: [Select]
int fadeAmount = 5;    // how many points to fade the LED by
unsigned long currentTime;
unsigned long loopTime;
int brightness, altModbuswert, aktModbuswert;

byte modbusersatz() {
  byte wert = altModbuswert;
  if (Serial.available())
  {
    wert = Serial.parseInt();
  }
  return wert;
}

void loop()  {
  currentTime = millis();
  altModbuswert = aktModbuswert;
  aktModbuswert = modbusersatz();  // stattdassen Mb.R[3]
  if (altModbuswert != aktModbuswert)
  {
    if (brightness < aktModbuswert) {
      fadeAmount = 5;
    } else {
      fadeAmount = -5;
    }
    Serial.print(F("\nneuer Wert: "));
    Serial.println(aktModbuswert);
  }
  if (currentTime - loopTime >= 40) {
    loopTime = currentTime;  // Updates loopTime
    if ((brightness < aktModbuswert && fadeAmount > 0) || (brightness > aktModbuswert && fadeAmount < 0)) {
      brightness = brightness + fadeAmount;
      analogWrite(10, brightness);
      Serial.print(brightness);
      Serial.print(' ');
    }
  }
}

void setup()
{
  Serial.begin(9600);
  Serial.println(F("PWM-Wert eingeben"));
  currentTime = millis();
  loopTime = currentTime;
}
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: power-dodge on Feb 04, 2018, 06:44 am
Hey Danke für die Hilfe,


sieht ja gut aus! Leider hab ich es noch nicht zum laufen bekommen.

So  habe  ich da zusammen gelegt:

Code: [Select]
#include <SPI.h>
#include <Ethernet.h>

#include "Mudbus.h"

int fadeAmount = 5;    // how many points to fade the LED by
unsigned long currentTime;
unsigned long loopTime;
int brightness, altModbuswert, aktModbuswert;

byte modbusersatz() {
  byte wert = altModbuswert;
  if (Serial.available())
  {
    wert = Serial.parseInt();
  }
  return wert;
}

Mudbus Mb;
//Function codes 1(read coils), 3(read registers), 5(write coil), 6(write register)
//signed int Mb.R[0 to 125] and bool Mb.C[0 to 128] MB_N_R MB_N_C
//Port 502 (defined in Mudbus.h) MB_PORT

void setup()

  Serial.begin(9600);
  Serial.println(F("PWM-Wert eingeben"));
  currentTime = millis();
  loopTime = currentTime;
 
  uint8_t mac[]     = { 0x90, 0xA2, 0xDA, 0x00, 0x51, 0x06 };
  uint8_t ip[]      = { 192, 168, 178, 70 };
  uint8_t gateway[] = { 192, 168, 178, 1 };
  uint8_t subnet[]  = { 255, 255, 255, 0 };
  Ethernet.begin(mac, ip, gateway, subnet);


  //PWM Frequenz
  //0×01  1      31.374 KHz
  //0×02  8      3.921 Khz
  //0×03  64     490.1 Hz            // default
  //0×04  256    122.5 Hz
  //0×05  1024   30.63 Hz
  //http://playground.arduino.cc/Main/TimerPWMCheatsheet

  TCCR1A = (TCCR1A & 0xF8) | 0x01;
  TCCR0A = (TCCR0A & 0xF8) | 0x01;
  TCCR0B = (TCCR0B & 0xF8) | 0x01;
  TCCR2B = (TCCR2B & 0xF8) | 0x01;
 
  pinMode(2, OUTPUT); // Pin 2 des Mega
}

void loop(){
  Mb.Run();
  currentTime = millis();
  altModbuswert = aktModbuswert;
  aktModbuswert = modbusersatz();  // stattdassen Mb.R[3]
  if (altModbuswert != aktModbuswert)
  {
    if (brightness < aktModbuswert) {
      fadeAmount = 5;
    } else {
      fadeAmount = -5;
    }
    Serial.print(F("\nneuer Wert: "));
    Serial.println(aktModbuswert);
  }
  if (currentTime - loopTime >= 40) {
    loopTime = currentTime;  // Updates loopTime
    if ((brightness < aktModbuswert && fadeAmount > 0) || (brightness > aktModbuswert && fadeAmount < 0)) {
      brightness = brightness + fadeAmount;
      analogWrite(2, brightness);
      Serial.print(brightness);
      Serial.print(' ');
    }
  }
}

 


Geändert habe ich hier auf Pin2:

Code: [Select]
analogWrite(2, brightness);

Was soll ich hier eintragen:?

Code: [Select]
aktModbuswert = modbusersatz();  // stattdassen Mb.R[3]

Mb.R[3] an erster Stelle bringt nichts, an zweiter kommt Fehlermeldung:

Code: [Select]
expression cannot be used as a function

Werde gleich noch weiter probieren.

Gruß

Alex
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: power-dodge on Feb 04, 2018, 07:12 am
Hallo,

über seriellen Monitor funktioniert es prächtig!!!
Danke Dir dafür!!!

Hatte paar mal nach hoch laden, Fehler beim seriellen Monitor.
Wenn aber auch der W5100 angeschlossenen ist, im seriellen
Monitor  kommen keine Aufforderungen "PWM Wert eingeben".
Ist dieser abgeklemmt dann kommen diese. Ist aber gar nicht notwendig.

Wie ich sehe wird wohl der Mega nicht genug Speicher haben!?
Oder irre ich mich da? Denn es sind 12 PWM Ausgänge die ich
so anfahren wollte:

Code: [Select]
Globale Variablen verwenden 1168 Bytes (14%) des dynamischen Speichers, 7024 Bytes für lokale Variablen verbleiben. Das Maximum sind 8192 Bytes.

Gruß

Alex
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: noiasca on Feb 04, 2018, 09:14 am
Wie ich sehe wird wohl der Mega nicht genug Speicher haben!?
Oder irre ich mich da? Denn es sind 12 PWM Ausgänge die ich
so anfahren wollte:

Code: [Select]
Globale Variablen verwenden 1168 Bytes (14%) des dynamischen Speichers, 7024 Bytes für lokale Variablen verbleiben. Das Maximum sind 8192 Bytes.


da glaube ich eher dass du RAM verschwendest!
hab nur diesen Schnipsel gesehen
Code: [Select]

Serial.print("fade Pin1 ");


Wie schauts mit Flash aus? Wenn noch genug Flash da ist alle konstanten Texte mit dem Flash-Makro ins Flash geben und RAM sparen!(!!)
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: agmue on Feb 04, 2018, 10:08 am
Was soll ich hier eintragen:?

Code: [Select]
aktModbuswert = modbusersatz();  // stattdassen Mb.R[3]
Meine Vorstellung:

Code: [Select]
aktModbuswert = Mb.R[3]
und die ganze Funktion modbusersatz löschen.

Wie ich sehe wird wohl der Mega nicht genug Speicher haben!?
Oder irre ich mich da? Denn es sind 12 PWM Ausgänge die ich
so anfahren wollte:
Kannst Du probieren. Ich habe meinen Vorschlag ohne weitere Optimierung auf 12 Ausgänge erweitert. Wenn Du Deine Ethernet-Sachen einbindest, weißt Du es.

Code: [Select]
// getestet mit Mega2560
const byte ausgaenge[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
byte ausgang;
const byte PWM = sizeof(ausgaenge);
int8_t fadeAmount[PWM];    // how many points to fade the LED by
unsigned long currentTime;
unsigned long loopTime;
int brightness[PWM], altModbuswert[PWM], aktModbuswert[PWM];

int modbusersatz() {
  static int wert = 127;
  if (Serial.available())
  {
    wert = Serial.parseInt();
    Serial.print(F("neuer Wert: "));
    Serial.println(wert);
  }
  return wert;
}

void loop()  {
  currentTime = millis();
  altModbuswert[ausgang] = aktModbuswert[ausgang];
  aktModbuswert[ausgang] = modbusersatz();  // stattdassen Mb.R[3]
  if (altModbuswert[ausgang] != aktModbuswert[ausgang])
  {
    if (brightness[ausgang] < aktModbuswert[ausgang]) {
      fadeAmount[ausgang] = 5;
    } else {
      fadeAmount[ausgang] = -5;
    }
  }
  if (currentTime - loopTime >= 40) {
    loopTime = currentTime;  // Updates loopTime
    for (byte j = 0; j < PWM; j++)
    {
      if ((brightness[j] < aktModbuswert[j] && fadeAmount[j] > 0) || (brightness[j] > aktModbuswert[j] && fadeAmount[j] < 0)) {
        brightness[j] += fadeAmount[j];
        analogWrite(ausgaenge[j], brightness[j]);
      }
      //Serial.println();
    }
  }
  ausgang++;
  ausgang = ausgang % PWM;
}

void setup()
{
  Serial.begin(9600);
  Serial.println(F("PWM-Wert eingeben"));
  for (byte j = 0; j < PWM; j++)
  {
    fadeAmount[j] = 5;
  }
  currentTime = millis();
  loopTime = currentTime;
}
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: power-dodge on Feb 04, 2018, 05:20 pm
Hallo,

vielen vielen Dank für Deine Hilfe!

Bei Deinem Beispiel ohne Ethernet, habe ich ausprobiert.
Beim ersten mal gab es wieder einen Fehler mit seriellen Monitor,
beim 2 mal flashen ging es!

Dort veränderte dein Programm die helligkeit, bei 0 war alles ok und
bei 255. Dazwischen pulsierte immer der Verbraucher, ob er Herzschlag hätte.
Dimmte hoch oder runter auch ruckartiger, bei Deinem ersten Sketch war
es perfekt!

Nun mit meinem Netzwerk da,  wenn etwas über Modbus kommt dimmt es gar nicht.
Schreibt die Werte sofort in den Pin2.

Code: [Select]
#include <SPI.h>
#include <Ethernet.h>

#include "Mudbus.h"

// getestet mit Mega2560
const byte ausgaenge[] = {2, 3, 4, 5, 6, 7, 8, 9, 45, 11, 12, 13};
byte ausgang;
const byte PWM = sizeof(ausgaenge);
int8_t fadeAmount[PWM];    // how many points to fade the LED by
unsigned long currentTime;
unsigned long loopTime;
int brightness[PWM], altModbuswert[PWM], aktModbuswert[PWM];

int modbusersatz() {
  static int wert = 127;
  if (Serial.available())
  {
    wert = Serial.parseInt();
    Serial.print(F("neuer Wert: "));
    Serial.println(wert);
  }
  return wert;
}


Mudbus Mb;
//Function codes 1(read coils), 3(read registers), 5(write coil), 6(write register)
//signed int Mb.R[0 to 125] and bool Mb.C[0 to 128] MB_N_R MB_N_C
//Port 502 (defined in Mudbus.h) MB_PORT

void setup()
{
  Serial.begin(9600);
  Serial.println(F("PWM-Wert eingeben"));
  for (byte j = 0; j < PWM; j++)
  {
    fadeAmount[j] = 5;
  }
  currentTime = millis();
  loopTime = currentTime;
 
  uint8_t mac[]     = { 0x90, 0xA2, 0xDA, 0x00, 0x51, 0x06 };
  uint8_t ip[]      = { 192, 168, 178, 70 };
  uint8_t gateway[] = { 192, 168, 178, 1 };
  uint8_t subnet[]  = { 255, 255, 255, 0 };
  Ethernet.begin(mac, ip, gateway, subnet);


  //PWM Frequenz
  //0×01  1      31.374 KHz
  //0×02  8      3.921 Khz
  //0×03  64     490.1 Hz            // default
  //0×04  256    122.5 Hz
  //0×05  1024   30.63 Hz
  //http://playground.arduino.cc/Main/TimerPWMCheatsheet

  TCCR1A = (TCCR1A & 0xF8) | 0x01;
  TCCR0A = (TCCR0A & 0xF8) | 0x01;
  TCCR0B = (TCCR0B & 0xF8) | 0x01;
  TCCR2B = (TCCR2B & 0xF8) | 0x01;
 
  pinMode(2, OUTPUT); // Pin 2 des Mega
}


void loop()

{
  Mb.Run();{

  //PWM Ausgänge:
  //Pin2
  currentTime = millis();
  altModbuswert[ausgang] = aktModbuswert[ausgang];
  aktModbuswert[ausgang] = Mb.R[2];  // stattdassen Mb.R[2]
  if (altModbuswert[ausgang] != aktModbuswert[ausgang])
  {
    if (brightness[ausgang] < aktModbuswert[ausgang]) {
      fadeAmount[ausgang] = 5;
    } else {
      fadeAmount[ausgang] = -5;
    }
  }
  if (currentTime - loopTime >= 40) {
    loopTime = currentTime;  // Updates loopTime
    for (byte j = 0; j < PWM; j++)
    {
      if ((brightness[j] < aktModbuswert[j] && fadeAmount[j] > 0) || (brightness[j] > aktModbuswert[j] && fadeAmount[j] < 0)) {
        brightness[j] += fadeAmount[j];
        analogWrite(ausgaenge[j], brightness[j]);
      }
      //Serial.println();
    }
  }
  ausgang++;
  ausgang = ausgang % PWM;
  }
 
}


Davor Dein Sketch probiere ich gleich aus.

Danke Dir noch mal sehr für die Hilfe.

Gruß

Alex
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: power-dodge on Feb 04, 2018, 05:36 pm
Hi,

mit dem vorherigen Beispiel funktioniert es perfekt über Modbus,
wenn die Werte kommen macht es was es soll!!!

Wie sinnvoll würde man auf weitere Pins dies erweitern?

Seriellen Monitor an sich werde ich später gar nicht nutzen,
ich verstehe schon das Du es dort über ein Umweg gehst.

Ach ja der Code:

Code: [Select]
#include <SPI.h>
#include <Ethernet.h>

#include "Mudbus.h"

int fadeAmount = 5;    // how many points to fade the LED by
unsigned long currentTime;
unsigned long loopTime;
int brightness, altModbuswert, aktModbuswert;

byte modbusersatz() {
  byte wert = altModbuswert;
  if (Serial.available())
  {
    wert = Serial.parseInt();
  }
  return wert;
}


Mudbus Mb;
//Function codes 1(read coils), 3(read registers), 5(write coil), 6(write register)
//signed int Mb.R[0 to 125] and bool Mb.C[0 to 128] MB_N_R MB_N_C
//Port 502 (defined in Mudbus.h) MB_PORT

void setup(){
  Serial.begin(9600);
  Serial.println(F("PWM-Wert eingeben"));
  currentTime = millis();
  loopTime = currentTime;
 
  uint8_t mac[]     = { 0x90, 0xA2, 0xDA, 0x00, 0x51, 0x06 };
  uint8_t ip[]      = { 192, 168, 178, 70 };
  uint8_t gateway[] = { 192, 168, 178, 1 };
  uint8_t subnet[]  = { 255, 255, 255, 0 };
  Ethernet.begin(mac, ip, gateway, subnet);


  //PWM Frequenz
  //0×01  1      31.374 KHz
  //0×02  8      3.921 Khz
  //0×03  64     490.1 Hz            // default
  //0×04  256    122.5 Hz
  //0×05  1024   30.63 Hz
  //http://playground.arduino.cc/Main/TimerPWMCheatsheet

  TCCR1A = (TCCR1A & 0xF8) | 0x01;
  TCCR0A = (TCCR0A & 0xF8) | 0x01;
  TCCR0B = (TCCR0B & 0xF8) | 0x01;
  TCCR2B = (TCCR2B & 0xF8) | 0x01;
 
  pinMode(2, OUTPUT); // Pin 2 des Mega
}


void loop()

{
  Mb.Run();{

  currentTime = millis();
  altModbuswert = aktModbuswert;
  aktModbuswert = Mb.R[2];  // stattdassen Mb.R[2]
  if (altModbuswert != aktModbuswert)
  {
    if (brightness < aktModbuswert) {
      fadeAmount = 5;
    } else {
      fadeAmount = -5;
    }
    Serial.print(F("\nneuer Wert: "));
    Serial.println(aktModbuswert);
  }
  if (currentTime - loopTime >= 1000) {
    loopTime = currentTime;  // Updates loopTime
    if ((brightness < aktModbuswert && fadeAmount > 0) || (brightness > aktModbuswert && fadeAmount < 0)) {
      brightness = brightness + fadeAmount;
      analogWrite(2, brightness);
      Serial.print(brightness);
      Serial.print(' ');
    }
  }
}
}



Und so in etwa hatte ich es einfach umgeleitet gehabt, also mein vorheriger Code:

Code: [Select]
#include <SPI.h>
#include <Ethernet.h>

#include "Mudbus.h"

Mudbus Mb;
//Function codes 1(read coils), 3(read registers), 5(write coil), 6(write register)
//signed int Mb.R[0 to 125] and bool Mb.C[0 to 128] MB_N_R MB_N_C
//Port 502 (defined in Mudbus.h) MB_PORT

void setup()
{
  uint8_t mac[]     = { 0x90, 0xA2, 0xDA, 0x00, 0x51, 0x06 };
  uint8_t ip[]      = { 192, 168, 178, 70 };
  uint8_t gateway[] = { 192, 168, 178, 1 };
  uint8_t subnet[]  = { 255, 255, 255, 0 };
  Ethernet.begin(mac, ip, gateway, subnet);


  //PWM Frequenz
  //0×01  1      31.374 KHz
  //0×02  8      3.921 Khz
  //0×03  64     490.1 Hz            // default
  //0×04  256    122.5 Hz
  //0×05  1024   30.63 Hz
  //http://playground.arduino.cc/Main/TimerPWMCheatsheet

  TCCR1A = (TCCR1A & 0xF8) | 0x01;
  TCCR0A = (TCCR0A & 0xF8) | 0x01;
  TCCR0B = (TCCR0B & 0xF8) | 0x01;
  TCCR2B = (TCCR2B & 0xF8) | 0x01;
 
  pinMode(2, OUTPUT); // Pin 2 des Mega
  pinMode(3, OUTPUT); // Pin 3 des Mega
  pinMode(4, OUTPUT); // Pin 4 des Mega
  pinMode(5, OUTPUT); // Pin 5 des Mega
  pinMode(6, OUTPUT); // Pin 6 des Mega
  pinMode(7, OUTPUT); // Pin 7 des Mega
  pinMode(8, OUTPUT); // Pin 8 des Mega
  pinMode(9, OUTPUT); // Pin 9 des Mega
  pinMode(11, OUTPUT); // Pin 11 des Mega
  pinMode(45, OUTPUT); // Pin 45 des Mega, Led: 10 auf der Platine und Modbus
  pinMode(12, OUTPUT); // Pin 12 des Mega
  pinMode(13, OUTPUT); // Pin 13 des Mega
}


void loop()

{
  Mb.Run();

  //PWM Ausgänge:
  //Pin2
  analogWrite(2, Mb.R[2]);
  //Pin3
  analogWrite(3, Mb.R[3]);
  //Pin4
  analogWrite(4, Mb.R[4]);
  //Pin5
  analogWrite(5, Mb.R[5]);
  //Pin6
  analogWrite(6, Mb.R[6]);
  //Pin7
  analogWrite(7, Mb.R[7]);
  //Pin8
  analogWrite(8, Mb.R[8]);
  //Pin9
  analogWrite(9, Mb.R[9]);
  //Pin45
  analogWrite(45, Mb.R[10]);
  //Pin11
  analogWrite(11, Mb.R[11]);
  //Pin12
  analogWrite(12, Mb.R[12]);
  //Pin13
  analogWrite(13, Mb.R[13]);

  // Digitale Ausgänge herauslesen und zu Modbus übergeben:
  //Pin31
  Mb.R[14] = digitalRead(31);
  //Pin33
  Mb.R[15] = digitalRead(33);
  //Pin35
  Mb.R[16] = digitalRead(35);
  //Pin37
  Mb.R[17] = digitalRead(37);
  //Pin39
  Mb.R[18] = digitalRead(39);
  //Pin41
  Mb.R[19] = digitalRead(41);
  //Pin43
  Mb.R[20] = digitalRead(43);
  //Pin47
  Mb.R[21] = digitalRead(47);
  //Pin49
  Mb.R[22] = digitalRead(49);
  //Pin53
  Mb.R[23] = digitalRead(53);

  // Analoge Ausgänge herauslesen und zu Modbus übergeben:
  //Pin Analog 0
  Mb.R[24] = analogRead(0);
  //Pin Analog 1
  Mb.R[25] = analogRead(1);
  //Pin Analog 2
  Mb.R[26] = analogRead(2);
  //Pin Analog 3
  Mb.R[27] = analogRead(3);
  //Pin Analog 4
  Mb.R[28] = analogRead(4); 
 
}


Hier lese ich wie man sieht auch noch analoge und digitale Ausgänge.

Danke Dir noch mal!

Gruß
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: agmue on Feb 04, 2018, 07:50 pm
Code: [Select]
const byte ausgaenge[] = {2, 3, 4, 5, 6, 7, 8, 9, 45, 11, 12, 13};
Nicht alle Ausgänge des Mega2560 können PWM, Nummer 45 beispielsweise nicht.

Die drei 44,45 und 46 hatte ich bislang übersehen :-[
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: power-dodge on Feb 04, 2018, 09:15 pm
Hi,

doch wenn ich richtig gesehen hab schon.
Den Pin10 hatte ich auch verplant gehabt, aber diesen
möchte leider dringend das Ethernetmodul haben.

Daher im Modbus Adresse 10 wird der Pin 45 angesprochen.

Hier das Bild des Mega mit Pins:

Arduino Mega (https://arduino-info.wikispaces.com/file/view/Mega2-900.jpg/421499040/Mega2-900.jpg)

Gruß
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: power-dodge on Feb 10, 2018, 08:20 am
Hallo,

um eine bessere Übersicht zu haben habe ich einen neues Thema ausgemacht.
Wer so etwas sucht, wird es viel einfacher dadurch finden.
Denke ich mal...


Also das fertige Projekt ist hier zu finden:

Klick (https://forum.arduino.cc/index.php?topic=528232.msg3601135#msg3601135)

Danke euch noch mal alle!!!

Gruß
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: power-dodge on Feb 18, 2018, 04:26 pm
Hallo,

noch mal ne Frage zu den W5100...

Weswegen kann die Verbindung verloren gehen?
Nach ein paar Stunden ist er nicht mehr erreichbar.
Wenn man an und ausmacht mit dem Mega funktioniert
alles wieder wie es soll.

Danke schon mal für die Tipps!

Gruß
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: HotSystems on Feb 18, 2018, 04:31 pm
Hallo,

noch mal ne Frage zu den W5100...

Weswegen kann die Verbindung verloren gehen?
Nach ein paar Stunden ist er nicht mehr erreichbar.
Wenn man an und ausmacht mit dem Mega funktioniert
alles wieder wie es soll.

Danke schon mal für die Tipps!

Gruß
Nach obiger Erklärung funktioniert es anschließend nicht mehr. ;)

Könnte mit der Betriebsspannung zu tun haben.

Wie betreibst du den Mega und den W5100 ?
Welche Spannung und wo angeschlossen ?
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: Tommy56 on Feb 18, 2018, 04:32 pm
Ich weiß nicht, wie sauber Deine Modbus-Installation arbeitet, aber der W5100 kann gleichzeitig nur 4 Verbindungen halten. Wenn die belegt sind, kann er nichts mehr annehmen.

Gruß Tommy
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: power-dodge on Feb 18, 2018, 06:22 pm
Hallo,

danke euch für die Antworten!

Spannung bekommen die komponente über
einen 5V 10A Netzteil. Hoffe da ist nichts faul,
muss ich mal nachmessen.

4 Verbindung zu IP Adressen oder 1 Modbusadresse
ist eine Verbindung?
Ach ja Verbunden wird nur zu einem Gerät, eine Raspi.

Oben in ein Posts weiter ist Weiterleitung,
wo es dann weiter ging.
Ob es da sauber genug Modbus drauf ist,
kann ich nicht sagen. Da keine Erfahrung.

Da wo es funktioniert blinken die kleinen Led's
bei dem W5100.
Wo es aber nicht mehr geht, blinken die nicht mehr.


Danke euch für die Tipps.

Gruß
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: combie on Feb 18, 2018, 06:38 pm
Ich tippe auf ungeschickten Umgang mit der dynamischen Speicherverwaltung.
*meiner Kristallkugel sei Dank*
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: power-dodge on Feb 18, 2018, 06:48 pm
Danke Dir für die Antwort!

Wie kann ich es feststellen das es so sei?
Oder auch wie den beheben?

Gruß
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: power-dodge on Feb 21, 2018, 05:44 pm
Hallo,

hab erst mal nur ModBus stehen lassen, Werde dieses heute und morgen mal testen.
Wenn es da streikt dann wird es wohl daran liegen.

Was meint Ihr kann man dies dann so eingrenzen?:

Code: [Select]
#include <SPI.h>

#include <Ethernet.h>



#include "Mudbus.h"


int sensorwert; // LM35 Temperatur auslesen.
int temperatur = 0; //Unter d

Mudbus Mb;

//Function codes 1(read coils), 3(read registers), 5(write coil), 6(write register)

//signed int Mb.R[0 to 125] and bool Mb.C[0 to 128] MB_N_R MB_N_C

//Port 502 (defined in Mudbus.h) MB_PORT



void setup()

{

  uint8_t mac[]     = { 0x90, 0xA2, 0xDA, 0x00, 0x51, 0x06 };
  uint8_t ip[]      = { 192, 168, 178, 70 };
  uint8_t gateway[] = { 192, 168, 178, 1 };
  uint8_t subnet[]  = { 255, 255, 255, 0 };
  Ethernet.begin(mac, ip, gateway, subnet);

  //Avoid pins 4,10,11,12,13 when using ethernet shield


}



void loop() {

  Mb.Run();
 
  //Ausgänge 2-13, anstatt 10 ist 45
 
  analogWrite(2, Mb.R[2]);
 
  analogWrite(3, Mb.R[3]);
 
  analogWrite(4, Mb.R[4]);
 
  analogWrite(5, Mb.R[5]);
 
  analogWrite(6, Mb.R[6]);
 
  analogWrite(7, Mb.R[7]);
 
  analogWrite(8, Mb.R[8]);
 
  analogWrite(9, Mb.R[9]);
 
  analogWrite(45, Mb.R[10]);
 
  analogWrite(11, Mb.R[11]);
 
  analogWrite(12, Mb.R[12]);
 
  analogWrite(13, Mb.R[13]);

  // Digitale Eingänge herauslesen und zu Modbus übergeben:
  //Pin31
  Mb.R[14] = digitalRead(31);

  //Pin33
  Mb.R[15] = digitalRead(33);

  //Pin35
  Mb.R[16] = digitalRead(35);

  //Pin37
  Mb.R[17] = digitalRead(37);

  //Pin39
  Mb.R[18] = digitalRead(39);

  //Pin41
  Mb.R[19] = digitalRead(41);

  //Pin43
  Mb.R[20] = digitalRead(43);

  //Pin47
  Mb.R[21] = digitalRead(47);

  //Pin49
  Mb.R[22] = digitalRead(49);

  //Pin53
  Mb.R[23] = digitalRead(53);


  // Analoge Eingänge herauslesen und zu Modbus übergeben:

  //Pin Analog 0
  Mb.R[24] = analogRead(0);

  //Pin Analog 1
  Mb.R[25] = analogRead(1);

  //Pin Analog 2
  Mb.R[26] = analogRead(2);

  //Pin Analog 3
  Mb.R[27] = analogRead(3);

  //Pin Analog 4
  sensorwert = analogRead(4); // LM35 am Pin A4 Platine Mega - Modbus
  temperatur = map(sensorwert, 0, 307, 0, 150);
  Mb.R[28] = temperatur;
}


Danke euch.

Gruß
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: agmue on Feb 21, 2018, 06:47 pm
Du könntest zusätzlich eine Herzschlag-LED zur Diagnose blinken lassen, selbstverständlich mit millis().
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: power-dodge on Feb 21, 2018, 07:20 pm
Hey,

danke für den Tipp!

Werde vorerst so lassen. Vorm schlafen
mache ich eh aus und wenn es hängen
bleibt. Entweder gibt es ne Disko oder
es leuchtet nicht und über Pir geht auch
eine Lampe nicht an.

Mal sehen ob es überhaupt mal länger
funktioniert wie vorher.

Toi toi toi...

Gruß
Title: Re: Arduino Mega mit W5100 funktioniert nicht
Post by: power-dodge on Feb 21, 2018, 09:29 pm
Hallo,

hängte sich wieder auf. 
Mit einem TCP Testprogramm beim ersten 
Verbindung gabs Timeout. Beim zweiten 
gings wieder, aber wie es aussah startete
das System neu.

Soll mann vielleicht was anderes anstatt Modbus nehmen?

Gruß